Как заставить масштабирование с высоким разрешением?

27

Как заставить приложение масштабироваться с высоким разрешением?

  • Притворись, что есть приложение, разработчики которого проявили его как осведомленный с высоким разрешением, когда это действительно не так. Как я могу заставить dpi-масштабирование?

  • Притворись, что есть заявление, что Microsoft применила « HighDpiAware» прокладку совместимости, когда приложения на самом деле нет. Как я могу заставить dpi-масштабирование?

Как заставить Windows применять dpi-масштабирование к приложению?


Изменить: Что такое масштабирование с высоким разрешением?

Не все пользователи используют Windows со скоростью 96 точек на дюйм. Предполагается, что не каждая кнопка имеет размер 75x23 пикселя, не каждая панель инструментов имеет высоту 25 пикселей, и не каждый глиф в виде дерева имеет размер 16x16. Если пользователь выбрал другую настройку dpi для Windows, вам нужно все масштабировать соответствующим образом.

Проблема в том, что почти никто из разработчиков не справляется со своей задачей, хорошо обрабатывая настройки с высоким разрешением. В лучшем случае все останется «одного размера», а это значит, что каждый кажется крошечным . В худшем случае формы отображаются неправильно, текст обрезается, а элементы управления не видны.

Начиная с Windows Vista и используя возможности Desktop Composition, Microsoft разочаровалась в том, что разработчики выполняют свою работу, а теперь лгут приложениям. Они сообщают приложениям, что пользователь работает с разрешением 96 точек на дюйм. Затем Windows использует видеокарту и Композицию рабочего стола для масштабирования форм.

Pro: содержание формы будет иметь хороший читаемый размер.
Против: все будет немного нечетко.

Эта функция масштабирования с высоким разрешением работает только по усмотрению пользователя и требует:

  • Windows Vista или новее
  • Композиция рабочего стола должна быть включена
  • пользователю отключить «Использовать масштабирование в стиле Windows XP»
  • пользователь не должен отключать масштабирование для вашего приложения

Как разработчик, вы можете отказаться от масштабирования с высоким разрешением; если вы приложили все усилия, чтобы написать свое приложение правильно, и вы знаете, что вы будете правильно работать с высоким разрешением. Вы отказываетесь от этого масштабирования, добавляя запись манифеста в свой исполняемый файл, заявляя, что вы « осведомлены о высоком разрешении ».

Вопрос о том, как заставить ваше приложение уважать предпочтения пользователя (включая шрифт, размер шрифта и настройку dpi), является вопросом для stack overflow. Как и синтаксис для записи манифеста, декларирующей ваше « осведомленность с высоким разрешением »

Этот вопрос для суперпользователя заключается в том, как игнорировать разработчика, который пошел дальше и добавил запись манифеста с высоким разрешением, когда на самом деле приложение не поддерживает высокое разрешение. Они сказали Windows отключить масштабирование, но на самом деле они не тестировали приложение. Существует программное обеспечение с записью манифеста с «высоким разрешением на дюйм», и теперь приложение не может использоваться под «большими шрифтами» (например, 120 точек на дюйм).

Ян Бойд
источник
Я тоже заинтересован в этом. У нас есть критически важное приложение, которое не поддерживает dpi и изначально было разработано для экрана 800x600. Windows не масштабирует его по умолчанию, и не имеет значения, используем ли мы XP, Vista или 7. Поскольку наши сотрудники проводят большую часть своего времени в этом приложении 800x600, они настаивают на использовании своих 20-дюймовых ЖК-мониторов. в разрешении 800x600! Это огромная трата, и навязанное им отсутствие пикселей мешает им, когда им нужно использовать MS Office, IE8 и т. д.
Майлз Эриксон,
1
Только в Windows Vista Microsoft начала использовать Desktop Composition (то, что некоторые ошибочно называют Aero ), чтобы использовать графическую карту для масштабирования приложений, которые специально не отказываются от масштабирования. В XP не было никакого масштабирования, и вы не хотите масштабировать в Vista 7. Вы хотите, чтобы ваше приложение было написано правильно. Подойдите к машине разработчика, измените их разрешение на 1050 и установите dpi на 168. Все будет таким же большим, увеличенным в режиме tard, за исключением того, что приложение не будет работать должным образом. Скажите им, что они не получают ни еды, ни воды, пока не починят.
Ян Бойд
У нас не всегда есть доступ к разработчикам, которые создают приложения, которые мы используем. Если только мы сделали ...
Цилиндрический
Формы = формы?
jiggunjer

Ответы:

5

Хм. Мое предложение будет изменить манифест и удалить неправильное объявление. И не забудьте сообщить об этом разработчику, как только сможете!

Изменить: Обратите внимание, что должна быть возможность просто поместить манифест рядом с исполняемым файлом, например, для foo.exe, вы бы поместили манифест в foo.exe.manifest. См. Статью MSDN ( см. Раздел «Синтаксис имени файла»).

Самба
источник
Я предполагаю, что это единственный путь. С другой стороны: это делает недействительной цифровую подпись приложения.
Ян Бойд
@Ian: похоже, вам не нужно помещать манифест в ресурс.
SamB
3
Раньше .manifestфайл имел приоритет над манифестом внутри исполняемого файла. Сегодня любой манифест, встроенный в исполняемый файл, переопределяет любой внешний .manifestфайл. я не помню, какой пакет обновления XP изменил его - я думаю, что это был SP2.
Ян Бойд
8

Я только что выпустил DLL, которая перехватывает и перенаправляет вызовы SetProcessDPIAware. Для тех приложений, которые отключают масштабирование DPI через код, это быстрое и простое исправление (по сравнению с бинарным исправлением).

DPIMangler: пост в блоге , исходный код .

Джордж
источник
6

Вы по-прежнему можете редактировать манифест, вам просто нужно отредактировать его в самом файле .EXE. Ищите редактор ресурсов, который имеет явную поддержку. Примером элементарной поддержки является редактор ресурсов XN.) Просто найдите и удалите строку, в которой упоминается HIGHDPIAWARE, и сохраните исполняемый файл.

Обязательно сделайте копию исполняемого файла, прежде чем редактировать его!

trlkly
источник
«С другой стороны: это делает недействительной цифровую подпись приложения».
Ян Бойд
0

Интересно, если вы ищете ResizeEnable?

http://www.digitallis.co.uk/pc/ResizeEnable/

Джеймс Т
источник
Нет, окна уже можно изменять. Проблема в том, когда композитор создает окно для отображения. Прямо сейчас это не делает ничего особенного, поскольку приложение заявило, что это не должно быть масштабировано. Но на самом деле окно действительно нужно масштабировать.
Ян Бойд