Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-08-2004
agustincs agustincs is offline
Miembro
 
Registrado: ago 2004
Posts: 32
Poder: 0
agustincs Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 18-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 18-08-2004 a las 16:29:33.
Responder Con Cita
  #3  
Antiguo 18-08-2004
agustincs agustincs is offline
Miembro
 
Registrado: ago 2004
Posts: 32
Poder: 0
agustincs Va por buen camino
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 alguna sugerencia?
Responder Con Cita
  #4  
Antiguo 18-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #5  
Antiguo 18-08-2004
agustincs agustincs is offline
Miembro
 
Registrado: ago 2004
Posts: 32
Poder: 0
agustincs Va por buen camino
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:54:10.


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
Copyright 1996-2007 Club Delphi