Программно переопределить осведомленность о высоком DPI
В обновлении для Windows 10 Creator есть новая опция для конечного пользователя. Конечный пользователь может изменить свойства EXE-файла на вкладке совместимости на "Переопределить поведение масштабирования с высоким разрешением" и установить для него значение "Система (расширенное)". Я протестировал его, и он хорошо работает для некоторых классических приложений Win32.
Я хочу сделать это с помощью кода через вызов API или через манифест. Там нет информации об этом. Это возможно? Из полученного мной комментария я хочу пояснить, что это НОВАЯ ФУНКЦИЯ ОБНОВЛЕНИЯ СОЗДАТЕЛЕЙ, и я особенно хочу узнать, как установить выбор "СИСТЕМА (УЛУЧШЕНО)" для функции переопределения через манифест или код.
3 ответа
Я нашел ответ в другом SO сообщении: улучшенное масштабирование системы DPI с VS2017
Правильный ключ - исследовать новый манифест масштабирования GDI, который значительно улучшен в Обновлении Создателя. Это используется в настройках системы (расширенной).
Ни один из ответов или комментариев не подошел близко. Они продолжали ссылаться на старые статьи. Более того, кто-то поставил вопрос отрицательно:(Печально.
DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED теперь является действительным DPI_AWARENESS_CONTEXT в последних заголовках Windows 10 SDK (17134 на момент написания статьи) в windef.h:
определить DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5)
Поэтому вы должны вызывать IsValidDpiAwarenessContext и SetProcessDpiAwarenessContext, чтобы воспользоваться GDI Scaling во время выполнения, если вы хотите избежать необходимости делать это в манифесте.
Это подтверждает, что gdiScaling является взаимоисключающим от Per monitor V2.
Подробности описаны в этом блоге:
<dpiAware>True/PM</dpiAware>
<dpiAwareness>PerMonitorV2, PerMonitor</dpiAwareness>
Для получения более подробной информации о различных проблемах с манифестами см. Manifest Madness