delphi获取DOS命令行输出函数 运行CMD命令并获取结果  
官方Delphi 学习QQ群: 682628230(三千人)
频道

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 


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.03730583190918 seconds