Bài giảng Lập trình Windows - Chương 10: Lập trình Hook cung cấp cho người học các kiến thức: Cơ chế Hook trong Windows, các bước lập trình Hook, xây dựng DLL cho hàm Hook, đăng ký hook. Mời các bạn cùng tham khảo nội dung chi tiết.
Chương 10 Lập trình HOOK 10.1 Cơ chế Hook Windows Hook kỹ thuật cho phép hàm nhận xử lý kiện (thơng điệp, thao tác chuột, gõ phím) trước chúng chuyển đến ứng dụng Mỗi kiện xử lý (Hook) nhiều hàm khác nhau, hàm tạo nên chuỗi hàm xử lý kiện, gọi hook chain, hàm xử lý kiện theo thứ tự đăng ký Minh họa chế Hook theo hook chain: Hàm_1 Ứng dụng App1 Hàm_2 Sự kiện Mouse Ứng dụng App2 Hàm_3 Hàm_n Ứng dụng App3 Hook chain 10.1 Cơ chế Hook Windows Để lập trình hook phải thực hai bước viết hàm xử lý kiện đăng ký hook Có phạm vi đăng ký hook, chương trình (local) toàn hệ thống (global) Đối với phạm vi local kiện bị chặn xử lý liên quan đến chương trình, cịn global bị chặn xử lý nơi hệ thống Với phạm vi local cần lập trình hàm xử lý kiện chương trình, thực đăng ký chương trình Đối với global hàm xử lý phải lập trình mơđun thư viện DLL, sau dùng chương trình khác để đăng ký Chúng ta thực dạng global Có thể khóa kiện cách chặn xử lý kiện khơng gọi tới hàm xử lý hệ thống Minh họa phần chế hook chain 10.2 Các bước lập trình Hook Hai bước thực lập trình hook sau: Bước 1: Xây dựng thư viện DLL, chứa hàm xử lý kiện hook Bước 2: Lập chương trình đăng ký hủy bỏ hook Chương trình Minh họa sau: Thư viện DLL Hàm xử lý kiện hook Nạp thư viện DLL vào chương trình Hàm xử lý kiện hook Lấy địa hàm xử lý kiện hook Đăng ký hook Hủy bỏ đăng ký 10.3 Xây dựng DLL cho hàm Hook Có thể xây dựng hàm xử lý kiện hook chương trình đăng ký, nhiên có ảnh hưởng tới luồng tiến trình chương trình Để có ảnh hưởng tới luồng phải viết thư viện DLL Mẫu hàm xử lý kiện hook: LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam ); Các kiện ý nghĩa tham số: - Sự kiện Mouse + nCode : cho biết kiện chuột, HC_ACTION người dùng tác động, HC_NOREMOVE thông điệp gửi hàm PeekMessage + wParam : giá trị thông điệp chuột + lParam : trỏ tới cấu trúc MOUSEHOOKSTRUCT gồm { POINT, HWND, } - Sự kiện Keyboard + nCode : cho biết kiện bàn phím, HC_ACTION người dùng tác động, HC_NOREMOVE thông điệp gửi hàm PeekMessage + wParam : mã phím ảo phím gõ, VK_ + lParam : số thông tin liên đến phím gõ Hàm trả giá trị muốn khóa kiện, ngược lại gọi trả giá trị hàm CallNextHookEx( HHOOK, nCode, wParam, lParam); 10.4 Đăng ký hook Các bước đăng ký hook: Bước 1: Nạp thư viện DLL có chứa hàm xử lý kiện hook vào chương trình: HMODULE LoadLibrary( “tên_thư_viện” ); Bước 2: Xác định địa hàm xử lý kiện hook: FARPROC GetProcAddress( HMODULE , “tên_hàm” ); Bước 3: Đăng ký vào hook chain HHOOK SetWindowsHookEx( kiểu, hàm, thư-viện, luồng ); Trong đó: + kiểu : quy định kiện cần đăng ký WH_MOUSE, WH_KEYBOARD, + hàm : địa hàm cần đăng ký, xác định bước 2, + thư viện : số hiệu môđun thư viện nạp thành công bước 1, + luồng : quy định luồng gắn với việc đăng ký, luồng thời Lệnh trả giá trị đăng ký thành công, phải lưu lại giá trị để hủy bỏ đăng ký Bước 4: Nếu muốn hủy bỏ đăng ký sử dụng lệnh sau: BOOL UnhookWindowsHookEx( HHOOK ); typedef kiểu_hàm (CALLBACK * kiểu_con_trỏ) ( kiểu tham số ); ... thực lập trình hook sau: Bước 1: Xây dựng thư viện DLL, chứa hàm xử lý kiện hook Bước 2: Lập chương trình đăng ký hủy bỏ hook Chương trình Minh họa sau: Thư viện DLL Hàm xử lý kiện hook Nạp... liên quan đến chương trình, global bị chặn xử lý nơi hệ thống Với phạm vi local cần lập trình hàm xử lý kiện chương trình, thực đăng ký chương trình Đối với global hàm xử lý phải lập trình mơđun... viện DLL vào chương trình Hàm xử lý kiện hook Lấy địa hàm xử lý kiện hook Đăng ký hook Hủy bỏ đăng ký 10.3 Xây dựng DLL cho hàm Hook Có thể xây dựng hàm xử lý kiện hook chương trình đăng ký,