MFC 键盘鼠标钩子

程序主界面:
在这里插入图片描述
功能一: 输入a显示b
使用方法,使用之前点击安装钩子,这样输入a就变成b了,还原点击卸载钩子

钩子函数必须为全局函数或者静态函数

在这里插入图片描述

//改变字符钩子
HHOOK getmgshook;

//鼠标钩子
HHOOK mousehook;;

//键盘钩子
HHOOK keyhook;
安装钩子
SetWindowsHookEx()
卸载钩子
UnhookWindowsHookEx()
返回消息
CallNextHookEx
//接受安装钩子的返回值
HHOOK getmgshook;

//回调函数
LRESULT CALLBACK GetMsgProc(int code,WPARAM wparam,	LPARAM lparam)
{
	//消息
	MSG * msg = (MSG *)lparam;

	//如果是键盘的按下和抬起 就执行下面的操作
	if(msg->message == WM_KEYDOWN || msg->message == WM_KEYUP)
	{
		//41 42 均为键盘扫描码
		if(msg->wParam == 0X41)
		{
			msg->wParam = 0X42;
		}
	}

	return CallNextHookEx(getmgshook,code,wparam,lparam);
}

安装钩子 代码

void CdemoDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//安装钩子 
	//参数一 钩子的类型 WH_GETMESSAGE  用于监视键盘和鼠标的输入
	//参数二 回调函数
	//参数三 NULL
	//参数四 线程id
	getmgshook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,NULL,GetCurrentThreadId());


}

卸载钩子代码

void CdemoDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码

	//卸载钩子
	UnhookWindowsHookEx(getmgshook);
}

功能二: 鼠标钩子 用法和上面类似

在这里插入图片描述

LRESULT CALLBACK mouseproc(int code,WPARAM wparam, LPARAM lparam)
{
	return 1;
}
void CdemoDlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码

	mousehook = SetWindowsHookEx(WH_MOUSE,mouseproc,NULL,GetCurrentThreadId());

	SetDlgItemText(IDC_s2,TEXT("已安装"));
}




void CdemoDlg::OnBnClickedButton5()
{
	// TODO: 在此添加控件通知处理程序代码

	UnhookWindowsHookEx(mousehook);

	SetDlgItemText(IDC_s2,TEXT("已卸载"));
}

写完之后鼠标会无效

功能三:键盘钩子 使键盘空格失效

在这里插入图片描述

LRESULT CALLBACK keyproc(int code, WPARAM wparam, LPARAM lparam)
{
	if(wparam == VK_SPACE)
	{
		return 1;
	}
	else
	{
		CallNextHookEx(keyhook,code,wparam,lparam);
	}
	
}
void CdemoDlg::OnBnClickedButton7()
{
	// TODO: 在此添加控件通知处理程序代码
	keyhook = SetWindowsHookEx(WH_KEYBOARD ,keyproc,NULL,GetCurrentThreadId());

	SetDlgItemText(IDC_s3,TEXT("已安装"));
}


void CdemoDlg::OnBnClickedButton8()
{
	// TODO: 在此添加控件通知处理程序代码

	UnhookWindowsHookEx(keyhook);

	SetDlgItemText(IDC_s3,TEXT("已卸载"));
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值