Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 93 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
93
Dung lượng
471,5 KB
Nội dung
M C L CỤ Ụ L I M UỜ Ở ĐẦ 3 CH NG 1: TÌM HI U V L P TRÌNH WINDOWSƯƠ Ể Ề Ậ 4 I. Khái quát v l p trình trong Windowsề ậ 5 II. Thông đi p và x lý thông đi pệ ử ệ 7 III. Giao di n thi t b đ h a GDIệ ế ị ồ ọ 11 IV. C a s trong Windowsử ổ 15 V. Ch ng trình Windows ti p nh n thông đi p chu tươ ế ậ ệ ộ 22 CH NG 2: TÌM HI U V HOOKƯƠ Ể Ề 26 1 - Chu i hookỗ 27 2 - Th t c hookủ ụ 27 3 - Các lo i hookạ 28 4 - S d ng hookử ụ 30 5 - Hook trong Windows 3.x 31 6 - Gi i thi u m t s hàm liên quan đ n hookớ ệ ộ ố ế 33 CH NG 3: K THU T OVERRIDE HÀM APIƯƠ Ỹ Ậ 36 I. Khái quát v k thu t overrideề ỹ ậ 37 II. Lý do s d ng k thu t override trong l p trình Windowsử ụ ỹ ậ ậ 37 III. C ch ho t đ ng và qu n lý b nh trên Windows 16bitsơ ế ạ ộ ả ộ ớ 38 IV. C ch ho t đ ng và qu n lý b nh trên Windows 32bitsơ ế ạ ộ ả ộ ớ 41 V. Hi n th c k thu t override trên Windows 16bitsệ ự ỹ ậ 45 VI. M t s hàm đ c s d ng trong k thu t overrideộ ố ượ ử ụ ỹ ậ 50 CH NG 4: K T XU T V N B N TRONG WINDOWSƯƠ Ế Ấ Ă Ả 54 I. K t xu t v n b n trong Windowsế ấ ă ả 55 II. Các hàm c n b n đ k t xu t v n b nă ả ể ế ấ ă ả 55 CH NG 5: PHÂN TÍCH VÀ THI T K CH NG TRÌNHƯƠ Ế Ế ƯƠ 66 I. Phân tích v n đấ ề 67 II. Thi t k ch ng trìnhế ế ươ 68 III. Gi i thi u m t s hàm có liên quanớ ệ ộ ố 78 IV. Gi i thi u m t s c u trúc d li u có liên quanớ ệ ộ ố ấ ữ ệ 92 K T QU VÀ H NG PHÁT TRI NẾ Ả ƯỚ Ể 97 L i M uờ ở Đầ gày nay, h u nh m i công vi c hàng ngày liên quan đ n cu c s ng c a chúng ta đ uầ ư ọ ệ ế ộ ố ủ ề di n ra trên máy tính. T vi c so n th o v n b n, g i nh n thông tin đ nễ ừ ệ ạ ả ă ả ở ậ ế vi c tra c u, truy c p thông tin t h th ng m ng máy tính toàn c u Internet đ iệ ứ ậ ừ ệ ố ạ ầ ố v i ng i s d ng là công vi c th ng ngày và r t ph bi n. ớ ườ ử ụ ệ ườ ấ ổ ế T đó, s phát sinh v n đ là ng i s d ng s c n tìm hi u ý ngh a c a m từ ẽ ấ ề ườ ử ụ ẽ ầ ể ĩ ủ ộ t , m t câu ho c c n ph i d ch m t đo n v n b n, m t file d li u nào đó ra ti ngừ ộ ặ ầ ả ị ộ ạ ă ả ộ ữ ệ ế Vi t và ng c l i. ây là m t nhu c u c n thi t và h u nh x y ra th ng xuyên đ iệ ượ ạ Đ ộ ầ ầ ế ầ ư ả ườ ố v i nhi u ng i, do đó nh n d ng t đ c bi t là nh n d ng t trên màn hình trongớ ề ườ ậ ạ ừ ặ ệ ậ ạ ừ môi tr ng Windows là vi c làm c n thi t và có ý ngh a th c t .ườ ệ ầ ế ĩ ự ế K t qu c a vi c nh n d ng t s đ c dùng đ xây d ng nên các ng d ngế ả ủ ệ ậ ạ ừ ẽ ượ ể ự ứ ụ khác ch ng h n nh các t đi n đ c tra c u theo ki u t ng tác tr c ti p s r tẳ ạ ư ừ ể ượ ứ ể ươ ự ế ẽ ấ thu n ti n cho ng i s d ng b i vì theo cách này thì cho dù đang trong b t kậ ệ ườ ử ụ ở ở ấ ỳ ng d ng nào khi c n tra c u thì thao tác tr c ti p ngay trên ng d ng đang dùng t cứ ụ ầ ứ ự ế ứ ụ ứ là ch c n click chu t vào đó ch không c n ph i m t đi n r i tra c u t đó theoỉ ầ ộ ứ ầ ả ở ừ ể ồ ứ ừ ki u c đi n.ể ổ ể Vì th , trong th i gian làm Lu n Án T t nghi p đ c s h ng d n c a th yế ờ ậ ố ệ ượ ự ướ ẫ ủ ầ Lê T n Hùng nhóm sinh viên chúng tôi th c hi n đ tài: “ Nh n d ng t d i cursorấ ự ệ ề ậ ạ ừ ướ mouse trên deskop Windows. Vi t ch ng trình nh n d ng t này ”. Trong giaiế ươ ậ ạ ừ đo n đ u c a Lu n Án T t Nghi p chúng tôi đã nghiên c u đ c m t s v n đ quanạ ầ ủ ậ ố ệ ứ ượ ộ ố ấ ề tr ng và c n b n có ý ngh a trong vi c th c hi n yêu c u đã đ t ra c a đ tài. tài nàyọ ă ả ĩ ệ ự ệ ầ ặ ủ ề Đề ch t p trung nh n d ng t d ng text trên desktop c a môi tr ng Windows r iỉ ậ ậ ạ ừ ở ạ ủ ườ ồ xu t k t qu ra.ấ ế ả Trong th i gian làm Lu n Án T t Nghi p nhóm sinh viên chúng tôi đã ti n hànhờ ậ ố ệ ế nghiên c u c ch ho t đ ng và qu n lý c a h đi u hành Windows. Nghiên c u vứ ơ ế ạ ộ ả ủ ệ ề ứ ề ph ng th c l p trình trong môi tr ng Windows và các ph ng ti n mà Windowsươ ứ ậ ườ ươ ệ h tr khi l p trình. Tham kh o và nghiên c u k thu t override các hàm giao ti pỗ ợ ậ ả ứ ỹ ậ ế c a Windows ch đ 16 bit và 32 bit. Nghiên c u cách x lý các thông đi p trongủ ở ế ộ ứ ử ệ Windows và tìm hi u v cách k t xu t v n b n, v ch đ ánh x , v n đ t aể ề ế ấ ă ả ề ế ộ ạ ấ ề ọ đ . . . và cách x lý v n b n. Trên c s đó b c đ u chúng tôi đã xây d ng xong m tộ ử ă ả ơ ở ướ ầ ự ộ ng d ng có kh n ng nh n d ng đ c t trên n n Windows 16 bit đ c vi tứ ụ ả ă ậ ạ ượ ừ ề ượ ế b ng ngôn ng Visual C++ version 1.5 và h ng phát tri n trong th i gian t i làằ ữ ướ ể ờ ớ hi n th c nó trên n n Win32.ệ ự ề Báo cáo c a chúng tôi s l n l t đi m qua nh ng n i dung mà chúng tôi đã nghiênủ ẽ ầ ượ ể ữ ộ c u và tìm hi u đ c trong th i gian qua. Sau đó là ph n gi i thi u chi ti t vứ ể ượ ờ ầ ớ ệ ế ề ch ng trình t khâu phân tích-thi t k cho đ n ph n ch ng trình ngu n và cu iươ ừ ế ế ế ầ ươ ồ ố cùng s là nêu nh ng v n đ còn t n t i và h ng phát tri n trong t ng lai.ẽ ữ ấ ề ồ ạ ướ ể ươ Ch ng 1:ươ TÌM HIỂU VỀ LẬP TRÌNH WINDOWS TÌM HIỂU VỀ LẬP TRÌNH WINDOWS I - KHÁI QUÁT V L P TRÌNH TRONG WINDOWS:Ề Ậ 1 - Khái quát v l p trình trong Windows:ề ậ Môi tr ng l p trình Windows v c b n là d a trên b hàm API (Applicationườ ậ ề ơ ả ự ộ Programmer Interface), nó có ch c n ng nh các ng t trong b ng vector ng t c aứ ă ư ắ ả ắ ủ DOS, nh ng nó thân thi n h n ch cách g i hàm API gi ng h t cách g i hàm c aư ệ ơ ở ỗ ọ ố ệ ọ ủ ngôn ng c p cao, m i hàm có m t tên g i h n hoi, và tên g i th ng đ c đ t r tữ ấ ỗ ộ ọ ẳ ọ ườ ượ ặ ấ phù h p v i công d ng c a hàm (m c dù có h i dài dòng) t đó t o kh n ng g i nhợ ớ ụ ủ ặ ơ ừ ạ ả ă ợ ớ cao. V i Windows, ng i l p trình không còn ph i l p trình theo ki u assemblyớ ườ ậ ả ậ ể n a mà l p trình theo ki u ngôn ng c p cao, m i ho t đ ng trong máy m cữ ậ ể ữ ấ ọ ạ ộ ở ứ th p t hàm API tr xu ng thu c ph m vi c a Windows, và Windows khôngấ ừ ở ố ộ ạ ủ khuy n khích vi c các ng d ng can thi p vào l nh v c này. Bù l i, b ng các hàmế ệ ứ ụ ệ ĩ ự ạ ằ API, nó h tr r t hi u qu cho ng i l p trình, giúp khai thác kh n ng c a thi tỗ ợ ấ ệ ả ườ ậ ả ă ủ ế b tri t đ , d dàng và ti n l i h n bao gi h t. Có th nói Windows đã m ra choị ệ ể ễ ệ ợ ơ ờ ế ể ở ng i l p trình không gian r ng l n đ phát tri n ng d ng, và h n ch khôngườ ậ ộ ớ ể ể ứ ụ ạ ế gian phát tri n h th ng. i u này d n đ n h qu là các ng d ng đ c t o ra h tể ệ ố Đ ề ẫ ế ệ ả ứ ụ ượ ạ ế s c d dàng, và quan tr ng là h th ng ch y n đ nh h n, không b treo do l i c aứ ễ ọ ệ ố ạ ổ ị ơ ị ỗ ủ ng d ng, không th xâm nh p, nh ng s r t khó kh n n u ng i l p trìnhứ ụ ể ậ ư ẽ ấ ă ế ườ ậ mu n tr c ti p đi u khi n ho t đ ng trong máy và phát tri n v l p trình h th ng.ố ự ế ề ể ạ ộ ể ề ậ ệ ố - Tìm hi u hàm Windows APIể : Windows là m t h đi u hành đa nhi mộ ệ ề ệ (multitasking) mà qua đó các ng d ng trong môi tr ng Windows s giao ti pứ ụ ở ườ ẽ ế v i user thông qua m t hay nhi u giao di n. truy c p các giao di n này thì cácớ ộ ề ệ Để ậ ệ ng d ng đ c xây d ng trên môi tr ng Windows s s d ng t p các hàm đ c g iứ ụ ượ ự ườ ẽ ử ụ ậ ượ ọ là giao di n ch ng trình ng d ng API (Application Program Interface).ệ ươ ứ ụ Ch ng trình c a ng i s d ng có th g i t i các hàm API đ truy c p t i m i tàiươ ủ ườ ử ụ ể ọ ớ ể ậ ớ ọ nguyên c a Windows. GDI là m t b ph n c a API, giao di n thi t b đ h a GDIủ ộ ộ ậ ủ ệ ế ị ồ ọ (Graphic Device Interface) có nhi m v duy trì s đ c l p c a Windows đ i v iệ ụ ự ộ ậ ủ ố ớ các thi t b đ h a hay còn g i là kh n ng đ c l p thi t b (device independent)ế ị ồ ọ ọ ả ă ộ ậ ế ị t c là cho phép Windows làm vi c v i nhi u ki u thi t b đ h a khác nhau.ứ ệ ớ ề ể ế ị ồ ọ 2 - Th vi n liên k t ng DLL (Dynamic Link Library):ư ệ ế độ Th vi n liên k t đ ng là các t p tin đ c Windows l u d i d ng nh phânư ệ ế ộ ậ ượ ư ướ ạ ị ch a các hàm mà m i ng d ng trên Windows đ u có th s d ng. Nét đ c tr ng c aứ ọ ứ ụ ề ể ử ụ ặ ư ủ DLL là nó có th đ c s d ng b i nhi u ng d ng t i cùng m t th i đi m hay nóiể ượ ử ụ ở ề ứ ụ ạ ộ ờ ể cách khác th vi n liên k t đ ng có th cùng m t lúc đ c g i b i nhi u ch ng trình.ư ệ ế ộ ể ộ ượ ọ ở ề ươ DLL là m t d li u chia s đ c (shared data).ộ ữ ệ ẻ ượ Có 3 lo i DLL khác nhau:ạ - Th vi n liên k t đ ng API: thu c h th ng Windows, khi cài h đi u hànhư ệ ế ộ ộ ệ ố ệ ề thì nó đã có s n. Chúng đ c n p khi Windows kh i đ ng.ẵ ượ ạ ở ộ - Th vi n liên k t đ ng third party: do các công ty khác t o ra trên môi tr ngư ệ ế ộ ạ ườ Windows, h tr thêm công tác l p trình trong Windows.ỗ ợ ậ - Th vi n liên k t đ ng do chúng ta t o ra.ư ệ ế ộ ạ Windows s d ng c u trúc th vi n liên k t đ ng DLL (Dynamic Linkử ụ ấ ư ệ ế ộ Library) nh m m c đích không sao chép m t kh i l ng l n các mã vào trongằ ụ ộ ố ượ ớ ch ng trình nh các th vi n thông th ng. Nh c u trúc đ ng c a DLL nênươ ư ở ư ệ ườ ờ ấ ộ ủ m i ch ng trình đ u có th truy c p th vi n trong th i gian th c thi. Các hàmọ ươ ề ể ậ ư ệ ờ ự API đ c Windows gi d i d ng h n h p trong m t s DLL. Trong quá trìnhượ ữ ướ ạ ỗ ợ ộ ố d ch khi g p l nh g i hàm API t ch ng trình ng d ng thì ch ng trình d chị ặ ệ ọ ừ ươ ứ ụ ươ ị không thêm mã này vào module th c hi n mà ch thêm các l nh liên k t (ch a tên c aự ệ ỉ ệ ế ứ ủ DLL bên trong có hàm c n n p) và tên hàm đó. Khi th c thi ch ng trình thì hàm APIầ ạ ự ươ th c s m i đ c n p vào b nh đ th c hi n.ự ự ớ ượ ạ ộ ớ ể ự ệ Cùng v i s phát tri n c a Windows là s phát tri n c a l p trình h ng đ iớ ự ể ủ ự ể ủ ậ ướ ố t ng, và đ h tr cho vi c l p trình h ng đ i t ng, Microsoft đã cung c p choượ ể ỗ ợ ệ ậ ướ ố ượ ấ ng i l p trình m t b th vi n các l p c b n đ phát tri n các ng d ng h ngườ ậ ộ ộ ư ệ ớ ơ ả ể ể ứ ụ ướ đ i t ng g i là MFC (Microsoft Foundation Classes), n i dung c a nó bao g mố ượ ọ ộ ủ ồ thông tin v các l p c b n đ c chu n hóa nh l p application; document; view;ề ớ ơ ả ượ ẩ ư ớ OLE; c a s ; nút b m; text; v.v…, trong các l p này m i th liên quan đ n nó (baoử ổ ấ ớ ọ ứ ế g m d li u và các ch ng trình x lý c a nó) đ u đ c làm hoàn ch nh, ng i l pồ ữ ệ ươ ử ủ ề ượ ỉ ườ ậ trình ch vi c l y ra s d ng, ho c có th thêm b t m t ít tính n ng đ c tr ng choỉ ệ ấ ử ụ ặ ể ớ ộ ă ặ ư đ i t ng c a mình. M c tiêu chính c a MFC là h th ng hóa các hàm API, cungố ượ ủ ụ ủ ệ ố c p m t th th c g i g n các hàm API, cung c p m t “khung làm vi c”ấ ộ ể ứ ọ ọ ấ ộ ệ (framework) c c m nh đ ng i l p trình không c n ph i quan tâm đ n nh ngự ạ ể ườ ậ ầ ả ế ữ đo n ch ng trình thu c v “th t c” mà ch c n quan tâm đ n ph n c t lõi đ đ tạ ươ ộ ề ủ ụ ỉ ầ ế ầ ố ể ạ đ c m c đích.ượ ụ II - THÔNG I P VÀ X LÝ THÔNG I P:Đ Ệ Ử Đ Ệ 1 - Khái ni m:ệ L p trình trên môi tr ng Windows khác v i l p trình các môi tr ng khác ậ ườ ớ ậ ở ườ ở đi m là l p trình trên Windows luôn luôn g n li n v i nh ng thông đi p. M i ho tể ậ ắ ề ớ ữ ệ ọ ạ đ ng x y ra trên m t ch ng trình Windows đ u thông qua các thông đi p. Thôngộ ả ộ ươ ề ệ đi p s đ c h th ng báo cho các ng d ng bi t các tác đ ng t bên ngoài vào hệ ẽ ượ ệ ố ứ ụ ế ộ ừ ệ th ng Windows. M t c a s có th g i đi m t thông đi p cho m t c a s khác vàố ộ ử ổ ể ở ộ ệ ộ ử ổ các c a s đáp ng l i thông đi p b ng cách g i đi m t thông đi p khác cho m t c aử ổ ứ ạ ệ ằ ở ộ ệ ộ ử s khác.ổ Trong Windows có 3 lo i thông đi p c b n:ạ ệ ơ ả - Nh ng thông đi p t ng quát: có mã nh n di n mang ti n t WM_ đ c coi làữ ệ ổ ậ ệ ề ố ượ ph n l n trong ng d ng và Windows đã cung c p các hàm đ gi i quy t.ầ ớ ứ ụ ấ ể ả ế - Nh ng control notification: đây là nh ng thông đi p WM_COMMAND đ cữ ữ ệ ượ chuy n t c a s con t i c a s b m .ể ừ ử ổ ớ ử ổ ố ẹ - Nh ng nút l nh: là thông đi p WM_COMMAND phát đi t trình đ n, t các nútữ ệ ệ ừ ơ ừ đi u khi n. ây là lo i thông đi p yêu c u ng d ng ph i th c hi n m t công vi cề ể Đ ạ ệ ầ ứ ụ ả ự ệ ộ ệ gì đó. 2 - G i i các thông i p:ở đ đ ệ Windows cho phép ng d ng g i đi nh ng thông đi p cho mình, cho các ngứ ụ ở ữ ệ ứ d ng khác ho c cho h th ng.ụ ặ ệ ố Có 3 hàm Windows API đ g i thông đi p đi:ể ở ệ a) Hàm SendMessage: Cú pháp: LRESULT SendMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle c a c a s nh n (đích)ủ ử ổ ậ UINT uMsg; // thông đi p đ g iệ ể ở WPARAM wParam; // thông s thông đi p đ u tiênố ệ ầ LPARAM lParam; // thông s thông đi p th haiố ệ ứ - Hàm SendMessage g i thông đi p t i m t hay nhi u c a s . Hàm g i thở ệ ớ ộ ề ử ổ ọ ủ t c c a s cho c a s và không tr v cho đ n lúc th t c c a s đã x lý thôngụ ử ổ ử ổ ở ề ế ủ ụ ử ổ ử đi p.ệ - Giá tr tr v : cho bi t k t qu x lý thông đi p và ph thu c vào thông đi pị ả ề ế ế ả ử ệ ụ ộ ệ đ c g i.ượ ở b) Hàm PostMessage: - Cú pháp: BOOL PostMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle c a c a s đíchủ ủ ổ UINT uMsg; // thông đi p g iệ ở WPARAM wParam; // thông s thông đi p đ u tiênố ệ ầ LPARAM lParam; // thông s thông đi p th haiố ệ ứ - Hàm PostMessage g i (đ t) m t thông đi p vào trong hàng thông đi p c a sở ặ ộ ệ ệ ử ổ và r i tr v mà không đ i c a s t ng ng x lý thông đi p. Nh ng thông đi pồ ở ề ợ ử ổ ươ ứ ử ệ ữ ệ trong m t hàng thông đi p đ c l y b ng cách g i hàm SetMessage hayộ ệ ượ ấ ằ ọ PeekMessage. - Giá tr tr v : tr v khác 0 n u thành công, ng c l i 0.ị ả ề ả ề ế ượ ạ c) Hàm SendDlgItemMessage: - Cú pháp: LRESULT SendDlgItemMessage(hwndDlg,idDlgItem,uMsg,wParam,lParam) HWND hwndDlg; // handle c a h p h i tho iủ ộ ộ ạ int idDlgItem; // mã nh n di n ô đi u khi n s nh n thông đi pậ ệ ề ể ẽ ậ ệ UINT uMsg; // thông đi p g i điệ ở WPARAM wParam; // thông s thông đi p đ u tiên ố ệ ầ LPARAM lParam; // thông s thông đi p th haiố ệ ứ - Hàm SendDlgItemMessage g i m t thông đi p t i m t đi u khi n trongở ộ ệ ớ ộ ề ể h p h i tho i.ộ ộ ạ - Giá tr tr v : cho bi t k t qu x lý thông đi p và ph thu c vào thông đi pị ả ề ế ế ả ử ệ ụ ộ ệ đ c g i.ượ ở 3 - Vòng l p thông i p:ặ đ ệ M t thread ho c m t process đ y m t thông đi p ra kh i hàng đ i b ng cáchộ ặ ộ ẩ ộ ệ ỏ ợ ằ dùng vòng l p thông đi p. Vòng loop chính c a m t ng d ng đ t t i cu i hàmặ ệ ủ ộ ứ ụ ặ ạ ố WinMain() c a ng d ng đó. Vòng l p thông đi p có d ng nh sau:ủ ứ ụ ặ ệ ạ ư while GetMessage(&msg,NULL,0,0) { TranslateMessage(&msg); DispatchMessage(&msg); } Sau đây là S đ dòng thông đi p:ơ ồ ệ Nó mô t đ n gi n hóa quá trình x lý thông đi p. Thông đi p có th b t ngu nả ơ ả ử ệ ệ ể ắ ồ t nhi u cách khác nhau, s đ sau đây s gi i thích chi ti t h n v vòng l p thôngừ ề ơ ồ ẽ ả ế ơ ề ặ đi p và ch ra cách thông đi p đ c đ t vào hàng đ i nh th nào:ệ ỉ ệ ượ ặ ợ ư ế Thread1 Message Queue Thread2 Message Queue Thread3 Message Queue System Dispatcher Hardware Event Occur System Message Queue GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() WndProc() WndProc() WndProc() DefWndProc() DefWndProc() DefWndProc() Thread1 Hook Thread2 Hook Thread3 Hook System Dispatcher Thông đi p không ch phát xu t t s ki n ph n c ng, c ng có th có thôngệ ỉ ấ ừ ự ệ ầ ứ ũ ể đi p c a ch ng trình phát xu t t m t ch ng trình đang ch y. Các threads có thệ ủ ươ ấ ừ ộ ươ ạ ể g i d li u tr v sau và v tr c b ng cách g i thông đi p. Thông đi p có th g iở ữ ệ ở ề ề ướ ằ ở ệ ệ ể ở vào hàng đ i b ng hàm PostMessage() , ho c chúng có th đ c g i tr c ti p choợ ằ ặ ể ượ ở ự ế vòng l p thông đi p đ x lý ngay l p t c b ng hàm SendMessage().ặ ệ ể ử ậ ứ ằ 4 - X lý thông i p:ử đ ệ Vi c x lý thông đi p là y u t chính làm cho các ng d ng Windows v n hànhệ ử ệ ế ố ứ ụ ậ đ c. H th ng và các ng d ng khác sinh ra các thông đi p cho m i s ki n xu tượ ệ ố ứ ụ ệ ọ ự ệ ấ hi n trong h th ng thông đi p c a Windows s cho phép Windows ch y đaệ ệ ố ệ ủ ẽ ạ nhi m trong m t th i đi m. Windows 95 và Windows NT m r ng kh n ng c aệ ộ ờ ể ở ộ ả ă ủ version Windows tr c b ng vi c c p phát cho m i dòng x lý (thread) hay m iướ ằ ệ ấ ỗ ử ỗ ti n trình (proccess) m t hàng đ i thông đi p riêng. Trong version Windows c thìế ộ ợ ệ ũ t t c ng d ng đ u dùng chung m t hàng đ i thông đi p, vì th đ các ng d ngấ ả ứ ụ ề ộ ợ ệ ế ể ứ ụ khác x lý thông đi p, ng d ng ph i tr quy n đi u khi n v cho Windows m iử ệ ứ ụ ả ả ề ề ể ề ỗ khi nó có th . V i Windows 95 và Windows NT, đi u này không còn n a.ể ớ ề ữ Windows sinh ra thông đi p cho m i s ki n ph n c ng, ví d nh ng iệ ọ ự ệ ầ ứ ụ ư ườ dùng nh n m t phím ho c di chuy n chu t. Nó g i thông đi p đ n hàng đ i thôngấ ộ ặ ể ộ ở ệ ế ợ đi p c a thread thích h p, n u thông đi p đ c dành cho nhi u thread thì nó c ngệ ủ ợ ế ệ ượ ề ũ đ c đ a vào các hàng đ i c a các thread đó.ượ ư ợ ủ M t thông đi p trên th c t là m t c u trúc d li u nh sau:ộ ệ ự ế ộ ấ ữ ệ ư typedef struct tagMSG { Hardware Events Message Sent From Other Threads System Dispatcher System Message Queue Thread Message Queue WndProc() Message Loop PostMessage() TranslateMessage() SentMessage() SentMessage() (To Another Thread) Other threads PostMessage() Other threads PostMessage() HWND hwd; // handle c a s ử ổ UINT message; //s ch đ nh lo i message ố ỉ ị ạ WPARAM wParam; //đ c chuy n cho WndProc() ượ ể LPARAM wParam; //đ c chuy n cho WndProc() ượ ể DWORD time; //s mili giây t lúc b t đ uố ừ ắ ầ POINT pt; //c u trúc đi m POINTấ ể } III - GIAO DI N THI T B H A GDIỆ Ế Ị ĐỒ Ọ (GRAPHIC DEVICE INTERFACE): 1 - Khái ni m:ệ Windows là m t h đi u hành đa nhi m (multitasking) trong đó các ng d ngộ ệ ề ệ ứ ụ giao ti p v i user thông qua m t hay nhi u giao di n. truy xu t các giao di nế ớ ộ ề ệ Để ấ ệ thì ch ng trình ng d ng ph i s d ng các hàm Giao di n ch ng trình ngươ ứ ụ ả ử ụ ệ ươ ứ d ng. API là t p các l nh mà m t ng d ng s d ng đ yêu c u và ti n hành các d chụ ậ ệ ộ ứ ụ ử ụ ể ầ ế ị v c p th p đ c thi hành b i Windows.ụ ấ ấ ượ ở Giao di n thi t b đ h a GDI (Graphic Device Interface) là m t ph n c aệ ế ị ồ ọ ộ ầ ủ API có nhi m v duy trì s đ c l p c a Windows đ i v i các thi t b đ h a (choệ ụ ự ộ ậ ủ ố ớ ế ị ồ ọ phép Windows làm vi c v i nhi u thi t b đ h a khác nhau). Windows GDI là m tệ ớ ề ế ị ồ ọ ộ th vi n bao g m m t s hàm giúp k t xu t đ h a (graphic output) lên màn hình,ư ệ ồ ộ ố ế ấ ồ ọ máy in…GDI s t o ra: đi m, đ ng k , hình d ng (shape: ch nh t, tròn…), chẽ ạ ể ườ ẻ ạ ữ ậ ữ v n b n.ă ả 2 - Device Context: Ng c nh thi t b DC (Device Context) là m t ph n quan tr ng c a GDIữ ả ế ị ộ ầ ọ ủ Windows. M t DC là m t c u trúc d li u dài kho ng 800 bytes đ c Windows duyộ ộ ấ ữ ệ ả ượ trì có nhi m v lo l u gi nh ng thông tin c n thi t mà ng d ng s c n đ n khiệ ụ ư ữ ữ ầ ế ứ ụ ẽ ầ ế ph i hi n th k t xu t lên m t thi t b v t lý. GDI không bao gi cho phép ch ngả ể ị ế ấ ộ ế ị ậ ờ ươ trình làm vi c tr c ti p v i m t DC mà GDI phân ph i cho ch ng trình m tệ ự ế ớ ộ ố ươ ộ handle đ nh n d ng m t DC c th . T t c các hàm API; GDI đ u nh n thông sể ậ ạ ộ ụ ể ấ ả ề ậ ố đ u tiên là m t handle – hdc.ầ ộ DC là m t công c ch a các thu c tính v , DC cho phép k t n i logic m tộ ụ ứ ộ ẽ ế ố ộ ch ng trình v m t thi t b c th nào đó. Ngoài ra do Windows là m t h đi u hànhươ ề ộ ế ị ụ ể ộ ệ ề [...]... dụng in ra các kết xuất và nhận các dữ liệu từ người dùng Windows quản lý tất cả cửa sổ hiện có trong hệ thống bằng cách gán cho mỗi cửa sổ một handle (trên thực tế nó là một số nguyên), ta chỉ cần có đ ược handle c ửa sổ thì có thể thao tác mọi thứ trên cửa sổ đó Một cửa sổ chia sẻ màn hình với các cửa sổ khác, kể cả các cửa sổ của ứng dụng khác Chỉ có một cửa sổ trong một thời điểm có th ể nhận dữ li... có tác đ ộng lên mouse thì m ột tín hiệu được phát đi từ mouse gây ra một ngắt quãng, mouse driver giải quy ết ng ắt quãng này 2 - Mouse device driver: Khi Windows khởi động thì mouse driver tự động nạp vào và kiểm tra xem có chuột hay không Nếu có thì Windows gọi driver cung cấp m ột thủ tục đ ể báo cáo các biến cố xảy ra trên chuột Khi có một mouse event thì driver thông báo cho Windows biết Nếu... việc tính toán sử dụng hệ tọa độ là phải ki ểm soát được việc sử dụng các hệ tọa độ một cách đồng bộ bởi vì việc chuyển đổi giữa các hệ tọa độ đã được cung cấp bởi các hàm nêu trên 5 - Viewport và window: Mapping mode cho biết ánh xạ tọa độ logic và những kích thước được cung cấp khi gọi các hàm GDI qua hệ thống tọa độ thiết bị g ắn li ền v ới DC T ức là mapping mode quyết định GDI ánh xạ việc ánh xạ một... và WM_SETCURSOR bao gi ờ cũng đi trước một thông điệp chuột Vì Windows phải tìm ra xem vị trí cursor hi ện ở trong vùng client hay vùng non-client để phát ra thông điệp vùng client hay thông đi ệp vùng non-client một cách thích hợp Một khi đã được nhận diện thì Windows ph ải đảm bảo là người sử dụng nhận được hình dáng cursor thích hợp Windows cho phép đặt message hook để thay đổi dòng chảy các thông... gian lu ận lý và ánh xạ nó lên màn hình Chế độ ánh xạ cho biết mối quan hệ gi ữa không gian lu ận lý và những pixel trên thiết bị Có tới 8 chế độ ánh xạ khác nhau nhưng chúng tôi chỉ quan tâm tới chế đ ộ ánh x ạ MM_TEXT vì đây là chế độ ánh xạ mặc định Trong chế độ này một đơn vị luận lý được ánh xạ tới một pixel trên thiết bị hay màn hình Như vậy đ ơn v ị tính lu ận lý là pixel và các tọa độ x, y cũng... hàng thông điệp hệ thống Hook này có ích cho việc ghi các macro - WH_KEYBOARD hook quản lý các thông điệp keystroke - WH_KEYBOARD_LL Windows NT: hook quản lý những sự kiện nhập vào từ keyboard mức thấp - WH _MOUSE hook quản lý các thông điệp chuột - WH _MOUSE_ LL Windows NT: hook quản lý những sự kiện đầu vào chuột mức thấp - WH_MSGFILTER hook quản lý các thông điệp được kết sinh như là m ột kết quả cuả... chúng ta cũng c ần tìm hiểu sự khác nhau giữa Windows 16-bit và Windows 32-bit III - Cơ chế hoạt động và quản lý bộ nhớ trên Windows 16bits : Windows 16bits tự động chạy ở chế độ “386 enhanced mode” ở các máy 386, bộ nhớ tối thiểu 2MB Đó thực chất là chế độ standard với 2 đặc tính bổ sung: Windows dùng các thanh ghi trang của 386 để hiện thực bộ nhớ ảo Windows sử dụng chế độ ảo 8086 của 386 để đáp... ạt thông điệp mà mouse phát ra Nó yêu cầu thủ tục cửa sổ nhận diện v ị trí cursor Đa số chương trình chuyển thông điệp này cho DefWindowProc() lo tìm vị trí cursor và cung cấp một hit-test code như là trị trả về Khi DefWindowProc() trả về kết quả khác HTCLIENT, HTERROR, HTNOWHERE, HTTRANSPARENT thì cursor nằm trên vùng non-client thì Windows sẽ phát đi thông điệp non-client Còn khi DefWindows trả về... hay vùng client của nó (cập nhật vùng client); thông tin v ề tình trạng của nó trong mối quan hệ với các cửa sổ khác (truy xuấ nhất định thất b ại của nó tới bàn phím hay trở thành cửa sổ hoạt động) Một thủ tục cửa sổ nhận hầu hết các thông điệp là từ Windows nh ưng nó cũng có thể nhận thông điệp từ các cửa sổ khác gồm cả những cửa sổ nó sở hữu Những thông điệp này có thể là những yêu cầu về thông... command) và cho hiện lên như các thông đi ệp WM_SYSCOMMAND Cuối cùng DefWindowProc() giải quyết các thông điệp WM_NCHITTEST và WM_SETCURSOR cung cấp trước cho các thông điệp chuột khác Chương 2: TÌM HIỂU VỀ HOOKS Hook là một cơ chế cực mạnh cho phép ta cài đặt một thủ tục để điều khi ển ho ặc chận hứng các thông điệp trước khi các thông điệp này tới được nơi tiếp nhận Hay nói một cách khác hook là một điểm . override các hàm giao ti pỗ ợ ậ ả ứ ỹ ậ ế c a Windows ch đ 16 bit và 32 bit. Nghiên c u cách x lý các thông đi p trongủ ở ế ộ ứ ử ệ Windows và tìm hi u v cách k t xu t v n b n, v ch đ ánh x ,. a h đi u hành Windows. Nghiên c u vứ ơ ế ạ ộ ả ủ ệ ề ứ ề ph ng th c l p trình trong môi tr ng Windows và các ph ng ti n mà Windows ơ ứ ậ ườ ươ ệ h tr khi l p trình. Tham kh o và nghiên c u k thu. VỀ LẬP TRÌNH WINDOWS TÌM HIỂU VỀ LẬP TRÌNH WINDOWS I - KHÁI QUÁT V L P TRÌNH TRONG WINDOWS: Ề Ậ 1 - Khái quát v l p trình trong Windows: ề ậ Môi tr ng l p trình Windows v c b n là d a trên b hàm