SetCursorPos 无法在远程桌面上运行(从WM_INPUT事件读取)



当读取事件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;}

最新更新