Ver Mensaje Individual
  #1  
Antiguo 28-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
Devolver Foco a una aplicación creada con ShellExecuteEx

Hola !

Abro una nueva aplicación con ShellExecuteEx a través de un TShellExecuteInfo y si no estoy errado, debería poder obtener el Handle de la aplicación recién creada con el valor hProcess, no ??

Código Delphi [-]
procedure TForm.LabelClick(Sender: TObject);
var
  ExecInfo    : TShellExecuteInfo;
begin
 
  Screen.Cursor := crHourGlass;
  ExecInfo.cbSize       := SizeOf(ExecInfo);
  ExecInfo.fMask        := SEE_MASK_NOCLOSEPROCESS;
  ExecInfo.Wnd          := Handle;
  ExecInfo.lpVerb       := 'open';
  ExecInfo.lpFile       := PChar('PaginaWeb');
  ExecInfo.lpParameters := nil;
  ExecInfo.lpDirectory  := nil;
  ExecInfo.nShow        := SW_SHOW;
 
  ShellExecuteEx(@ExecInfo);
  Aux_Handle := ExecInfo.hProcess;
  WaitForSingleObject(ExecInfo.hProcess, INFINITE);
 
  ... después sigo con otros comandos.

La variable Aux_Handle debería contener el Handle del Browser de internet que esté configurado por defecto en el sistema y que acabo de abrir.

Lo que quiero conseguir es que más tarde, cuando se devuelva el foco a mi aplicación Delphi, se realicen una serie de operaciones y finalmente se devuelva el foco a la ventana del browser que acabo de abrir.

Para ello utilizo el evento OnActivate del Form en cuestión que previamente puse en otro sitio a Form.OnActivate := Form.ActivateParticular :

Código Delphi [-]
procedure TForm.ActivateParticular(Sender: TObject);
begin
  Self.OnActivate := nil;
  SendMessage(Aux_Handle, WM_SETFOCUS, 0, 0);
end;

Pero no me devuelve el foco a la ventana del explorador de internet anterior.

Qué estoy haciendo mal ?
__________________
Piensa siempre en positivo !
Responder Con Cita