Chuyển message cho thủ tục Hook kế tiếp  Hủy bỏ cài đặt Hook

Một phần của tài liệu Bài giảng lập trình C trên Windows - các khái niệm cơ bản (Trang 171)

- MM_HIMETRIC qui định đơn vị đo

Chuyển message cho thủ tục Hook kế tiếp  Hủy bỏ cài đặt Hook

 Hủy bỏ cài đặt Hook

Minh họa cách lập trình Hook - Các hàm thao tác với Hook

 SetWindowsHookEx

 CallNextHookEx

Spring 2004

C4W - Hook - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17

Minh họa cách lập trình Hook - Cài đặt thủ tục Hook

 Một ứng dụng cần phải thực hiện việc Cài đặt thủ tục Hook khi muốn giám sát message

 Hàm SetWindowsHookExsẽ cài đặt thủ tục Hook vào

điểm bắt đầu của chuỗi Hook

HHOOK SetWindowsHookEx(

int hookMsg, HOOKPROC hookProc,

HINSTANCE hIns, DWORD threadId);

ƒ hookMsg: loại Hook

ƒ hookProc: con trỏđến thủ tục Hook. Trường hợp Global Hook, thủ tục Hook phải lưu trong DLL; với Thread Hook, thủ tục Hook có thể chứa trong chính thread tương ứng

ƒ hIns: handle của module chứa thủ tục Hook

ƒ threadId: ID của thread. Nếu là 0, Hook sẽ là Global

Minh họa cách lập trình Hook - Cài đặt thủ tục Hook…(tt)

Ví dụ 1: cài đặt Keyboard Hook toàn cục (load-time)

SetWindowsHookEx(WH_KEYBOARD,

(HOOKPROC)fnKeyboardProc, hInstDLL, 0);

Ví dụ 2: cài đặt Keyboard Hook toàn cục (run-time)

HOOKPROC fnKeyboardProc; static HINSTANCE hInstDLL; static HHOOK hHook;

hInstDLL = LoadLibrary((LPCTSTR) “myKBDLL.dll"); fnKeyboardProc = (HOOKPROC)GetProcAddress(hInstDLL,

“KeyboardProc"); hHook = SetWindowsHookEx(WH_KEYBOARD,

fnKeyboardProc, hInstDLL, 0);

Ví dụ 3: cài đặt Keyboard Hook cục bộ

Spring 2004

C4W - Hook - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19

Minh họa cách lập trình Hook - Ví dụ thủ tục Hook

Ví dụ 4: Thủ tục hook cho Keyboard (adsbygoogle = window.adsbygoogle || []).push({});

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)

{

if (nCode >= 0 && nCode == HC_ACTION) { pMsg = (MSG *)lParam; if (pMsg->message == WM_KEYDOWN) { char s[] = {LOBYTE(wParam),’\0’}; MessageBox(NULL, s, “Hook”, 0); } }

return CallNextHookEx(hHook, nCode, wParam, lParam); }

Lập trình Hook - Chuyển message cho thủ tục Hook kế tiếp

 Sau khi thực hiện xong, thủ tục Hook sẽ gọi hàm

CallNextHookEx để chuyển message đến thủ

tục Hook kế tiếp trong chuỗi Hook

LRESULT CallNextHookEx( HHOOK hHook, int code,

WPARAM wParam, LPARAM lParam);

ƒ hHook: handle của Hook (hiện hành) nhận về từ hàm

SetWindowsHookEx

ƒ code, wParam, lParam: các giá trị của thủ tục Hook hiện tại truyền cho thủ tục Hook kế tiếp trong chuỗi Hook

Spring 2004

C4W - Hook - Nguyen Tri Tuan - DH.KHTN Tp.HCM 21

Lập trình Hook - Chuyển message cho thủ tục Hook kế tiếp…

Một phần của tài liệu Bài giảng lập trình C trên Windows - các khái niệm cơ bản (Trang 171)