![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
|
Hook global
Hola.
Estoy probando esto de los hooks. El caso es que necesito instalar un hook de mensajes global y no me funciona. Os cuento, he creado la DLL, y el hook se instala bien, pero solo responde a eventos que se hacen desde la propia ventana. Sin embargo, si cambio el tipo de hook que instalo al 14, que es WM_MOUSE_LL, si responde en cualquier ventana. He probado de todo, y no me sale. Trabajo con win xp y Builder Un saludo Última edición por pepelaalfa fecha: 08-12-2005 a las 18:25:51. |
|
#2
|
||||
|
||||
|
¿El callback del hook esta dentro de una DLL?... Porque no nos muestras el código...
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#3
|
|||
|
|||
|
O.K.
El código del programa que carga la dll e instala el hook. Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
HMODULE punto=LoadLibrary("hook0.dll");
FARPROC punto1=GetProcAddress(punto,"@Mensaje$qqsiuil");
punto2=GetProcAddress(punto,"_label1");
punto3=GetProcAddress(punto,"_label2");
punto4=GetProcAddress(punto,"_Enlace");
punto5=GetProcAddress(punto,"_yy");
p1=(int)Label1;
p2=(int)Label2;
*((int*)punto2)=p1;
*((int*)punto3)=p2;
Enlace = SetWindowsHookEx(WH_CALLWNDPROC , //4=WH_CALLWNDPROC
(HOOKPROC)punto1,punto,0);
*((int*)punto4)=(int)Enlace;
Label3->Caption=(int)Enlace;
}
//------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
UnhookWindowsHookEx(Enlace); // Destruir el enlace, para liberar recursos
}
Código:
__declspec (dllexport) int xx=0,yy=0,xxx=0,yyy=0;
__declspec (dllexport)TLabel *label1,*label2;
int WINAPI DllEntryPoint(HINSTANCE hinstDLL, unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------------------------
#define tipo_hook MSG
__declspec (dllexport) HHOOK Enlace;
LRESULT __declspec (dllexport) CALLBACK __stdcall Mensaje (int Codigo, WPARAM wParam, LPARAM lParam)
{
TMouseHookStruct * Datos;
tipo_hook *mensaje;
char frase[250];
AnsiString valor;
mensaje=(tipo_hook *)lParam;
label1->Caption="cuenta "+(AnsiString)xx++;
valor=(int)mensaje->hwnd;
if (yyy!=(int)mensaje->hwnd)
yyy=(int)mensaje->hwnd;
if (Codigo < 0) // Pasar el mensaje si es necesario
{
return CallNextHookEx(Enlace, Codigo, wParam, lParam); // al siguiente enlace de la cadena
}
else
return (0); // Permitir el proceso normal del mensaje
}
Lo que no entiendo es que si cambio en el instalador "WH_CALLWNDPROC", por "WH_MOUSE_LL", funciona en cualquier ventana, pero con los demás tipos de hook, solo en la ventan que hace la llamada. Última edición por dec fecha: 08-12-2005 a las 20:48:37. Razón: ¡¡Encerrad el código fuente entre las etiquetas [CODE] ... [/CODE]!! |
![]() |
|
|
|