GetCursorPos
将让您获取鼠标指针的坐标。之后,WindowFromPoint
让您找出此时的窗口。显然,弄清楚哪个窗口在给定的位置上很复杂,因此您需要对不同的...FromPoint...
API进行一些试验(从“ Old New Thing”博客文章看,WindowFromPoint
应该可以很好地满足您的目的)。
要捕获鼠标的滚动消息,您需要使用SetWindowsHookEx
与WH_MOUSE_LL
。这将向您发送所有鼠标消息。确保呼叫CallNextHookEx
除WM_MOUSEWHEEL
或以外的任何消息WM_HMOUSEWHEEL
。您不想吃掉所有消息!不过,您确实要吃饭WM_MOUSEWHEEL
和WM_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] 删除。
我来说两句