程序主界面:
功能一: 输入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("已卸载"));
}