Tìm hiểu về hook và kỹ thuật override hàm api

106 15 0
  • Loading ...
1/106 trang
Tải xuống

Thông tin tài liệu

Ngày đăng: 17/04/2018, 09:28

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. Trang MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS I Khái quát lập trình Windows II Thông điệp xử lý thông điệp III Giao diện thiết bò đồ họa GDI 11 IV Cửa sổ 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 - Chuỗi hook 27 - Thủ tục hook 27 - Các loại hook 28 - Sử dụng hook 30 - Hook Windows 3.x 31 - Giới thiệu 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 kỹ thuật override 37 II Lý sử dụng kỹ thuật override lập trình Windows 37 III Cơ chế hoạt động quản lý nhớ Windows 16bits 38 IV Cơ chế hoạt động quản lý nhớ Windows 32bits 41 V Hiện thực kỹ thuật override Windows 16bits 45 VI Một số hàm sử dụng 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 Windows 55 II Các hàm để kết xuất vă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 số hàm có liên quan 78 IV Giới thiệu số cấu trúc liệu có liên quan 92 KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 97 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ừ Trang 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 toà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 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 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 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 Trang độ cách xử lý văn Trên sở bước đầu 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 Trang Chương 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS Trang I - KHÁI QUÁT VỀ LẬP TRÌNH TRONG WINDOWS: - Khái quát 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 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 đối Trang với 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: - 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 Trang 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 hoà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 luôn 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 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 Trong Windows có loại thông điệp bản: - Những thông điệp tổng quát: 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 Trang - 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 - Giá trò trả về: trả khác thành công, ngược lại c) Hàm SendDlgItemMessage: - Cú pháp: Trang 10 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); } Hardware Event Occur Sau Sơ đồ dòngSystem thông điệp: Message Queue System Dispatcher System Dispatcher Thread1 Message Queue Thread1 Hook Thread2 Message Queue Thread2 Hook Thread3 Message Queue Thread3 Hook GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() GetMessage() TranslateMessage() Dispatch Message() WndProc() WndProc() WndProc() DefWndProc() DefWndProc() DefWndProc() Trang 92 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 - 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 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, khiển có chứa text LPTSTR lpString, Trang 93 // handle cửa sổ hay điều // đòa vùng đệm cho text int chép nMaxCount // số cực đại ký tự để ); - Thông số: hWnd chứa text Handle cửa sổ hay điều khiển có 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 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ổ 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 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 sổ đặc tả Nếu cửa sổ đích sở hữu trình khác có đầu đề (caption) hàm GetWindowText lấy phần text caption cửa sổ Nếu cửa sổ 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 Trang 94 ứ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 hieä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ò HC_ACTION thông điệp Ý nghóa wParam lParam chứa thông tin 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 điệp chuột lParam MOUSEHOOKSTRUCT chứa danh pointer trỏ hiệu tới cấu thông trúc - 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 Trang 95 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 toàn vùng client cửa sổ cập nhật fuRedraw kết hợp nhiều cờ hay nhiều cờ vẽ lại,  Các cờ sau sử dụng để làm hiệu lực vùng cửa sổ: Trang 96 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 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 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, toà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 WM_ERASEBKGND chặn thông xảy điệp 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ệ Trang 97 RDW_VALIDATE làm hợp lệ lprcUpdate hay hrgnUpdate (chỉ có lẻ không NULL) Nếu hai NULL, toà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ì hoã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 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 hoạt động gồm cửa sổ (nếu co)ù vẽ RDW_NOCHILDREN có) khỏi hoạt loại trừ cửa sổ (nếu động vẽ - Giá trò trả về: khác thành công, ngược lại Trang 98 - 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 đ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 Trang 99 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ảidướ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; RECT FAR* lprc; // handle of window // 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 - Sau cửa sổ co giản hay hoàn nguyên sau cửa sổ bò che phủ (một phần hay toàn phần) cửa Trang 100 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 = toà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 Trang 101 - 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 – Cấu trúc POINT: - 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ú phaù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; Trang 102 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ẽ ngược lại không vẽ 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 Trang 103 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; POINT pt; } MSG; - 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 Trang 104 - 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; } MOUSEHOOKSTRUCT; - 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 Trang 105 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 Trang 106 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), 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 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 hoà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 xoá 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 Ngoà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 ... Chương 2: TÌM HIỂU VỀ HOOKS Trang 31 Hook chế cực mạnh cho phép ta cài đặt thủ tục để điều khiển chận hứng thông điệp trước thông điệp tới nơi tiếp nhận Hay nói cách khác hook điểm kỹ thuật message-handling... thủ tục hook phụ thuộc vào kiểu hook mà liên quan Các thủ tục hook cho vài kiểu hook quản lý thông điệp; khác thay đổi thông điệp hay dừng phát triển chuỗi, ngăn chặn chúng tìm tới thủ tục hook. .. 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
- Xem thêm -

Xem thêm: Tìm hiểu về hook và kỹ thuật override hàm api, Tìm hiểu về hook và kỹ thuật override hàm api, 5 – Hook trong Windows 3.x:

Mục lục

Xem thêm

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay