You are on page 1of 7

C bao gi cc bn t ra cu hi l ti sao chng ta c th g ting Vit

c trong Microsoft Word v cc phn mm son tho vn bn khc hay


khng? R rng l chng ta khng th can thip vo m ca Microsoft Word
sa thnh ting Vit khi chng ta mun son tho vn bn ting Vit. Vy
th ti sao cc phn mm nh VietKey, VNI-TanKy li c th lm c iu
ny? Cu tr li l s dng cc Hook. Trong bi vit ny, chng ta s cng tm
hiu xem Hook l g m c th lm c iu thn k nh vy!
Truc khi chng ta tm hiu v Hook , chng ta nhc li mt cht v qu trnh
x l thng ip ca h iu hnh Windows
Qu trnh x l thng ip ca Windows din ra nh sau : u tin t cc
hnh ng ca ngui dng nh l : click chut, nhn phm, .. th h iu hnh
s chuyn cc hnh ng tng ng thnh cc thng ip (message). Ri sau
Windows y cc message ny vo hng i ca h thng (system queue)
v t system queue cc message uc chuyn cho cc hng i ca ng dng
(application queue). T lc ny cc ng dng s ly cc message ny trong
hng i ng dng ca mnh x l (thng qua cc vng lp ch thng ip
- message loop).
1. Hook l g ?
Hook l c ch m nh mt hm c th chn cc s kin (message, mouse
actions, keystrokes ) trc khi chng c gi n hng i ca ng dng.
Cc hm ny c th thc hin mt s thao tc trn s kin, v trong mt vi
trng hp c th nh ngha li hoc hy b s kin m n chn c. Mt
im quan trng cn lu l cc hm ny c gi bi chnh Windows ch
khng phi bi ng dng ca chng ta.
Windows h tr nhiu loi hook khc nhau, mi loi nhm n vic chn bt
mt loi thng ip c th no . V d, mt ng dng c th s dng
WH_KEYBOARD gim st s di chuyn ca thng ip bn phm trong h
thng. Nh loi hook ny m mt chng trnh c th can thip vo v to ra
kh nng g ting Vit khi son tho vn bn. Mt loi hook khc l
WH_MOUSE cho php theo di cc thng ip lin quan n hot ng ca
con chut.

Hnh trn m t qu trnh x l thng ip ca Windows khi c s dng cc


Hook .Th nh trn hnh v chng ta c th thy r rng rng ,mt khi chng
ta s dng cc Hook th cc Hook ny s c t nm gia System Queue v
Application Queue .

2. C ch hot ng ca Hook
H thng duy tr mt chui hook (hook chain) cho mi loi hook. Mi chui
ny l mt danh sch lin kt cc con tr t bit, con tr ny chnh l cc
hm callback ca ng dng c sn, n cn c gi l hm hook (hm lc,
filter function)
Khi c mt thng ip c sinh ra thuc mt loi hook no , n s c h
thng y i vo hm hook u tin trong chui, ln lt tng hm mt (qua
tt c cc hook trong chui). Cng vic ca hm hook c th phc tp hay
n gin ty thuc vo tng loi hook. Hm hook cho mt s loi ch c th
gim st, s khc c th sa i thng ip hoc dng li vic x l thng
ip trn chui hook trc khi chng n cc hook tip theo hoc n ca s
ch.
3. ng dng ca Hook
- Cho php to ra cc chng trnh h tr g ting Vit nh : Vietkey
- Cho php to ra cc chung trnh Test t ng phn mm (bng cch pht
sinh cc s kin phm, chut ging nh ngi dng ang nhp vo).
- Cho php thay i giao din cc ng dng ang chy.
- Cho php xem phn tr gip ca cc ng dng bng vic nhn mt phm
no , v d nh nhn F1 chng hn
- V nhiu ng dng khc na ty vo tr tng tng ca cc bn !
4 . Ci t Hook
Giao din lp trnh ng dng (API) ca Windows cung cp 3 hm thao tc
vi hook :
SetWindowsHookEx
UnhookWindowsHookEx
CallNextHookEx
a) Ci t mt Filter Function vo chui cc Filter Function ca mt hook
Tc v ny c thc hin thng qua hm SetWindowsHookEx, khai bo ca
hm ny nh sau :
HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn,
HINSTANCE hMod, DWORD dwThreadId);

ngha ca tng tham s :


idHook: Xc nh loi hook m ta mun ci t, tham s ny c th l mt
trong cc gi tr sau :
WH_CALLWNDPROC : t mt th tc hook qun l cc thng ip trc lc
h thng gi chng ti ca s ch.
WH_CALLWNDPROCRET : t mt th tc hook qun l cc thng ip sau
khi chng c x l bi th tc ca s ch.
WH_CBT : t mt th tc hook nhn nhng thng bo c ch ti ng dng
hun luyn trn c s tnh ton (CBT).
WH_DEBUG : t mt th tc hook c ch cho vic debug nhng th tc
hook khc.
WH_FOREGROUNDIDLE : t mt th tc hook s c gi khi thread
foreground ca ng dng s tr thnh khng dng n. Hook ny c ch cho
hot ng nhng nhim v (task) u tin thp trong thi gian khng c
dng n.
WH_GETMESSAGE : t mt th tc hook qun l cc thng ip c post
ti hng i thng ip.
WH_JOURNALPLAYBACK : t mt th tc hook post nhng thng ip c
ghi trc bi th tc hook WH_JOURNALRECORD.
WH_JOURNALRECORD : t mt th tc hook ghi nhng thng ip u vo
c post ti hng thng ip h thng. Hook ny c ch cho vic ghi cc
macro.
WH_KEYBOARD : t mt th tc hook qun l cc thng ip keystroke.
WH_MOUSE : t mt th tc hook qun l cc thng ip chut.
WH_MSGFILTER: t mt th tc hook qun l cc thng ip c kt sinh
nh l mt kt qu cu s kin u vo trong dialog box, message box,
menu hay scroll bar.
WH_SYSMSGFILTER : t mt ng dng cc thng ip c kt sinh nh l
kt qu ca mt s kin u vo trong dialog box, message box, menu hay
scroll bar. Th tc hook qun l nhng thng ip ny cho tt c cc ng dng
trong h thng.

Mi gi tr trn xc nh mt loi hook m ta mun ci t, mi loi hook c


mt ngha v tnh hung s dng khc nhau.
lpfn : a ch ca Filter Function m ta mun gn vi hook.
hMod : Handle ca module cha Filter Function. Nu ta ci t mt hook cc
b (ngha l s thc thi ca Filter Function ch nh hng i vi tin trnh ci
t hook), tham s ny phi l NULL. Cn nu chng ta mun c mt hook
vi phm vi ton h thng (tc l mi tin trnh ang hin hu u chu nh
hng bi Filter Function ca chng ta), tham s ny s l Handle ca DLL
cha Filter Function.
dwThreadID : nh danh ca thread ng vi hook ang c ci t . Nu
tham s ny l mt s khc 0, Filter Function c gn vi hook ch c gi
trong ng cnh ca mt thread xc nh. Cn nu dwThreadID = 0, Filter
Function s c phm vi ton h thng, v d nhin, n s c gi trong ng
cnh ca bt k thread no ang tn ti trn HH. C th s dng hm
GetCurrentThreadId ly c handle ca thread mun ci t hook.
Mt hook c th c s dng mc h thng, mc cc b, hoc c hai
mc va nu. Bng sau m t cc loi hook cng tm nh hng ca n :
WH_CALLWNDPROC
Thread , Global
WH_CALLWNDPROCRET
Thread , Global
WH_CBT
Thread , Global
WH_DEBUG
Thread , Global
WH_FOREGROUNDIDLE
Thread , Global
WH_GETMESSAGE
Thread , Global
WH_JOURNALPLAYBACK
Global
WH_JOURNALRECORD
Global

WH_KEYBOARD
Thread , Global
WH_MOUSE
Thread , Global
WH_MSGFILTER
Thread , Global
WH_SYSMSGFILTER
Global
Vi mt loi hook xc nh, hook cc b s c gi trc, sau l hook
ton cc.
b) G b mt Filter Function ra khi chui cc Filter Function ca mt hook
Windows cung cp hm UnhookWindowsHookEx gip chng ta thc hin vic
ny. Khai bo ca n nh sau :
BOOL UnhookWindowsHookEx( HHOOK hhk);
Tham s : hhook ch ra hm hook c d b . y l gi tr c tr v bi
hm SetWindowsHookEx khi hm Hook c ci t.
Ch : Hm UnhookWindowsHookEx phi c s dng trong s kt hp vi
hm SetWindowsHookEx.
c) Chi tit v Filter Function
Filter Function l mt hm c gn vi loi hook m chng ta mun ci t.
Hm ny c gi bi h iu hnh Windows ch khng c gi bi ng
dng, y cng l l do m ngi ta thng gi n l Callback Function. Tuy
nhin , thng nht v mt thut ng, t nay v sau chng ta vn gi n l
Filter Function.
Tt c cc Filter Function u c dng sau :
LRESULT CALLBACK FilterFunc(int nCode, WPARAM wParam, LPARAM
lParam);
y FilterFunc ch l tn hm tng trng, khi ci t, Filter Function s
c tn bt k theo ca ngi lp trnh .
ngha ca tng tham s truyn cho hm :

nCode : tham s ny thng c gi l hook code, Filter Function s dng


gi tr ny quyt nh cch thc x l i vi s kin. Gi tr ca hook code
ty thuc vo tng loi hook c th, v mi loi hook s c tp hp nhng gi
tr hook code c trng ca ring mnh. C mt quy lut m dng nh cc
Filter Function ca mi loi hook cn tun th : Khi Windows truyn cho hm
gi tr hook code m, Filter Function khng c x l s kin m phi gi
hm CallNextHookEx vi chnh nhng tham s m h iu hnh truyn cho
n. Sau , n phi tr v gi tr c tr v bi hm CallNextHookEx.
wParam, lParam: y l nhng thng tin cn thit cho Filter Function trong
qu trnh x l s kin. Cc gi tr ny s c ngha khc nhau tu thuc vo
tng loi hook. V d , Filter Function gn vi hook WH_KEYBOARD s nhn
m phm o (Virtual-Key Code) t wParam, ng thi c c t lParam thng
tin m t trng thi ca bn phm khi s kin g phm xy ra.
d) Gi Filter Function k tip trong chui cc Filter Function
Khi mt hook c ci t, Windows gi hm u tin trong chui cc Filter
Function, v k t thi im ny, trch nhim Windows khng cn na. Filter
Function hin hnh phi m bo vi h thng l c c li gi n hm k
tip trong chui cc Filter Function. Bi l, c th c mt ng dng khc cng
ci t cng loi hook thi hnh mt s tc v no , v nu nh ta khng
cho Filter Function ca ng dng ny tham gia x l s kin, s c vn rc
ri xy ra. Vn s cng tr nn nghim trng nu ng dng ny l mt
chng trnh thuc h thng, v r rng s khng c g m bo cho s an
ton ca h thng chng ta. gii quyt vn trn, hy s dng hm
CallNextHookEx, khai bo ca n nh sau :
LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM
lParam );
hhk : l handle ca hook hin hnh, gi tr ny c th ly c t hm
SetWindowsHookEx khi ci t hook.
nCode : ch nh hook code gi n hook k tip. Hm x l hook dng gi
tr ny ch nh x l thng ip c gi t hook nh th no .
wParam: ch nh 16 bits thng tin m rng ca thng ip.
lParam: ch nh 32 bits thng tin m rng ca thng ip.
Gi tr tr v : gi tr tr v l kt qu ca qu trnh x l v ty thuc vo
thng s nCode
Trong mt s tnh hung, Filter Function hin hnh c th khng mun chuyn

s kin cho Filter Function khc trong cng mt chui. Lc ny, nu loi hook
chng ta ang ci t cho php hu b s kin, v Filter Function ca chng
ta cng c cng quyt nh l hy b, n s khng phi gi hm
CallNextHookEx.
5. Chng trnh minh ha
hiu r hn v Hook ,cc bn c th xem mt v d n gin v s dng
Hook. Trong v d ny chng ta s ci t mt Hook ,cho php c thng tin
v menu bar chun ca bt k chng trnh ng dng no v lu cc thng
tin ny thnh mt tp tin resource ( sau ta c th d dng s dng trong
chng trnh ca mnh!)
Trong v d ny chng ta s s dng Hook WH_GETMESSAGE chn bt cc
thng ip gi n hng i thng ip . V khi chng trnh ca chng ta bt
c thng ip WM_NCLBUTTONDOWN (thng ip ny uc pht sinh khi
chng ta click chut ln thanh tiu ca ca s) , chng trnh s cho m
hp thoi Save As cho ngui dng chn ng dn v t tn cho file
resource s c to ra .V lc ny chung trnh s lu ton b ni dung ca
menubar xung thnh file resource m chng ta t tn.
* Trong v d ny v ta mun ly thng tin v menu bar ca tt c ng dng
trn Windows nn ta phi s dng mt tp tin .DLL lp mt Hook loi ton
cc (cn cc hook loi cc b ch cho php chn cc thng ip trong ni b
ng dng c ci t Hook m thi).

You might also like