Citar
A global hook procedure can be called in the context of any application in the same desktop as the calling thread, so the procedure must be in a separate DLL module.
Bueno por mucho que en la información de la MSDN diga que no se pueden hacer hooks globales sin una dll es mas que posible y algo real. Ya lo hice antes en otro lenguaje (VB6).
El problema es el siguiente aunque se parece ser que se instalan bien los hooks mi callback fuction nunca es llamada y ademas el ordenador se ralentiza. Estoy intentado hacer los hooks desde un programa de consola, y creo que es aqui donde reside el problema ya que encontre un codigo donde enseñaba a hacer los hook sin dll pero usaba tambien una interfaz grafica, al modificar ese codigo para que el programa fuese simplemente de consola empezo a dar los mismos problemas que mi programa.
Aqui el code para hacer el hook sin dll: http://www.mpcforum.com/showthread.php?78344-SRC-Global-Hook-without-dll-(C-)
Aqui mi code:
Código
#define _WIN32_WINNT 0x0400 #include <windows.h> #include <iostream> HHOOK hook; __declspec(dllexport) LRESULT CALLBACK KeyboardHookProc (int nCode,WPARAM wParam,LPARAM lParam) { if ((nCode == HC_ACTION) && ((wParam == WM_KEYDOWN) || (wParam == WM_SYSKEYDOWN))) { KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam); //............. codigo manejador del hook } return CallNextHookEx(hook, nCode, wParam, lParam); } int main() { hook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardHookProc,GetModuleHandle(NULL),NULL); system("pause"); UnhookWindowsHookEx(hook); return 1; }
Basicamente hace lo mismo que el codigo que habia en el link solo que sin la interfaz asique estoy un poco confundido de porque no funciona y como arreglarlo. Primero crei que habia que crear el callback como si fuese una funcion de una DLL y he definido la funcion como lo hacian en el otro code pero eso sigue sin funcionar. ¿Alguna idea? Gracias por adelantado, llevo mas de una semana comiendome el coco con esto XD