Asi lo tengo ahora mismo:
Código PHP:
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SysTrayIcon"
#pragma resource "*.dfm"
#define OK -32767 //Necesario para el keylogger
LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam);
bool CloseApp;
TForm1 *Form1;
HHOOK hKeyboardHook;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonColocarHookClick(TObject *Sender)
{
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
ButtonColocarHook->Enabled = false;
ButtonQuitarHook->Enabled = true;
Activarteclado1->Enabled=ButtonQuitarHook->Enabled;
Desactivarteclado1->Enabled=ButtonColocarHook->Enabled;
SysTrayIcon1->IconIndex=0;
SysTrayIcon1->ShowBalloon("El teclado ha sido bloqueado","Gato, ya puedes jugar con mi teclado, esta vez gano yo jajaja.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonQuitarHookClick(TObject *Sender)
{
UnhookWindowsHookEx(hKeyboardHook);
ButtonColocarHook->Enabled = true;
ButtonQuitarHook->Enabled = false;
Activarteclado1->Enabled=ButtonQuitarHook->Enabled;
Desactivarteclado1->Enabled=ButtonColocarHook->Enabled;
SysTrayIcon1->IconIndex=1;
SysTrayIcon1->ShowBalloon("El teclado ha sido desbloqueado","Gato, no te digo nada.");
}
//---------------------------------------------------------------------------
LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam)
{
static count=0;
if( (nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) ){
if(!GetAsyncKeyState(VK_CONTROL) && !GetAsyncKeyState(VK_SHIFT) && !GetAsyncKeyState(VK_MENU)){
if (count == 0 && *(PDWORD)lParam == 'U') { // 'u'
count = 1;
} else if (count == 1 && *(PDWORD)lParam == 'N') { // 'n'
count = 2;
} else if (count == 2 && *(PDWORD)lParam == 'L') { // 'l'
count = 3;
} else if (count == 3 && *(PDWORD)lParam == 'O') { // 'o'
count = 4;
} else if (count == 4 && *(PDWORD)lParam == 'C') { // 'c'
count = 5;
} else if (count == 5 && *(PDWORD)lParam == 'K') { // 'k'
count = 0;
Form1->ButtonQuitarHook->Click();
} else {
count = 0;
}
}else{
count = 0;
}
return 1;
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
ButtonColocarHook->Enabled = false;
ButtonQuitarHook->Enabled = true;
Activarteclado1->Enabled=ButtonQuitarHook->Enabled;
Desactivarteclado1->Enabled=ButtonColocarHook->Enabled;
CloseApp=true;
Form1->Show();
Form1->Hide();
SysTrayIcon1->ShowBalloon("El teclado ha sido bloqueado","Gato, ya puedes jugar con mi teclado, esta vez gano yo jajaja.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnhookWindowsHookEx(hKeyboardHook);
ButtonColocarHook->Enabled = true;
ButtonQuitarHook->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Salir1Click(TObject *Sender)
{
CloseApp = true;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Desactivarteclado1Click(TObject *Sender)
{
ButtonColocarHook->Click();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Activarteclado1Click(TObject *Sender)
{
ButtonQuitarHook->Click();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(CloseApp){
CanClose = CloseApp;
}else{
CanClose = !CheckBox1->Checked;
SysTrayCanClose = CanClose;
SysTrayIcon1->Minimize();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SysTrayIcon1Minimize(TObject *Sender)
{
SysTrayCanClose = true;
SysTrayIcon1->Visible = true;
SysTrayIcon1->Hide = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SysTrayIcon1Restore(TObject *Sender)
{
SysTrayIcon1->Visible = false;
SysTrayIcon1->Hide = false;
CloseApp=false;
Form1->Show();
}
//---------------------------------------------------------------------------