Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/05/2015, 07:15
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Como obtener el conteo de teclas y click presionados ??

Necesitas crear un keyloger de teclado. Busca informacion ya que es muy sencillo y te permite detectar cualquier pulsacion de cualquier tecla del teclado incluidas las especiales.
Si no das con la tecla avisa y te busco un ejemplo que tengo por ahi.

EDITO: Encontré el proyecto que tengo de ejemplo aunque es para Borland C++Builder pero es practicamente igual, solo cambia los eventos de los botones y poco mas ya que usa APIs de Windows:

Código C++:
Ver original
  1. //---------------------------------------------------------------------------
  2.  
  3. #include <vcl.h>
  4. #pragma hdrstop
  5.  
  6. #include "Main.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma resource "*.dfm"
  10.  
  11. #define OK -32767 //Necesario para el keylogger
  12.  
  13. LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam);
  14.  
  15. TForm1 *Form1;
  16. HHOOK  hKeyboardHook;
  17. //---------------------------------------------------------------------------
  18.  
  19. __fastcall TForm1::TForm1(TComponent* Owner)
  20.    : TForm(Owner)
  21. {
  22. }
  23. //---------------------------------------------------------------------------
  24.  
  25. void __fastcall TForm1::ButtonColocarHookClick(TObject *Sender)
  26. {
  27.    hKeyboardHook  = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
  28.    ButtonColocarHook->Enabled = false;
  29.    ButtonQuitarHook->Enabled = true;
  30. }
  31. //---------------------------------------------------------------------------
  32.  
  33. void __fastcall TForm1::ButtonQuitarHookClick(TObject *Sender)
  34. {
  35.    UnhookWindowsHookEx(hKeyboardHook);
  36.    ButtonColocarHook->Enabled = true;
  37.    ButtonQuitarHook->Enabled = false;
  38. }
  39. //---------------------------------------------------------------------------
  40.  
  41. LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam)
  42. {
  43.    if( (nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) ){
  44.       if(GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_SHIFT))
  45.       {
  46.          switch(*(PDWORD)lParam)
  47.          {
  48.             case 'C': //Ctrl+Shift+C
  49.                MessageBox(NULL,"Has pulsado Ctrl+Shift+C.","Atención", MB_OK | MB_ICONINFORMATION);
  50.                break;
  51.  
  52.             case 'V': //Ctrl+Shift+V
  53.                MessageBox(NULL,"Has pulsado Ctrl+Shift+V.","Atención", MB_OK | MB_ICONINFORMATION);
  54.                break;
  55.          }
  56.       }else if(GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_MENU))
  57.       {
  58.          switch(*(PDWORD)lParam)
  59.          {
  60.             case 'C': //Ctrl+Alt+C
  61.                MessageBox(NULL,"Has pulsado Ctrl+Alt+C.","Atención", MB_OK | MB_ICONINFORMATION);
  62.                break;
  63.  
  64.             case 'V': //Ctrl+Alt+V
  65.                MessageBox(NULL,"Has pulsado Ctrl+Alt+V.","Atención", MB_OK | MB_ICONINFORMATION);
  66.                break;
  67.          }
  68.       }else if(GetAsyncKeyState(VK_CONTROL))
  69.       {
  70.          switch(*(PDWORD)lParam)
  71.          {
  72.             case 'C': //Ctrl+C
  73.                MessageBox(NULL,"Has intentado copiar al portapapeles usando Ctrl+C.","Atención", MB_OK | MB_ICONINFORMATION);
  74.                break;
  75.  
  76.             case 'V': //Ctrl+V
  77.                MessageBox(NULL,"Has intentado pegar desde el portapapeles usando Ctrl+V.","Atención", MB_OK | MB_ICONINFORMATION);
  78.                break;
  79.          }
  80.       }else if(GetAsyncKeyState(VK_MENU))
  81.       {
  82.          switch(*(PDWORD)lParam)
  83.          {
  84.             case 'C': //Alt+C
  85.                MessageBox(NULL,"Has pulsado Alt+C.","Atención", MB_OK | MB_ICONINFORMATION);
  86.                break;
  87.  
  88.             case 'V': //Alt+V
  89.                MessageBox(NULL,"Has pulsado Alt+V.","Atención", MB_OK | MB_ICONINFORMATION);
  90.                break;
  91.          }
  92.       }else if(GetAsyncKeyState(VK_SHIFT)){
  93.          switch(*(PDWORD)lParam)
  94.          {
  95.             case 'C': //Shift+C
  96.                MessageBox(NULL,"Has pulsado Shift+C.","Atención", MB_OK | MB_ICONINFORMATION);
  97.                break;
  98.  
  99.             case 'V': //Shift+V
  100.                MessageBox(NULL,"Has pulsado Shift+V.","Atención", MB_OK | MB_ICONINFORMATION);
  101.                break;
  102.          }
  103.       }else{
  104.          switch(*(PDWORD)lParam)
  105.          {
  106.             case 'C': //C
  107.                MessageBox(NULL,"Has pulsado C.","Atención", MB_OK | MB_ICONINFORMATION);
  108.                break;
  109.  
  110.             case 'V': //V
  111.                MessageBox(NULL,"Has pulsado V.","Atención", MB_OK | MB_ICONINFORMATION);
  112.                break;
  113.          }
  114.       }
  115.    }
  116.    return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
  117. }
  118. //---------------------------------------------------------------------------
  119.  
  120. void __fastcall TForm1::FormCreate(TObject *Sender)
  121. {
  122.    hKeyboardHook  = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
  123.    ButtonColocarHook->Enabled = false;
  124.    ButtonQuitarHook->Enabled = true;
  125. }
  126. //---------------------------------------------------------------------------
  127.  
  128. void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
  129. {
  130.    UnhookWindowsHookEx(hKeyboardHook);
  131.    ButtonColocarHook->Enabled = true;
  132.    ButtonQuitarHook->Enabled = false;
  133. }
  134. //---------------------------------------------------------------------------

Eso si, yo lo hice para controlar solo las teclas C y V con todas sus combinaciones, si quieres controlar todo todo mejor create una funcion la cual obtenga la tecla pulsada y llamas desde cada situacion para hacer el codigo mas pequeño porque si no vas ha tener un codigo espaguetis de la ostia jajaja.

Última edición por aguml; 06/05/2015 a las 07:45