PDA

Ver la Versión Completa : ejecutar archivo y esperar que termine


agustincs
18-08-2004, 15:41:41
en delphi, me interesa ejecutar un programa (un juego en concreto) y luego esperar a que este termine para que se ejecuten el resto de instrucciones.
yo utilizo winexec, pero una vez que lanza el programa, delphi sigue ejecutando las siguientes instrucciones.
que tengo que hacer para lanzar el programa e indicar a delphi que se espere a que el programa se cierre para seguir con el flujo normal de instrucciones?

roman
18-08-2004, 16:26:31
Debes usar la función WaitForSingleObject. El problema aquí es que dicha función requiere como parámetro el identificador del proceso que ejecutas y éste no te lo devuelve la función WinExec así que debes ejecutarlo por otrs medios. La siguiente función debe servirte:


function ExecuteProcess(ProcessName: String): Cardinal;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;

begin
Result := 0;

FillChar(StartInfo, SizeOf(StartInfo), 0);
StartInfo.cb := SizeOf(StartInfo);

if CreateProcess(
PChar(ProcessName), nil, nil, nil, false, 0,
nil, nil, StartInfo, ProcInfo)
then
Result := ProcInfo.hProcess;
end;


Un ejemplo de uso:


var
Process: Cardinal;

begin
Application.Minimize;

Process := ExecuteProcess('c:\windows\notepad.exe');
if Process <> 0 then
WaitForSingleObject(Process, INFINITE);

Application.Restore;
end;


La aplicación no se restaurará hasta que se cierre el bloc de notas.

// Saludos

agustincs
18-08-2004, 17:40:39
muchas gracias, si que funciona ;-)

pero ahora tengo un pequeño problema. aveces, cuando la configuracion 3d es cambiada, al ejecutar el juego este lo detecta y lanza antes de ejecutar un configurador 3d.
el problema es que cuando lanzo el juego desde delphi, si el juego hace esto, delphi cree que el juego ya ha terminado de ejecutar, cuando en realidad aun va a ejuctarse en unos segundos, por lo que no se queda parado cuando si deberia quedarse.

la solucion supongo que seria mirar si ese configurador esta en ejecutcion, y si es asi que el progrma se pare y a a continuacion comprobar si el juego ha sido lanzado y se es asi quedarse parado hasta que termine, pero no tengo ni idea de como puedo hacer eso :confused: alguna sugerencia?

roman
18-08-2004, 18:10:37
¿Y no podrías, antes de lanzar el juego, lanzar tú mismo el configurador? Así te asegurarías que el juego no tendrá necesidad de ejecutarlo.

// Saludos

agustincs
18-08-2004, 22:53:21
ya, el problema es que esto lo estoy preparando para una liga online, y este configurador 3d solo salta cuando ha habido algun cambio en la configuracion del pc, por tanto no puedo lanzarlo siempre pq es bastante pesadito el configurador y no seria viable :(