安装鼠标钩子
用到的函数有:
SetWindowsHookExA() //设置钩子
GetModuleHandle() //获取模块句柄
UnhookWindowsHookEx() //关闭钩子
SetDlgItemText() //设置控件文本
用到的结构体有:
KBDLLHOOKSTRUCT
步骤一:在XXXXXDlg.cpp顶端定义
#define WH_KEYBOARD_LL 13
typedef struct tagKBDLLHOOKSTRUCT {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
DWORD dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
HHOOK 键盘;
HWND hwnd;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//这些就是HOOK代码
LRESULT lResult = CallNextHookEx(键盘, nCode, wParam, lParam);
//PMSG pmsg = (PMSG)lParam;
//这时候pmsg->message就是消息了
CString I;
I.Format(_T("键盘状态:%d"),wParam);
SetDlgItemText(hwnd,IDC_EDIT3,I);
KBDLLHOOKSTRUCT* 指针=(KBDLLHOOKSTRUCT*)lParam;
I.Format(_T("键代码:%d"),指针->vkCode);
SetDlgItemText(hwnd,IDC_EDIT4,I);
return FALSE;
}
步骤二:代码写:
hwnd=m_hWnd;
//键盘事件的响应步骤是:
//键盘驱动->系统键盘消息处理->当前进程消息处理->当前窗口消息处理
//WH_KEYBOARD_LL插在系统键盘消息处理前
//而WH_KEYBOARD则插在当前进程消息处理前.
//因此如果你WH_KEYBOARD hook正确而WH_KEYBOARD_LL hook得不到想要得结果,那么唯一可能就是你把一些不该过滤的键盘消息给过滤掉了。
键盘 = SetWindowsHookExA(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),NULL);
步骤三:在类视图XXXXXXDlg->消息->WM_DESTROY写:
UnhookWindowsHookEx(键盘);