Як змусити масштабувати високий dpi?


27

Як я можу змусити програму масштабувати високу точку на дюйм?

  • Притворіться, що існує додаток, який розробники маніфестували його як відомий з високою точністю на дюйм, коли насправді це не так. Як я можу примусити масштабувати dpi?

  • Прикиньтеся, що існує програма, що Microsoft застосувала " HighDpiAware" суми сумісності, коли програма насправді не є. Як я можу примусити масштабувати dpi?

Як я можу змусити Windows застосувати dpi-масштабування до програми?


Редагувати: Що таке масштабування з високою точністю на дюйм?

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

Проблема полягає в тому, що майже жоден розробник не виконує свою роботу, вдало обробляючи налаштування високого формату dpi. У кращому випадку все залишиться «однакового розміру», це означає, що кожен здається маленьким крихітним . У гіршому випадку форми викладені неправильно, з вирізаним текстом, а елементи керування не видно.

Починаючи з Windows Vista і використовуючи потужність Desktop Composition, Microsoft відмовилася від розробників, які роблять свою роботу, і тепер лежать на застосуванні. Вони повідомляють додаткам, що користувач працює на 96dpi. Потім Windows використовує відеокарту та Desktop Composition для масштабування форм.

Про: вміст форми матиме приємний для читання розмір.
Кон: все буде трохи нечітко.

Ця функція "масштабування з високою точністю на дюйм" працює лише на розсуд користувача та вимагає:

  • Windows Vista або новішої версії
  • Композицію робочого столу потрібно включити
  • користувач вимкне "Використовувати масштабування стилю Windows XP"
  • користувач не відключає масштабування для вашої програми

Як розробник, ви можете відмовитися від масштабування з високою точністю на дюйм; якщо ви доклали зусиль, щоб правильно написати свою заявку, і знаєте, що ви будете правильно працювати з високою точністю на дюйм. Ви відмовитесь від цього масштабування, додавши у свій виконуваний файл маніфест, декларуючи, що ви " обізнані з високою точністю на дюйм ".

Тема, як зробити так, щоб ваша програма поважала переваги користувача (включаючи обличчя шрифту, розмір шрифту та налаштування dpi), є питанням stack overflow. Як і синтаксис для маніфестного запису, що декларує вашу " обізнаність з високою точністю на дюйм ".

Це питання для суперкористувача полягає в тому, як ігнорувати розробника, який продовжував додавати маніфест із високою точкою на дюйм, якщо програма насправді не обізнана з високою точністю на дюйм. Вони сказали Windows відключити масштабування, але вони насправді не перевіряли програму. Існує програмне забезпечення з маніфестним записом "з високою точністю до dpi", і тепер програма непридатна для використання в "великих шрифтах" (наприклад, 120dpi).


Мене це також цікавить. У нас є критично важливий додаток, який не знає 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: схоже, вам не потрібно ставити маніфест у ресурс.
СамБ

3
Раніше .manifestфайл мав перевагу над маніфестом всередині виконуваного файлу. Сьогодні будь-який маніфест, вбудований у виконуваний файл, переосмислює будь-який зовнішній .manifestфайл. я не пам'ятаю, який пакет оновлень XP змінив його - я думаю, це був SP2.
Ян Бойд

8

Щойно я випустив DLL, який підключає і перенаправляє дзвінки до SetProcessDPIAware. Для тих програм, які відключають масштабування DPI за допомогою коду, це швидке та просте виправлення (порівняно з бінарним виправленням).

DPIMangler: публікація в блозі , вихідний код .


6

Ви все ще можете редагувати маніфест, вам доведеться просто відредагувати його у самому файлі .EXE. Шукайте редактор ресурсів, який має явну підтримку. Приклад з рудиментарною підтримкою - редактор ресурсів XN.) Просто знайдіть і видаліть рядок, що згадує HIGHDPIAWARE, і збережіть виконуваний файл.

Не забудьте зробити копію виконуваного файлу, перш ніж редагувати його!


"З іншого боку: це приводить до недійсності цифрового підпису пристрою."
Ян Бойд

0

Цікаво, чи шукає ResizeEnable?

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


Ні, на вікна вже можна змінити розмір. Проблема полягає в тому, коли композитор складає вікно для відображення. Наразі це не робить нічого особливого, оскільки додаток сказав, що його не потрібно масштабувати. Але насправді вікно дійсно потрібно масштабувати.
Ян Бойд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.