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