针对C:\Documents and Settings\Owner\My Documents\My Pictures\201.html
重点是改进代码的可读性。
function CaptureStdout(FileName: string):String;
function Helper_CreatePipe(var hReadPipe:THandle; var hWritePipe :THandle):Boolean;
var lsa: SECURITY_ATTRIBUTES;
begin
lsa.nLength := sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor := nil;
lsa.bInheritHandle := True;
Result := CreatePipe(hReadPipe, hWritePipe, @lsa, 0) ;
end;
function Helper_CreateProcess(filename:string; hWritePipe:THandle ;var pi: PROCESS_INFORMATION):Boolean;
var
si: STARTUPINFO;
fname: PChar;
begin
fname := allocmem(1024);
fillchar(si, sizeof(STARTUPINFO), 0);
si.cb := sizeof(STARTUPINFO);
si.dwFlags := (STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
si.wShowWindow := SW_HIDE;
si.hStdOutput := hWritePipe;
si.hStdError := hWritePipe;
StrPCopy(fname, FileName);
Result := CreateProcess(nil, fname, nil, nil, true, 0, nil, nil, si, pi);
end;
procedure Helper_ReadToStrings(hReadPipe:THandle; var line : String;pi:PROCESS_INFORMATION);
var cchReadBuffer: DWORD;
ph: PChar;
begin
ph := AllocMem(1024);
while (true) do
begin
if not PeekNamedPipe(hReadPipe, ph, 1, @cchReadBuffer, nil, nil) then break;
if cchReadBuffer <> 0 then
begin
if ReadFile(hReadPipe, ph^, 512, cchReadBuffer, nil) = false then break;
ph[cchReadbuffer] := chr(0);
line := line + ph ;
end
else if (WaitForSingleObject(pi.hProcess, 0) = WAIT_OBJECT_0) then break;
Application.ProcessMessages;
Sleep(200);
end;
ph[cchReadBuffer] := chr(0);
line := line + ph ;
FreeMem(ph);
end;
var
line: String;
hReadPipe, hWritePipe: THandle;
pi: PROCESS_INFORMATION;
begin
try
if not Helper_CreatePipe(hReadPipe, hWritePipe) then
Exit;
if not Helper_CreateProcess(Filename,hWritePipe, pi) then
Exit;
Helper_ReadToStrings(hReadPipe, line ,pi);
Result := line ;
finally
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
end;
procedure TestCaptureStdout ;
const
filename = 'c:\test.bat';
begin
with TStringList.Create do
try
Add('@echo off');
Add('Echo abc');
Add('Echo def');
savetofile(filename);
if 'abc'#13#10'def'#13#10 = CaptureStdout(filename) then
ShowMessage('OK')
else
ShowMessage('Not OK');
finally
Free;
DeleteFile(filename) ;
end;
end;
分享到:
相关推荐
命令输出:捕获 DOS 命令的标准输出,这可以用于读取由命令生成的信息。 错误处理:可以捕获和处理命令执行过程中的错误输出。 命令参数:支持向 DOS 命令传递参数,以定制命令的行为。 环境变量:可以设置和修改...
STM32一个定时器多个通道输入捕获 一个定时器多个通道输出 输入采取输入捕获模式 输出采取比较输出模式 STM32一个定时器多个通道输入捕获 一个定时器多个通道输出 输入采取输入捕获模式 输出采取比较输出模式 STM32...
实时获取DOS的输出结果,显示在C#窗口中。 为了避免阻塞主线程,把执行过程放在一个新的Thread...CSDN上有个程序,可以捕获dos输出,但执行过程中窗口会”假死“,这里用新的线程避免了假死。可以在vs.net 2005上运行
实验中用到两个引脚,一个是通用定时器 TIM3 的通道 1, 即 PA6, 用于输出PWM 信号,另一个是高级控制定时器 TIM1 的通道 1, 即 PA8, 用于 PWM 输入捕获,实验中直接用一根杜邦线短接即可 PA6 和 PA8 即可,同时...
编写程序,获取网络中的IP数据包内容 程序的输出内容应包括IP包的版本、头长度、服务类型、数据包长度等IP数据包格式中的相应字段 为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别为...IC1上升沿捕获,IC2下降沿捕获,开启更新与IC1捕获中断 用杜邦线连接PA0与PA5 KEIL5下载配置有FLASH与SRAM
DosCommand 很多做过服务端控制的人都用过。 遗憾的是它只能在D2006以下环境中使用 我把它改好了,现在,你可以在XE-XE5的环境中使用它
下面小编就为大家带来一篇python 捕获shell脚本的输出结果实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
matlab_GPS_产生C/A码,并且捕获到信号,输出捕获结果和相位起始位置,而且可以实现对信号的跟踪,输出跟踪偏差和偏差震荡曲线
可以捕获Windows屏幕、DOS屏幕;RM电影、游戏画面;菜单、窗口、客户区窗口、最后一个激活的窗口或用鼠标定义的区域。图象可保存为BMP、PCX、TIF、GIF或JPEG格式,也可以存为视频动画。使用JPEG可以指定所需的压缩级...
Process 是一个用于运行外部进程并捕获其标准输出和错误的库。 安装库 (Linux) 获取源码: git clone https://github.com/sabel83/process && cd process 创建构建目录: mkdir bin && bin 生成 Makefile: ...
利用定时器3通道1输出PWM波,定时器2通道2捕获该PWM波,库函数版本。
STM32_KEIL_输入捕获+PWM输出+MPU6050+卡尔曼滤波(库函数).rar STM32_KEIL_输入捕获+PWM输出+MPU6050+卡尔曼滤波(库函数).rar STM32_KEIL_输入捕获+PWM输出+MPU6050+卡尔曼滤波(库函数).rar
Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...
利用stc12c5a60s2内部的PCA模块捕获光电编码器的输出的两路脉冲然后计算脉冲个数及判断转动方向。很好用的程序。
课程实验,QT写的界面,1)可以输入需要捕获的数据包数量,输出每个数据包的相关字段值(包括版本、总长度、标志位、片偏移、协议、源地址与目的地址)。
在工作中接到一个任务需要使用定时器输出不同的波形,在网上查阅了资料后发现可以使用DMA给定时器的捕获比较寄存器地址传输数据来控制输出PWM。 话不多说先贴代码 void TIM3_GPIO_INIT(){ GPIO_InitTypeDef GPIO_...
软件包cs捕获函数的标准输出。 您可以使用此程序包为终端输出编写测试。 安装 # Execute this command inside your project go get -u github.com/atomicgo/cs // Add this to your imports import "github....
实现了zigbee cc2530定时器的输出与捕获功能,附带定时器基本模式测试