1. Trang chủ
  2. » Giáo án - Bài giảng

Chương 10 Lập trình HOOK

6 584 5
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập Trình Hook
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài Giảng
Thành phố Hồ Chí Minh
Định dạng
Số trang 6
Dung lượng 75,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ỗ

Trang 1

Chương 10

Lập trình

HOOK

Trang 2

10.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

Hàm_2

Hàm_3

Hàm_n

Sự kiện Mouse

Ứng dụng App1

Ứng dụng App2

Ứng dụng App3 Hook chain

Trang 3

10.1 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.

Trang 4

10.2 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

 Minh họa như sau:

Thư viện DLL

Hàm xử lý

sự kiện hook

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ý Nạp thư viện DLL

vào chương trình

Trang 5

10.3 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 hook:

LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam );

 Các sự kiện và ý nghĩa tham số:

- Sự kiện Mouse

+ nCode : cho biết sự kiện chuột, HC_ACTION nếu người dùng tác động,

HC_NOREMOVE nếu thông điệp được gửi bở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 sự kiện bàn phím, HC_ACTION nếu người dùng tác động,

HC_NOREMOVE nếu thông điệp được gửi bởi hàm PeekMessage

+ wParam : mã phím ảo của phím được gõ, VK_

+ lParam : một số thông tin liên đến phím gõ.

 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

CallNextHookEx( HHOOK, nCode, wParam, lParam);

Trang 6

10.4 Đăng ký hook

Bước 1: Nạp thư viện DLL có chứa hàm xử lý sự kiện hook vào chương trình: HMODULE LoadLibrary( “tên_thư_viện” );

Bước 2: Xác định địa chỉ hàm xử lý sự 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 sự kiện cần đăng ký WH_MOUSE, WH_KEYBOARD,

+ hàm : là địa chỉ hàm cần đăng ký, đã được xác định ở bước 2,

+ thư viện : số hiệu môđun của 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ý, 0 là luồng hiện thời

Lệnh trên trả về giá trị đăng ký thành công, phải lưu lại giá trị này để hủy bỏ đăng ký

Bước 4: Nếu muốn hủy bỏ đăng ký chúng ta sử dụng lệnh sau:

BOOL UnhookWindowsHookEx( HHOOK );

 typedef kiểu_hàm (CALLBACK * kiểu_con_trỏ) ( các kiểu tham số );

Ngày đăng: 13/05/2014, 11:40

TỪ KHÓA LIÊN QUAN

w