参考博客
一、 SetWindowsHookEx
HHOOK WINAPI SetWindowsHookEx(
__ int int idHook,\\ hook类型
__在HOOKPROC lpfn中,\\回调函数地址
__在HINSTANCE hMod中,\\实例句柄
__ in DWORD dwThreadId); \\线程ID
此处使用的钩子类型idHook是WH_MOUSE_LL。
使用SetWindowsHook拦截鼠标事件时,如果使用WH_MOUSE参数,则只能监视挂钩所在模块的鼠标事件。
如果需要拦截整个系统的鼠标事件,请使用WH_MOUSE_LL参数。

二、自定义消息交流
此处与参考相同,将其编写为MFC DLL并使用导出功能。
通过发送消息SendMessage,让dll与主程序通信(SendMessage同步),
此处应注意,自定义消息的方法用于通信。就像IPC中的自定义消息一样,.dll和MFC中的消息定义必须完全相同:
1 //自定义消息,用于处理dll发来的消息 2 //该消息的定义和dll中定义的消息必须一样 3 #define WM_MOUSEMESSAGE WM_USER + 100
部分DLL代码:
.dll
1 // 安装低级鼠标子函数,截获系统所有的鼠标消息 2 BOOL WINAPI StartHookMouse(HWND hwnd) 3 { 4 //这里自身的窗口句柄传过来 5 6 __hWnd = hwnd; 7 8 9 10 11 /* 12 在使用SetWindowsHook截获鼠标事件时,如果使用WH_MOUSE参数,则只能监控钩子所在模块的鼠标事件。 13 如需要截获整个系统的鼠标事件,那么使用WH_MOUSE_LL参数。 14 15 */ 16 __hhkMouse = SetWindowsHookEx( 17 WH_MOUSE_LL, 18 LowLevelMouseProc, 19 __hInstance, 20 0 21 ); 22 23 if (NULL == __hhkMouse) 24 { 25 return FALSE; 26 } 27 else 28 { 29 return TRUE; 30 } 31 32 }
1 // 定义低级鼠标子函数 2 LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) 3 { 4 // 有鼠标消息时,将其发给主程序 5 6 if (__hWnd != NULL && nCode == HC_ACTION)//HC_ACTION 有鼠标信息 7 { 8 //通知MFC 9 ::SendMessage(__hWnd, WM_MOUSEMESSAGE, wParam, lParam); 10 } 11 12 return CallNextHookEx(__hhkMouse, nCode, wParam, lParam); 13 14 }
然后,在主程序收到消息后,它将显示在程序界面上。
在这里,为了向主程序发送消息,当主程序调用安装鼠标钩子的函数时,我们需要通过参数将主窗口的句柄传递给dll,以便我们可以将消息发送到主程序。
三、共享代码段,由所有线程共享
不幸的是,如果一个程序运行两个实例,则这两个程序的代码将不会共享,因为该程序代码在运行程序时已加载到内存中,并且在启动第二个程序时无法使用系统再次。判断不会判断该程序是否仍是原始程序(如果该程序已更新或更改),因此该程序代码仍将重新加载到内存的另一个区域中。
代码共享应该在链接库中,尤其是在动态链接库中。由于该库是设计为动态链接的,因此程序在运行后可以确定代码所在的内存地址,这也使多个程序可以调用同一段代码。
1 // 共享代码段,所有线程共享 2 #pragma data_seg("SHARED") 3 static HHOOK __hhkMouse = NULL; // 鼠标钩子句柄 4 static HINSTANCE __hInstance = NULL; // 本DLL的实例句柄 5 static HWND __hWnd = NULL; // 调用DLL的主窗口句柄 6 #pragma data_seg() 7 #pragma comment(linker,"/section:SHARED,rws")
四、卸载钩子
//卸载低级鼠标钩
无效的WINAPI StopHookMouse()
{
如果(__hhkMouse!= NULL)

{
:: UnhookWindowsHookEx(__ hhkMouse);
}
}
/ *************************************** /
五、 MFC中的自定义消息
首先,它必须与dll中的消息完全相同,并定义一条自定义消息,该消息必须完全相同
(您可以在此处参考博客)
然后为自定义消息写三个句子:
1.消息映射
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-377834-1.html
小米移动电源我都买了三个了
烊烊
这事要是天天见早倒闭了