Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Como esperar a que se ejecute un programa externo sin que termine? (https://www.clubdelphi.com/foros/showthread.php?t=81923)

chuli17 04-01-2013 02:16:39

¿Como esperar a que se ejecute un programa externo sin que termine?
 
Hola muy buenas a todos y Feliz Año, aber si alguien me puede ayudar ya que e buscado y no encuentro nada :mad:,tengo este codigo:

Código Delphi [-]
uses
Windows, Funciones;

var
  Process: Cardinal;
  H, U: HWND;
begin
  Process := ExecuteProcess('GameLauncher.exe');

//Aqui quiero que se pare asta que la ventana del juego sea visible, si no para, ejecuta el resto de codigo antes de tiempo y no funciona...
/////////////////////////////////////////////
if Process <> 0 then                       //
                                           //  Esto no me funciona aveces depende lo que tarde en abrir, ya que el juego es pesado.
WaitForSingleObject(Process, 6000);        //
////////////////////////////////////////////
begin
  H := FindWindow('WindowsForms10.Window.8.app.0.fcf9a4', nil); //WindowsForms10.Window.8.app.0.fcf9a4
if H <> 0 then
begin
  U := FindWindowEx(H, 0, 'WindowsForms10.Window.8.app.0.fcf9a4', nil); //WindowsForms10.Window.8.app.0.fcf9a4
if U <> 0 then
begin
  U := FindWindowEx(U, 0, 'WindowsForms10.EDIT.app.0.fcf9a4', nil); //WindowsForms10.EDIT.app.0.fcf9a4
if U <> 0 then
  SendMessage(U, WM_SETTEXT, 0, Integer(PCHAR('123456789'))); //Envio Contraseña para colocarla en un edit.
  PostMessage(U,WM_KEYDOWN,VK_RETURN,0); // Envio un INTRO al edit para entrar en el juego.
    end;
  end;
end;

end.

Lo que quisiera es que pare despues de ExecuteProcess, asta que la ventana sea visible, nose si me e esplicado bien, aber si alguien me puede tirar alguna ayudilla e intentado varias cosas y nada... Muchas gracias desde ya.

ecfisa 04-01-2013 19:05:32

Cita:

Empezado por chuli17 (Mensaje 452879)
...
Lo que quisiera es que pare despues de ExecuteProcess, asta que la ventana sea visible, nose si me e esplicado bien, aber si alguien me puede tirar alguna ayudilla e intentado varias cosas y nada... Muchas gracias desde ya.

Hola chuli17.

Si no te entendí mal, pareciera que el problema lo tenes en la función ExecuteProcess. Proba escribiéndola de este modo:
Código Delphi [-]
function ExecuteProcess(aName : string): Boolean;
var
  sInfo: TStartupInfo;
  pInfo : TProcessInformation;
begin
  ZeroMemory(@sInfo,SizeOf(TStartupInfo));
  ZeroMemory(@pInfo, SizeOf(TProcessInformation));
  sInfo.cb := SizeOf(TStartupInfo);
  Result:= CreateProcess(nil,PChar(aName),nil,nil,False,
           CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,nil,nil,sInfo,pInfo);
  if Result then
    WaitForSingleObject(pInfo.hProcess,INFINITE);
  CloseHandle(pInfo.hProcess);
  CloseHandle(pInfo.hThread);
end;

Un ejemplo de llamada:
Código Delphi [-]
const
   APPNAME = 'C:\JUEGOS\ETC_ETC\GameLauncher.exe';
begin
  if not ExecuteProcess(APPNAME) then
    raise Exception.Create('Error al intentar ejecutar ' + ExtractFileName(APPNAME));  
  // Resto del código...
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 10:21:31.

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