Ver Mensaje Individual
  #1  
Antiguo 24-03-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
bloqueador de teclado antigatos

Bueno, esto suena chistoso pero estoy cansado de que mis gatos masajeen mi teclado y he estado buscando soluciones para bloquear el teclado y que por mucho que pisen no hagan ningun estropicio. Todo lo que he encontrado por la red ha sido referente a una app que haga un hook del teclado y deseche las pulsaciones hasta que haya una combinacion de teclas deseadas o una palabra o algo asi. He escrito este codigo pero funciona a medias:
Código PHP:
#include <vcl.h>
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

#define OK -32767 //Necesario para el keylogger

LRESULT WINAPI KeyboardEvent(int nCodeWPARAM wParamLPARAM lParam);

TForm1 *Form1;
HHOOK  hKeyboardHook;
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponentOwner)
   : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonColocarHookClick(TObject *Sender)
{
   
hKeyboardHook  SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEventGetModuleHandle(NULL), 0);
   
ButtonColocarHook->Enabled false;
   
ButtonQuitarHook->Enabled true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ButtonQuitarHookClick(TObject *Sender)
{
   
UnhookWindowsHookEx(hKeyboardHook);
   
ButtonColocarHook->Enabled true;
   
ButtonQuitarHook->Enabled false;
}
//---------------------------------------------------------------------------

LRESULT WINAPI KeyboardEvent(int nCodeWPARAM wParamLPARAM lParam)
{
   static 
count=0;

   if( (
nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) ){
      if(
GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_SHIFT))
      {

      }else if(
GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_MENU))
      {

      }else if(
GetAsyncKeyState(VK_CONTROL))
      {

      }else if(
GetAsyncKeyState(VK_MENU))
      {

      }else if(
GetAsyncKeyState(VK_SHIFT)){

      }else{
         if (
count == && tolower(*(PDWORD)lParam) == 'u') {        // 'u'
            
count 1;
         } else if (
count == && tolower(*(PDWORD)lParam) == 'n') { // 'n'
            
count 2;
         } else if (
count == && tolower(*(PDWORD)lParam) == 'l') { // 'l'
            
count 3;
         } else if (
count == && tolower(*(PDWORD)lParam) == 'o') { // 'o'
            
count 4;
         } else if (
count == && tolower(*(PDWORD)lParam) == 'c') { // 'c'
            
count 5;
         } else if (
count == && tolower(*(PDWORD)lParam) == 'k') { // 'k'
            
count 0;
            
Form1->ButtonQuitarHook->Click();
         } else {
            
count 0;
         }
      }
   }
   return 
CallNextHookEx(hKeyboardHooknCodewParamlParam);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   
hKeyboardHook  SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEventGetModuleHandle(NULL), 0);
   
ButtonColocarHook->Enabled false;
   
ButtonQuitarHook->Enabled true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *SenderTCloseAction &Action)
{
   
UnhookWindowsHookEx(hKeyboardHook);
   
ButtonColocarHook->Enabled true;
   
ButtonQuitarHook->Enabled false;
}
//--------------------------------------------------------------------------- 
Realmente capturo todas las pulsaciones que desee pero lo que deseo es que esas pulsaciones sean todas desechadas hasta que se desbloquee el teclado pero aunque las capturo no consigo anularlas. ¿podeis ayudarme con esto?
Responder Con Cita