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. nội dung chi tiết. | Chương 10 Lập trình HOOK 1 . Cơ chế Hook trong Windows Hook là một kỹ thuật cho phép một hàm có thể nhận và xử lý các sự kiện (thông điệp, thao tác chuột, gõ phím) trước khi chúng được chuyển đến các ứng dụng. Mỗi sự kiện có thể được xử lý (Hook) bởi nhiều hàm khác nhau, các hàm này tạo nên chuỗi hàm xử lý sự kiện, gọi là hook chain, các hàm này xử lý các sự kiện theo thứ tự đã đăng ký. Minh họa cơ 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 2 . Cơ chế Hook trong Windows Để lập trình hook cơ bản chúng ta phải thực hiện hai bước là viết hàm xử lý sự kiện và đăng ký hook. Có 2 phạm vi đăng ký hook, trong chương trình (local) và toàn bộ hệ thống (global). Đối với phạm vi local thì sự kiện chỉ bị chặn và xử lý liên quan đến chương trình, còn global sẽ bị chặn và xử lý mọi nơi trong hệ thống. Với phạm vi local chỉ cần lập trình một hàm xử lý sự kiện trong chương trình, thực hiện đăng ký cũng trong chương trình này. Đối với global thì hàm xử lý sự phải lập trình trong một môđun thư viện DLL, sau đó dùng một chương trình khác để đăng ký. Chúng ta sẽ thực hiện dạng global. Có thể khóa một sự kiện bằng cách chặn xử lý sự kiện đó và không gọi tới các hàm xử lý của hệ thống. Minh họa ở phần cơ chế hook chain. 3 . Các bước lập trình Hook Hai bước thực hiện lập trình hook như sau: Bước 1: Xây dựng một thư viện DLL, chứa hàm xử lý sự kiện hook Bước 2: Lập chương trình đăng ký và hủy bỏ hook Chương trình Minh họa như sau: Thư viện DLL Hàm xử lý sự kiện hook Nạp thư viện DLL vào chương trình Hàm xử lý sự kiện hook Lấy địa chỉ hàm xử lý sự kiện hook Đăng ký hook Hủy bỏ đăng ký 4 . Xây dựng DLL cho hàm Hook Có thể xây dựng hàm xử lý sự kiện hook cùng trong chương trình đăng ký, tuy nhiên nó chỉ có ảnh hưởng tới luồng trong tiến trình của chương trình. Để có ảnh hưởng tới mọi luồng chúng ta phải viết trong thư viện DLL. Mẫu hàm xử lý sự kiện .