He ejecutado un programa con parámetros de línea de comandos. ¿Cómo puedo esperar para que termine de ejecutarse?¿Cómo puedo esperar a que termine un programa de línea de comandos?
Respuesta
Esta es mi respuesta: (Gracias a todos)
uses ShellAPI;
function TForm1.ShellExecute_AndWait(FileName: string; Params: string): bool;
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do
begin
cbSize := SizeOf(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
exInfo.lpVerb := 'open';
exInfo.lpParameters := PChar(Params);
lpFile := PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
Ph := exInfo.hProcess
else
begin
ShowMessage(SysErrorMessage(GetLastError));
Result := true;
exit;
end;
while WaitForSingleObject(exInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
Result := true;
end;
Debe usar MsgWaitForMultipleObjects() en lugar de WaitForSingleObject() para que no llame innecesariamente a Application.ProcessMessages(). Hacerlo con demasiada frecuencia puede degradar el rendimiento de su aplicación mientras se ejecuta su ciclo. –
¡Lo usaré en un hilo! entonces aplicaciónProcessMessages; removerá ! – Kermia
MsgWaitForMultipleObjects realmente es la mejor solución, ¡solo tendrá que esperar el hilo si lo hizo de esa manera! –
Ok, obtener los parámetros de línea de comandos, se utiliza
ParamCount
: Devuelve el número de parámetros pasados al programa en la línea de comandos.
ParamStr
: devuelve un parámetro específico, solicitado por el índice. Running Dephi Applications With Parameters
Ahora, si lo que quiere decir es leer y escribir en la consola, se utiliza
WriteLn
: escribe una línea de texto a la consola.
ReadLn
: lee una línea de texto de la consola como una cadena. Delphi Basics
Si lo que desea es ejecutar un ejecutable de línea de comandos y obtener la respuesta que este exe escribe en la consola, la forma más fácil podría ser llamar al archivo ejecutable y redirigir el resultado a otro archivo usando >
, y luego lea ese archivo.
Por ejemplo, si tiene que ejecutar el comando "dir" y obtener su salida que podría tener un archivo por lotes llamado getdir.bat
que contiene lo siguiente:
@echo off
dir c:\users\myuser\*.* > output.txt
que podría exec ese archivo por lotes mediante la API función ShellExecute. Usted puede leer sobre él http://delphi.about.com/od/windowsshellapi/a/executeprogram.htm
continuación, puede leer el archivo de salida, incluso con algo así como un TStringList:
var
output: TStringList;
begin
output := TStringList.Create();
output.LoadFromFile('output.txt');
...
Si entiendo bien su pregunta, que quiere ejecutar el programa de línea de comandos y capturar su salida en su aplicación en lugar de en la ventana de la consola. Para hacerlo, puede leer la salida usando pipes. He aquí un ejemplo de código fuente:
Usando DSiWin32:
sl := TStringList.Create;
if DSiExecuteAndCapture('cmd.exe /c dir', sl, 'c:\test', exitCode) = 0 then
// exec error
else
// use sl
sl.Free;
- 1. ¿Cómo esperar a que termine un animador?
- 2. PHP shell_exec ¿esperar a que termine la secuencia de comandos?
- 3. Cómo esperar a que un ThreadPoolExecutor termine
- 4. ¿Cómo esperar a que el proceso termine de usar IO.popen?
- 5. io.popen - ¿cómo esperar a que termine el proceso en Lua?
- 6. ¿Cómo uso correctamente el método WaitForSingleObject para esperar a que termine un programa externo?
- 7. ¿cómo puedo esperar a que un clip de sonido java termine de reproducirse?
- 8. Android Animation: ¿esperar hasta que termine?
- 9. ¿Cómo esperar a que termine un hilo antes de que comience otro hilo en Java/Android?
- 10. ¿Cómo esperar a que un applet de Java termine de cargarse en Safari?
- 11. Esperar a que finalicen los comandos
- 12. C# cómo esperar a que una página web termine de cargarse antes de continuar
- 13. Enchufe C: ¿envía esperar a que termine el recv?
- 14. ¿Cómo esperar a que termine una animación de jquery antes de que comience la próxima?
- 15. ¿Cómo ejecutar un desinstalador de NSIS desde otro instalador de NSIS y esperar a que termine?
- 16. Cómo depurar un programa de línea de comandos C#
- 17. ¿Cómo puedo pasar argumentos de línea de comandos a un programa Perl?
- 18. Espere a que tomcat termine de iniciar
- 19. ¿Cómo ejecuto un programa de línea de comandos en Delphi?
- 20. Cómo esperar a que BackgroundWorker termine y luego salir de la aplicación de consola
- 21. ¿Puede una secuencia de comandos bash ejecutar comandos simultáneos y luego esperar a que se completen?
- 22. Espere a que SwingWorker termine
- 23. Haciendo un programa de línea de comandos "pantalla completa"
- 24. ¿Se puede invocar subprocess.call sin esperar a que termine el proceso?
- 25. ¿Está ejecutando un programa Java desde la línea de comandos que depende de un archivo jar?
- 26. ¿Cómo ejecuto otro script en Python sin esperar a que termine?
- 27. ¿Cómo reemplazar inmediatamente la tostada actual por una segunda sin esperar a que la actual termine?
- 28. Ejecute NSRunLoop en un programa de línea de comandos Cocoa
- 29. NodeJS esperar a que la devolución de llamada termine en el evento emitir
- 30. Conseguir un número hexadecimal en un programa a través de la línea de comandos
No puedo decir lo que pregunta es muy clara para yo ... para CLI 'input' viene de' stdin' y 'output' va a' stdout' (o 'stderr' en algunos casos). parámetros que actúan como modificadores del comportamiento del programa –
Por favor, reformule su pregunta, ya que el formulario actual no está muy claro. ¿Que estas esperando? ¿Salida de consola del programa ejecutado? Mensajes de Windows enviados por ese programa? –
¡Perdón por mi mal inglés! encontré la respuesta. ¡puedes ver eso en la parte inferior de la página! – Kermia