delphi获取DOS命令行输出函数 运行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: TStartupInfoA;  
  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 := CreateProcessA(nil, // lpApplicationName: PChar  
    PAnsiChar(AnsiString(CommandLine)), // lpCommandLine: PAnsiChar  
    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;  
测试
memo1.text := RunDOS('ping www.baidu.com');  

D7改为
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);


XE强制 AnsiChar 

相关阅读 >>

Delphi webbrowser1 读取当前页面字体大小

Delphi bytestofile

Delphi 移动客户端的路径的安全正确的写法

Delphi fdconnection1获取查询语句的第一个值

Delphi xe android 调试错误:connection closed gracefully

Delphi richedit选中文字右键菜单的实现

5种运行程序的方法具体应用实例

Delphi 主程序装载脚本

Delphi中实现控件的拖拽

Delphi xe7 判断android应用程序中的通信状态类型

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



打赏

取消

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

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

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

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

评论

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