Программно переопределить осведомленность о высоком 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

Другие вопросы по тегам