221上位机VC MFC利用键盘钩子实现系统键盘输入监控与显示
221上位机VC MFC利用键盘钩子实现系统键盘输入监控与显示 功能展示 钩子是微软操作系统中消息处理机制的一个重要组成部分,我们编写的程序 可以利用钩子机制监视系统的消息传递,在这些消息达到目标窗口之前处理它们,钩子的类型有很多,不同类型钩子可以处理不同各类的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,我们当前例程实现全部键盘消息的截获与处理,并将截获的消息显示出来;效果如图 要点提示 我们可以通过调用函数SetWindowsHookEx()让系统有消息触发时都调用我们指定的回调函数,在此函数体内我们就可进一步处理如键盘,鼠标等相关消息;HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\钩子类型 __in HOOKPROC lpfn, \\回调函数地址 __in HINSTANCE hMod, \\实例句柄 __in DWORD dwThreadId); \\线程ID 函数返回的HHOOK类型变量,我们得在程序退出进调用函数UnhookWindowsHookEx()进行释放 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1用于显示截获的键盘消息;添加函数SetEditText()用于在编辑框中显示键盘消息 - void CGkbc8Dlg::SetEditText(CString sText)
- {
- CEdit*pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
- pEdit->HideCaret();
- CString sData;
- pEdit->GetWindowText(sData);
- if(sText=="VK_RETURN")
- {
- sData+="\r\n";
- }
- else
- {
- sData+=" ";
- sData+=sText;
- }
- pEdit->SetWindowText(sData);//设置编辑框文本
- }
复制代码3.在主对话框源文件顶部添加回调函数 CGkbc8Dlg *g_pWnd ; HHOOK g_hHook; LRESULT CALLBACK KeyHook(int nCode,WPARAM wParam,LPARAMlParam)用于处理具体的消息信息;函数体内容过多,可打开例程源码观看; 4.在对话框初始化函数OnInitDialog()中初始化 - //start Low Level Keyboard hook
- g_hHook=SetWindowsHookEx(WH_KEYBOARD_LL,KeyHook,GetModuleHandle(NULL),0);
- if(!g_hHook)
- ::MessageBox(m_hWnd,TEXT("SetWindowsHookEx KeyHook failed"),NULL,MB_OK);
- g_pWnd = this;
- g_hHook = NULL;
复制代码
5.在对话框退出函数OnDestroy()卸载钩子UnhookWindowsHookEx(g_hHook); 要注意的是在STDAFX.h头文件中得添加代码#define _WIN32_WINNT 0x0500 //必须在此添加这一句,以使钩子相关函数能够编译通过 我们来演示下功能实现的整个过程
|