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: