Problem z Hook'em

0
#include <vcl.h> 
#pragma hdrstop 

#include "Unit1.h" 
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
TForm1 *Form1; 

HHOOK hookdata ; 

LRESULT CALLBACK KeyboardProc(int code,WPARAM w,LPARAM l) 
{ 

if (code < 0) 
{ 
return CallNextHookEx(hookdata,code,w,l); 
} 
if (w == VK_INSERT) 
ShowMessage("bleee"); 
return CallNextHookEx ( hookdata, code, w,1 ) ; 

}//funkcja 

//--------------------------------------------------------------------------- 
__fastcall TForm1::TForm1(TComponent* Owner) 
: TForm(Owner) 
{ 
} 
//--------------------------------------------------------------------------- 

void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
hookdata = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc,NULL,0); 
} 
//--------------------------------------------------------------------------- 

void __fastcall TForm1::FormDestroy(TObject *Sender) 
{ 
UnhookWindowsHookEx (hookdata); 
} 
//---------------------------------------------------------------------------

Podczas tworzenia sie formy program zaklada globalnego hook'a.
Teraz jezeli nacisne insert powinienem ujzec ShowMessag'e ,niestety tak
sie nie dzieje.Czego brakuje?

0

Procedury hook'ów muszą być umieszczone w oddzielnych plikach dll.

0

Nie musza :)
A przynajmniej nie wszystkie.
Ale na wszelki wypadek zaleca sie umieszczanie ich w
plikach dll.

0

Ja nie chcę nikogo obrażać, ale microsoft puścił plamę z WH_KEYBOARD i kilkoma innymi hookami na XP.
Jedynie WH_JOURNALRECORD działa doskonale, nawet z poziomu exe i ponoć ten typ hooka jest ogólnie stosowany w keyloggerach :D

0

Ech gdybyscie czytali czasem dokumentacje, to byscie wiedzieli - hooki globalne (czyli takie, w ktorych ostatni argument SetWindowsHookEx to 0) musza byc umieszczane w zewnetrznych dll-lach.

Procedura obslugi hooka moze byc w tym samym pliku tylko wtedy, jezeli zakladamy hooka tylko na nasz program. Inaczej funkcja SetWindowsHookEx zwraca blad.

0

othello: Ja czytam czasem. Czasem nawet ksiazki, artykuly i ogolnie co mi sie tam nawinie ;)

Mimo wszystko np. taki WH_JOURNALRECORD ktory moze byc ustawiany tylko i wylacznie jako hook globalny, dziala takze w pliku exe.

Wiec nie musza :P

Tak wiem, ze dokumentacja swoje, a ja swoje ;)

0

działa? heh masz szczęście - w wielu przypadkach /w odpowiednich warunkach/ nie będzie dziłać ;) dla bezpieczeństwa zawsze globalki powinny być w dll - z exec'a też mogą zadziałać, ale... nie muszą

1 użytkowników online, w tym zalogowanych: 0, gości: 1