如何使用 c++ mfc 在屏幕上获取鼠标事件
How to get mouse events on screen with c++ mfc
everyone. 现在,我正在使用 c++ mfc 开发桌面窗口应用程序。 我想在桌面背景上获取鼠标移动和向下事件。 为什么我想要这些,这个应用程序需要所有窗口移动和调整大小事件,以及鼠标位置。 经过这么多的谷歌搜索,我不会搜索正确的解决方案。 有人建议全局鼠标钩子很有帮助,但我真的不知道如何使用它。 你对此有何看法? 请帮助我找到正确的解决方案。
此致敬意 隼
您正在寻找 Windows 低级全局输入挂钩 APISetWindowsHookEx
您可以在此处找到更多信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85(.aspx
具体来说,您希望使用"低级"鼠标钩子,如下所示:
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0);
您需要根据此链接将其与 Windows 消息队列一起使用:
为什么 SetWindowsHookEx 必须与 Windows 消息队列一起使用
低级钩子、WH_KEYBOARD_LL和WH_MOUSE_LL与所有其他钩子不同。它们不需要将 DLL 注入到目标进程中。相反,Windows 会在您自己的进程中直接调用您的挂钩回调。要实现这一点,需要一个消息循环。Windows没有其他机制可以在主线程上进行回调,回调只能在您调用Get/PeekMessage((以便Windows受控时发生。
像WH_KEYBOARD这样的全局钩子是非常不同的。它需要一个 DLL,回调发生在处理键盘消息的进程中。你需要某种进程间通信来让你自己的程序意识到这一点。命名管道是通常的选择。否则当然需要这个注入的进程泵送一个消息循环。否则它不会收到键盘消息。
偏爱低级钩子,它们更容易上手。但是要抽水,否则它不起作用。并且要注意超时,如果您的响应速度不够,那么Windows将在不通知的情况下杀死您的钩子。
- Qt-如何在Qt3DWindow上获取鼠标事件
- SFML 鼠标获取位置无法正常工作
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- 获取窗口中的鼠标位置
- 鼠标输入和键输入有什么区别(在前台获取窗口)
- 如何在Mac OSX上的窗口客户端内获取真实的鼠标位置?
- 如何获取鼠标的位置
- 获取有关 X11 中离鼠标光标最近的显示器的信息
- 如何在Qwidget上获取当前的鼠标光标位置
- 当用户按 Ctrl 并单击时获取鼠标坐标
- OpenGl获取鼠标位置
- QML:如何在不实际移动任何可见组件的情况下,在鼠标Aeria顶部获取鼠标移动的方向
- 获取鼠标坐标Qt OpenGL
- 在窗口循环中,在窗口控件上获取鼠标移动比子类化更容易
- Qt:从Qsplitter获取鼠标移动事件
- c++ SDL2无延迟获取鼠标坐标
- 获取鼠标位置坐标
- 获取鼠标滚轮移动数据
- 用指针和引用混淆自己,c++(从WinAPI获取鼠标坐标)
- 获取鼠标在窗口中的相对位置(x11)