引用百度百科对钩子的解释:钩子是Windows消息处理机制的平台。应用程序可以在其上设置子例程以监视指定窗口的某些消息,并且监视的窗口可以由该进程创建。消息到达时,将在目标窗口处理功能之前对其进行处理。挂钩机制允许应用程序拦截和处理窗口消息或特定事件。
这里我们使用SetWindowsHookEx函数,原型如下
HHOOK WINAPI SetWindowsHookEx(
__ int int idHook,\\ hook类型
__在HOOKPROC lpfn中,\\回调函数地址

__在HINSTANCE hMod中,\\实例句柄
__ in DWORD dwThreadId); \\线程ID
还使用了GetCurrentThreadId()函数,
功能描述:
获取当前线程的唯一线程标识符。返回值是Long,当前线程标识符。
接下来,我们将实现基于MFC的鼠标挂钩。创建一个名为MouseHook的基于对话框的新MFC项目
根据对话框选择选项,然后单击“完成”。

然后将自动生成一个对话框,我们不在乎,请打开文件MouseHookDlg.cpp
在BOOL CMouseHookDlg :: OnInitDialog()函数之前添加
返回回调MouseProc(int nCode,WPARAM wParam,LPARAM lParam)//定义鼠标挂钩过程

{
返回1; //返回非零值,表示该鼠标消息是由挂钩进程处理的,并且该消息不会传递给操作系统
}
如图所示

接下来,在BOOL CMouseHookDlg :: OnInitDialog()函数之后,返回TRUE; //除非将焦点设置为控件,否则在返回TRUE之前添加以下代码
SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId()); //创建钩子程序
如图所示
好的,我们运行了该程序,未发现对任何鼠标单击的响应。因为我们的鼠标消息首先传递给挂钩函数MouseProc。该挂钩函数将返回1,而不对鼠标消息进行任何处理。但是,操作系统看到挂钩函数返回的非零值,并认为挂钩函数已经处理了鼠标消息,因此不再处理鼠标消息。因此,单击鼠标没有反应,我们可以按键盘的Enter键退出程序。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-341957-1.html
台湾如果敢宣布独立