简单的鼠标钩子的实现

电脑杂谈  发布时间:2020-12-21 00:03:51  来源:网络整理

引用百度百科对钩子的解释:钩子是Windows消息处理机制的平台。应用程序可以在其上设置子例程以监视指定窗口的某些消息,并且监视的窗口可以由该进程创建。消息到达时,将在目标窗口处理功能之前对其进行处理。挂钩机制允许应用程序拦截和处理窗口消息或特定事件。

这里我们使用SetWindowsHookEx函数,原型如下

HHOOK WINAPI SetWindowsHookEx(

__ int int idHook,\\ hook类型

__在HOOKPROC lpfn中,\\回调函数地址

c# 全局 鼠标钩子_鼠标钩子 c_c# 钩子获取鼠标左右键

__在HINSTANCE hMod中,\\实例句柄

__ in DWORD dwThreadId); \\线程ID

还使用了GetCurrentThreadId()函数,

功能描述:

获取当前线程的唯一线程标识符。返回值是Long,当前线程标识符。

接下来,我们将实现基于MFC的鼠标挂钩。创建一个名为MouseHook的基于对话框的新MFC项目

根据对话框选择选项,然后单击“完成”。

c# 全局 鼠标钩子_鼠标钩子 c_c# 钩子获取鼠标左右键

然后将自动生成一个对话框,我们不在乎,请打开文件MouseHookDlg.cpp

在BOOL CMouseHookDlg :: OnInitDialog()函数之前添加

返回回调MouseProc(int nCode,WPARAM wParam,LPARAM lParam)//定义鼠标挂钩过程

c# 全局 鼠标钩子_鼠标钩子 c_c# 钩子获取鼠标左右键

{

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

}

如图所示

c# 钩子获取鼠标左右键_c# 全局 鼠标钩子_鼠标钩子 c

接下来,在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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...