Tôi không thể thay đổi chế độ Hi-DPI trong Explorer: hướng dẫn đầy đủ

  • Explorer không hiển thị tab Tương thích; nó sử dụng các cài đặt chung và ghi đè ứng dụng của bên thứ ba.
  • Per-monitor v2 ngăn chặn việc thay đổi tỷ lệ bitmap và yêu cầu phản hồi WM_DPICHANGED
  • Process Explorer, manifest và API cho DPI là chìa khóa để kiểm tra và sửa lỗi
  • Direct2D, DIP và các khung hình được cập nhật cải thiện độ sắc nét trong môi trường 4K và hỗn hợp

Cách thay đổi chế độ Hi-DPI trong Explorer

Nếu bạn đang gặp khó khăn với cửa sổ bị mờ, menu nhỏ xíu trên màn hình 4K hoặc Explorer không cho phép bạn chạm vào chế độ nâng cấp, đây chính là hướng dẫn bạn cần. Chúng tôi đã tập hợp tại đây những cách thức và lý do để Chế độ Hi‑DPI Trong Windows, bạn có những tùy chọn thực tế nào với tư cách là người dùng và các nhà phát triển cần triển khai những gì để làm cho giao diện trông sắc nét trên mọi màn hình.

Cảnh quan này pha trộn các màn hình ngày càng dày đặc với các ứng dụng ra đời khi 96 DPI vẫn là chuẩn mực. Khi một ứng dụng không thích ứng với mật độ tăng lên, Windows sẽ phóng to nó như một bức ảnh, gây ra hiện tượng điển hình hiệu ứng mờWindows 11 thậm chí còn bao gồm tính năng Siêu phân giải tự động để cải thiện độ sắc nét, nhưng điều quan trọng vẫn là nhận biết DPI của từng ứng dụng và cài đặt hệ thống chính xác, đặc biệt nếu bạn kết hợp màn hình có tỷ lệ khác nhau hoặc sử dụng máy khách từ xa.

Hi-DPI là gì và tại sao một số cửa sổ trông xấu?

Mật độ của các tấm nền hiện đại đã tăng vọt: từ 96 DPI cổ điển lên các giá trị gần hoặc lớn hơn 300. Khi ứng dụng không nhận biết được DPI, hệ thống sẽ kết thúc tỷ lệ theo bitmapvà điều này làm giảm chất lượng văn bản và biểu tượng. Với hệ số tỷ lệ 125%, 150% hoặc cao hơn, sự khác biệt giữa một ứng dụng đáp ứng và một ứng dụng không đáp ứng là rất lớn.

Theo thuật ngữ của Microsoft, một ứng dụng có thể không nhận biết, nhận biết hệ thống hoặc nhận biết màn hình. Mỗi chế độ xác định liệu Windows có tự động điều chỉnh quy mô ứng dụng hay không hoặc liệu nó có bắt buộc phải làm như vậy hay không. vẽ lại giao diện người dùng của bạn theo thang đo mới. Mức độ nhận thức càng cao, kết quả sẽ càng sắc nét khi bạn di chuyển cửa sổ giữa các màn hình có thang đo khác nhau.

File Explorer: Tại sao tab Tương thích bị thiếu

Cách sửa lỗi màn hình đen khi thay đổi độ phân giải trong Windows
Bài viết liên quan:
Màn hình đen sau khi thay đổi độ phân giải trong Windows: nguyên nhân và giải pháp

Nhiều người dùng thấy rằng trong C:\Windows\explorer.exe không có tab Compatibility; đây không phải là lỗi, chỉ là Explorer nhận được hệ thống xử lý đặc biệtDo đó, bạn sẽ không thấy bảng điều khiển "Ghi đè hành vi tỷ lệ DPI cao" thông thường ở đó. Nếu bạn thấy hình ảnh bị mờ trong Explorer hoặc Bảng Điều khiển, nguyên nhân thường là do tỷ lệ hệ thống toàn cục được áp dụng cho các phần chưa được điều chỉnh hoàn toàn.

Mặc dù bạn không thể thay đổi khả năng tương thích trong explorer.exe, Windows 10 và 11 cung cấp các giải pháp thay thế: tùy chọn "Cho phép Windows cố gắng sửa lỗi ứng dụng để chúng không bị mờ" và ghi đè việc mở rộng theo từng ứng dụng từ các phím tắt hoặc tệp thực thi của bên thứ ba. Các tính năng này có thể cải thiện hiệu suất tổng thể; để biết thêm các bước, hãy xem Giải pháp cho màn hình bị mờ trong Windows 10. Các chức năng này có thể cải thiện hành vi tổng thể và đối với hầu hết các chương trình, bạn sẽ có thể áp dụng hủy bỏ tỷ lệ từ các thuộc tính của chúng.

Chế độ nhận biết DPI trong Windows

Tìm hiểu cách thay đổi chế độ Hi-DPI trong Explorer

Hiểu các chế độ DPI là cơ sở chẩn đoán Tại sao một số hình ảnh trông sắc nét trên màn hình này nhưng lại mờ trên màn hình khác. Dưới đây là sơ đồ chung về cách mỗi hình ảnh hoạt động khi được thu nhỏ và giữa các màn hình có DPI khác nhau.

Modo từ PPP nhận thức như thế nào Hành vi khi thay đổi DPI
Không có ý thức N / A Luôn luôn 96 PPP Tỷ lệ bitmap (mờ)
Nhận thức hệ thống windows Vista Một DPI duy nhất: DPI trên màn hình chính khi bạn đăng nhập Chỉ sắc nét ở mức DPI đó; nếu bạn thay đổi màn hình hoặc tỷ lệ, hệ thống phóng to ảnh bitmap
Theo màn hình (v1) cửa sổ 8.1 DPI của màn hình nơi cửa sổ được đặt Cửa sổ cấp cao nhất nhận được WM_DPICHANGED; không có khả năng tự động điều chỉnh giao diện người dùng của bạn
Theo màn hình v2 Cửa sổ 10 1703 DPI của màn hình đang hoạt động trên mỗi cửa sổ Các cấp độ cao nhất và cấp độ thứ cấp nhận được thông báo; Windows mở rộng khu vực không phải của máy khách, các cuộc đối thoại và chủ đề từ comctl32 V6

Trong per-monitor v2, ứng dụng không bao giờ được hệ thống mở rộng; nó phải thay đổi kích thước và vẽ lại nội dung của nó sau WM_DPICHANGED. Đổi lại, hệ thống sẽ điều chỉnh vùng không phải của máy khách (tiêu đề, đường viền và thanh) cho bạn và tự động điều chỉnh tỷ lệ các hộp thoại được tạo bằng CreateDialog và các điều khiển chung với giao diện.

Tùy chọn Windows để giảm mờ

Nếu bạn không phải là nhà phát triển hoặc đang tìm kiếm các phím tắt nhanh, Windows 10/11 có các tinh chỉnh có thể tạo nên sự khác biệt. Tùy chọn "Cho phép Windows thử sửa lỗi ứng dụng để chúng không bị mờ" sẽ buộc Windows phải sửa lỗi bằng cách thay đổi tỷ lệ ứng dụng có vấn đề khi phát hiện thay đổi màn hình, giúp tránh giao diện mờ khi di chuyển cửa sổ giữa các màn hình.

Ngoài ra, bạn có thể mở thuộc tính của phím tắt hoặc .exe, vào mục Khả năng tương thích và bật "Ghi đè hành vi thay đổi DPI cao" bằng cách chọn "Ứng dụng". Việc ghi đè này sẽ yêu cầu hệ thống không thay đổi kích thước cửa sổ cho bạn và để chương trình phản hồi với thay đổi DPI; trong các ứng dụng đã thực hiện tốt chức năng của mình, độ sắc nét sẽ được cải thiện đáng kể. triệt để. Trong explorer.exe, như chúng tôi đã nói, tab này không khả dụng.

Mẹo cụ thể cho màn hình siêu rộng và máy khách từ xa

Nếu bạn đang sử dụng màn hình siêu rộng, chẳng hạn như 2560x1080, đôi khi bạn nên điều chỉnh độ phân giải và tỷ lệ thủ công cho đến khi tìm được sự kết hợp cân bằng. Trong nhiều trường hợp, việc thiết lập tỷ lệ hệ thống nhất quán và tránh các độ phân giải không phải Hi-DPI do màn hình tạo ra sẽ giúp giảm thiểu các menu nhỏ và loại bỏ hiện vật tỷ lệvà nếu bạn làm việc với màn hình phụ hãy học cách cấu hình máy tính bảng làm màn hình thứ haiTrên macOS, có chế độ HiDPI thực sự mà bạn có thể bật để tăng độ sắc nét ở mức trung gian.

Trong các tình huống Máy tính Từ xa và các dịch vụ như WorkSpaces, sự khác biệt về DPI giữa máy khách và máy chủ là rất phổ biến. Hãy đảm bảo phiên làm việc từ xa thương lượng chính xác việc mở rộng hoặc khởi tạo kết nối với các tham số phản ánh DPI thực tế. Nếu ứng dụng của bạn là Per‑Monitor v2, nó sẽ phản hồi tốt hơn với những thay đổi này; nếu không, bạn sẽ thường xuyên thấy cửa sổ mở rộng với một bitmap.

Cập nhật ứng dụng máy tính để bàn để có khả năng mở rộng tốt

Yêu cầu tối thiểu là đánh dấu quy trình là v2 trên mỗi màn hình thông qua manifest hoặc API và di chuyển logic bố cục ra khỏi quá trình khởi tạo để được thực thi lại khi DPI thay đổi. Ngừng lưu trữ bộ nhớ đệm kích thước phông chữ, lề và số liệu mãi mãi; bạn phải tính toán lại mỗi khi nhận được WM_DPICHANGED.

Nhiều API Win32 lịch sử không có ngữ cảnh DPI và trả về các giá trị tương đối với DPI của hệ thống. Thay thế các lệnh gọi cổ điển bằng các phiên bản hiện đại của chúng: sử dụng Lấy SystemMetricsForDpi Thay vì GetSystemMetrics, nó áp dụng EnableNonClientDpiScaling trong WM_NCCREATE để hệ thống có thể chia tỷ lệ khung hình và tận dụng GetDpiForWindow để tính toán tọa độ và kích thước dựa trên DPI thực tế của cửa sổ.

Nhận dạng DPI theo luồng: Chế độ hỗn hợp

Đối với các dự án lớn hoặc dự án có giao diện người dùng của bên thứ ba, bạn có thể di chuyển theo từng giai đoạn. Với SetThreadDpiAwarenessContext Bạn gán nhận thức DPI cho các cửa sổ được tạo trong khi ngữ cảnh đang hoạt động, do đó bạn cập nhật cửa sổ chính thành chế độ per-monitor và giữ nguyên các cửa sổ cấp cao khác ở chế độ cũ. Đây là một cách hữu ích để tập trung vào phần dễ thấy nhất trước mà không cần chạm vào tất cả cùng một lúc.

Tất nhiên, việc trộn các chế độ đi kèm với các quy tắc nghiêm ngặt: một cây cửa sổ không thể trộn các chế độ cha và con khác nhau. Nếu bạn phá vỡ quy tắc, Windows có thể buộc thiết lập lại chế độ DPI từ quy trình hoặc trả về lỗi như ERROR_INVALID_STATE khi thay đổi quan hệ cha mẹ với SetParent. Trong các quy trình chéo, việc thiết lập lại bắt buộc cũng có thể xảy ra khi tạo hoặc thiết lập lại quan hệ cha mẹ HWND với ngữ cảnh không tương thích.

Các xét nghiệm cần thiết để phát hiện lỗi mở rộng

Bao gồm trong kế hoạch của bạn việc di chuyển cửa sổ giữa các màn hình có tỷ lệ khác nhau, khởi chạy ứng dụng trên mỗi màn hình, thay đổi tỷ lệ tức thời và sau khi thay đổi màn hình chính, đăng xuất và đăng nhập lại. Đây là cách chúng xuất hiện. Tìm kiếm DPI, kích thước đã lưu với giả định không chính xác và các vấn đề về định vị lại cửa sổ.

Các lỗi thường gặp: bỏ qua hình chữ nhật được đề xuất trong WM_DPICHANGED (nó phá vỡ vị trí con trỏ và có thể tạo chuỗi các sự kiện DPI), truy vấn số liệu từ một luồng với ngữ cảnh DPI không đúng và sử dụng API không có ngữ cảnh DPI để tải tài nguyên. Ví dụ: đối với biểu tượng, hãy thay thế LoadIcon bằng Tải hình ảnh với kích thước phù hợp cho từng DPI.

Phối hợp ảo hóa và bối cảnh DPI

Khi một tiến trình hoặc luồng đang chạy mà không nhận biết hoặc nhận biết hệ thống, Windows có thể ảo hóa các giá trị nhạy cảm với DPI để mô phỏng 96 DPI. Điều này làm phức tạp việc chẩn đoán vì bạn sẽ thấy kích thước màn hình, vị trí hoặc số liệu được "điều chỉnh" theo ngữ cảnh. Luôn xác minh rằng luồng đang hoạt động nằm trong Bối cảnh DPI rằng bạn đợi trước khi truy vấn hoặc tạo cửa sổ và khôi phục ngữ cảnh trước đó sau khi sử dụng SetThreadDpiAwarenessContext để tránh phát tán lỗi.

Điều quan trọng là phải giả định rằng nhiều API cũ hơn sẽ không vượt qua HWND hoặc DPI trong chữ ký của chúng. Đó là lý do tại sao việc chuyển sang các biến thể hiện đại hoặc bù trừ thủ công là rất quan trọng: GetSystemMetricsForDpi, EnableNonClientDpiScaling, GetDpiForWindow và các hàm tương tự là nền tảng để ngăn chặn giao diện người dùng của bạn bị thu nhỏ bởi bitmap và có thể được vẽ rõ ràng ở mọi tỷ lệ.

Khả năng tương thích theo khuôn khổ và công nghệ

Từ Windows 10 1703 trở đi, hỗ trợ framework đã được cải thiện, nhưng chưa đồng đều. UWP tự động điều chỉnh tỷ lệ theo màn hình, trong khi ở Win32, công việc này thuộc về nhà phát triển. Windows Forms và WPF đã được cải thiện, và comctl32 v6 điều chỉnh tỷ lệ tài nguyên theo chủ đề, hộp thoại và thông báo cho tất cả các HWND về thay đổi DPI; GDI và GDI+ không cung cấp hỗ trợ gốc, còn MFC dựa trên mã ứng dụng.

Khung hoặc công nghệ Mức hỗ trợ SO Ai leo trèo
UWP Completo 1607 + Khung
Win32 + comctl32 V6 PMv2: Thông báo cho tất cả HWND; các hộp thoại và chủ đề được nâng cấp 1703 + Ứng dụng và hệ thống không phải máy khách
Biểu mẫu Windows Khả năng mở rộng màn hình hạn chế 1703 + Khung
WPF Bản địa trong các ứng dụng WPF; lưu trữ hỗn hợp cần điều chỉnh 1607 + Khung
GDI / GDI+ Không có N / A Ứng dụng
MFC Không có N / A Ứng dụng

Direct2D và pixel độc lập với thiết bị

Direct2D giúp cuộc sống dễ dàng hơn nhiều trong Hi-DPI: nó thể hiện tọa độ trong DIP (điểm ảnh độc lập với thiết bị), cho phép các bitmap có DPI riêng, tôn trọng DPI của hệ thống nếu manifest tuyên bố hỗ trợ và sử dụng không gian tọa độ của dấu chấm động có thể mở rộng theo bất kỳ DPI tùy ý nào. Đường ống được thiết kế để mở rộng từ 96 đến các giá trị rất cao mà không làm giảm chất lượng.

Trong Windows 8 trở lên, Direct2D điều chỉnh ngưỡng khử răng cưa văn bản ở DPI cao, giúp tăng tốc độ hiển thị. Nếu cần, bạn có thể chuyển chế độ đơn vị sang pixel bằng cách sử dụng ID2D1DeviceContext::SetUnitMode và tiếp tục được hưởng lợi từ những tối ưu hóa này. Một DIP tương đương với một điểm ảnh vật lý ở 96 DPI; ở 192 DPI, mỗi DIP sẽ chiếm hai điểm ảnh. Sự trừu tượng hóa này loại bỏ giả định cứng nhắc trong bố cục và làm cho giao diện người dùng có thể mở rộng theo cách có thể dự đoán được hơn.

Chẩn đoán nhanh với Process Explorer

Để hiểu cách một ứng dụng cụ thể mở rộng quy mô, Process Explorer (Sysinternals) cho phép bạn thêm cột "Nhận thức DPI". Bạn sẽ thấy các trạng thái như "Không xác định" (hệ thống luôn luôn mở rộng quy mô), System-Aware (chỉ sắc nét ở DPI ban đầu) hoặc Per-Monitor. Kiểm tra này giúp bạn quyết định xem bạn cần manifest, ghi đè tỷ lệ hay tái cấu trúc phân phối.

Nghiên cứu thực tế: SSMS trên màn hình 4K

SQL Server Management Studio đã được cải thiện qua nhiều năm, nhưng trong một thời gian dài, hỗ trợ Hi-DPI của nó vẫn còn hạn chế. Có hai cách hữu ích: sử dụng manifest bên ngoài và áp dụng ghi đè tỷ lệ từ Compatibility. Cả hai đều có thể mang lại nhiều lợi ích. độ sắc nét mà không cần chờ đợi những thay đổi trong chính ứng dụng.

Tuyên ngôn bên ngoài: Tạo khóa registry HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide với giá trị DWORD PreferExternalManifest bằng 1. Sau đó, lưu tệp UTF-8 ssms.exe.manifest khai báo nhận dạng DPI cùng với ssms.exe. Khi khởi động lại, biểu tượng và văn bản sẽ trông rõ ràng hơn nhiều ở độ phân giải UHD 3840×2160, và Process Explorer sẽ hiển thị tiến trình đang nhận dạng hệ thống hoặc trên màn hình tùy thuộc vào manifest được áp dụng.

Hiển thị cài đặt DPI trong Windows 11
Bài viết liên quan:
Hiển thị cài đặt DPI trong Windows 11

Ghi đè tỷ lệ: Trong lối tắt SSMS, mở Khả năng tương thích và chọn "Ghi đè hành vi tỷ lệ DPI cao" bằng cách chọn "Ứng dụng". Thao tác này buộc SSMS hoạt động giống như một ứng dụng kiểm soát tỷ lệ của chính nó và ngăn Windows thay đổi tỷ lệ theo bitmap khi DPI thay đổi; trên nhiều máy tính, đây là giải pháp đơn giản nhất để chấm dứt tình trạng mờ nhòe.

Nếu bạn xóa manifest bên ngoài, Process Explorer sẽ hiển thị "Unknown" (Không xác định), cho biết ứng dụng không thể điều chỉnh theo thay đổi DPI và hệ thống sẽ tự động điều chỉnh lại. Trong các phiên bản cũ hơn như SSMS 2012/2014, bản beta chưa được hỗ trợ, do đó việc can thiệp vào manifest không hoạt động tương tự, và kết quả đầu ra thường trông giống với kết quả đầu ra của ứng dụng. không có ý thức.

UWP so với các nền tảng máy tính để bàn cổ điển

Nếu bạn đang bắt đầu từ con số 0 và kịch bản của bạn phù hợp, việc tạo ứng dụng UWP là dễ nhất: nó tự động và linh hoạt thay đổi tỷ lệ trên mỗi màn hình. Ngược lại, các ứng dụng thuần Win32, Windows Forms hoặc WPF lưu trữ các nền tảng khác đòi hỏi nhà phát triển phải làm việc thêm để phản hồi các thay đổi về DPI. Nếu không có những nỗ lực này, văn bản sẽ bị cắt xén, biểu tượng bị mờ và kích thước không chính xác khi di chuyển giữa các màn hình.

Thực hành triển khai tốt

Để di chuyển ứng dụng nhận biết hệ thống sang từng màn hình: đánh dấu quy trình là PMv2 trong manifest, làm cho bố cục có thể tái sử dụng và chạy nó sau WM_DPICHANGED, ghi đè các giả định DPI, tải lại tài nguyên bitmap theo kích thước mới và thay thế các lệnh gọi DPI không có ngữ cảnh bằng lệnh gọi DPI của riêng chúng. tương đương cho DPI. Kiểm tra ứng dụng trên các thiết bị có nhiều màn hình và cân.

Đừng quên sử dụng hình chữ nhật được đề xuất đi kèm với WM_DPICHANGED để thay đổi kích thước; điều này tránh đệ quy và giữ nguyên vị trí tương đối của con trỏ. Nếu bạn cần một kích thước thay thế, hãy phản hồi bằng WM_GETDPISCALEDSIZE. Và khi bạn tạm thời thay đổi ngữ cảnh DPI của luồng, hãy nhớ khôi phục nó sau khi kết thúc để tránh lan truyền. tác dụng phụ.

Có vấn đề gì với hidpi.h vậy? Nó không phải là Hi-DPI.

Có một tiêu đề gọi là hidpi.h liên quan đến HID (Thiết bị giao diện người dùng), không liên quan gì đến mật độ màn hình. Thói quen HidP_UsageListDifference Nó được sử dụng để so sánh danh sách sử dụng thiết bị và trả về các trạng thái như HIDP_STATUS_SUCCESS, đặt các sử dụng biến mất trong BreakUsageList và các sử dụng xuất hiện trong MakeUsageList. Nó hữu ích cho bàn phím và bộ điều khiển, nhưng không ảnh hưởng đến Tỷ lệ UI hoặc PPP.

Còn trên macOS hoặc Linux thì sao?

Ngoài Windows, macOS cung cấp chế độ HiDPI thực sự và cho phép bạn chọn độ phân giải được điều chỉnh để duy trì độ sắc nét; tính năng này hữu ích với máy tính xách tay Retina hoặc màn hình 4K. Trên Linux, Wayland đã cải thiện khả năng điều chỉnh tỷ lệ trên từng màn hình so với Xorg, mặc dù trải nghiệm khác nhau giữa các máy tính để bàn. Nếu bạn làm việc trong môi trường hỗn hợp, hãy kiểm tra xem mỗi hệ thống có hỗ trợ tính năng này không. Độ phân giải HiDPI xác thực và tránh tình trạng tỷ lệ màn hình chất lượng thấp.

Bí quyết để tránh giao diện lộn xộn là kết hợp các tinh chỉnh hệ thống với các phương pháp phát triển tốt: hiểu các chế độ DPI, chỉ buộc ghi đè tỷ lệ khi cần thiết, áp dụng Per‑Monitor v2, sử dụng API "cho DPI", thử nghiệm kỹ lưỡng trong các tình huống nhiều màn hình và khi cần thiết, sử dụng các bản kê khai hoặc công cụ như Process Explorer để kiểm tra hành vi.

NVIDIA Shadow Play
Bài viết liên quan:
Cách ghi lại màn hình của bạn bằng NVIDIA Shadowplay

Với những phần này, bạn có thể tinh chỉnh Explorer và các ứng dụng còn lại để trông rõ ràng và mạch lạc trên bất kỳ màn hình nào. Chia sẻ thông tin này để người dùng khác biết về chế độ Hi-DPI trong Windows.