Автоматически применять локальный масштаб для не полноэкранных подключений к рабочему столу (RDP версии 8.1 и выше)

Поскольку протокол удаленного рабочего стола версии 8.1 по умолчанию Подключение к удаленному рабочему столу Windows по умолчанию может применять текущий масштаб системы к удаленному компьютеру, например, если вы работаете с 2-кратным масштабом, вы увидите рабочий стол удаленного компьютера с таким же масштабом (если версия компонента RDP сервера составляет не менее 8.1).
Проблема в том, что масштаб применяется только тогда, когда вы подключаетесь в полноэкранном режиме, или если размер удаленного рабочего стола точно соответствует размеру локального рабочего стола. В других случаях масштаб удаленного рабочего стола не синхронизируется с локальным масштабом.

Кажется, что проверка компонентов в размере удаленного рабочего стола равна размеру локального рабочего стола, а затем и только тогда автоматически применяет масштабирование.

Я использую компонент MS RDP COM для поддержки соединений RDP в моем приложении. Интерфейс IMsRdpClient9 имеет метод UpdateSessionDisplaySettings который может изменить разрешение и масштаб удаленного рабочего стола во время сеанса работы. Если я использую его сразу после подключения или входа в систему (например, для события onConnected или onLoginComplete), тогда возвращаемое значение hresult равно E_UNEXPECTED, но если я подожду две секунды, я могу успешно вызвать UpdateSessionDisplaySettings. Мне не нравится этот подход, потому что пользователь может видеть удаленный рабочий стол без масштаба, затем он мигает, а затем применяется новый масштаб.

Я хочу, чтобы локальный масштаб применялся автоматически (если поддерживается сервером) к сеансу удаленного рабочего стола в каждом случае: не только в полноэкранном режиме, но и с выбранным пользователем разрешением. И я знаю, что это можно сделать, потому что команда приложения RoyalTS как-то решила эту проблему.

Может быть, кто-то сталкивался с этой проблемой раньше? Может быть, я могу врать как-то компоненту о размере локального рабочего стола? У меня нет идей здесь. Любая помощь приветствуется.

0

Решение

Решение не в методе 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

1

Другие решения

Хитрость в том, чтобы использовать AdvancedSettings.SmartSizing имущество.

Эта опция масштабирует экран сразу после того, как соединение установлено.

И, как я знаю старое приложение RoyalTS, когда мы изменили размер локального окна, оно отключается и снова подключается к удаленному рабочему столу, чтобы масштабировать экран.

0

По вопросам рекламы [email protected]