MFC 键盘鼠标钩子

MFC 键盘鼠标钩子程序主界面:功能一:输入a显示b使用方法,使用之前点击安装钩子,这样输入a就变成b了,还原点击卸载钩子钩子函数必须为全局函数或者静态函数安装钩子SetWindowsHookEx()卸载钩子UnhookWindowsHookEx()返回消息CallNextHookEx//接受安装钩子的返回值HHOOKgetmgshook;//回调函数LRESULTCALLBACKGetMsgProc(intcode,WPARAMwparam, LPARAMlparam){

程序主界面:
在这里插入图片描述
功能一: 输入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("已卸载"));
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35264.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注