Delphi调用Cmd并取得输出字符


本文整理自网络,侵删。

 
procedure CheckResult(b: Boolean);begin  if not b then    raise Exception.Create(SysErrorMessage(GetLastError));end; function RunDOS(const CommandLine: string): string;var  HRead, HWrite: THandle;  StartInfo: TStartupInfo;  ProceInfo: TProcessInformation;  b: Boolean;  sa: TSecurityAttributes;  inS: THandleStream;  sRet: TStrings;begin  Result := '';  FillChar(sa, sizeof(sa), 0);//设置允许继承,否则在NT和2000下无法取得输出结果  sa.nLength := sizeof(sa);  sa.bInheritHandle := True;  sa.lpSecurityDescriptor := nil;  b := CreatePipe(HRead, HWrite, @sa, 0);  CheckResult(b);   FillChar(StartInfo, SizeOf(StartInfo), 0);  StartInfo.cb := SizeOf(StartInfo);  StartInfo.wShowWindow := SW_HIDE;//使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式  StartInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;  StartInfo.hStdError := HWrite;  StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HRead;  StartInfo.hStdOutput := HWrite;   b := CreateProcess(nil, //lpApplicationName: PChar    PChar(CommandLine), //lpCommandLine: PChar    nil, //lpProcessAttributes: PSecurityAttributes    nil, //lpThreadAttributes: PSecurityAttributes    True, //bInheritHandles: BOOL    CREATE_NEW_CONSOLE,    nil,    nil,    StartInfo,    ProceInfo);   CheckResult(b);  WaitForSingleObject(ProceInfo.hProcess, INFINITE);   inS := THandleStream.Create(HRead);  if inS.Size > 0 then  begin    sRet := TStringList.Create;    sRet.LoadFromStream(inS);    Result := sRet.Text;    sRet.Free;  end;  inS.Free;   CloseHandle(HRead);  CloseHandle(HWrite);end;

相关阅读 >>

Delphi xe6取得android智能手机的电话号码等的终端信息

Delphi gethomepath - 获取用户程序数据目录

Delphi url解�a函��(by kingron)

Delphi 7zip 示例调用7z.dll 压缩及解压.7z文件

Delphi unigui 控件动画

oleinitialize和coinitialize的区别

Delphi以二进制方式读取图片并显示出来

Delphi动态创建一个鼠标指针图案

Delphi try 抛出异常消息

Delphi 一行一行读取txt文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...