intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình Windows - Chương 10: Lập trình Hook (2016)

Chia sẻ: Bình Yên | Ngày: | Loại File: PDF | Số trang:6

61
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình Windows - Chương 10: Lập trình Hook (2016)

Chương 10<br /> <br /> Lập trình<br /> HOOK<br /> 1<br /> <br /> 10.1. Cơ chế Hook trong Windows<br /> <br /> <br /> <br /> <br /> <br /> 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<br /> điệp, thao tác chuột, gõ phím) trước khi chúng được chuyển đến các ứng dụng.<br /> 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<br /> 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<br /> thứ tự đã đăng ký.<br /> Minh họa cơ chế Hook theo hook chain:<br /> Hàm_1<br /> <br /> Ứng dụng App1<br /> <br /> Hàm_2<br /> Sự kiện<br /> Mouse<br /> <br /> Ứng dụng App2<br /> Hàm_3<br /> <br /> Hàm_n<br /> <br /> Ứng dụng App3<br /> <br /> Hook chain<br /> 2<br /> <br /> 10.1. Cơ chế Hook trong Windows<br /> Để 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ử<br /> lý sự kiện và đăng ký hook.<br />  Có 2 phạm vi đăng ký hook, trong chương trình (local) và toàn bộ hệ thống<br /> (global). Đối với phạm vi local thì sự kiện chỉ bị chặn và xử lý liên quan đến<br /> chương trình, còn global sẽ bị chặn và xử lý mọi nơi trong hệ thống.<br />  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<br /> trình, thực hiện đăng ký cũng trong chương trình này. Đối với global thì<br /> hàm xử lý sự phải lập trình trong một môđun thư viện DLL, sau đó dùng<br /> một chương trình khác để đăng ký. Chúng ta sẽ thực hiện dạng global.<br />  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<br /> các hàm xử lý của hệ thống. Minh họa ở phần cơ chế hook chain.<br /> <br /> <br /> 3<br /> <br /> 10.2. Các bước lập trình Hook<br /> Hai bước thực hiện lập trình hook như sau:<br /> Bước 1: Xây dựng một thư viện DLL, chứa hàm xử lý sự kiện hook<br /> Bước 2: Lập chương trình đăng ký và hủy bỏ hook<br /> Chương trình<br />  Minh họa như sau:<br /> <br /> <br /> Thư viện DLL<br /> Hàm xử lý<br /> sự kiện hook<br /> <br /> Nạp thư viện DLL<br /> vào chương trình<br /> <br /> Hàm xử lý<br /> sự kiện hook<br /> <br /> Lấy địa chỉ hàm<br /> xử lý sự kiện hook<br /> Đăng ký hook<br /> Hủy bỏ đăng ký<br /> 4<br /> <br /> 10.3. Xây dựng DLL cho hàm Hook<br /> <br /> <br /> <br /> <br /> Có thể xây dựng hàm xử lý sự kiện hook cùng trong chương trình đăng ký, tuy<br /> 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<br /> hưởng tới mọi luồng chúng ta phải viết trong thư viện DLL.<br /> Mẫu hàm xử lý sự kiện hook:<br /> LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam );<br /> <br /> Các sự kiện và ý nghĩa tham số:<br /> - Sự kiện Mouse<br /> <br /> <br /> <br /> + nCode : cho biết sự kiện chuột, HC_ACTION nếu người dùng tác động,<br /> HC_NOREMOVE nếu thông điệp được gửi bởi hàm PeekMessage.<br /> + wParam : giá trị thông điệp chuột<br /> + lParam : trỏ tới cấu trúc MOUSEHOOKSTRUCT gồm { POINT, HWND,... }<br /> <br /> - Sự kiện Keyboard<br /> + nCode : cho biết sự kiện bàn phím, HC_ACTION nếu người dùng tác động,<br /> HC_NOREMOVE nếu thông điệp được gửi bởi hàm PeekMessage.<br /> + wParam : mã phím ảo của phím được gõ, VK_...<br /> + lParam : một số thông tin liên đến phím gõ.<br /> <br /> <br /> Hàm trả về giá trị 1 nếu muốn khóa sự kiện, ngược lại hãy gọi và trả về giá trị hàm<br /> CallNextHookEx( HHOOK, nCode, wParam, lParam);<br /> 5<br /> <br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2