Jak wymusić skalowanie w wysokiej rozdzielczości?

27

Jak zmusić aplikację do skalowania w wysokiej rozdzielczości?

  • Udawaj, że istnieje aplikacja, której twórcy zamanifestowali ją jako świadomą wysokiej rozdzielczości, kiedy tak naprawdę nie jest. Jak wymusić skalowanie dpi?

  • Udawaj, że istnieje aplikacja, w której Microsoft zastosował HighDpiAwarepodkładkę kompatybilności, gdy aplikacja tak naprawdę nie jest. Jak wymusić skalowanie dpi?

Jak zmusić system Windows do zastosowania skalowania dpi w aplikacji?


Edycja: Co to jest skalowanie w wysokiej rozdzielczości?

Nie wszyscy użytkownicy korzystają z systemu Windows o rozdzielczości 96dpi. Nie każdy przycisk powinien mieć 75 x 23 pikseli, nie każdy pasek narzędzi ma 25 pikseli wysokości i nie każdy glif widoku drzewa ma wymiary 16 x 16 pikseli. Jeśli użytkownik wybrał inne ustawienie dpi dla systemu Windows, musisz odpowiednio skalować wszystko.

Problem polega na tym, że prawie żaden programista nie wykonuje swojej pracy, ładnie obsługując ustawienia wysokiej rozdzielczości. W najlepszym razie wszystko pozostanie „tego samego rozmiaru”, co oznacza, że ​​każdy wygląda na malutki . W najgorszym przypadku formularze są niepoprawnie rozmieszczone, z obciętym tekstem i niewidocznymi kontrolkami.

Począwszy od systemu Windows Vista i wykorzystując moc kompozycji pulpitu, Microsoft zrezygnował z pracy programistów, a teraz okłamuje aplikację. Informują aplikacje, że użytkownik działa w rozdzielczości 96dpi. Następnie system Windows używa karty graficznej i kompozycji pulpitu do skalowania formularzy.

Pro: zawartość formularza będzie przyjemnie czytelna.
Con: wszystko będzie nieco rozmyte.

Ta funkcja „skalowania w wysokiej rozdzielczości” działa tylko według uznania użytkownika i wymaga:

  • Windows Vista lub nowszy
  • Kompozycja pulpitu do włączenia
  • użytkownik wyłączy „Użyj skalowania stylu Windows XP”
  • użytkownik nie wyłącza skalowania aplikacji

Jako programista możesz zrezygnować ze skalowania w wysokiej rozdzielczości; jeśli dołożyłeś starań, aby poprawnie napisać aplikację i wiesz, że odpowiednio poradzisz sobie z wysoką rozdzielczością. Użytkownik rezygnuje z tego skalowania, dodając wpis manifestu do pliku wykonywalnego, deklarując, że jest „ świadomy wysokiej rozdzielczości ”.

Pytanie, w jaki sposób dostosować aplikację do preferencji użytkownika (w tym czcionki, rozmiaru czcionki i ustawienia dpi), jest pytaniem stack overflow. Podobnie jak składnia wpisu manifestu deklarującego „ świadomość wysokiej rozdzielczości ”.

To pytanie, dotyczące superużytkownika , brzmi: jak zignorować programistę, który poszedł naprzód i dodał wpis manifestu w wysokiej rozdzielczości, kiedy w rzeczywistości aplikacja nie jest świadoma w wysokiej rozdzielczości. Kazali Windowsowi wyłączyć skalowanie, ale tak naprawdę nie przetestowali aplikacji. Istnieje oprogramowanie z wpisem manifestu „rozpoznawanie wysokiej rozdzielczości”, a teraz aplikacja nie nadaje się do użytku pod „dużymi czcionkami” (np. 120dpi).

Ian Boyd
źródło
Też mnie to interesuje. Mamy krytyczną aplikację, która nie obsługuje rozdzielczości dpi i została pierwotnie zaprojektowana na ekran 800 x 600. System Windows nie skaluje go domyślnie i nie ma znaczenia, czy używamy XP, Visty, czy 7. Ponieważ nasi pracownicy spędzają większość czasu w tej aplikacji 800x600, nalegają na używanie 20-calowych monitorów LCD w rozdzielczości 800x600! To ogromne marnotrawstwo, a samozadowolony brak pikseli przeszkadza, gdy trzeba użyć MS Office, IE8 itp.
Miles Erickson
1
Dopiero w systemie Windows Vista Microsoft zaczął wykorzystywać kompozycję pulpitu (co niektórzy błędnie nazywają Aero ), aby używać karty graficznej do skalowania aplikacji, które nie zrezygnowały ze skalowania. W XP nie było skalowania i nie chcesz skalowania w Vista 7. Chcesz, aby twoja aplikacja była poprawnie napisana. Podejdź do maszyny programisty i zmień rozdzielczość z powrotem na 1050 i ustaw rozdzielczość na 168. W trybie tard wszystko będzie tak samo ogromne powiększone, z wyjątkiem tego, że aplikacja nie będzie działać poprawnie. Powiedz im, że nie dostają jedzenia ani wody, dopóki się nie naprawi.
Ian Boyd
Nie zawsze mamy dostęp do programistów, którzy tworzą aplikacje, z których korzystamy. Gdybyśmy tylko zrobili ...
Cylindryczny
Formy = kształty?
jiggunjer

Odpowiedzi:

5

Hmm Moją sugestią byłoby edytowanie manifestu i usunięcie niepoprawnej deklaracji. I nie zapomnij o tym zaradzić deweloperowi, jak możesz!

Edycja: Zauważ, że powinno być możliwe po prostu umieszczenie manifestu obok pliku wykonywalnego, np. Dla foo.exe, aby umieścić manifest foo.exe.manifest. Zobacz artykuł MSDN (zajrzyj do sekcji o nazwie „Składnia nazwy pliku”).

SamB
źródło
zakładam, że to jedyna droga. Wadą: unieważnia podpis cyfrowy aplikacji.
Ian Boyd,
@Ian: wygląda na to, że nie musisz umieszczać manifestu w zasobie.
SamB
3
Kiedyś .manifestplik miał pierwszeństwo przed manifestem w pliku wykonywalnym. Obecnie każdy manifest wbudowany w plik wykonywalny przesłania dowolny .manifestplik zewnętrzny . nie pamiętam, który dodatek Service Pack XP to zmienił - myślę, że to był SP2.
Ian Boyd,
8

Właśnie wypuściłem bibliotekę DLL, która przechwytuje i przekierowuje połączenia do SetProcessDPIAware. W przypadku aplikacji, które wyłączają skalowanie DPI za pomocą kodu, jest to szybka i łatwa poprawka (w porównaniu z łataniem binarnym).

DPIMangler: post na blogu , kod źródłowy .

Jerzy
źródło
6

Nadal możesz edytować manifest, wystarczy go edytować w samym pliku .EXE. Poszukaj edytora zasobów z obsługą manifestów. Przykładem podstawowej obsługi jest XN Resource Editor.) Po prostu znajdź i usuń wiersz, który wspomina HIGHDPIAWARE i zapisz plik wykonywalny.

Pamiętaj jednak o zrobieniu kopii pliku wykonywalnego przed jego edycją!

trlkly
źródło
„Wadą: unieważnia podpis cyfrowy aplikacji”.
Ian Boyd,
0

Zastanawiam się, czy ResizeEnable jest tym, czego szukasz?

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

James T.
źródło
Nie, rozmiar okien można już zmienić. Problem polega na tym, że kompozytor tworzy okno do wyświetlenia. W tej chwili nie robi nic specjalnego, ponieważ aplikacja powiedziała, że ​​nie musi być skalowana. Ale w rzeczywistości okno nie muszą być skalowane.
Ian Boyd