从MSDN中可以看到,有两种类型的鼠标钩,一种是WH_MOUSE,另一种是WH_MOUSE_LL,
关于它们之间的区别,百度给了它一点:
1. WH_MOUSE仅可以监视挂钩所在模块的鼠标事件。
2. WH_MOUSE_LL可以拦截整个系统所有模块的鼠标事件。
--------------------------------------------------- -------------------------------------------------- ------------------------------------
我在这里测试了WH_MOUSE_LL。毕竟,它更强大。文章结尾给出了VS2008源代码和最终产品下载地址。
//效果截图如下:


--------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -
安装鼠标钩子和卸载钩子相对简单。我不会在这里详细介绍。这里最主要的是如何使dll和主程序正常工作。
通信毕竟,我们的鼠标钩存在于dll文件中,并且在dll文件中也实现了鼠标事件的捕获。我们如何整合
我们如何将捕获的鼠标消息告知主程序?也就是说,如何在对话框中显示捕获的鼠标消息?
--------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -
在这里,我们通过发送消息使dll与主程序进行通信。也就是说,在捕获鼠标消息后,我们会将其发送到
主程序,在收到消息后,主程序将其显示在程序界面上。为了向主程序发送消息,请在主程序中调用安装程序
在鼠标挂钩的功能中,我们通过参数将主窗口的句柄传递给dll,以便我们可以向主程序发送消息。
让我们谈谈实施步骤。
--------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----
一、让我们先谈谈dll程序
1.在dll程序中自定义消息,如下所示:
#define WM_MYMSG WM_USER + 305 //自定义消息,用于与主程序进行通信
2.在钩子安装功能中,保存主程序的窗口句柄,代码如下:
BOOL WINAPI StartHookMouse(HWND hWnd)
{
g_hWnd=hWnd;
hhkMouse=::SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,g_hInstDll,0);
if (hhkMouse==NULL)
{
return FALSE;
}
else
{
return TRUE;
}
}3.在鼠标钩子响应功能中,我们将捕获的消息发送到主程序,代码如下:

//低级鼠标钩子过程
LRESULT CALLBACK LowLevelMouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
//有鼠标消息时,将其发给主程序
if (g_hWnd!=NULL&&nCode==HC_ACTION)
{
::SendMessage(g_hWnd,WM_MYMSG,wParam,lParam);
}
return CallNextHookEx(hhkMouse,nCode,wParam,lParam);
}--------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------
以上是dll程序的主要部分。接下来,在主程序中,我们在dll中调用钩子安装函数,并将窗口句柄传递给
在dll中,是时候在dll中处理我们的自定义消息了。主要步骤如下:
1.安装鼠标钩时,它将其窗口句柄传递给dll,主要代码为:
StartHook(this-> m_hWnd);
2.在主程序的头文件中,我们还需要自定义一条消息,并且该消息必须定义为与dll中定义的消息相同,否则它将
无法从dll接收消息。
#define WM_MYMSG WM_USER + 305 //自定义消息,用于处理dll发送的消息,该消息的定义应与dll中定义的消息完全相同
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-377803-1.html
然后一半利息移民养家