Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Sobre SetWindowsHookEx (https://www.clubdelphi.com/foros/showthread.php?t=80668)

dec 01-07-2006 00:31:30

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!!!


La franja horaria es GMT +2. Ahora son las 10:24:25.

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