Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 138 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
138
Dung lượng
695,69 KB
Nội dung
Đề tài : NghiêncứucácphươngphápnhậndạngtừdướicursormousetrênDesktop Windows. VO MINH TRUC 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ậnthô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ậndạngtừ đặc biệt là nhậndạngtừ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ậndạngtừ sẽ được dùng để xây dựng nên các ứng dụng khác chẳng hạn như cáctừ đ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ứutừđó theo kiểu cổ điển. Vì thế, trong thời gian làm Luận ÁnTốtnghiệ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ậndạngtừdướicursormousetrên deskop Windows. Viết chương trình nhậndạngtừ này ”. Trong giai đoạn đầu của Luận ÁnTốtNghiệp chúng tôi đã nghiêncứ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ậndạngtừ ở dạng text trêndesktop của môi trường Windows rồi xuất kết quả ra. Trong thời gian làm Luận ÁnTốtNghiệp nhóm sinh viên chúng tôi đã tiến hành nghiêncứu cơ chế hoạt động và quản lý của hệ điều hành Windows. Nghiêncứu về phương thức lập trình trong môi trường Windows và cácphương tiện mà Windows hỗ trợ khi lập trình. Tham khảo và nghiêncứu kỹ thuật override các hàm giao tiếp của Windows ở chế độ 16 bit và 32 bit. Nghiêncứu cách xử lý cácthô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ậndạ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êncứ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. 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ậnthô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ênWindows 16bits 38 IV. Cơ chế hoạt động và quản lý bộ nhớ trênWindows 32bits 41 V. Hiện thực kỹ thuật override trênWindows 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ÂNTÍCH VÀ THIẾTKẾ CHƯƠNG TRÌNH 66 I. Phântích vấn đề 67 II. Thiếtkế 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 Chương 1: T T Ì Ì M M H H I I Ể Ể U U V V Ề Ề L L Ậ Ậ P P T T R R Ì Ì N N H H W W I I N N D D O O W W S S 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ácthiế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ướidạng nhị phân chứa các hàm mà mọi ứng dụng trênWindows đề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: docá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ướidạ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ênWindows 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ácthô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ácthô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. [...]... Gần giống hệ tọa độ vùng client, là tương đối so với góc upper-left của cửa sổ, được sử dụng khi vẽ vùng nonclient của cửa sổ d) Logical coordinate: Hầu hết các hàm GDI sử dụng hệ tọa độ này Hệthống tọa độ logic không phải là hệthống tọa độthiết bị, hệthống tọa độ logic bao giờ cũng được ánh xạ lên một hệthống tọa độthiết bị Hệ tọa độ logic có thể được ánh xạ lên hệ tọa độ toàn màn hình, hệ tọa... windows: Windows sử dụng cáchệthống tọa độ khác nhau tùy theo hoàn cảnh như: Hệ toạ độthiết bị (Device coordinate system) -Hệ toạ độ toàn màn hình (Full screen coordinate system) -Hệ toạ độ vùng client (Client area coordinate system) -Hệ toạ độ toàn cửa sổ (Whole window coordinate system) -Hệ toạ độ logic (Logical coordinate system) Trong phạm vi ứng dụng của đề tài chúng tôi chỉ quan tâm đến các hệ. .. độ vùng client hoặc hệ tọa độ toàn cửa sổ Dùng hàm DPtoLP để chuyển tọa độthiết bị sang hệ tọa độ logic Dùng hàm LPtoDP để chuyển tọa độ logic sang hệ tọa độthiết bị Như vậy điều quan trọng trong 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áchệ tọa độ một cách đồng bộ bởi vì việc chuyển đổi giữa cáchệ tọa độ đã được cung cấp bởi các hàm nêu trên 5 - Viewport và window:... ra các kết xuất và nhậncá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ệu nhập từ. .. độ á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ênthiế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 được tính theo pixel, trị x tăng khi qua phải và giảm khi qua trái, trị y tăng khi đi xuống và giảm khi đi lên Origin của hệthống tọa độ là góc trái -trên (upper-left) của màn hình 4 -Hệthống tọa độ windows: ... sử dụng hàm GDI để truy xuất một thiết bị đầu ra GDI chuyển các gọi độc lập thiết bị từ ứng dụng tới driver thiết bị Rồi driver thiết bị thông dịch các gọi đó vào trong sự hoạt động độc lập thiết bị Những đặc tính của DC mô tả các đối tượng vẽ được chọn (pens và brushes), font được chọn và màu của nó, cách thức mà đối tượng được vẽ (hay ánh xạ) tới thiết bị, vùng trênthiết bị có sẵn cho output (vùng... 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ácthông điệp cho mọi sự kiện xuất hiện trong hệthốngthô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. .. sự độc lập của Windows đối với cácthiế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ê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 event là di chuyển mouse. .. thiết bị (DC) là một nối kết giữa một ứng dụng Windows, một driver thiết bị và một thiết bị đầu ra (output device) Windows duy trì một cache gồm 5 DC đặc biệt cho hoạt động hệthống Ứng dụng phải giải phóng các DC này sau khi sử dụng Luồng thông tin từ ứng dụng Windows qua DC và device driver tới thiết bị đầu ra: Truy xuất thiết bị đầu ra (Accessing Output Devices): Bất kỳ ứng dụng Windows nào cũng có thể . Đề tài : Nghiên cứu các phương pháp nhận dạng từ dưới cursor mouse trên Desktop Windows. VO MINH TRUC Lời Mở Đầu gày nay,. 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. lên. Origin của hệ thống tọa độ là góc trái -trên (upper-left) của màn hình. 4 - Hệ thống tọa độ windows: Windows sử dụng các hệ thống tọa độ khác nhau tùy theo hoàn cảnh như: Windows Application