Поскольку протокол удаленного рабочего стола версии 8.1 по умолчанию Подключение к удаленному рабочему столу Windows по умолчанию может применять текущий масштаб системы к удаленному компьютеру, например, если вы работаете с 2-кратным масштабом, вы увидите рабочий стол удаленного компьютера с таким же масштабом (если версия компонента RDP сервера составляет не менее 8.1).
Проблема в том, что масштаб применяется только тогда, когда вы подключаетесь в полноэкранном режиме, или если размер удаленного рабочего стола точно соответствует размеру локального рабочего стола. В других случаях масштаб удаленного рабочего стола не синхронизируется с локальным масштабом.
Кажется, что проверка компонентов в размере удаленного рабочего стола равна размеру локального рабочего стола, а затем и только тогда автоматически применяет масштабирование.
Я использую компонент MS RDP COM для поддержки соединений RDP в моем приложении. Интерфейс IMsRdpClient9 имеет метод UpdateSessionDisplaySettings который может изменить разрешение и масштаб удаленного рабочего стола во время сеанса работы. Если я использую его сразу после подключения или входа в систему (например, для события onConnected или onLoginComplete), тогда возвращаемое значение hresult равно E_UNEXPECTED, но если я подожду две секунды, я могу успешно вызвать UpdateSessionDisplaySettings. Мне не нравится этот подход, потому что пользователь может видеть удаленный рабочий стол без масштаба, затем он мигает, а затем применяется новый масштаб.
Я хочу, чтобы локальный масштаб применялся автоматически (если поддерживается сервером) к сеансу удаленного рабочего стола в каждом случае: не только в полноэкранном режиме, но и с выбранным пользователем разрешением. И я знаю, что это можно сделать, потому что команда приложения RoyalTS как-то решила эту проблему.
Может быть, кто-то сталкивался с этой проблемой раньше? Может быть, я могу врать как-то компоненту о размере локального рабочего стола? У меня нет идей здесь. Любая помощь приветствуется.
Решение не в методе UpdateSessionDisplaySettings. Это в интерфейсе IMsRdpExtendedSettings. Вам необходимо установить свойства перед подключением:
this.SetExtendedProperty («DesktopScaleFactor», this.GetDesktopScaleFactor ());
this.SetExtendedProperty («DeviceScaleFactor», this.GetDeviceScaleFactor ());
Вы можете получить подробности здесь:
Хитрость в том, чтобы использовать AdvancedSettings.SmartSizing
имущество.
Эта опция масштабирует экран сразу после того, как соединение установлено.
И, как я знаю старое приложение RoyalTS, когда мы изменили размер локального окна, оно отключается и снова подключается к удаленному рабочему столу, чтобы масштабировать экран.