捕获全局鼠标滚动,并将自定义鼠标滚动事件发送到应用

阿尔伯特

基本上,一开始,我想重现的功能WizMouseKatMouse一个相关的超级用户问题在这里

为此,我需要哪些Windows API?

另外,作为第二步,我想到了实现MacOSX滚动加速和精确像素滚动的功能。(基本上,您始终会逐像素滚动,但是当快速移动滚轮时,它会以线性方式(例如二次方)加速到滚轮速度。这样一来,您可以越来越快地滚动到较长的页面,同时您可以滚动的越来越少。)

有没有一种方法只能将某个元素滚动一个像素?(我可以自己实现所有剩余的逻辑。)

这个问题用C ++和Winapi标记,但是如果使用某些其他Windows-API和其他语言比较容易,则我也愿意这样做。

cf与莫妮卡站在一起

GetCursorPos将让您获取鼠标指针的坐标。之后,WindowFromPoint让您找出此时的窗口。显然,弄清楚哪个窗口在给定的位置上很复杂,因此您需要对不同的...FromPoint...API进行一些试验(从“ Old New Thing”博客文章看,WindowFromPoint应该可以很好地满足您的目的)。

要捕获鼠标的滚动消息,您需要使用SetWindowsHookExWH_MOUSE_LL这将向您发送所有鼠标消息。确保呼叫CallNextHookExWM_MOUSEWHEEL以外的任何消息WM_HMOUSEWHEEL您不想吃掉所有消息!不过,您确实要吃饭WM_MOUSEWHEELWM_HMOUSEWHEEL活动,因为您是将它们手动发送到备用窗口。

我对下一部分不太确定。我认为您希望WM_MOUSEWHEEL直接传递到光标下方的窗口,但需要确保您的钩子不会吃掉它。(完成此操作的最佳方法可能是使挂钩过程确定WM_MOUSEWHEEL消息是否已经传递到光标下方的窗口,如果没有,则仅对其进行处理/处理。)您还可以利用消息的wParam设置您滚动的速度。我不相信您将能够逐像素滚动,但是您可以WHEEL_DELTA * 1最初使用最小滚动距离(),并随着滚动速度的加快而放大倍数。冲洗并重复WM_HMOUSEWHEEL

您需要非常小心的一件事是超时。从关于WH_MOUSE_LL挂钩的文档中

挂钩过程处理消息的时间应少于以下注册表项的LowLevelHooksTimeout值中指定的数据条目的时间:HKEY_CURRENT_USER \ Control Panel \ Desktop

该值以毫秒为单位。如果挂钩过程超时,系统会将消息传递到下一个挂钩。但是,在Windows 7和更高版本上,该钩子会被静默删除而不被调用。应用程序无法知道挂钩是否已删除。

常见问题解答X键鼠标控制,一个应用程序,有类似的功能,以你在找什么,说(重点煤矿):

在Windows 7上使用XMBC时,看似随机会停止响应鼠标单击。严格来讲,这不是XMBC中的错误,而是Windows行为的改变。Windows 7引入了系统挂钩超时(XMBC用于监视鼠标的方法)的概念。如果CPU忙(例如,播放高清电影),则在此超时发生之前,可能未及时(通过Windows)调度XMBC来响应该挂接。发生这种情况时,挂钩将被删除,而不会发出通知(感谢Microsoft!),XMBC似乎已停止工作。重新启动它或在设置屏幕中按“应用”可修复问题,直到再次发生。

唯一的解决方案是增加LowLevelHookTimeout值(目前在注册表中)。

您的软件很有可能会遇到相同的问题。您需要确保自己记录下来和/或自己调整注册表项以提供更高的超时值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义事件发送到 Google Analytics 并捕获该数据的正确方法是什么?

来自分类Dev

如何将自定义事件发送到PyQt中的事件循环

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

如何将自定义数据发送到JQuery click事件?

来自分类Dev

如何将自定义数据发送到JQuery click事件?

来自分类Dev

将自定义数据发送到Prometheus

来自分类Dev

将自定义指标发送到谷歌分析

来自分类Dev

php将自定义值发送到Paypal Express结帐,然后再次捕获该值

来自分类Dev

如何将自定义错误报告从应用程序发送到曲棍球

来自分类Dev

如何将自定义消息从C ++ MFC发送到WPF C#应用程序?

来自分类Dev

Windows:将“鼠标/键盘”事件发送到后台窗口?

来自分类Dev

我可以将自定义对象发送到Android Wear吗?

来自分类Dev

如何将自定义EventHandler发送到此类?

来自分类Dev

如何将自定义字段发送到快速簿?

来自分类Dev

React-如何将自定义函数从子组件发送到父组件

来自分类Dev

如何将自定义数据发送到将来的构建器?

来自分类Dev

通过SignalR将自定义类发送到Blazor WebAssembly

来自分类Dev

如何将自定义EventHandler发送到此类?

来自分类Dev

如何将自定义字段发送到快速簿?

来自分类Dev

使用Axis 2将自定义标头发送到SOAP Web服务

来自分类Dev

将自定义字段值发送到电子邮件

来自分类Dev

如何将自定义 HTTP 标头发送到端点?

来自分类Dev

您可以将自定义路径发送到云路径吗?

来自分类Dev

将自定义对象发送到自定义布局渲染器NLog ASP.NET Core

来自分类Dev

JavaScript鼠标滚轮事件滚动

来自分类Dev

自定义滚动条,可在单击鼠标时启用/禁用

来自分类Dev

将自定义对象从android应用程序(客户端)发送到计算机(服务器)

来自分类Dev

将自定义numba njit函数应用于熊猫滚动对象

Related 相关文章

  1. 1

    将自定义事件发送到 Google Analytics 并捕获该数据的正确方法是什么?

  2. 2

    如何将自定义事件发送到PyQt中的事件循环

  3. 3

    Django管理命令并将自定义参数发送到post_save信号

  4. 4

    Django管理命令并将自定义参数发送到post_save信号

  5. 5

    如何将自定义数据发送到JQuery click事件?

  6. 6

    如何将自定义数据发送到JQuery click事件?

  7. 7

    将自定义数据发送到Prometheus

  8. 8

    将自定义指标发送到谷歌分析

  9. 9

    php将自定义值发送到Paypal Express结帐,然后再次捕获该值

  10. 10

    如何将自定义错误报告从应用程序发送到曲棍球

  11. 11

    如何将自定义消息从C ++ MFC发送到WPF C#应用程序?

  12. 12

    Windows:将“鼠标/键盘”事件发送到后台窗口?

  13. 13

    我可以将自定义对象发送到Android Wear吗?

  14. 14

    如何将自定义EventHandler发送到此类?

  15. 15

    如何将自定义字段发送到快速簿?

  16. 16

    React-如何将自定义函数从子组件发送到父组件

  17. 17

    如何将自定义数据发送到将来的构建器?

  18. 18

    通过SignalR将自定义类发送到Blazor WebAssembly

  19. 19

    如何将自定义EventHandler发送到此类?

  20. 20

    如何将自定义字段发送到快速簿?

  21. 21

    使用Axis 2将自定义标头发送到SOAP Web服务

  22. 22

    将自定义字段值发送到电子邮件

  23. 23

    如何将自定义 HTTP 标头发送到端点?

  24. 24

    您可以将自定义路径发送到云路径吗?

  25. 25

    将自定义对象发送到自定义布局渲染器NLog ASP.NET Core

  26. 26

    JavaScript鼠标滚轮事件滚动

  27. 27

    自定义滚动条,可在单击鼠标时启用/禁用

  28. 28

    将自定义对象从android应用程序(客户端)发送到计算机(服务器)

  29. 29

    将自定义numba njit函数应用于熊猫滚动对象

热门标签

归档