Làm thế nào để buộc tỷ lệ dpi cao?


27

Làm thế nào tôi có thể buộc một ứng dụng có tỷ lệ dpi cao?

  • Giả sử có một ứng dụng, những người phát triển biểu hiện nó là nhận thức cao, khi nó thực sự không. Làm thế nào tôi có thể buộc quy mô dpi?

  • Giả sử có một ứng dụng mà Microsoft đã áp dụng HighDpiAwareshim "tương thích", khi ứng dụng thực sự không. Làm thế nào tôi có thể buộc quy mô dpi?

Làm cách nào tôi có thể buộc Windows áp dụng tỷ lệ dpi cho ứng dụng?


Chỉnh sửa: Tỷ lệ dpi cao là gì?

Không phải tất cả người dùng chạy Windows ở 96dpi. Không phải mọi nút được cho là 75x23 pixel, không phải mọi thanh công cụ đều cao 25 ​​pixel và không phải mỗi glyph của treeview là 16x16. Nếu người dùng đã chọn một cài đặt dpi khác cho Windows, bạn cần chia tỷ lệ mọi thứ một cách thích hợp.

Vấn đề là hầu như không có nhà phát triển nào thực hiện công việc của họ bằng cách xử lý các cài đặt dpi cao độc đáo. Tốt nhất là mọi thứ sẽ giữ nguyên "cùng kích cỡ", điều đó có nghĩa là mọi sự xuất hiện nhỏ xíu . Tại các hình thức tồi tệ nhất được đặt không chính xác, với văn bản được cắt bớt, và các điều khiển không hiển thị.

Bắt đầu với Windows Vista và tận dụng sức mạnh của Thành phần máy tính để bàn, Microsoft đã từ bỏ các nhà phát triển thực hiện công việc của họ và giờ là nói dối với ứng dụng. Họ nói với các ứng dụng rằng người dùng đang chạy ở 96dpi. Windows sau đó sử dụng thẻ video và Thành phần máy tính để bàn, để mở rộng các biểu mẫu.

Pro: nội dung của biểu mẫu sẽ có kích thước dễ đọc.
Con: mọi thứ sẽ hơi mờ.

Tính năng "chia tỷ lệ cao" này chỉ hoạt động theo quyết định của người dùng và yêu cầu:

  • Windows Vista hoặc mới hơn
  • Thành phần máy tính để bàn được kích hoạt
  • người dùng tắt "Sử dụng tỷ lệ kiểu Windows XP"
  • người dùng không vô hiệu hóa tỷ lệ cho ứng dụng của bạn

Là một nhà phát triển, bạn có thể từ chối quy mô cao dpi; nếu bạn đã nỗ lực để viết ứng dụng của mình đúng cách và bạn biết rằng bạn sẽ xử lý đúng mức cao. Bạn chọn không tham gia mở rộng quy mô này bằng cách thêm một mục nhập bảng kê khai vào tệp thực thi của bạn, tuyên bố rằng bạn " nhận thức cao ".

Chủ đề về cách làm cho ứng dụng của bạn tôn trọng sở thích của người dùng (bao gồm mặt phông chữ, kích thước phông chữ và cài đặt dpi) là một câu hỏi dành cho stack overflow. Như là cú pháp cho mục nhập bảng kê khai " nhận thức cao-dpi " của bạn.

Câu hỏi này , trên siêu người dùng , là làm thế nào để bỏ qua một nhà phát triển đi trước và thêm một mục nhập bảng kê khai nhận biết cao, trong khi thực tế, ứng dụng không nhận biết cao. Họ bảo Windows tắt tính năng mở rộng, nhưng họ không thực sự kiểm tra ứng dụng. Có một phần mềm ngoài đó với mục nhập bảng kê khai "nhận biết cao-dpi", và bây giờ ứng dụng không thể sử dụng được dưới "phông chữ lớn" (ví dụ: 120dpi).


Tôi cũng quan tâm đến điều này. Chúng tôi có một ứng dụng quan trọng không nhận biết dpi và ban đầu được thiết kế cho màn hình 800x600. Windows không mở rộng quy mô theo mặc định và nó không tạo ra sự khác biệt cho dù chúng tôi đang sử dụng XP, Vista hay 7. Vì nhân viên của chúng tôi dành phần lớn thời gian cho ứng dụng 800x600 này, họ khăng khăng sử dụng màn hình LCD 20 "của họ ở độ phân giải 800x600! Đây là một sự lãng phí rất lớn và việc thiếu pixel tự gây ra sẽ cản trở họ khi họ cần sử dụng MS Office, IE8, v.v.
Miles Erickson

1
Mãi đến Windows Vista, Microsoft mới bắt đầu tận dụng Thành phần máy tính để bàn (cái mà một số người gọi nhầm là Aero ) để sử dụng card đồ họa để mở rộng các ứng dụng không chọn không tham gia mở rộng. XP không có tỷ lệ co giãn và bạn không muốn chia tỷ lệ trong Vista 7. Bạn muốn ứng dụng của mình được viết đúng. Đi bộ đến máy của nhà phát triển và thay đổi độ phân giải của họ trở lại 1050 và đặt dpi thành 168. Mọi thứ sẽ được phóng to tương tự ở chế độ tard, ngoại trừ ứng dụng sẽ không hoạt động đúng. Nói với họ rằng họ sẽ không nhận được bất kỳ thực phẩm hoặc nước cho đến khi nó được cố định.
Ian Boyd

Chúng tôi không phải lúc nào cũng có quyền truy cập vào các nhà phát triển tạo ra các ứng dụng chúng tôi sử dụng. Giá như chúng ta đã làm ...
Hình trụ

Hình thức = hình dạng?
jiggunjer

Câu trả lời:


5

Hừm. Đề nghị của tôi sẽ là chỉnh sửa bảng kê khai và xóa khai báo không chính xác. Và đừng quên lỗi nhà phát triển về nó tuy nhiên bạn có thể!

Chỉnh sửa: Lưu ý rằng có thể chỉ cần đặt tệp kê khai bên cạnh tệp thực thi, ví dụ: foo.exebạn sẽ đặt tệp kê khai vào foo.exe.manifest. Xem bài viết MSDN (xem trong phần có tên "Cú pháp tên tệp").


Tôi cho rằng đây là cách duy nhất để đi. Mặt khác: nó làm mất hiệu lực chữ ký số của ứng dụng.
Ian Boyd

@Ian: có vẻ như bạn không phải đặt bảng kê khai vào tài nguyên.
SamB

3
Nó đã từng là một .manifesttập tin được ưu tiên hơn bảng kê khai bên trong tệp thực thi. Ngày nay, bất kỳ tệp kê khai nào được tích hợp vào tệp thực thi sẽ ghi đè bất kỳ .manifesttệp bên ngoài nào . Tôi không nhớ gói dịch vụ nào của XP đã thay đổi nó - tôi nghĩ đó là SP2.
Ian Boyd

8

Tôi vừa phát hành một DLL mà móc nối và chuyển hướng các cuộc gọi đến SetProcessDPIAware. Đối với những ứng dụng vô hiệu hóa tỷ lệ DPI thông qua mã, đây là cách khắc phục nhanh chóng và dễ dàng (so với vá nhị phân).

DPIMangler: Bài đăng trên blog , mã nguồn .


6

Bạn vẫn có thể chỉnh sửa tệp kê khai, bạn sẽ chỉ phải chỉnh sửa tệp đó trong chính tệp .EXE. Hãy tìm một trình soạn thảo tài nguyên có hỗ trợ rõ ràng. Một ví dụ với hỗ trợ thô sơ là XN Resource Editor.) Chỉ cần tìm và xóa dòng có đề cập đến PHẦN MỀM CAO CẤP và lưu tệp thực thi.

Tuy nhiên, hãy chắc chắn tạo một bản sao của tệp thực thi trước khi bạn chỉnh sửa nó!


"Về nhược điểm: nó làm mất hiệu lực chữ ký số của ứng dụng."
Ian Boyd

0

Tôi tự hỏi nếu ResizeEnable là những gì bạn đang tìm kiếm?

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


Không, các cửa sổ đã thay đổi kích thước. Vấn đề là khi bộ tổng hợp tổng hợp cửa sổ để hiển thị. Ngay bây giờ nó không làm gì đặc biệt, vì ứng dụng nói rằng nó không cần phải thu nhỏ. Nhưng trên thực tế các cửa sổ không cần phải được thu nhỏ lại.
Ian Boyd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.