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

标签 c++ windows winapi remote-desktop mstsc

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

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

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

我希望在任何情况下(如果服务器支持)自动将本地比例应用于远程桌面 session :不仅在全屏模式下,而且在用户选择的分辨率下。而且我知道这是可以做到的,因为 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

关于c++ - 自动将本地比例应用于非全屏桌面连接(RDP 8.1 版及更高版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496466/

相关文章:

c++ - 比较 C 中 char[] 的相等性

c++ - 如何在不修改类声明的情况下在创建后正确填充对象?

c++ - 标准目录中的包含文件可以默默地替换现有的宏吗?

c - 我的 strchr() 比原来的 Visual Studio 2015 慢

c++ - 在哪里编码 Win32 菜单

c - WinApi,按钮不显示

c++ - pthread_mutex_lock/unlock 的性能

c# - Windows 上的 OpenVPN --auth-user-pass FILE 选项

java - windows相当于linux的/dev/video0是什么?

C++ 简单键盘记录器