当读取事件WM_INPUT
中的鼠标位置并且鼠标光标被隐藏时,当通过远程桌面使用应用程序时SetCursorPos
似乎不起作用。
当应用程序未通过远程桌面使用时,相同的确切代码可以正常工作。 即我可以在所有方向上无限移动鼠标,因为在本地访问应用程序时SetCursorPos
正确地将鼠标光标移动到屏幕中心。
从远程桌面访问时,是否是SetCursorPos
的限制(可能与安全相关)?还是有解决方法?或者也许是因为鼠标位置值是绝对的(MOUSE_MOVE_ABSOLUTE
位设置)?
我从WM_INPUT
读取的所有值都不会受到影响我在SetCursorPos
中设置的任何值。
任何帮助表示赞赏,谢谢!
此行为似乎与 RDP 或 VM 环境中 SetCursorPos (和鼠标事件) 的处理有关 https://communities.vmware.com/thread/189519
这是一个非常古老的线程,但在当前世界的情况下,它可能会有所帮助。
要解决 RDP 和鼠标问题,您需要打开Local Group Policy Editor
并转到: Local Computer Policy > Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Remote Session Environment
.
在Remote Session Environment
中,您需要将Use WDDM graphic display driver for Remote Desktop Connections
设置为 disable
.
可能Windows 10 Pro
是必需的,但我无法检查。您需要在要连接到的计算机(主机)中进行此更改。建议重新启动 Windows。
如果鼠标被隐藏,SetCursorPos 接口将变为无效。可以使用透明鼠标样式代替隐藏鼠标的操作,SetCursorPos 将生效。在 RDP 中,如果连续调用 SetCursorPos (x, y),并且 x、y 位置没有更改,则 RDP 将被缓存,并且不会被设置。因此,摇晃设置鼠标位置可以解决这个问题,例如静态int delta=0;整数 x = 500;int y = 500;而(1) { delta++;SetCursorPos(x+delta, y+delta);if(delta>= 1 ) delta = -1;}