컴퓨터 지식 네트워크 - 컴퓨터 지식 - DELPHI CreatePipe 메소드는 DOS 창에서 반환된 값을 읽습니다.

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;

실행 효과:

上篇: HTC g14와 G11 중 어느 것이 더 낫나요? 下篇: GSP 와 GMP 의 차이점은 무엇입니까?
관련 내용