获取DOS命令行输出函数

 

function GetDosOutput(Command: string): string;
var
hReadPipe : THandle;
hWritePipe : THandle;
SI : TStartUpInfo;
PI : TProcessInformation;
SA : TSecurityAttributes;
BytesRead : DWORD;
Dest : 
array[0..32767of char;
CmdLine : 
array[0..512of char;
Avail, ExitCode, wrResult : DWORD;
osVer : TOSVERSIONINFO;
tmpstr :AnsiString;
Line: String;
begin
osVer.dwOSVersionInfoSize :
= Sizeof(TOSVERSIONINFO);
GetVersionEX(osVer);
if osVer.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
    SA.nLength :
= SizeOf(SA);
    SA.lpSecurityDescriptor :
= nil;
    SA.bInheritHandle :
= True;
    CreatePipe(hReadPipe, hWritePipe, @SA, 
0);
end
else
    CreatePipe(hReadPipe, hWritePipe, 
nil1024);
try
    FillChar(SI, SizeOf(SI), 
0);
    SI.cb :
= SizeOf(TStartUpInfo);
    SI.wShowWindow :
= SW_HIDE;
    SI.dwFlags :
= STARTF_USESHOWWINDOW;
    SI.dwFlags :
= SI.dwFlags or STARTF_USESTDHANDLES;
    SI.hStdOutput :
= hWritePipe;
    SI.hStdError :
= hWritePipe;
    StrPCopy(CmdLine, Command);
    
if CreateProcess(nil, CmdLine, nilnil, True, NORMAL_PRIORITY_CLASS, nilnil, SI, PI) then
    
begin
       ExitCode :
= 0;
       
while ExitCode = 0 do
       
begin
          wrResult :
= WaitForSingleObject(PI.hProcess, 1000);
          
if PeekNamedPipe(hReadPipe, @Dest[0], 32768, @Avail, nilnilthen
          
begin
             
if Avail > 0 then
             
begin
               
try
                 FillChar(Dest, SizeOf(Dest), 
0);
                 ReadFile(hReadPipe, Dest[
0], Avail, BytesRead, nil);
                 TmpStr :
= Copy(Dest,0 , BytesRead-1);
                 Line:
=Line+TmpStr; 
               Except
               
end;
             
end;
          
end;
            
if wrResult <> WAIT_TIMEOUT then ExitCode := 1;
       
end;
       GetExitCodeProcess(PI.hProcess, ExitCode);
       CloseHandle(PI.hProcess);
       CloseHandle(PI.hThread);
     
end;
     
finally
       
if line='' then line:='NULL';    //命令没有输出回应!
       result:
=Line;
       CloseHandle(hReadPipe);
       CloseHandle(hWritePipe);
   
end;
end;
posted @ 2009-03-12 13:35  LAHCS  阅读(1092)  评论(1编辑  收藏  举报