Professional Documents
Culture Documents
Ni dung
Lp trnh s kin Gii thiu k thut Hook Minh ha cch lp trnh Hook
Lp trnh s kin
Hook l g ?
Hook l mt c ch trong lp trnh s kin, cho php ng dng c th ci t mt hm gim st vo qu trnh lu chuyn cc thng ip ng dng c th chn v x l cc thng ip trc khi n n c ca s/ng dng ch
Hook l g ?
Hook l g ?
C 2 cch ci t Hook:
Ci t cc b (Thread Hook): hm gim st c ci vo sau Thread message queue c tc dng gim st tt c cc thng ip trong mt tiu trnh hay mt ng dng c th Ci t ton cc (Global Hook): hm gim st c ci vo sau System message queue c tc dng gim st tt c cc thng ip trong ton h thng
Mc tiu ca Hook
Gim st bn phm: cc ng dng g ting Vit, iu Gi s b ph c d ti Vi i khin thit b bng bn phm, khi thi b b ph m, Gim st mouse: Clickn See Gi s Click Theo di vic s dng cc ng dng, Capture screen vi s c d ng dng dy hc bng my tnh (CBT Computerd d h b m t Computerbased Training)
Cc loi Hook
WH_KEYBOARD: Hook gim st thng ip t bn phm: gi s i t ph WM_KEYDOWN, WM_KEYUP WH_MOUSE: Hook gim st thng ip t chut gi s i t chu WH_GETMESSAGE: Hook gim st thng ip chung gi s i (keyboard, mouse, hay cc message khc) c kh WH_CBT: Windows gi hm hook CBT trc khi to lp g h tr t l (create), kch hot (active), hy (destroy), minimize, k ho h maximize, di chuyn (move), thay i kch thc (size), chuy (move), thay k th (size), ca ca s giao din c s di
Cc loi Hook
WH_JOURNALPLAYBACK: cho php a message vo System message queue s dng gi lp hay thc hin li 1 dy cc message ca bn phm hay mouse (playback). y l mt Global Hook WH_JOURNALRECORD: gim st v ghi nhn li cc thng ip t chut v bn phm. y l mt Global Hook
Th tc Hook
Th tc Hook (hook procedure): l hm dng gim st Th l d gi s cc thng ip m ng dng ci vo h thng i m d c v h th Dng chung ca Hook Procudure: c LRESULT CALLBACK HookProc( HookProc( int nCode, nCode, WPARAM wParam, wParam, LPARAM lParam); lParam);
nCode: xc nh hnh ng cn x l. Gi tr ca nCode ty thuc loi Hook wParam, lParam: cha thng tin ca message
Th tc Hook
Mi loi Hook cn c cch x l khc nhau khi xy dng th tc Hook. C th ci t nhiu th tc Hook bng cch dng hm SetWindowsHook hay SetWindowsHookEx Th tc Hook ci t sau s lun nm v tr u tin trong dy th tc Hook
Chui Hook
Chui Hook (hook chain): l mt dy cc th tc Hook Chu l c th c lin kt theo th t u tin thc hin gim dn k th th hi gi d H iu hnh Windows qun l cc chui Hook ring bit i h qu c chu bi cho tng loi Hook lo t Khi c 1 thng ip xy ra, Windows s gi thng ip c i x s i n th tc Hook u tin trong chui Hook c loi tng th chu c lo ng. Thng ip s c chuyn ln lt n cc th tc Thng i s chuy l l c th Hook k tip sau k ti
Chui Hook
S Hook Chain
Cc hm thao tc vi Hook
SetWindowsHookEx CallNextHookEx UnhookWindowsHookEx
Ci t th tc Hook
Mt ng dng cn phi thc hin vic Ci t th tc Hook khi mun gim st thng ip Hm SetWindowsHookEx s ci t th tc Hook vo im bt u ca chui Hook
Ci t th tc Hook
HHOOK SetWindowsHookEx( int hookMsg, HOOKPROC hookProc, HINSTANCE hIns, DWORD threadId);
hookMsg: loi Hook hookProc: con tr n th tc Hook. Trng hp Global Hook, th tc Hook phi lu trong DLL; vi Thread Hook, th tc Hook c th cha trong chnh thread tng ng hIns: handle ca module cha th tc Hook threadId: ID ca thread. Nu l 0, Hook s l Global
V d ci t Hook
V d 1: ci t Keyboard Hook ton cc (load-time) c to c (loadSetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)fnKeyboardProc, hInstDLL, 0); V d 2: ci t Keyboard Hook ton cc (run-time) c to c (runHOOKPROC fnKeyboardProc; static HINSTANCE hInstDLL; static HHOOK hHook; hInstDLL = LoadLibrary((LPCTSTR) myKBDLL.dll"); fnKeyboardProc = (HOOKPROC)GetProcAddress(hInstDLL, KeyboardProc"); hHook = SetWindowsHookEx(WH_KEYBOARD, fnKeyboardProc, hInstDLL, 0); V d 3: ci t Keyboard Hook cc b c c b SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)fnKeyboardProc, NULL, GetCurrentThreadId());
V d th tc Hook
V d 4: Th tc hook cho Keyboard Th LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0 && nCode == HC_ACTION) { pMsg = (MSG *)lParam; if (pMsg->message == WM_KEYDOWN) { (pMsgchar s[] = {LOBYTE(wParam),\0}; {LOBYTE(wParam), MessageBox(NULL, s, Hook, 0); Hook } } return CallNextHookEx(hHook, nCode,wParam, lParam); }
10
11
Hy b ci t Hook
S dng k thut Hook s lm gim kh nng thc thi ca h thng Do , khi khng s dng Hook na nn hy b Hook khi h thng BOOL UnhookWindowsHooks( HHOOK hHook);
hHook: handle ca hook cn hy b
HT CM N
GII P THC MC
12