Ver Mensaje Individual
  #3  
Antiguo 28-10-2005
ferna ferna is offline
Registrado
 
Registrado: oct 2005
Posts: 6
Reputación: 0
ferna Va por buen camino
Ejecutar aplicacion y esperar a que termine.

Hola yo utilizo la siguiente funcion para llamar a un programa externo y esperar hasta que termine.

Código:
 
function WinExecAndWaitEx(FileName: TFileName; TimeOut: DWORD): Boolean;
var
   {$IFDEF WIN32}
   StartupInfo: TStartupInfo;
   ProcessInfo: TProcessInformation;
   ExCode,Res : DWORD;
   {$ELSE}
   hAppInstance: THandle;
   Msg		 : TMsg;
   aBuf		: array[0..255] of Char;
   {$ENDIF}
begin
   Result := False;
   {$IFNDEF WIN32}
   hAppInstance := WinExec(StrPCopy(aBuf, FileName), SW_NORMAL);
   if (hAppInstance < HINSTANCE_ERROR) then exit
   else
   repeat
	  while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
	  begin
		TranslateMessage(Msg);
		DispatchMessage(Msg);
	  end;
   until (GetModuleUsage(hAppInstance) = 0);
   Result := True;
   {$ELSE}
   FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
   with StartupInfo do
   begin
	  cb := SizeOf(TStartupInfo);
	  dwFlags := STARTF_USESHOWWINDOW;
	  wShowWindow := SW_NORMAL;
   end;
   if CreateProcess(nil,PChar(FileName),nil,nil,False,NORMAL_PRIORITY_CLASS,
					nil,nil,StartupInfo,ProcessInfo) then
   begin
	  Res := WaitforSingleObject(ProcessInfo.hProcess, TIMEOUT);
	  if (Res = WAIT_TIMEOUT) then
	  begin
		 TerminateProcess(ProcessInfo.hProcess,0);
		 CloseHandle(ProcessInfo.hProcess);
		 Result := False;
	  end
	  else
	  begin
		 GetExitCodeProcess(ProcessInfo.hProcess, ExCode);
		 CloseHandle(ProcessInfo.hProcess);
		 Result := True;
	  end;
   end;
   {$ENDIF}
end;

La llamo asi:
Código:
 
 
Result := WinExecAndWaitEx(FileName,INFINITE);
Bueno espero que te sirva.
Saludos

Fernando
Responder Con Cita