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).


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”).


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 .


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ą!


„Wadą: unieważnia podpis cyfrowy aplikacji”.
— Ian Boyd,

0

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.