自动将本地比例应用于非全屏桌面连接(RDP 8.1 版及更高版本)

Auto apply local scale to non-fullscreen desktop connections (RDP version 8.1 and higher)

自远程桌面协议版本 8.1 默认 Windows' 远程桌面连接可以将当前系统规模应用于远程计算机,例如如果您使用 2 倍比例,您将看到应用相同比例的远程计算机桌面(如果服务器的 RDP 组件版本至少为 8.1)。 问题是只有当您以全屏模式连接或远程桌面大小选项与本地桌面大小完全匹配时才会应用比例。在其他情况下,远程桌面比例与本地比例不同步。

似乎远程桌面大小中的组件检查等于本地桌面大小,然后才自动应用缩放。

我在我的应用程序中使用 MS RDP COM 组件来支持 RDP 连接。 IMsRdpClient9 接口有方法 UpdateSessionDisplaySettings 可以在工作会话期间更改远程桌面分辨率和比例。如果我在连接或登录后立即使用它(例如 onConnected 或 onLoginComplete 事件),那么 return hresult 是 E_UNEXPECTED,但如果我等待两秒钟,那么我可以成功调用 UpdateSessionDisplaySettings。我不喜欢这种方法,因为用户可以看到没有缩放的远程桌面,然后它闪烁,然后应用新的缩放。

我希望在所有情况下(如果服务器支持)自动将本地比例应用于远程桌面会话:不仅是全屏,而且还有用户选择的分辨率。而且我知道这是可以做到的,因为 RoyalTS 应用程序团队以某种方式解决了这个问题。

也许有人 运行 以前遇到过这个问题?也许我可以以某种方式向有关本地桌面大小的组件撒谎?我在这里没有想法。感谢您的帮助。

技巧就是使用 AdvancedSettings.SmartSizing 属性.

此选项会在连接完成后缩放屏幕。

据我所知,当我们调整本地 window 大小时,旧的 RoyalTS 应用程序会断开连接并重新连接到远程桌面以重新缩放屏幕。

解决方法不在UpdateSessionDisplaySettings方法中。它位于 IMsRdpExtendedSettings 界面中。您需要在连接前设置属性:

this.SetExtendedProperty("DesktopScaleFactor", this.GetDesktopScaleFactor()); this.SetExtendedProperty("DeviceScaleFactor", this.GetDeviceScaleFactor());

您可以在此处获取详细信息:

https://blog.devolutions.net/2016/08/smart-resizing-and-high-dpi-issues-in-remote-desktop-manager.html