Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ejecutar archivo y esperar que termine (https://www.clubdelphi.com/foros/showthread.php?t=13422)

agustincs 18-08-2004 15:41:41

ejecutar archivo y esperar que termine
 
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:

Código Delphi [-]
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:

Código Delphi [-]
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 :(


La franja horaria es GMT +2. Ahora son las 16:54:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi