Ver Mensaje Individual
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Sobre SetWindowsHookEx

He visto que mucha gente no sabe como utilizar SetWindowsHookEx, como se debe.Lo primero, saber que el mejor modo (de no ser el único) es usar DLL's.

El siguiente ejemplo, es un ejemplo modelo, que se podrá usar con todos los Hook's.

Código Delphi [-]
library MSGFilter;

uses
  {Las que necesites :-)}

{$R *.RES}

var Hook: HHook;

function G(nCode:Integer;wParam:Word;lParam:LongInt): LResult stdcall;export;// el truco esta en "stdcall"
var
  Mensage: ^MSG; //Estructura con el mensage, y algunos otros parámetros
begin
  {
    Apartir de aqí, puedes poner lo que quieras,
    pero serciorate de que la función devuelve algo
  }
  //Esto, es para que todos los procedimientos ligados a este evento puedan continuar
  G:= CallNextHookEx(Hook,nCode,WParam,LParam);

  // Si no deseas que se prosigan los procedimientos: G:=0;
  If nCode = MSGF_MENU Then //Solo un ejemplo, hay que recordar que varian según el hook
  begin
    Mensage:= Ptr(LParam); //Asignamos el puntero que apunta a la estructura MSG a Mensage
    If Mensage.message = WM_MENUSELECT Then
      {el codigo que quieras}
  end;
end;

procedure Instalar;
begin
  //Creamos el Hook, en este caso MSGFilter
  Hook := SetWindowsHookEX(WH_MSGFILTER,@G,hInstance,0);
  //Que filtra los mensages que reciven las ventanas.
end;

procedure Desinstalar;
begin
  UnHookWindowsHookEx(Hook); // Desinstalamos el Hook
end;

exports
  Si, No;

begin
end.

Solo tienes que llamar a Instalar, y el procedimiento G, se ejecutará cada vez que haya un mensage a una ventana (para más información sobre los diferentes Hook's busca en MSDN o en la ayuda de Delphi SetWindowsHookEx).

Un saludo Strom!!!
Responder Con Cita