Як змусити масштабувати високий 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.