- 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
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…