Nie mogę zmienić trybu Hi-DPI w Eksploratorze: kompletny przewodnik

  • Eksplorator nie wyświetla karty Zgodność; korzysta z ustawień globalnych i nadpisów aplikacji innych firm.
  • Per‑monitor v2 zapobiega skalowaniu mapy bitowej i wymaga odpowiedzi na WM_DPICHANGED
  • Eksplorator procesów, manifesty i interfejsy API dla DPI są kluczowe dla audytu i korygowania
  • Direct2D, DIP i zaktualizowane klatki poprawiają ostrość w środowiskach 4K i mieszanych

Jak zmienić tryb Hi-DPI w Eksploratorze

Jeśli masz problemy z rozmazanymi oknami, malutkimi menu na monitorach 4K lub Eksploratorem, który nie pozwala Ci korzystać z trybu skalowania, oto przewodnik, którego potrzebujesz. Zebraliśmy w jednym miejscu, jak i dlaczego Tryb Hi-DPI W systemie Windows masz realne możliwości wyboru jako użytkownik i co muszą wdrożyć programiści, aby interfejsy wyglądały ostro na każdym ekranie.

Krajobraz miesza coraz gęstsze ekrany z aplikacjami, które powstały, gdy standardem było 96 DPI. Gdy aplikacja nie dostosowuje się do zwiększonej gęstości, Windows powiększa ją jak zdjęcie, co powoduje typowy efekt rozmyciaSystem Windows 11 zawiera nawet funkcję automatycznej Super Resolution, która poprawia ostrość, ale kluczowa jest świadomość DPI każdej aplikacji i prawidłowe ustawienia systemu, zwłaszcza jeśli łączysz monitory o różnej skali lub korzystasz z klientów zdalnych.

Co to jest Hi-DPI i dlaczego niektóre okna wyglądają źle?

Gęstość nowoczesnych paneli gwałtownie wzrosła: od klasycznych 96 DPI do wartości bliskich lub większych niż 300. Gdy aplikacja nie jest świadoma DPI, system kończy skalowanie według mapy bitowej, a to pogarsza jakość tekstu i ikon. Przy współczynnikach skalowania 125%, 150% lub wyższych różnica między aplikacją responsywną a taką, która nie jest responsywna, jest ogromna.

W terminologii Microsoft aplikacja może być nieświadoma, świadoma systemu lub świadoma monitora. Każdy tryb definiuje, czy system Windows skaluje aplikację automatycznie, czy też musi przerysuj swój interfejs użytkownika do nowej skali. Im wyższy poziom świadomości, tym wyraźniejszy będzie efekt, gdy przesuniesz okno między monitorami o różnych skalach.

Eksplorator plików: Dlaczego brakuje karty Zgodność

Jak naprawić czarny ekran podczas zmiany rozdzielczości w systemie Windows
Podobne artykuł:
Czarny ekran po zmianie rozdzielczości w systemie Windows: przyczyny i rozwiązania

Wielu użytkowników stwierdza, że ​​w pliku C:\Windows\explorer.exe nie ma karty Zgodność; nie jest to błąd, po prostu Eksplorator otrzymuje specjalne leczenie systemoweDlatego nie zobaczysz tam typowego panelu „Zastąp zachowanie skalowania przy wysokiej rozdzielczości DPI”. Jeśli widzisz rozmazane obrazy w Eksploratorze lub Panelu sterowania, przyczyną jest zazwyczaj globalne skalowanie systemu zastosowane do części, które nie są w pełni dostosowane.

Chociaż nie można zmienić zgodności w pliku explorer.exe, systemy Windows 10 i 11 oferują obejścia: opcję „Pozwól systemowi Windows spróbować naprawić aplikacje, aby nie były rozmyte” oraz pomijanie skalowania poszczególnych aplikacji ze skrótów lub plików wykonywalnych innych firm. Te funkcje mogą poprawić ogólne działanie; dodatkowe kroki można znaleźć w sekcji Rozwiązanie problemu rozmazanego ekranu w systemie Windows 10Funkcje te mogą poprawić ogólne zachowanie i w przypadku większości programów będziesz mógł je zastosować anulowanie skalowania z ich nieruchomości.

Tryby rozpoznawania DPI w systemie Windows

Dowiedz się, jak zmienić tryb Hi-DPI w Eksploratorze

Zrozumienie trybów DPI to podstawa diagnozy Dlaczego coś wygląda ostro na jednym ekranie, a rozmazane na innym? Poniżej znajduje się ogólna mapa pokazująca, jak każdy z nich zachowuje się w różnych skalach i na różnych monitorach o różnych rozdzielczościach DPI.

sposób z Jak postrzega PPP Zachowanie podczas zmiany DPI
Nieprzytomny N / D Zawsze 96 PPP Skalowanie mapy bitowej (zamazany)
System Aware Windows Vista Pojedynczy DPI: ten na ekranie głównym po zalogowaniu Ostry tylko przy tej wartości DPI; jeśli zmienisz monitor lub skalę, system powiększ mapę bitową
Na monitor (v1) Windows 8.1 DPI monitora, na którym znajduje się okno Okno najwyższego poziomu odbiera WM_DPICHANGED; nie ma automatycznego skalowania interfejsu użytkownika
Na monitor v2 Okna 10 1703 DPI aktywnego monitora na okno Poziomy najwyższego i niższego szczebla otrzymują powiadomienia; system Windows skaluje obszary niebędące obszarami klienckimi, dialogi i tematy z comctl32 V6

W przypadku monitora w wersji 2 aplikacja nigdy nie jest skalowana przez system; musi zmień rozmiar i przerysuj jego zawartość po błędzie WM_DPICHANGED. W zamian system dostosowuje obszar nieklienta (tytuł, obramowanie i paski) i automatycznie skaluje okna dialogowe utworzone za pomocą funkcji CreateDialog i wspólnych kontrolek za pomocą motywów.

Opcje systemu Windows umożliwiające redukcję rozmycia

Jeśli nie jesteś programistą ani nie szukasz szybkich skrótów, system Windows 10/11 zawiera poprawki, które mogą mieć znaczenie. Opcja „Pozwól systemowi Windows spróbować naprawić aplikacje, aby nie były rozmyte” wymusza poprawki poprzez zmianę skali problematycznych aplikacji po wykryciu zmian na ekranie, pomagając uniknąć niewyraźne interfejsy podczas przenoszenia okna pomiędzy monitorami.

Dodatkowo możesz otworzyć właściwości skrótu lub pliku .exe, przejść do sekcji Zgodność i włączyć opcję „Zastąp skalowanie przy wysokiej rozdzielczości DPI”, wybierając opcję „Aplikacja”. Ta opcja sprawia, że ​​system nie skaluje okna za Ciebie i pozwala programowi reagować na zmianę rozdzielczości DPI. W aplikacjach, które już dobrze spełniają swoje zadanie, ostrość znacznie się poprawia. radykalny. W explorer.exe, jak już wspomnieliśmy, ta zakładka nie jest dostępna.

Konkretne wskazówki dotyczące monitorów ultraszerokich i klientów zdalnych

Jeśli używasz monitorów ultraszerokich, takich jak 2560x1080, czasami warto ręcznie zmieniać rozdzielczość i skalowanie, aż znajdziesz zrównoważoną kombinację. W wielu przypadkach ustawienie spójnej skali systemu i unikanie rozdzielczości innych niż Hi-DPI generowanych przez panel redukuje małe menu i eliminuje artefakty skalowania, a jeśli pracujesz z ekranami pomocniczymi, naucz się skonfiguruj tablet jako drugi ekranW systemie macOS dostępne są prawdziwe tryby HiDPI, które można włączyć, aby uzyskać ostrość w średniej skali.

W scenariuszach pulpitu zdalnego i usługach, takich jak WorkSpaces, różnice w DPI między klientem a hostem są powszechne. Upewnij się, że sesja zdalna poprawnie negocjuje skalowanie lub inicjuje połączenie z parametrami odzwierciedlającymi rzeczywistą wartość DPI. Jeśli Twoja aplikacja działa w trybie Per‑Monitor v2, będzie lepiej reagować na te zmiany; w przeciwnym razie często będziesz widzieć… powiększone okna z mapą bitową.

Zaktualizuj aplikację komputerową, aby zapewnić dobrą skalowalność

Absolutnym minimum jest oznaczenie procesu jako v2 na monitor za pomocą manifestu lub API i przeniesienie logiki układu z inicjalizacji, aby została ponownie wykonana po zmianie DPI. Koniec z buforowaniem rozmiarów czcionek, marginesów i metryk na zawsze; musisz… przeliczyć za każdym razem, gdy zostanie odebrany komunikat WM_DPICHANGED.

Wiele historycznych interfejsów API Win32 nie ma kontekstu DPI i zwraca wartości względne w stosunku do DPI systemu. Zastąp klasyczne wywołania ich nowoczesnymi wersjami: użyj PobierzMetrykiSystemoweDpi Zamiast GetSystemMetrics stosuje EnableNonClientDpiScaling podczas WM_NCCREATE, aby system skalował ramkę, i wykorzystuje GetDpiForWindow do obliczania współrzędnych i rozmiarów na podstawie rzeczywistej rozdzielczości DPI okna.

Rozpoznawanie DPI wątków: tryb mieszany

W przypadku dużych projektów lub projektów z interfejsami użytkownika innych firm migrację można przeprowadzać etapami. Ustaw kontekst świadomości wątku Dpi Przypisujesz świadomość DPI oknom tworzonym, gdy kontekst jest aktywny, więc aktualizujesz okno główne do poziomu monitora, a pozostałe okna najwyższego poziomu pozostawiasz w starym trybie. To przydatny sposób, aby skupić się najpierw na najbardziej widocznej części, bez konieczności zmiany wszystkiego naraz.

Oczywiście, mieszanie trybów wiąże się ze ścisłymi zasadami: drzewo okien nie może mieszać różnych trybów nadrzędnych i podrzędnych. Jeśli złamiesz tę zasadę, system Windows może wymusić zresetuj tryb DPI z procesu lub zwracają błędy, takie jak ERROR_INVALID_STATE, podczas zmiany nadrzędności za pomocą SetParent. W procesach międzyprocesowych wymuszone resety mogą również wystąpić podczas tworzenia lub zmiany nadrzędności HWND z niekompatybilnymi kontekstami.

Niezbędne testy wykrywające błędy skalowania

Uwzględnij w swoim planie przenoszenie okien między monitorami o różnych skalach, uruchamianie aplikacji na każdym ekranie, zmianę skali w locie oraz, po zmianie głównego monitora, wylogowanie się i ponowne zalogowanie. W ten sposób okna będą się pojawiać. Wyszukiwania DPI, zapisane rozmiary przy błędnych założeniach i problemy ze zmianą położenia okien.

Typowe błędy: ignorowanie sugerowanego prostokąta w zdarzeniu WM_DPICHANGED (uniemożliwia to pozycjonowanie kursora i może powodować łańcuchowanie zdarzeń DPI), pobieranie metryk z wątku z niewłaściwym kontekstem DPI oraz używanie interfejsów API bez kontekstu DPI do ładowania zasobów. Na przykład w przypadku ikon należy zastąpić LoadIcon przez Załaduj obraz z odpowiednim rozmiarem dla każdego DPI.

Koordynacja wirtualizacji i kontekstu DPI

Gdy proces lub wątek działa nieświadomie lub z uwzględnieniem systemu, system Windows może wirtualizować wartości zależne od DPI, aby symulować 96 DPI. Utrudnia to diagnozę, ponieważ rozmiary ekranu, pozycje lub metryki będą „dopasowane” do kontekstu. Zawsze sprawdzaj, czy aktywny wątek znajduje się w… Kontekst DPI że należy odczekać przed wykonaniem zapytania lub utworzeniem okien i przywrócić poprzedni kontekst po użyciu SetThreadDpiAwarenessContext, aby uniknąć rozprzestrzeniania się błędów.

Należy założyć, że wiele starszych interfejsów API nie przekazuje HWND ani DPI w swoim podpisie. Dlatego kluczowe jest przejście na nowsze warianty lub ręczna kompensacja: funkcje GetSystemMetricsForDpi, EnableNonClientDpiScaling, GetDpiForWindow i podobne stanowią podstawę zapobiegania skalowaniu interfejsu użytkownika. bitmap i można je wyraźnie narysować w dowolnej skali.

Zgodność według frameworków i technologii

Od wersji Windows 10 1703 obsługa frameworka uległa poprawie, ale nie jest jednolita. Platforma UWP skaluje się automatycznie do każdego ekranu, podczas gdy w Win32 zadanie to spoczywa na deweloperze. Ulepszono Windows Forms i WPF, a comctl32 v6 skaluje zasoby tematyczne, okna dialogowe i powiadamia wszystkie elementy HWND o zmianach DPI; GDI i GDI+ nie oferują natywnego wsparcia, a MFC opiera się na kod aplikacji.

Struktura lub technologia Poziom wsparcia SO Kto się wspina
UWP Completo 1607 +
Win32 + comctl32 V6 PMv2: Powiadom wszystkie HWND, eskalowane dialogi i tematy 1703 + Aplikacja i system niekliencki
Formularze Windows Ograniczone skalowanie monitora 1703 +
WPF Natywne w aplikacjach WPF; hosting mieszany wymaga dostosowań 1607 +
GDI / GDI+ Brak N / D Aplikacja
MFC Brak N / D Aplikacja

Direct2D i piksele niezależne od urządzenia

Direct2D znacznie ułatwia życie w Hi-DPI: wyraża współrzędne w pikselach niezależnych od urządzenia (DIP), pozwala na tworzenie map bitowych z własnym DPI, respektuje systemowe DPI, jeśli manifest deklaruje obsługę, i używa przestrzeni współrzędnych zmiennoprzecinkowy Skalowalny do dowolnego DPI. Strumień jest zaprojektowany tak, aby skalować się od 96 do bardzo wysokich wartości bez utraty jakości.

W systemie Windows 8 i nowszych Direct2D dostosowuje progi wygładzania tekstu przy wysokiej rozdzielczości DPI, co przyspiesza renderowanie. W razie potrzeby można przełączyć tryb jednostki na piksele za pomocą ID2D1DeviceContext::SetUnitMode i nadal korzystać z tych optymalizacji. Jeden DIP odpowiada jednemu fizycznemu pikselowi przy 96 DPI; przy 192 DPI każdy DIP zajmowałby dwa piksele. Ta abstrakcja eliminuje sztywne założenia w układzie i sprawia, że ​​skala interfejsu użytkownika jest bardziej przewidywalna.

Szybka diagnoza dzięki Process Explorerowi

Aby zrozumieć, jak skaluje się konkretna aplikacja, Process Explorer (Sysinternals) umożliwia dodanie kolumny „Świadomość DPI”. Zobaczysz stany takie jak „Nieznany” (system zawsze skaluj), System-Aware (wyraźny tylko przy początkowym DPI) lub Per-Monitor. To sprawdzenie pomaga zdecydować, czy potrzebny jest manifest, nadpisanie skalowania, czy refaktoryzacja dystrybucji.

Studium praktyczne: SSMS na monitorach 4K

SQL Server Management Studio zostało ulepszone na przestrzeni lat, ale przez długi czas jego obsługa Hi-DPI była ograniczona. Istnieją dwa przydatne sposoby: użycie zewnętrznego manifestu i zastosowanie nadpisania skalowania z poziomu Compatibility. Oba mogą przynieść znaczne korzyści. ostrość bez czekania na zmiany w samej aplikacji.

Manifest zewnętrzny: Utwórz klucz rejestru HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide z wartością DWORD PreferExternalManifest równą 1. Następnie zapisz plik ssms.exe.manifest w formacie UTF‑8, który deklaruje rozpoznawanie DPI obok pliku ssms.exe. Po ponownym uruchomieniu ikony i tekst będą wyglądać znacznie czyściej w rozdzielczości UHD 3840×2160, a Eksplorator Procesów pokaże, że proces jest rozpoznawany przez system lub monitor, w zależności od zastosowanego manifestu.

Ustawienia DPI wyświetlacza w systemie Windows 11
Podobne artykuł:
Ustawienia DPI wyświetlacza w systemie Windows 11

Nadpisywanie skalowania: W skrócie SSMS otwórz sekcję Zgodność i zaznacz opcję „Nadpisz zachowanie skalowania przy wysokiej rozdzielczości DPI”, wybierając opcję „Aplikacja”. Wymusi to na SSMS zachowanie się jak aplikacja kontrolująca własne skalowanie i zapobiegnie skalowaniu go przez system Windows według mapy bitowej po zmianie rozdzielczości DPI; na wielu komputerach jest to najprostsze rozwiązanie aby zakończyć rozmycie.

Jeśli usuniesz manifest zewnętrzny, Eksplorator Procesów wyświetli komunikat „Nieznany”, co oznacza, że ​​aplikacja nie skaluje się do zmian DPI i system ją przeskaluje. W starszych wersjach, takich jak SSMS 2012/2014, nie było wsparcia beta, więc interwencja w manifesty nie działała tak samo, a dane wyjściowe często wyglądały podobnie do danych wyjściowych aplikacji. nieświadomy.

UWP kontra klasyczne frameworki desktopowe

Jeśli zaczynasz od zera i Twój scenariusz pasuje, stworzenie aplikacji UWP jest najłatwiejsze: automatycznie i dynamicznie skaluje się na każdym ekranie. Natomiast aplikacje oparte na Win32, Windows Forms lub WPF, hostujące inne frameworki, wymagają od programisty dodatkowej pracy, aby reagować na zmiany DPI. Bez tego wysiłku, przycięty tekst, rozmazane ikony i… nieprawidłowy rozmiar podczas poruszania się między ekranami.

Dobre praktyki wdrożeniowe

Aby przenieść aplikację obsługującą system na monitor: oznacz proces jako PMv2 w manifeście, zapewnij możliwość ponownego wykorzystania układu i uruchom go również po zgłoszeniu błędu WM_DPICHANGED, zastąp założenia DPI, przeładuj zasoby bitmapowe do nowego rozmiaru i zastąp bezkontekstowe wywołania DPI ich własnymi. odpowiedniki dla DPIPrzetestuj aplikację na urządzeniach z wieloma monitorami i wagami.

Nie zapomnij użyć sugerowanego prostokąta dołączonego do WM_DPICHANGED do zmiany rozmiaru; pozwoli to uniknąć rekursji i utrzyma kursor w tej samej pozycji względnej. Jeśli potrzebujesz alternatywnego rozmiaru, odpowiedz WM_GETDPISCALEDSIZE. A gdy tymczasowo zmienisz kontekst DPI wątku, pamiętaj o jego przywróceniu po zakończeniu, aby uniknąć propagacji. skutki uboczne.

Co jest nie tak z hidpi.h? To nie jest Hi-DPI.

Istnieje nagłówek o nazwie hidpi.h związany z HID (Human Interface Device), który nie ma nic wspólnego z gęstością ekranu. HidP_UsageListDifference Służy do porównywania list użycia urządzeń i zwracania statusów, takich jak HIDP_STATUS_SUCCESS, umieszczając znikające użycia w BreakUsageList, a pojawiające się użycia w MakeUsageList. Jest przydatny dla klawiatur i kontrolerów, ale nie ma wpływu na… Skalowanie interfejsu użytkownika ani do PPP.

A na macOS i Linuxie?

Poza systemem Windows, macOS oferuje prawdziwe tryby HiDPI i pozwala wybrać skalowaną rozdzielczość, która zachowuje ostrość; jest to przydatne w przypadku laptopów z wyświetlaczem Retina lub monitorów 4K. W systemie Linux Wayland oferuje lepsze skalowanie na monitor w porównaniu z Xorg, choć jakość obrazu różni się w zależności od komputera. Jeśli pracujesz w środowisku mieszanym, sprawdź, czy każdy system obsługuje tę funkcję. Rozdzielczości HiDPI autentyczne i unika skalowania monitora niskiej jakości.

Sekret unikania zaśmieconych interfejsów tkwi w połączeniu modyfikacji systemu z dobrymi praktykami programistycznymi: zrozumieniem trybów DPI, wymuszaniem pomijania skalowania tylko wtedy, gdy jest to konieczne, przyjęciem trybu Per-Monitor v2, korzystaniem z interfejsów API „dla DPI”, dokładnym testowaniem w scenariuszach obejmujących wiele monitorów oraz, w razie potrzeby, korzystaniem z manifestów lub narzędzi takich jak Process Explorer w celu audytu zachowania.

NVIDIA Shadow Play
Podobne artykuł:
Jak nagrywać ekran za pomocą NVIDIA Shadowplay

Mając te elementy na miejscu, możesz dostosować wygląd Eksploratora i pozostałych aplikacji jasne i spójne na dowolnym ekranie. Udostępnij te informacje, aby inni użytkownicy wiedzieli o trybie Hi-DPI w systemie Windows.