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 拖动form上的图片,form一起动

Delphi在richedit控件中插入gif动画表情

Delphi sysutils.strcat

Delphi-edit中只能输入数字且只能输入一个小数点

wmi cim_datafile的33个属性

Delphi idhttp访问http与https不同点

Delphi 的内存操作函数(6): 跨进程的内存分配

Delphi将图片缩放成指定大小

Delphi高亮显示trichedit当前行

Delphi10.3 构造生成输出json数据

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



打赏

取消

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

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

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

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

评论

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