Busca la funcion que necesitas!

jueves, 6 de enero de 2011

C - Detectar teclas presionadas con HOOK's

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);
}
Comentarios, críticas o dudas en los comentarios!

No hay comentarios:

Publicar un comentario