工控编程吧
标题:
221上位机VC MFC利用键盘钩子实现系统键盘输入监控与显示
[打印本页]
作者:
qq263946146
时间:
2016-2-28 12:31
标题:
221上位机VC MFC利用键盘钩子实现系统键盘输入监控与显示
(, 下载次数: 2)
上传
点击文件名下载附件
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 //必须在此添加这一句,以使钩子相关函数能够编译通过
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/a2b27ac954a6e00c0036e3b90d377660/0/0/w_19rszratml.swf-albumId=5382536209-tvId=5382536209-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 1)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4