Colección de citas famosas - Slogan de motivación - El método DELPHI CreatePipe lee el valor devuelto por una ventana de DOS.

El método DELPHI CreatePipe lee el valor devuelto por una ventana de DOS.

El retorno de la ventana de DOS se puede leer mediante tecnología de tuberías.

Puedes obtenerlo escribiendo un archivo unitario, el código es el siguiente: unit?mylib;

interfaz

usa Windows,?ShellAPI; GetDosOutput(CommandLine: ?string):?string;

implementación

función?GetDosOutput(CommandLine:?string):?string;

var SA:? TSecurityAttributes; SI:?TSartupInfo; PI:?TProcessInformation;StdOutPipeRead,?StdOutPipeWrite:?THandle;Booleano:?matriz?[0?..?255]?AnsiChar:?Cardinal; ?Boolean;

comenzar resultado?:=?''; con?SA?do comenzar

nLongitud?:=?SizeOf(SA);

bInheritHandle ?:=? Verdadero;

lpSecurityDescriptor?:=?nil; fin; CreatePipe(StdOutPipeRead,?StdOutPipeWrite,?@SA,?0);

begin FillChar(SI,?SizeOf(SI),?0); cb?:=?SizeOf(SI); dwFlags?:=?STARTF_USESHOWWINDOW?o?STARTF_USESTDHANDLES; hStdInput?:= ?GetStdHandle(STD_INPUT_HANDLE);?//?don't?redirect?stdin hStdOutput?:=?StdOutPipeWrite; hStdError?:=?StdOutPipeWrite;

fin;

¿Manejar?: =?CreateProcess(nil,?PChar('cmd?/c?'?+?CommandLine),?nil,?nil, True,?0,?nil,?nil,?SI,?PI);

CloseHandle(StdOutPipeWrite);

si?Handle?entonces intente

repetir WasOK?:=?ReadFile(StdOutPipeRead,?Buffer,?255,?BytesRead ,?nil) ; si?BytesRead?>?0?luego comenzar

Buffer[BytesRead]?:=?#0;

Resultado?:=?Resultado?+?Buffer ; fin;

hasta?no?Estaba bien?o?(BytesRead?=?0);

WaitForSingleObject(PI.hProcess,?INFINITE

CloseHandle(PI .hThread);

CloseHandle(PI.hProcess finaliza

CloseHandle(StdOutPi);

peRead); end;

end;

end.

Código de prueba:

procedimiento TForm1.btn1Click(Sender: TObject);

begin mmo1.Text:= GetDosOutput('ping www.baidu.com');

end;

Efecto de ejecución: