Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 85 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
85
Dung lượng
778,16 KB
Nội dung
Báo Cáo Luận Văn Tốt Nghiệp Trang Đề tài : Nghiên cứu phương pháp nhận dạng từ cursor mouse Desktop Windows Viết chương trình nhận dạng từ Lời Mở Đầu gày nay, công việc hàng ngày liên quan đến sống diễ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 tồn cầu Internet người sử dụng công việc thường ngày phổ biến Từ đó, phát sinh vấn đề người sử dụng cần tìm hiểu ý nghĩa từ, câu cần phải dịch đoạn văn bản, file liệu tiếng Việt ngược lại Đây nhu cầu cần thiết xảy thường xuyên nhiều người, nhận dạng từ đặc biệt nhận dạng từ hình mơi trường Windows việc làm cần thiết có ý nghĩa thực tế Kết việc nhận dạng từ dùng để xây dựng nên ứng dụng khác chẳng hạn từ điển tra cứu theo kiểu tương tác trực tiếp thuận tiện cho người sử dụng theo cách cho dù ứng dụng cần tra cứu thao tác trực tiếp ứng dụng dùng tức cần click chuột vào khơng cần phải mở từ điển tra cứu từ theo kiểu cổ điển Vì thế, thời gian làm Luận Án Tốt nghiệp hướng dẫn thầy Lê Tấn Hùng nhóm sinh viên chúng tơi thực đề tài: “ Nhận dạng từ cursor mouse deskop Windows Viết chương trình nhận dạng từ ” Trong giai đoạn đầu Luận Án Tốt Nghiệp nghiên cứu số vấn đề quan trọng có ý nghĩa việc thực yêu cầu đặt đề tài Đề tài tập trung nhận dạng từ dạng text desktop môi trường Windows xuất kết 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 chế hoạt động quản lý hệ điều hành Windows Nghiên cứu phương thức lập trình môi trường Windows phương tiện mà Windows hỗ trợ lập trình Tham khảo nghiên cứu kỹ thuật override hàm LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang giao tiếp Windows chế độ 16 bit 32 bit Nghiên cứu cách xử lý thông điệp Windows tìm hiểu cách kết xuất văn bản, chế độ ánh xạ, vấn đề tọa độ cách xử lý văn Trên sở bước đầu chúng tơi xây dựng xong ứng dụng có khả nhận dạng từ Windows 16 bit viết ngôn ngữ Visual C++ version 1.5 hướng phát triển thời gian tới thực Win32 Báo cáo điểm qua nội dung mà nghiên cứu tìm hiểu thời gian qua Sau phần giới thiệu chi tiết chương trình từ khâu phân tích-thiết kế phần chương trình nguồn cuối nêu vấn đề tồn hướng phát triển tương lai LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang Chương 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang I - KHÁI QUÁT VỀ LẬP TRÌNH TRONG WINDOWS: - Khái qt lập trình Windows: Mơi trường lập trình Windows dựa hàm API (Application Programmer Interface), có chức ngắt bảng vector ngắt DOS, thân thiện chỗ cách gọi hàm API giống hệt cách gọi hàm ngơn ngữ cấp cao, hàm có tên gọi hẳn hoi, tên gọi thường đặt phù hợp với công dụng hàm (mặc dù có dài dịng) từ tạo khả 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 mà lập trình theo kiểu ngôn ngữ cấp cao, hoạt động máy mức thấp từ hàm API trở xuống thuộc phạm vi Windows, Windows khơng khuyến khích việc ứng dụng can thiệp vào lĩnh vực Bù lại, hàm API, hỗ trợ hiệu cho người lập trình, giúp khai thác khả thiết bị triệt để, dễ dàng tiện lợi hết Có thể nói Windows mở cho người lập trình khơng gian rộng lớn để phát triển ứng dụng, hạn chế không gian phát triển hệ thống Điều dẫn đến hệ ứng dụng tạo dễ dàng, quan trọng hệ thống chạy ổn định hơn, không bị treo lỗi ứng dụng, xâm nhập, khó khăn người lập trình muốn trực tiếp điều khiển hoạt động máy phát triển lập trình hệ thống - Tìm hiểu hàm Windows API: Windows hệ điều hành đa nhiệm (multitasking) mà qua ứng dụng môi trường Windows giao tiếp với user thông qua hay nhiều giao diện Để truy cập giao diện ứng dụng xây dựng môi trường Windows sử dụng tập hàm gọi giao diện chương trình ứng dụng API (Application Program Interface) Chương trình người sử dụng gọi tới hàm API để truy cập tới tài nguyên Windows GDI phận API, giao diện thiết bị đồ họa GDI (Graphic Device Interface) có nhiệm vụ trì độc lập Windows thiết bị đồ họa hay gọi khả độc lập thiết bị (device independent) tức cho phép Windows làm việc với nhiều kiểu thiết bị đồ họa khác - Thư viện liên kết động DLL (Dynamic Link Library): Thư viện liên kết động tập tin Windows lưu dạng nhị phân chứa hàm mà ứng dụng Windows sử dụng Nét đặc trưng DLL sử dụng nhiều ứng dụng thời điểm hay nói cách khác thư viện liên kết động lúc gọi nhiều chương trình DLL liệu chia sẻ (shared data) Có loại DLL khác nhau: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang - Thư viện liên kết động API: thuộc hệ thống Windows, cài hệ điều hành có sẵn Chúng nạp Windows khởi động - Thư viện liên kết động third party: công ty khác tạo môi trường Windows, hỗ trợ thêm cơng tác lập trình Windows - Thư viện liên kết động tạo 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 chép khối lượng lớn mã vào chương trình thư viện thông thường Nhờ cấu trúc động DLL nên chương trình truy cập thư viện thời gian thực thi Các hàm API Windows giữ dạng hỗn hợp số DLL Trong trình dịch gặp lệnh gọi hàm API từ chương trình ứng dụng chương trình dịch không thêm mã vào module thực mà thêm lệnh liên kết (chứa tên DLL bên có hàm cần nạp) tên hàm Khi thực thi chương trình hàm API thực nạp vào nhớ để thực Cùng với phát triển Windows sựï phát triển lập trình hướng đối tượng, để 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 thư viện lớp để phát triển ứng dụng hướng đối tượng gọi MFC (Microsoft Foundation Classes), nội dung bao gồm thơng tin lớp chuẩn hóa lớp application; document; view; OLE; cửa sổ; nút bấm; text; v.v…, lớp thứ liên quan đến (bao gồm liệu chương trình xử lý nó) làm hồn chỉnh, người lập trình việc lấy sử dụng, thêm bớt tính đặc trưng cho đối tượng Mục tiêu MFC hệ thống hóa hàm API, cung cấp thể thức gọi gọn hàm API, cung cấp “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 đoạn chương trình thuộc “thủ tục” mà cần quan tâm đến phần cốt lõi để đạt mục đích II - THÔNG ĐIỆP VÀ XỬ LÝ THÔNG ĐIỆP: - Khái niệm: Lập trình mơi trường Windows khác với lập trình mơi trường khác điểm lập trình Windows ln ln gắn liền với thông điệp Mọi hoạt động xảy chương trình Windows thơng qua thơng điệp Thơng điệp hệ thống báo cho ứng dụng biết tác động từ bên ngồi vào hệ thống Windows Một cửa sổ gởi thơng điệp cho cửa sổ khác cửa sổ đáp ứng lại thông điệp cách gởi thông điệp khác cho cửa sổ khác LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trong Windows có loại thơng điệp bản: Trang - Những thơng điệp tổng qt: có mã nhận diện mang tiền tố WM_ coi phần lớn ứng dụng Windows cung cấp hàm để giải - Những control notification: thông điệp WM_COMMAND chuyển từ cửa sổ tới cửa sổ bố mẹ - Những nút lệnh: thơng điệp WM_COMMAND phát từ trình đơn, từ nút điều khiển Đây loại thông điệp yêu cầu ứng dụng phải thực cơng việc - Gởi thơng điệp: Windows cho phép ứng dụng gởi thơng điệp cho mình, cho ứng dụng khác cho hệ thống Có 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 sổ nhận (đích) UINT uMsg; // thông điệp để gởi WPARAM wParam; // thông số thông điệp LPARAM lParam; // thông số thông điệp thứ hai - Hàm SendMessage gởi thông điệp tới hay nhiều cửa sổ Hàm gọi thủ tục cửa sổ cho cửa sổ không trở lúc thủ tục cửa sổ xử lý thông điệp - Giá trị trả về: cho biết kết xử lý thông điệp phụ thuộc vào thông điệp gởi b) Hàm PostMessage: - Cú pháp: BOOL PostMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle của sổ đích UINT uMsg; // thông điệp gởi WPARAM wParam; // thông số thông điệp LPARAM lParam; // thông số thông điệp thứ hai - Hàm PostMessage gởi (đặt) thông điệp vào hàng thông điệp cửa sổ trở mà không đợi cửa sổ tương ứng xử lý thông điệp Những thông điệp hàng thông điệp lấy cách gọi hàm SetMessage hay PeekMessage LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp - Giá trị trả về: trả khác thành công, ngược lại Trang c) Hàm SendDlgItemMessage: - Cú pháp: LRESULT SendDlgItemMessage(hwndDlg,idDlgItem,uMsg,wParam,lParam) HWND hwndDlg; // handle hộp hội thoại int idDlgItem; // mã nhận diện ô điều khiển nhận thông điệp UINT uMsg; // thông điệp gởi WPARAM wParam; // thông số thông điệp LPARAM lParam; // thông số thông điệp thứ hai - Hàm SendDlgItemMessage gởi thông điệp tới điều khiển hộp hội thoại - Giá trị trả về: cho biết kết xử lý thông điệp phụ thuộc vào thông điệp gởi - Vịng lặp thơng điệp: Một thread process đẩy thông điệp khỏi hàng đợi cách dùng vịng lặp thơng điệp Vịng loop ứng dụng đặt cuối hàm WinMain() ứng dụng Vịng lặp thơng điệp có dạng sau: while GetMessage(&msg,NULL,0,0) { TranslateMessage(&msg); DispatchMessage(&msg); } Sau Sơ đồ dịng thơng điệp: Hardware Event Occur System Message Queue System Dispatcher System Dispatcher Thread1 Message Queue Thread1 Hook Thread2 Message Queue Thread2 Hook GetMessage() TranslateMessage() Dispatch Message() Thread3 Message Queue Thread3 Hook GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang Nó mơ tả đơn giản hóa q trình xử lý thơng điệp Thơng điệp bắt nguồn từ nhiều cách khác nhau, sơ đồ sau giải thích chi tiết vịng lặp thơng điệp cách thông điệp đặt vào hàng đợi nào: Hardware Events Other threads PostMessage() System Message Queue Message Sent From Other Threads Other threads PostMessage() System Dispatcher Thread Message Queue SentMessage() (To Another Thread) PostMessage() TranslateMessage() Message Loop SentMessage() WndProc() Thông điệp không phát xuất từ kiện phần cứng, có thơng điệp chương trình phát xuất từ chương trình chạy Các threads gởi liệu trở sau trước cách gởi thông điệp Thông điệp gởi vào hàng đợi hàm PostMessage() , chúng gởi trực tiếp cho vịng lặp thông điệp để xử lý hàm SendMessage() - Xử lý thông điệp: Việc xử lý thơng điệp yếu tố làm cho ứng dụng Windows vận hành Hệ thống ứng dụng khác sinh thông điệp cho kiện xuất hệ thống thông điệp Windows cho phép Windows chạy đa nhiệm thời điểm Windows 95 Windows NT mở rộng khả version Windows trước việc cấp phát cho dịng xử lý (thread) hay tiến trình (proccess) hàng đợi thông điệp riêng Trong version Windows cũ tất ứng dụng dùng chung hàng đợi thơng điệp, để ứng dụng LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang khác xử lý thông điệp, ứng dụng phải trả quyền điều khiển cho Windows Với Windows 95 Windows NT, điều khơng cịn Windows sinh thơng điệp cho kiện phần cứng, ví dụ người dùng nhấn phím di chuyển chuột Nó gởi thông điệp đến hàng đợi thông điệp thread thích hợp, thơng điệp dành cho nhiều thread đưa vào hàng đợi thread Một thơng điệp thực tế cấu trúc liệu sau: typedef struct tagMSG { HWND hwd; UINT message; WPARAM wParam; LPARAM wParam; DWORD time; POINT pt; } // handle cửa sổ //số định loại message //được chuyển cho WndProc() //được chuyển cho WndProc() //số mili giây từ lúc bắt đầu //cấu trúc điểm POINT III - GIAO DIỆN THIẾT BỊ ĐỒ HỌA GDI (GRAPHIC DEVICE INTERFACE): - Khái niệm: Windows hệ điều hành đa nhiệm (multitasking) ứng dụng giao tiếp với user thông qua hay nhiều giao diện Để truy xuất giao diện chương trình ứng dụng phải sử dụng hàm Giao diện chương trình ứng dụng API tập lệnh mà ứng dụng sử dụng để yêu cầu tiến hành dịch vụ cấp thấp thi hành Windows Giao diện thiết bị đồ họa GDI (Graphic Device Interface) phần API có nhiệm vụ trì độc lập Windows 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 thư viện bao gồm số hàm giúp kết xuất đồ họa (graphic output) lên hình, máy in…GDI tạo ra: điểm, đường kẻ, hình dạng (shape: chữ nhật, tròn…), chữ văn - Device Context: Ngữ cảnh thiết bị DC (Device Context) phần quan trọng GDI Windows Một DC cấu trúc liệu dài khoảng 800 bytes Windows trì có nhiệm vụ lo lưu giữ thơng tin cần thiết mà ứng dụng cần đến phải hiển thị kết xuất lên thiết bị vật lý GDI khơng cho phép chương trình làm việc trực tiếp với DC mà GDI phân phối cho chương trình handle LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 10 để nhận dạng DC cụ thể Tất hàm API; GDI nhận thông số handle – hdc DC công cụ chứa thuộc tính vẽ, DC cho phép kết nối logic chương trình thiết bị cụ thể Ngồi Windows hệ điều hành đa nhiệm nên chương trình khơng thể truy xuất trực tiếp thiết bị vật lý để tránh xung đột Thay vào đó, chương trình Windows phải sử dụng kết nối logic DC đại diện Nghĩa tất chương trình cách tiếp cận để GDI giải tranh chấp chương trình yêu cầu dùng thiết bị nên DC cịn có vai trị làm permission slip DC lưu trữ thơng tin liên quan đến mặt vẽ khả Trước sử dụng hàm vẽ GDI điều phải tạo DC cho thiết bị, sử dụng xong phải trả cho Windows nhằm đảm bảo cho hoạt động hệ thống thơng suốt số lượng DC mà Windows quản lý có giới hạn DC Win16: Ngữ cảnh thiết bị (DC) nối kết ứng dụng Windows, driver thiết bị thiết bị đầu (output device) Windows trì cache gồm DC đặc biệt cho hoạt động hệ thống Ứng dụng phải giải phóng DC sau sử dụng Luồng thông tin từ ứng dụng Windows qua DC device driver tới thiết bị đầu ra: Truy xuất thiết bị đầu (Accessing Output Devices): Bất kỳ ứng dụng Windows sử dụng hàm GDI để truy xuất thiết bị đầu GDI chuyển 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 gọi vào hoạt động độc lập thiết bị Những đặc tính DC mơ tả đối tượng vẽ chọn (pens brushes), font chọn màu nó, cách thức mà đối tượng vẽ (hay ánh xạ) tới thiết bị, vùng thiết bị có sẵn cho output (vùng xén) thông tin quan trọng khác Cấu trúc chứa đặc tính DC gọi khối liệu DC Windows Application Windows Application GDI Device Device Driver Output Device Device Driver Output Device Windows Device Output LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Application Driver Device Báo Cáo Luận Văn Tốt Nghiệp Trang 71 hMode handle tới DLL chứa thủ tục hook trỏ tới lpfn hMode phải đặt NULL dwThread đặc tả thread tạo trình hành thủ tục hook code tổ chức với trình hành dwThreadId đặc tả danh hiệu thread với thủ tục hook tổ chức, thủ tục hook tổ chức với tất thread tồn Giá trị trả về: handle tới thủ tục hook thành công NULL thất bại - Ghi chú: lỗi xảy thơng số hMode NULL dwThreadId = hay đặc tả danh hiệu thread tạo trình khác Tầm vực hook phụ thuộc vào kiểu hook Một vài hook đặt với tầm vực hệ thống, hook khác đặt cho thread đặc biệt, danh sách: Hook Tầm vực WH_CALLWNDPROC thread hay system WH_CALLWNDPROCRET thread hay system WH_CBT thread hay system WH_DEBUG thread hay system WH_FOREGROUNDIDLE thread hay system WH_GETMESSAGE thread hay system WH_JOURNALPLAYBACK system WH_JOURNALRECORD system WH_KEYBOARD thread hay system WH_KEYBOARD_LL thread hay system WH_MOUSE thread hay system WH_MOUSE_LL thread hay system WH_MSGFILTER thread hay system WH_SYSMSGFILTER thread hay system WH_SHELL system Với loại hook đặc tả hook thread gọi trước đến hook hệ thống Hook hệ thống tài nguyên chia sẻ đặt ảnh hưởng lên tất ứng dụng Tất hàm hook hệ thống phải thư viện Hook hệ thống nên xử lý cho ứng dụng có mục đích đặc biệt hay LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 72 để sử dụng trợ giúp (aid) đặc biệt debug ứng dụng Các thư viện không cần hook nên gở bỏ thủ tục hook - Hàm WindowFromPoint: - Hàm lấy handle cửa sổ chứa điểm xác định - Cú pháp: HWND WindowFromPoint ( POINT Point // cấu trúc điểm ); - Thông số: Point : điểm kiểm tra - Giá trị trả về: Là handle cửa sổ chứa điểm Nếu khơng có cửa sổ chứa điểm giá trị trả NULL Nếu điểm nằm điều khiển text tĩnh (static text control) giá trị trả handle cửa sổ nằm bên điều khiển text tĩnh - Ghi chú: Hàm WindowFromPoint không lấy handle cửa sổ bị che hay không hoạt dộng được, điểm cửa sổ Một ứng dụng sử dụng hàm ChildWindowFromPoint cho việc tìm kiếm khơng có giới hạn Hàm yêu cầu tối thiểu Windows 95, Header khai báo winuser.h, sử dụng thư viện user32.lib – Hàm ChildWindowFromPoint: - Hàm ChildWindowFromPoint xác định rõ cửa sổ thuộc cửa sổ cha mẹ chứa điểm cho - Cú pháp: HWND ChildWindowFromPoint ( HWND hWndParent, POINT Point // handle cửa sổ cha mẹ // cấu trúc tọa độ điểm ); - Thông số: hWndParent Handle cửa sổ cha mẹ Point Cấu trúc POINT định nghĩa tọa độ client điểm kiểm tra LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 73 - Giá trị trả về: Là handle cửa sổ chứa điểm contains the point trường hợp cửa sổ bị che hay hoạt động hidden or disabled Nếu điểm nằm ngồi cửa sổ cha mẹ giá trị trả NULL Nếu điểm cửa sổ cha mẹ không cửa sổ trả handle cửa sổ cha mẹ - Ghi chú: Hệ thống trì danh sách nội, chứa handle cửa sổ tổ chức cửa sổ cha mẹ Thứ tư handle danh sách phụ thuộc vào trật tự Z cửa sổ Nếu có nhiều cửa sổ chứa điểm hệ thống trả handle cửa sổ danh sách mà có chứa điểm Hàm địi hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib – Hàm ChildWindowFromPointEx: - Hàm ChildWindowFromPointEx xác định rõ cửa sổ thuộc cửa sổ cha mẹ chứa điểm Hàm phớt lờ cửa sổ khơng nhìn thấy, khơng thể hoạt động suốt - Cú pháp: HWND ChildWindowFromPointEx( HWND hwndParent, // handle cửa sổ cha mẹ POINT pt, // cấu trúc tọa độ điểm UINT uFlags // cờ bỏ quãng ); - Thông số: hwndParent Handle cửa sổ cha mẹ pt cấu trúc POINT định nghĩa tọa độ client điểm kiểm tra uFlags cho biết cửa sổ bị bỏ, kết hợp giá trị sau: Giá trị Ý nghĩa CWP_ALL Không bỏ cửa sổ CWP_SKIPINVISIBLE Bỏ cửa sổ khơng nhìn thấy CWP_SKIPDISABLED Bỏ cửa sổ hoạt động CWP_SKIPTRANSPARENT Bỏ cửa sổ suốt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 74 - Giá trị trả về: Là handle cửa sổ chứa điểm bắt gặp tiêu chuẩn (critia) đặc tả uFlags Nếu điểm cửa sổ cha mẹ không cửa sổ bắt gặp tiêu chuẩn giá trị trả handle cửa sổ cha mẹ Nếu điểm nằm ngồi cửa sổ cha mẹ hay hàm thất bại giá trị trả NULL - Ghi chú: Hệ thống trì danh sách nội chứa handle cửa sổ tổ chức cửa sổ cha mẹ Thứ tự handle danh sách phụ thuộc vào trật tự Z cửa sổ Nếu có nhiều cửa sổ chứa điểm hệ thống trả handle cửa sổ danh sách chứa điểm bắt gặp tiêu chuẩn uFlags Hàm đòi hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib - Hàm GetWindowText: - Hàm GetWindowText chép text tiêu đề cửa sổ đặc tả (nếu có một) vào vùng đệm Nếu cửa sổ đặc tả điều khiển text điều khiển chép Tuy nhiên, GetWindowText lấy text điều khiển ứng dụng khác - Cú pháp: int GetWindowText( HWND hWnd, LPTSTR lpString, int // handle cửa sổ hay điều khiển có chứa text // địa vùng đệm cho text nMaxCount // số cực đại ký tự để chép ); - Thông số: hWnd Handle cửa sổ hay điều khiển có chứa text lpString Pointer tới vùng đệm nhận text nMaxCount số lượng cực đại ký tự chép tới vùng đệm tính ln ký tự, NULL Nếu đoạn text vượt giới hạn bị cắt bớt - Giá trị trả về: Nếu thành cơng trả độ dài ký tự chuỗi chép khơng tính ký tự rỗng cuối chuỗi Nếu cửa sổ khơng có tiêu đề hay đoạn text, hay tiêu đề rỗng hay handle cửa sổ tiêu đề khơng hợp lệ giá trị trả zero Hàm lấy đoạn text edit control ứng dụng khác - Ghi chú: Nếu cửa sổ đích thuộc sở hữu q trình hành, hàm GetWindowText tạo nên thông điệp WM_GETTEXT để gởi tới điều khiển hay cửa LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 75 sổ đặc tả Nếu cửa sổ đích sở hữu q trình khác có đầu đề (caption) hàm GetWindowText lấy phần text caption cửa sổ Nếu cửa sổ khơng có caption giá trị trả chuỗi rỗng Hàm đòi hỏi tối thiểu Windows 95, Header: khai báo winuser.h, sử dụng Import Library user32.lib - Hàm MouseProc: Thủ tục hook MouseProc hàm callback định nghĩa thư viện hay định nghĩa ứng dụng sử dụng hàm SetWindowsHookEx Hệ thống gọi hàm ứng dụng gọi hàm GetMessage hay PeekMessage có thông điệp chuột xử lý Kiểu HOOKPROC định nghĩa pointer trỏ tới hàm callback MouseProc placeholder cho tên hàm định nghĩa ứng dụng hay tên hàm định nghĩa thư viện - Cú pháp: LRESULT CALLBACK MouseProc ( Int nCode, // hook code WPARAM wParam, // danh hiệu thông điệp LPARAM lParam // tọa độ chuột ); - Thông số: nCode code thủ tục hook sử dụng để định làm để xử lý thơng điệp, có giá trị: Giá trị Ý nghĩa HC_ACTION wParam lParam chứa thông tin thông điệp chuột HC_NOREMOVE wParam lParam chứa thông tin thông điệp chuột, thông điệp chuột không bị xóa khỏi hàng message - Nếu nCode nhỏ thủ tục hook phải chuyển thơng điệp tới hàm CallNextHookEx không cần xử lý thêm nên trả giá trị trả CallNextHookEx wParam chứa danh hiệu thông điệp chuột lParam pointer trỏ tới cấu trúc MOUSEHOOKSTRUCT - Giá trị trả về: Nếu nCode < trả giá trị CallNextHookEx trả nCode >= thủ tục hook khơng xử lý thơng điệp đề nghị bạn gọi LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 76 CallNextHookEx trả giá trị trả ngược lại ừng dụng khác đặt hook WM_MOUSE không nhận thông báo hook đối xử xác kết Nếu thủ tục hook xử lý thơng điệp trả giá trị khác để ngăn chặn hệ thống chuyển thông điệp tới thủ tục cửa sổ đích - Ghi chú: Một ứng dụng đặt thủ tục hook cách đặc tả kiểu hook WH_MOUSE địa thủ tục hook gọi tới hàm SetWindowsHookEx Thủ tục hook phải không đặt hàm callback JournalPlayBackProc 10 - Hàm RedrawWindow: Hàm RedrawWindow cập nhật hình chữ nhật hay vùng đưa vào vùng client cửa sổ - Cú pháp: BOOL RedrawWindow( hwnd, lprcUpdate, hrgnUpdate, fuRedraw) HWND hwnd; const RECT FAR* lprcUpdate; HRGN hrgnUpdate; UINT fuRedraw; - Thông số: hwnd Cửa sổ cần vẽ lại Nếu NULL cửa sổ desktop cập nhật lprcUpdate tới cấu trúc RECT chứa tọa độ hình chữ nhật cập nhật Thơng số bị phớt lờ hrgnUpdate chứa handle vùng hợp lệ hrgnUpdate vùng cập nhật Nếu hrgnUpdate lprcUpdate NULL tồn vùng client cửa sổ cập nhật fuRedraw hay nhiều cờ vẽ lại, kết hợp nhiều cờ Các cờ sau sử dụng để làm hiệu lực vùng cửa sổ: RDW_ERASE làm cho cửa sổ nhận thông điệp WM_ERASEBKGND cửa sổ vẽ lại Cờ RDW_INVALIDATE phải xác định khơng cờ RDW_ERASE khơng có tác dụng RDW_FRAME làm cho vùng vùng non-client cửa sổ mà giao với vùng cập nhật nhận thông điệp LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 77 WM_NCPAINT Cờ RDW_INVALIDATE phải xác định không RDW_FRAME không ảnh hưởng Thông điệp thường không gởi suốt thực thi hàm RedrawWindow trừ RDW_UPDATENOW hay RDW_ERASENOW xác định RDW_INTERNALPAINT làm cho WM_PAINT gởi (send) tới cửa sổ mà không quan tâm cửa sổ chứa vùng hợp lệ hay không RDW_INVALIDATE làm hiệu lực lprcUpdate hay hrgnUpdate (chỉ chúng có lẽ khơng NULL) Nếu hai NULL, tồn cửa sổ bị hiệu lực Những cờ sau làm có hiệu lực vùng cửa sổ: RDW_NOERASE chặn thông điệp WM_ERASEBKGND xảy RDW_NOFRAME chặn thông điệp WM_NCPAINT xảy Cờ phải sử dụng với RDW_VALIDATE sử dụng điển hình với RDW_NOCHILDREN Sự chọn lựa để sử dụng phải cẩn thận làm cho phần cửa sổ vẽ RDW_NOINTERNALPAINT chặn thông điệp nội WM_PAINT Cờ không ảnh hưởng WM_PAINT gây kết từ vùng hợp lệ RDW_VALIDATE làm hợp lệ lprcUpdate hay hrgnUpdate (chỉ có lẻ khơng NULL) Nếu hai NULL, tồn cửa sổ hợp lệ Cờ không ảnh hưởng tới thông điệp nội WM_PAINT Những cờ điều khiển việc vẽ xảy Khơng có vẽ thực hàm RedrawWindow trừ mẫu xác định RDW_ERASENOW làm cho cửa sổ bị tác dụng (như xác định cờ RDW_ALLCHILDREN RDW_NOCHILDREN) nhận thông điệp WM_NCPAINT WM_ERASEBKGND ,Nếu cần thiết trước lúc hàm trả WM_PAINT bị trì hỗn RDW_UPDATENOW làm cho cửa sổ bị tác dụng (như xác định cờ RDW_ALLCHILDREN RDW_NOCHILDREN) nhận LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 78 thông điệp WM_NCPAINT, WM_ERASEBKGND WM_PAINT Nếu cần thiết trước lúc hàm trả - Mặc định, cửa sổ bị tác dụng hàm RedrawWindow phụ thuộc việc cửa sổ có kiểu WS_CLIPCHILDREN hay khơng Những cửa sổ cửa sổ WS_CLIPCHILDREN không bị ảnh hưởng; Tuy nhiên cửa sổ không WS_CLIPCHILDREN làm có hiệu lực đệ quy hay làm hiệu lực cửa sổ WS_CLIPCHILDREN bắt gặp Các cờ sau điều khiển cửa sổ bị ảnh hưởng hàm RedrawWindow: RDW_ALLCHILDREN gồm cửa sổ (nếu co)ù hoạt động vẽ RDW_NOCHILDREN loại trừ cửa sổ (nếu có) khỏi hoạt động vẽ - Giá trị trả về: khác thành công, ngược lại - Chú ý: Khi hàm RedrawWindow dùng để làm hiệu lực vùng cửa sổ desktop cửa sổ desktop khơng nhận thông điệp WM_PAINT Để vẽ lại desktop ứng dụng sử dụng cờ RDW_ERASE để sinh thông điệp WM_ERASEBKGND 11 - Hàm GetViewportOrgEx: Hàm GetViewportOrgEx lấy tọa độ x, y origin viewport tổ chức với DC - Cú pháp: BOOL GetViewportOrgEx(hdc, lpPoint) HDC hdc; POINT FAR* lpPoint; - Thông số: hdc xác định device context lpPoint Points tới địa cấu trúc POINT Origin viewport (trong tọa độ thiết bị) đặt cấu trúc - Giá trị trả về: khác thành công, ngược lại 12 - Hàm GetDCOrg: Hàm GetDCOrg lấy tọa độ origin dịch cuối cho DC Origin xác định offset sử dụng Windows để dịch tọa độ thiết bị sang tọa độ client cho LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 79 điểm cửa sổ ứng dụng Origin dịch cuối liên quan với origin vật lý hình - Cú pháp: DWORD GetDCOrg(hdc) HDC hdc;// handle of device context - Thông số: hdc device context mà origin lấy - Giá trị trả về: word thấp giá trị trả chứa tọa độ x word cao chứa toạ độ y origin dịch cuối hệ toạ độ thiết bị hàm thành công 13 - Hàm GetClientRect: Hàm GetClientRect tọa độ client vùng client cửa sổ Tọa độ client xác định góc trái-trên phải-dưới vùng client Bởi tọa độ client liên quan đến góc trái-trên vùng client cửa sổ nên tọa độ góc trái-trên (0,0) - Cú pháp: void GetClientRect(hwnd, lprc) HWND hwnd; // handle of window RECT FAR* lprc; // address of structure for rectangle - Thông số: hwnd Cửa sổ mà tọa độ client lấy lprc tới cấu trúc RECT nhận tọa độ client Giá trị left top 0, right bottom chứa chiều rộng chiều cao cửa sổ - Giá trị trả về: không trả giá trị 14 – Các thông điệp để vẽ lại hình: Các thơng điệp gởi đến cửa sổ cho hàm SendMessage khiến cho ứng dụng quản lý cửa sổ vẽ lại cửa sổ a) Thông điệp WM_PAINT: Mặt cửa sổ bị thay đổi liên tục (bởi lệnh resize, đóng mở dialog box…) khơng cập nhật bị biến dạng nên Windows dùng thông điệp WM_PAINT để tô vẽ lại hình Có nhiều tình làm cho Windows phát thông điệp WM_PAINT: - Trước hết người sử dụng chạy chương trình LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 80 - Sau cửa sổ co giản hay hồn nguyên sau cửa sổ bị che phủ (một phần hay tồn phần) cửa sổ khác tức phần cửa sổ bị che không thấy vẽ lại cho thấy - Gởi thông điệp WM_PAINT cách làm hiệu lực vùng client (invalidating) gọi hàm InValidateRect() WM_PAINT: Hdc = (HDC) wParam ; // DC để vẽ Hdc tới DC để vẽ, NULL dùng DC có sẵn, hdc sử dụng vài điều khiển chung để vẽ DC khác DC có sẵn Các cửa sổ khác phớt lờ thơng số Trị trả về: ứng dụng trả xử lý thông điệp b) Thông điệp WM_NCPAINT: Một ứng dụng gởi thông điệp tới cửa sổ khung (frame) phải vẽ lại Khung cửa sổ vùng client area WM_NCPAINT: Hrgn = (HRGN) wParam ; // handle update region Tham số: Hrgn giá trị wParam tới update region xén tới frame cửa sổ, wParam = tồn frame cửa sổ cần cập nhật Giá trị trả về: ứng dụng trả giá trị xử lý thơng điệp Ghi chú: clipping region cửa sổ luôn hình chữ nhật hình dạng frame thay đổi IV – Giới thiệu số cấu trúc liệu có liên quan: Các cấu trúc liệu cấu trúc chuẩn Windows 3.1, định nghĩa file WINDOWS.H - Cấu trúc TEXTMETRIC: Cấu trúc TEXTMETRIC chứa thông tin font vật lý Tất kích thước đưa đơn vị luận lý tức chúng phụ thuộc vào chế độ ánh xạ hành ngữ cảnh hình Nội dung ý nghĩa liệu cấu trúc trình bày chương 4: Kết xuất văn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp – Cấu trúc POINT: Trang 81 - Dùng để định nghĩa tọa độ x, y điểm - Cú pháp: typedef struct tagPOINT { LONG x; LONG y; } – Cấu trúc STRUCT: - Định nghĩa tọa độ góc upper-left lower-right hình chữ nhật - Cú pháp: typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT; – Cấu trúc PAINTSTRUCT: - Dùng chứa thông tin dùng để tô vẽ client area thuộc cửa sổ - Cú pháp: typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BYTE fIncUpdate; BYTE rgbReserved[16]; } PAINTSTRUCT; - Tham số: hdc handle DC cần vẽ fErase cho biết background có vẽ lại hay khơng, khác tơ vẽ cịn ngược lại khơng vẽ LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 82 rcPaint góc upper-left lower-right hình chữ nhật vẽ fRestore dành riêng cho sử dụng nội Windows fIncUpdate dành riêng cho sử dụng nội Windows RgbResersed[16] khối ký ức dành riêng cho sử dụng nội Windows – Cấu trúc EVENTMSG: - Chứa thông tin từ hàng ứng dụng Windows, sử dụng để lưu trữ thông tin thông điệp cho hàm callback JornalPlaybackProc - Cú pháp: typedef struct tagEVENTMSG { UINT message; UINT paramL; UINT paramH; DWORD time; } EVENTMSG; - Thông số: message thông điệp paramL thơng tin thêm vào thơng điệp Nghĩa xác phụ thuộc vào giá trị thông điệp paramH thông tin thêm vào thơng điệp Nghĩa xác phụ thuộc vào giá trị thông điệp time thời điểm mà thông điệp post – Cấu trúc MSG: - Chứa thông tin từ hàng ứng dụng cửa sổ - Cú pháp: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp POINT pt; } MSG; Trang 83 - Thông số: hwnd cửa sổ nhận thông điệp message ố thông điệp wParam thông tin thêm vào thơng điệp Nghĩa xác phụ thuộc vào giá trị thông điệp lParam thông tin thêm vào thơng điệp Nghĩa xác phụ thuộc vào giá trị thông điệp time thời điểm thông điệp post pt vị trí cursor tọa độ hình thông điệp post - Cấu trúc SIZE: - Chứa viewport extents, window extents, text extents, bitmap dimensions, aspect-ratio filter cho vài hàm mở rộng - Cú pháp: typedef struct tagSIZE { int cx; int cy; } SIZE; - Thông số: cx x-extent hàm trả cy y-extent hàm trả - Cấu trúc MOUSEHOOKSTRUCT: - Cấu trúc MOUSEHOOKSTRUCT chứa thông tin kiện chuột - Cú pháp: typedef struct tagMOUSEHOOKSTRUCT { POINT pt; HWND hwnd; UINT wHitTestCode; DWORD dwExtraInfo; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp } MOUSEHOOKSTRUCT; Trang 84 - Thông số: pt điểm có cấu trúc POINT chứa tọa độ x,y mouse cursor hệ tọa độ hình hwnd cửa sổ nhận thông điệp chuột tương ứng với kiện mouse wHitTestCode mã hit-test trả dwExtraInfo thông tin thêm vào tổ chức với kiện mouse Một ứng dụng thiết lập thơng tin thêm vào cách gọi hàm kiện phần cứng lấy cách gọi hàm GetMessageExtraInfo LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 85 Kết hướng phát triển Chương trình GETTEXT bước đầu đáp ứng yêu cầu đề tài đặt ra: Nhận dạng từ hiển thị hình Tuy nhiên, kỹ thuật override thực mơi trường Windows 16 bits, nên chương trình chạy môi trường Windows 16bits Trong môi trường Windows 9x, môi trường lai tạp 16bits 32bits, nên chương trình nhận dạng dịng văn xuất hàm kết xuất văn mơi trường 16bits (như TextOut, ExtTextOut), cịn văn kết xuất hàm môi trường 32bits (như TextOutA, ExtTextOutA - dùng để kết xuất văn phầm mềm 32bits Microsoft Office 97) chương trình khơng thể nhận dạng Dù điều mà đề tài đạt đưa giải thuật khung sườn mang tính khả thi, phát triển hồn chỉnh tương lai Do vậy, để nhận dạng tất từ xuất hình Windows phải override hàm Windows 32bits Việc thực vấn đề lớn, cần phải hiểu sâu sắc Windows, Windows có chế độ bảo vệ nhớ chặt chẽ, nên ghi xố vào hàm API cách mà chương trình làm, cần phải có giải thuật khác Ngồi việc lấy liệu cách override hướng để giải vấn đề, ta thực cách khác dùng hàm lấy text mà Windows có hỗ trợ, vấn đề phức tạp LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... Cáo Luận Văn Tốt Nghiệp Trang giao tiếp Windows chế độ 16 bit 32 bit Nghiên cứu cách xử lý thông điệp Windows tìm hiểu cách kết xuất văn bản, chế độ ánh xạ, vấn đề tọa độ cách xử lý văn Trên. .. luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 19 - Mouse: Khi mouse báo vị trí (vị trí cursor) có tác động lên mouse tín hiệu phát từ mouse gây ngắt quãng, mouse driver giải ngắt quãng - Mouse device... XUẤT VĂN BẢN TRONG WINDOWS LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Báo Cáo Luận Văn Tốt Nghiệp Trang 48 I - Kết xuất văn Windows: Trong phần lớn ứng dụng văn phần kết xuất Do Windows