Ver Mensaje Individual
  #3  
Antiguo 26-01-2009
poyo poyo is offline
Miembro
 
Registrado: ene 2009
Posts: 47
Reputación: 0
poyo Va por buen camino
A ver... bueno acá esta. encontré una función que tengo desde hace rato ratón.
Te comento que WinExec no se recomienda usarla más. Al menos eso decen los de Microsoft. Sólo quedó por compatibilidad y en su lugar se puede usar CreateProcess o (como hago yo) ShellExecute/ShellExecuteEx.
El punto a tener en cuenta a tu problema es la función WaitForSingleObject.

Código Delphi [-]
Uses
  ShellApi;

//..............................

procedure ShellExec(FileName: string; parameters: string; showmode: integer; wait: boolean);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    lpFile := PChar(FileName);
    nShow := showmode;
    lpParameters := pchar(parameters);
  end;
  if ShellExecuteEx(@exInfo) then
  begin
    Ph := exInfo.HProcess;
  end
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  if wait then
  begin
    while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
      Application.ProcessMessages;
  end;
  CloseHandle(Ph);
end;

un ejemplo sería: ShellExec('cmd','', SW_NORMAL, true);

Si alguien se le ocurre alguna mejora, no duden en avisar así actualizo mi código.

Especialmente se puede implementar un TimeOut. Por ejemplo, la función tirar error y/o esperar la intervención del usuario y, por consiguiente, colgarse, esperando indefinidamente.
En caso de que se implemente un TimeOut, se puede tomar una acción como terminar el proceso creado o... qué se yo!

Recueda de poner el cursor en espera antes y restaurarlo después

Paso algunos links de interés
http://msdn.microsoft.com/en-us/libr...54(VS.85).aspx
http://msdn.microsoft.com/en-us/libr...84(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms682425.aspx
http://msdn.microsoft.com/en-us/library/ms687032.aspx

Seguro que están en castellano también...
Responder Con Cita