Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Nghiên cứu các phương pháp nhận dạng từ dưới cursor mouse trên desktop windows.doc
Nội dung xem thử
Mô tả chi tiết
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 1
MUÏC LUÏC
LÔØI MÔÛ ÑAÀU 3
CHÖÔNG 1: TÌM HIEÅU VEÀ LAÄP TRÌNH WINDOWS 4
I. Khaùi quaùt veà laäp trình trong Windows 5
II. Thoâng ñieäp vaø xöû lyù thoâng ñieäp 7
III. Giao dieän thieát bò ñoà hoïa GDI 11
IV. Cöûa soå trong Windows 15
V. Chöông trình Windows tieáp nhaän thoâng ñieäp chuoät 22
CHÖÔNG 2: TÌM HIEÅU VEÀ HOOK 26
1 - Chuoãi hook 27
2 - Thuû tuïc hook 27
3 - Caùc loaïi hook 28
4 - Söû duïng hook 30
5 - Hook trong Windows 3.x 31
6 - Giôùi thieäu moät soá haøm lieân quan ñeán hook 33
CHÖÔNG 3: KYÕ THUAÄT OVERRIDE HAØM API 36
I. Khaùi quaùt veà kyõ thuaät override 37
II. Lyù do söû duïng kyõ thuaät override trong laäp trình Windows 37
III. Cô cheá hoaït ñoäng vaø quaûn lyù boä nhôù treân Windows 16bits 38
IV. Cô cheá hoaït ñoäng vaø quaûn lyù boä nhôù treân Windows 32bits 41
V. Hieän thöïc kyõ thuaät override treân Windows 16bits 45
VI. Moät soá haøm ñöôïc söû duïng trong kyõ thuaät override 50
CHÖÔNG 4: KEÁT XUAÁT VAÊN BAÛN TRONG WINDOWS 54
I. Keát xuaát vaên baûn trong Windows 55
II. Caùc haøm caên baûn ñeå keát xuaát vaên baûn 55
CHÖÔNG 5: PHAÂN TÍCH VAØ THIEÁT KEÁ CHÖÔNG TRÌNH 66
I. Phaân tích vaán ñeà 67
II. Thieát keá chöông trình 68
III. Giôùi thieäu moät soá haøm coù lieân quan 78
IV. Giôùi thieäu moät soá caáu truùc döõ lieäu coù lieân quan 92
KEÁT QUAÛ VAØ HÖÔÙNG PHAÙT TRIEÅN 97
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 2
Ñeà taøi : Nghieân cöùu caùc phöông phaùp
nhaän daïng töø döôùi cursor mouse treân
Desktop Windows.
Vieát chöông trình nhaän daïng töø naøy.
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 3
Lôøi Môû Ñaàu
gaøy nay, haàu nhö moïi coâng vieäc haøng ngaøy lieân quan ñeán cuoäc soáng
cuûa chuùng ta ñeàu dieãn ra treân maùy tính. Töø vieäc soaïn thaûo vaên baûn, gôûi
nhaän thoâng tin ñeán vieäc tra cöùu, truy caäp thoâng tin töø heä thoáng maïng maùy tính
toaøn caàu Internet ñoái vôùi ngöôøi söû duïng laø coâng vieäc thöôøng ngaøy vaø raát phoå
bieán.
Töø ñoù, seõ phaùt sinh vaán ñeà laø ngöôøi söû duïng seõ caàn tìm hieåu yù nghóa cuûa
moät töø, moät caâu hoaëc caàn phaûi dòch moät ñoaïn vaên baûn, moät file döõ lieäu naøo ñoù ra
tieáng Vieät vaø ngöôïc laïi. Ñaây laø moät nhu caàu caàn thieát vaø haàu nhö xaûy ra thöôøng
xuyeân ñoái vôùi nhieàu ngöôøi, do ñoù nhaän daïng töø ñaëc bieät laø nhaän daïng töø treân
maøn hình trong moâi tröôøng Windows laø vieäc laøm caàn thieát vaø coù yù nghóa thöïc teá.
Keát quaû cuûa vieäc nhaän daïng töø seõ ñöôïc duøng ñeå xaây döïng neân caùc öùng
duïng khaùc chaúng haïn nhö caùc töø ñieån ñöôïc tra cöùu theo kieåu töông taùc tröïc tieáp
seõ raát thuaän tieän cho ngöôøi söû duïng bôûi vì theo caùch naøy thì cho duø ñang ôû trong
baát kyø öùng duïng naøo khi caàn tra cöùu thì thao taùc tröïc tieáp ngay treân öùng duïng
ñang duøng töùc laø chæ caàn click chuoät vaøo ñoù chöù khoâng caàn phaûi môû töø ñieån roài
tra cöùu töø ñoù theo kieåu coå ñieån.
Vì theá, trong thôøi gian laøm Luaän AÙn Toát nghieäp ñöôïc söï höôùng daãn cuûa
thaày Leâ Taán Huøng nhoùm sinh vieân chuùng toâi thöïc hieän ñeà taøi: “ Nhaän daïng töø
döôùi cursor mouse treân deskop Windows. Vieát chöông trình nhaän daïng töø naøy ”.
Trong giai ñoaïn ñaàu cuûa Luaän AÙn Toát Nghieäp chuùng toâi ñaõ nghieân cöùu ñöôïc moät
soá vaán ñeà quan troïng vaø caên baûn coù yù nghóa trong vieäc thöïc hieän yeâu caàu ñaõ ñaët
ra cuûa ñeà taøi. Ñeà taøi naøy chæ taäp trung nhaän daïng töø ôû daïng text treân desktop cuûa
moâi tröôøng Windows roài xuaát keát quaû ra.
Trong thôøi gian laøm Luaän AÙn Toát Nghieäp nhoùm sinh vieân chuùng toâi ñaõ tieán
haønh nghieân cöùu cô cheá hoaït ñoäng vaø quaûn lyù cuûa heä ñieàu haønh Windows.
Nghieân cöùu veà phöông thöùc laäp trình trong moâi tröôøng Windows vaø caùc phöông
tieän maø Windows hoã trôï khi laäp trình. Tham khaûo vaø nghieân cöùu kyõ thuaät
override caùc haøm giao tieáp cuûa Windows ôû cheá ñoä 16 bit vaø 32 bit. Nghieân cöùu
caùch xöû lyù caùc thoâng ñieäp trong Windows vaø tìm hieåu veà caùch keát xuaát vaên baûn,
veà cheá ñoä aùnh xaï, vaán ñeà toïa ñoä . . . vaø caùch xöû lyù vaên baûn. Treân cô sôû ñoù böôùc
ñaàu chuùng toâi ñaõ xaây döïng xong moät öùng duïng coù khaû naêng nhaän daïng ñöôïc töø
treân neàn Windows 16 bit ñöôïc vieát baèng ngoân ngöõ Visual C++ version 1.5 vaø
höôùng phaùt trieån trong thôøi gian tôùi laø hieän thöïc noù treân neàn Win32.
Baùo caùo cuûa chuùng toâi seõ laàn löôït ñieåm qua nhöõng noäi dung maø chuùng toâi
ñaõ nghieân cöùu vaø tìm hieåu ñöôïc trong thôøi gian qua. Sau ñoù laø phaàn giôùi thieäu chi
tieát veà chöông trình töø khaâu phaân tích-thieát keá cho ñeán phaàn chöông trình nguoàn
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 4
vaø cuoái cuøng seõ laø neâu nhöõng vaán ñeà coøn toàn taïi vaø höôùng phaùt trieån trong töông
lai.
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 5
Chöông 1:
TÌM HIEÅU VEÀ TÌM HIEÅU VEÀ
LAÄP TRÌNH WINDOWS
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 6
I - KHAÙI QUAÙT VEÀ LAÄP TRÌNH TRONG WINDOWS:
1 - Khaùi quaùt veà laäp trình trong Windows:
Moâi tröôøng laäp trình Windows veà cô baûn laø döïa treân boä haøm API
(Application Programmer Interface), noù coù chöùc naêng nhö caùc ngaét trong baûng
vector ngaét cuûa DOS, nhöng noù thaân thieän hôn ôû choã caùch goïi haøm API gioáng
heät caùch goïi haøm cuûa ngoân ngöõ caáp cao, moãi haøm coù moät teân goïi haún hoi, vaø teân
goïi thöôøng ñöôïc ñaët raát phuø hôïp vôùi coâng duïng cuûa haøm (maëc duø coù hôi daøi
doøng) töø ñoù taïo khaû naêng gôïi nhôù cao. Vôùi Windows, ngöôøi laäp trình khoâng coøn
phaûi laäp trình theo kieåu assembly nöõa maø laäp trình theo kieåu ngoân ngöõ caáp cao,
moïi hoaït ñoäng trong maùy ôû möùc thaáp töø haøm API trôû xuoáng thuoäc phaïm vi cuûa
Windows, vaø Windows khoâng khuyeán khích vieäc caùc öùng duïng can thieäp vaøo
lónh vöïc naøy. Buø laïi, baèng caùc haøm API, noù hoã trôï raát hieäu quaû cho ngöôøi laäp
trình, giuùp khai thaùc khaû naêng cuûa thieát bò trieät ñeå, deã daøng vaø tieän lôïi hôn bao
giôø heát. Coù theå noùi Windows ñaõ môû ra cho ngöôøi laäp trình khoâng gian roäng lôùn
ñeå phaùt trieån öùng duïng, vaø haïn cheá khoâng gian phaùt trieån heä thoáng. Ñieàu naøy
daãn ñeán heä quaû laø caùc öùng duïng ñöôïc taïo ra heát söùc deã daøng, vaø quan troïng laø heä
thoáng chaïy oån ñònh hôn, khoâng bò treo do loãi cuûa öùng duïng, khoâng theå xaâm
nhaäp, nhöng seõ raát khoù khaên neáu ngöôøi laäp trình muoán tröïc tieáp ñieàu khieån hoaït
ñoäng trong maùy vaø phaùt trieån veà laäp trình heä thoáng.
- Tìm hieåu haøm Windows API: Windows laø moät heä ñieàu haønh ña nhieäm
(multitasking) maø qua ñoù caùc öùng duïng ôû trong moâi tröôøng Windows seõ giao tieáp
vôùi user thoâng qua moät hay nhieàu giao dieän. Ñeå truy caäp caùc giao dieän naøy thì
caùc öùng duïng ñöôïc xaây döïng treân moâi tröôøng Windows seõ söû duïng taäp caùc haøm
ñöôïc goïi laø giao dieän chöông trình öùng duïng API (Application Program
Interface). Chöông trình cuûa ngöôøi söû duïng coù theå goïi tôùi caùc haøm API ñeå truy
caäp tôùi moïi taøi nguyeân cuûa Windows. GDI laø moät boä phaän cuûa API, giao dieän
thieát bò ñoà hoïa GDI (Graphic Device Interface) coù nhieäm vuï duy trì söï ñoäc laäp
cuûa Windows ñoái vôùi caùc thieát bò ñoà hoïa hay coøn goïi laø khaû naêng ñoäc laäp thieát bò
(device independent) töùc laø cho pheùp Windows laøm vieäc vôùi nhieàu kieåu thieát bò
ñoà hoïa khaùc nhau.
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 7
2 - Thö vieän lieân keát ñoäng DLL (Dynamic Link Library):
Thö vieän lieân keát ñoäng laø caùc taäp tin ñöôïc Windows löu döôùi daïng nhò phaân
chöùa caùc haøm maø moïi öùng duïng treân Windows ñeàu coù theå söû duïng. Neùt ñaëc
tröng cuûa DLL laø noù coù theå ñöôïc söû duïng bôûi nhieàu öùng duïng taïi cuøng moät thôøi
ñieåm hay noùi caùch khaùc thö vieän lieân keát ñoäng coù theå cuøng moät luùc ñöôïc goïi bôûi
nhieàu chöông trình. DLL laø moät döõ lieäu chia seû ñöôïc (shared data).
Coù 3 loaïi DLL khaùc nhau:
- Thö vieän lieân keát ñoäng API: thuoäc heä thoáng Windows, khi caøi heä ñieàu
haønh thì noù ñaõ coù saün. Chuùng ñöôïc naïp khi Windows khôûi ñoäng.
- Thö vieän lieân keát ñoäng third party: do caùc coâng ty khaùc taïo ra treân moâi
tröôøng Windows, hoã trôï theâm coâng taùc laäp trình trong Windows.
- Thö vieän lieân keát ñoäng do chuùng ta taïo ra.
Windows söû duïng caáu truùc thö vieän lieân keát ñoäng DLL (Dynamic Link
Library) nhaèm muïc ñích khoâng sao cheùp moät khoái löôïng lôùn caùc maõ vaøo trong
chöông trình nhö ôû caùc thö vieän thoâng thöôøng. Nhôø caáu truùc ñoäng cuûa DLL neân
moïi chöông trình ñeàu coù theå truy caäp thö vieän trong thôøi gian thöïc thi. Caùc haøm
API ñöôïc Windows giöõ döôùi daïng hoãn hôïp trong moät soá DLL. Trong quaù trình
dòch khi gaëp leänh goïi haøm API töø chöông trình öùng duïng thì chöông trình dòch
khoâng theâm maõ naøy vaøo module thöïc hieän maø chæ theâm caùc leänh lieân keát (chöùa
teân cuûa DLL beân trong coù haøm caàn naïp) vaø teân haøm ñoù. Khi thöïc thi chöông
trình thì haøm API thöïc söï môùi ñöôïc naïp vaøo boä nhôù ñeå thöïc hieän.
Cuøng vôùi söï phaùt trieån cuûa Windows laø söï phaùt trieån cuûa laäp trình höôùng
ñoái töôïng, vaø ñeå hoã trôï cho vieäc laäp trình höôùng ñoái töôïng, Microsoft ñaõ cung
caáp cho ngöôøi laäp trình moät boä thö vieän caùc lôùp cô baûn ñeå phaùt trieån caùc öùng
duïng höôùng ñoái töôïng goïi laø MFC (Microsoft Foundation Classes), noäi dung cuûa
noù bao goàm thoâng tin veà caùc lôùp cô baûn ñöôïc chuaån hoùa nhö lôùp application;
document; view; OLE; cöûa soå; nuùt baám; text; v.v…, trong caùc lôùp naøy moïi thöù
lieân quan ñeán noù (bao goàm döõ lieäu vaø caùc chöông trình xöû lyù cuûa noù) ñeàu ñöôïc
laøm hoaøn chænh, ngöôøi laäp trình chæ vieäc laáy ra söû duïng, hoaëc coù theå theâm bôùt
moät ít tính naêng ñaëc tröng cho ñoái töôïng cuûa mình. Muïc tieâu chính cuûa MFC laø
heä thoáng hoùa caùc haøm API, cung caáp moät theå thöùc goïi goïn caùc haøm API, cung
caáp moät “khung laøm vieäc” (framework) cöïc maïnh ñeå ngöôøi laäp trình khoâng caàn
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 8
phaûi quan taâm ñeán nhöõng ñoaïn chöông trình thuoäc veà “thuû tuïc” maø chæ caàn quan
taâm ñeán phaàn coát loõi ñeå ñaït ñöôïc muïc ñích.
II - THOÂNG ÑIEÄP VAØ XÖÛ LYÙ THOÂNG ÑIEÄP:
1 - Khaùi nieäm:
Laäp trình treân moâi tröôøng Windows khaùc vôùi laäp trình ôû caùc moâi tröôøng
khaùc ôû ñieåm laø laäp trình treân Windows luoân luoân gaén lieàn vôùi nhöõng thoâng ñieäp.
Moïi hoaït ñoäng xaûy ra treân moät chöông trình Windows ñeàu thoâng qua caùc thoâng
ñieäp. Thoâng ñieäp seõ ñöôïc heä thoáng baùo cho caùc öùng duïng bieát caùc taùc ñoäng töø
beân ngoaøi vaøo heä thoáng Windows. Moät cöûa soå coù theå gôûi ñi moät thoâng ñieäp cho
moät cöûa soå khaùc vaø caùc cöûa soå ñaùp öùng laïi thoâng ñieäp baèng caùch gôûi ñi moät
thoâng ñieäp khaùc cho moät cöûa soå khaùc.
Trong Windows coù 3 loaïi thoâng ñieäp cô baûn:
- Nhöõng thoâng ñieäp toång quaùt: coù maõ nhaän dieän mang tieàn toá WM_ ñöôïc
coi laø phaàn lôùn trong öùng duïng vaø Windows ñaõ cung caáp caùc haøm ñeå giaûi quyeát.
- Nhöõng control notification: ñaây laø nhöõng thoâng ñieäp WM_COMMAND
ñöôïc chuyeån töø cöûa soå con tôùi cöûa soå boá meï.
- Nhöõng nuùt leänh: laø thoâng ñieäp WM_COMMAND phaùt ñi töø trình ñôn, töø
caùc nuùt ñieàu khieån. Ñaây laø loaïi thoâng ñieäp yeâu caàu öùng duïng phaûi thöïc hieän moät
coâng vieäc gì ñoù.
2 - Gôûi ñi caùc thoâng ñieäp:
Windows cho pheùp öùng duïng gôûi ñi nhöõng thoâng ñieäp cho mình, cho caùc
öùng duïng khaùc hoaëc cho heä thoáng.
Coù 3 haøm Windows API ñeå gôûi thoâng ñieäp ñi:
a) Haøm SendMessage:
Cuù phaùp:
LRESULT SendMessage(hwnd, uMsg, wParam, lParam)
HWND hwnd; // handle cuûa cöûa soå nhaän (ñích)
UINT uMsg; // thoâng ñieäp ñeå gôûi
WPARAM wParam; // thoâng soá thoâng ñieäp ñaàu tieân
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40
Baùo Caùo Luaän Vaên Toát Nghieäp Trang 9
LPARAM lParam; // thoâng soá thoâng ñieäp thöù hai
- Haøm SendMessage gôûi thoâng ñieäp tôùi moät hay nhieàu cöûa soå. Haøm goïi thuû
tuïc cöûa soå cho cöûa soå vaø khoâng trôû veà cho ñeán luùc thuû tuïc cöûa soå ñaõ xöû lyù thoâng
ñieäp.
- Giaù trò traû veà: cho bieát keát quaû xöû lyù thoâng ñieäp vaø phuï thuoäc vaøo thoâng
ñieäp ñöôïc gôûi.
b) Haøm PostMessage:
- Cuù phaùp:
BOOL PostMessage(hwnd, uMsg, wParam, lParam)
HWND hwnd; // handle cuûa cuûa soå ñích
UINT uMsg; // thoâng ñieäp gôûi
WPARAM wParam; // thoâng soá thoâng ñieäp ñaàu tieân
LPARAM lParam; // thoâng soá thoâng ñieäp thöù hai
- Haøm PostMessage gôûi (ñaët) moät thoâng ñieäp vaøo trong haøng thoâng ñieäp
cöûa soå vaø roài trôû veà maø khoâng ñôïi cöûa soå töông öùng xöû lyù thoâng ñieäp. Nhöõng
thoâng ñieäp trong moät haøng thoâng ñieäp ñöôïc laáy baèng caùch goïi haøm SetMessage
hay PeekMessage.
- Giaù trò traû veà: traû veà khaùc 0 neáu thaønh coâng, ngöôïc laïi 0.
c) Haøm SendDlgItemMessage:
- Cuù phaùp:
LRESULT
SendDlgItemMessage(hwndDlg,idDlgItem,uMsg,wParam,lParam)
HWND hwndDlg; // handle cuûa hoäp hoäi thoaïi
int idDlgItem; // maõ nhaän dieän oâ ñieàu khieån seõ nhaän thoâng ñieäp
UINT uMsg; // thoâng ñieäp gôûi ñi
WPARAM wParam; // thoâng soá thoâng ñieäp ñaàu tieân
LPARAM lParam; // thoâng soá thoâng ñieäp thöù hai
- Haøm SendDlgItemMessage gôûi moät thoâng ñieäp tôùi moät ñieàu khieån trong
hoäp hoäi thoaïi.
SVTH : Löông Cao Hoaøi Taâm Lôùp TH40