¿Cómo leo una aplicación de consola de salida mientras se está ejecutando? Inicié la aplicación de la consola y me gustaría leer la salida tal como está impresa en la aplicación de la consola.Delphi 6 - leer la salida de la aplicación de la consola mientras se ejecuta
Respuesta
¿Qué hay de este solution.
EDIT: el enlace conduce a esta solución (ligeramente refactorizado para legibilidad y para eliminar el uso de with
):
// The example runs 'chkdsk.exe c:\' and displays the output to Memo1.
// Put a TMemo (Memo1) and a TButton (Button1) on your form. Put this
// code in the OnCLick event procedure for Button1:
procedure TForm1.RunDosInMemo(DosApp:String;AMemo:TMemo) ;
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes;
ReadPipe,
WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
Security.nlength := SizeOf(TSecurityAttributes) ;
Security.binherithandle := true;
Security.lpsecuritydescriptor := nil;
if Createpipe (ReadPipe, WritePipe, @Security, 0) then
begin
Buffer := AllocMem(ReadBuffer + 1) ;
FillChar(Start,Sizeof(Start),#0) ;
start.cb := SizeOf(start) ;
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,
PChar(DosApp),
@Security,
@Security,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
start,
ProcessInfo) then
begin
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT) ;
repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil) ;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer) ;
AMemo.Text := AMemo.text + String(Buffer) ;
until (BytesRead < ReadBuffer) ;
end;
FreeMem(Buffer) ;
CloseHandle(ProcessInfo.hProcess) ;
CloseHandle(ProcessInfo.hThread) ;
CloseHandle(ReadPipe) ;
CloseHandle(WritePipe) ;
end;
end;
procedure TForm1.Button1Click(Sender: TObject) ;
begin
RunDosInMemo('chkdsk.exe c:\', Memo1) ;
end;
que suelen utilizar este portado FPC código: http://www.stack.nl/~marcov/processdelphi.zip
Contiene una clase para controlar programas externos (es la clase utilizada por Lazarus para llamar al compilador cmdline y otros programas).
La documentación está aquí, pero el puerto delphi es un poco viejo, por lo que no todas las propiedades documentadas pueden existir en la versión anterior.
¡Esto se ve genial! –
En versiones recientes de FPC, se han agregado algunos procedimientos simples que solucionan algunos de los escenarios más simples como "RunCommand() –
Sólo una pequeña adición a Marco respuesta, utilizando la unidad TProcess se explica a fondo here
Creo que esta es la manera más fácil de hacerlo. ¡Buena suerte!
- 1. iPhone - Cambio de la configuración de la aplicación mientras la aplicación se ejecuta en segundo plano
- 2. Acceso a la consola web h2 mientras ejecuta la prueba junit en una aplicación Spring
- 3. Desactivar el modo inactivo mientras se ejecuta la aplicación iOS
- 4. Cómo guardar la salida de una aplicación de consola
- 5. ¿Cómo evitar que se cierre la ventana de la consola cuando se ejecuta una aplicación de consola?
- 6. Ver la salida de la consola eliminada
- 7. Cambiar cabecera/pie de página de la sección UITableView ¿MIENTRAS SE EJECUTA la aplicación?
- 8. Evento de salida de la aplicación de consola .NET
- 9. Salida de la consola MATLAB
- 10. ¿Cómo ver el seguimiento completo de la pila de excepciones cuando se ejecuta la aplicación Java desde la consola?
- 11. PowerShell: envíe la salida de la consola al archivo sin ensordecer esta salida de la consola
- 12. TBitmap.Create que no trabajan en la aplicación de consola delphi
- 13. ¿Se ejecuta una aplicación de consola C# con la cuenta de usuario actual?
- 14. Problema de codificación al capturar la salida de la aplicación de consola en una prueba
- 15. qDebug Qt aplicación de consola para enviar a la salida de la aplicación Qt Creator
- 16. emacs opciones de menú mientras se ejecuta en la terminal
- 17. ¿Cómo suprimir la salida de la consola en Python?
- 18. vbscript salida a la consola
- 19. salida de la consola longitud de bits que indica desbordamiento
- 20. ¿Cómo podría leer la salida de la consola Java en un buffer String?
- 21. C++ cambio de salida en la consola
- 22. Depuración: adjuntar al proceso para la aplicación de consola que se ejecuta dentro de cmd.exe
- 23. Definición de una clase mientras se ejecuta una aplicación Java
- 24. Redirigir la salida de seguimiento a la consola
- 25. Se carga mscorlib.dll/mscoree.dll cuando se ejecuta la aplicación .NET
- 26. ¿No hay salida a la consola desde una aplicación WPF?
- 27. Finalización de la pestaña Aplicación de la Consola .NET
- 28. ¿Se puede redirigir la salida de registro de la consola Xcode a la Terminal cuando se ejecuta el simulador de iPhone?
- 29. Muestra la secuencia de la cámara mientras AVCaptureSession ejecuta
- 30. Visualización de la salida de la consola NUnit en CruiseControl.NET
sugerencia agradable para aquellos que siguen el enlace, pero un enlace solo no es una muy buena respuesta, ver: http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links -elsewhere-really-good-answers – Argalatyr
Publiqué el código del enlace. – Mick
@Mick: oops: mientras hacías eso en una nueva respuesta, estaba editando el anterior. Si alguien siente que mi edición debe revertirse, siéntete libre de hacerlo. – Argalatyr