DELPHI CreatePipe 메소드는 DOS 창에서 반환된 값을 읽습니다.
DOS 창의 복귀는 파이프 기술을 통해 읽을 수 있습니다.
유닛 파일을 작성하여 얻을 수 있으며, 코드는 다음과 같습니다: unit?mylib;
인터페이스
use Windows,?ShellAPI 함수? GetDosOutput(CommandLine: ?string): ?string;
구현
함수?GetDosOutput(CommandLine: ?string): ?string;
var SA: ? TSecurityAttributes; ?TStartupInfo; PI: ?TProcessInformation; ?StdOutPipeWrite: ?THandle; ?Boolean; ?array?[0?...?255]?AnsiChar; : ?Boolean;
begin 결과?:=?''; with?SA?do start
nLength?:=?SizeOf(SA);
bInheritHandle?:=? True;
lpSecurityDescriptor?:=?nil; end; CreatePipe(StdOutPipeRead,?StdOutPipeWrite,?@SA,?0); do
begin FillChar(SI,?SizeOf(SI),?0); cb?:=?SizeOf(SI)?:=?STARTF_USESHOWWINDOW?or?STARTF_USESTDHANDLES?:=?SW_HIDE ; hStdInput?:= ?GetStdHandle(STD_INPUT_HANDLE);?//?redirect?stdin hStdOutput?:=?StdOutPipeWrite; hStdError?:=?StdOutPipeWrite;
end;
핸들?: =?CreateProcess(nil,?PChar('cmd?/c?'? ?CommandLine),?nil,?nil, True,?0,?nil,?nil,?SI,?PI);
CloseHandle(StdOutPipeWrite);
if?Handle?그런 다음 시도
WasOK?:=?ReadFile(StdOutPipeRead,?Buffer,?255,?BytesRead)를 반복하세요. ,?nil); if?BytesRead?gt;?0?then 시작
Buffer[BytesRead]?:=?#0;
Result?:=?Result? ; end;
p>
until?not?WasOK?or?(BytesRead?=?0);
WaitForSingleObject(PI.hProcess,?INFINITE); /p>
>CloseHandle(PI.hThread);
CloseHandle(PI.hProcess); end; 마지막으로
CloseHandle(StdOutPipeRead) end;
end; p>
end p>
end.
테스트 코드:
TForm1.btn1Click(Sender: TObject) 절차;
mmo1을 시작합니다. Text:= GetDosOutput(' ping www.baidu.com');
end;
실행 효과: