b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

SetWindowsHook与MFC中的消息定义必须完样的DLL部分代码

电脑杂谈  发布时间:2021-05-24 21:02:36  来源:网络整理

参考博客

一、 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

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

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