You are on page 1of 12

Lp trnh trn mi trng Windows

K THUT LP TRNH HOOK

Ni dung
Lp trnh s kin Gii thiu k thut Hook Minh ha cch lp trnh Hook

Lp trnh s kin

Gii thiu k thut lp trnh Hook


Hook l g ? Mc tiu ca Hook ? Cc loi Hook Th tc Hook (Hook procedure) Chui Hook (Hook chain)

Gii thiu Gi thi

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

Gii thiu Gi thi

Hook l g ?

Gii thiu Gi thi

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

Vi Global Hook, hm ci t phi c lu trong mt DLL

Gii thiu Gi thi

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)

Gii thiu Gi thi

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

Gii thiu Gi thi

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

Gii thiu Gi thi

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

Gii thiu Gi thi

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

Gii thiu Gi thi

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

Gii thiu Gi thi

Chui Hook

S Hook Chain

Minh ha cch lp trnh Hook


Cc hm thao tc vi Hook Ci t th tc Hook V d th tc Hook Chuyn message cho th tc Hook k tip Hy b ci t Hook

Cch lp trnh Hook l tr

Cc hm thao tc vi Hook
SetWindowsHookEx CallNextHookEx UnhookWindowsHookEx

Cch lp trnh Hook l tr

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

Cch lp trnh Hook l tr

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

Cch lp trnh Hook l tr

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());

Cch lp trnh Hook l tr

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

Cch lp trnh Hook l tr

Chuyn n th tc Hook k tip


Sau khi thc hin xong, th tc Hook s gi hm th hi th s h CallNextHookEx chuyn message n th tc Hook chuy th k tip trong chui Hook ti chu LRESULT CallNextHookEx( CallNextHookEx( HHOOK hHook, int code, hHook, code, WPARAM wParam, LPARAM lParam); wParam, lParam);
hHook: handle ca Hook (hin hnh) nhn v t hm SetWindowsHookEx code, wParam, lParam: cc gi tr ca th tc Hook hin ti truyn cho th tc Hook k tip trong chui Hook

Cch lp trnh Hook l tr

Chuyn n th tc Hook k tip


Th tc Hook c th khng chuyn thng ip n th tc Hook k tip trong chui Hook Lu : vic khng chuyn thng ip c th gy ra li nghim trng cho h thng

11

Cch lp trnh Hook l tr

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

You might also like