Bueno, el codigo funciona perfectamente y es este:
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;
}
//---------------------------------------------------------------------------
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;
}
//---------------------------------------------------------------------------
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=false;
}
//---------------------------------------------------------------------------
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=CloseApp;
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;
}
//---------------------------------------------------------------------------
Ahora tengo un pequeño problema, se que se ha visto mas veces pero no doy con el post donde se trató, lo que deseo es que el form principal se inicie oculto ya que uso el componente SysTrayIcon que creó escafandra y quiero que arranque mostrando solo el trayicon y no lo consigo. Si que era poniendo algo en el cpp del proyecto pero no lo recuerdo.