Bagaimana cara memaksakan penskalaan dpi tinggi?

27

Bagaimana saya bisa memaksa aplikasi menjadi skala tinggi-dpi?

  • Berpura-puralah ada aplikasi, yang pengembangnya mewujudkannya sebagai dpi-sadar tinggi, padahal sebenarnya tidak. Bagaimana saya bisa memaksakan dpi-scaling?

  • Berpura-pura ada aplikasi bahwa Microsoft telah menerapkan " HighDpiAware" compatiblity shim, ketika aplikasi sebenarnya tidak. Bagaimana saya bisa memaksakan dpi-scaling?

Bagaimana saya bisa memaksa Windows untuk menerapkan dpi-scaling ke suatu aplikasi?


Sunting: Apa itu penskalaan dpi tinggi?

Tidak semua pengguna menjalankan Windows pada 96dpi. Tidak setiap tombol seharusnya berukuran 75x23 piksel, tidak semua bilah alat memiliki tinggi 25 piksel, dan tidak setiap mesin pencari pohon berukuran 16x16. Jika pengguna telah memilih pengaturan dpi berbeda untuk Windows, Anda perlu mengatur skala semuanya dengan tepat.

Masalahnya adalah bahwa hampir tidak ada pengembang melakukan pekerjaan mereka dengan menangani pengaturan dpi tinggi dengan baik. Paling-paling semuanya akan tetap "ukuran yang sama", yang berarti bahwa setiap tampak mungil mungil . Bentuk terburuk adalah tata letak yang salah, dengan teks terpotong, dan kontrol tidak terlihat.

Dimulai dengan Windows Vista, dan meningkatkan kekuatan Komposisi Desktop, Microsoft menyerah pada pengembang yang melakukan pekerjaan mereka, dan sekarang berbohong pada aplikasi. Mereka memberi tahu aplikasi bahwa pengguna berjalan pada 96dpi. Windows kemudian menggunakan kartu video, dan Komposisi Desktop, untuk meningkatkan formulir.

Pro: konten formulir akan menjadi ukuran yang mudah dibaca.
Con: semuanya akan sedikit kabur.

Fitur "penskalaan dpi tinggi" ini hanya berfungsi atas kebijakan pengguna, dan membutuhkan:

  • Windows Vista atau yang lebih baru
  • Komposisi Desktop akan diaktifkan
  • pengguna untuk mematikan "Gunakan penskalaan gaya Windows XP"
  • pengguna tidak menonaktifkan penskalaan untuk aplikasi Anda

Sebagai pengembang, Anda dapat memilih keluar dari penskalaan dpi tinggi; jika Anda berusaha untuk menulis aplikasi Anda dengan benar, dan Anda tahu bahwa Anda akan menangani high-dpi dengan benar. Anda menyisih dari penskalaan ini dengan menambahkan entri manifes ke eksekusi Anda, menyatakan bahwa Anda " sadar dpi tinggi ".

Topik tentang bagaimana membuat aplikasi Anda menghargai preferensi pengguna (termasuk tampilan font, ukuran font, dan pengaturan dpi) adalah pertanyaan untuk stack overflow. Seperti sintaks untuk entri manifes menyatakan " kesadaran dpi tinggi " Anda.

Pertanyaan ini , pada pengguna-super , adalah bagaimana cara mengabaikan pengembang yang terus maju dan menambahkan entri manifes menyadari-dpi tinggi, padahal sebenarnya aplikasi tersebut tidak sadar-dpi tinggi. Mereka mengatakan kepada Windows untuk menonaktifkan penskalaan, tetapi mereka tidak benar-benar menguji aplikasi. Ada perangkat lunak di luar sana dengan entri manifes "kesadaran tinggi-dpi", dan sekarang aplikasi tidak dapat digunakan di bawah "font besar" (mis. 120dpi).

Ian Boyd
sumber
Saya tertarik dengan ini juga. Kami memiliki aplikasi kritis yang tidak sadar-dpi dan pada awalnya dirancang untuk layar 800x600. Windows tidak mengubah skala secara default, dan tidak ada bedanya apakah kita menggunakan XP, Vista, atau 7. Karena staf kami menghabiskan sebagian besar waktu mereka di aplikasi 800x600 ini, mereka bersikeras menggunakan monitor LCD 20 "mereka pada resolusi 800x600! Ini adalah pemborosan yang sangat besar, dan kurangnya piksel yang diakibatkan oleh diri sendiri menghalangi ketika mereka perlu menggunakan MS Office, IE8, dll.
Miles Erickson
1
Tidak sampai Windows Vista bahwa Microsoft mulai memanfaatkan Komposisi Desktop (apa yang secara keliru disebut Aero ) untuk menggunakan kartu grafis untuk skala aplikasi yang tidak secara khusus memilih keluar dari penskalaan. Tidak ada penskalaan di XP, dan Anda tidak ingin penskalaan di Vista 7. Anda ingin aplikasi Anda ditulis dengan benar. Berjalanlah ke mesin pengembang, dan ubah resolusi mereka kembali ke 1050, dan atur dpi ke 168. Semuanya akan diperbesar dengan mode tard yang sama, kecuali aplikasi tidak akan berperilaku baik. Beri tahu mereka bahwa mereka tidak mendapatkan makanan atau air apa pun sampai itu diperbaiki.
Ian Boyd
Kami tidak selalu memiliki akses ke pengembang yang membuat aplikasi yang kami gunakan. Kalau saja kita lakukan ...
Cylindric
Bentuk = bentuk?
jiggunjer

Jawaban:

5

Hmm. Saran saya adalah mengedit manifes dan menghapus deklarasi yang salah. Dan jangan lupa bug pengembang tentang hal itu namun Anda bisa!

Sunting: Perlu diketahui bahwa cukup menempatkan manifes di sebelah yang dapat dieksekusi, misalnya untuk foo.exe, Anda akan meletakkan manifes foo.exe.manifest. Lihat artikel MSDN (lihat bagian "Sintaks Nama File").

SamB
sumber
Saya menganggap ini adalah satu-satunya cara untuk pergi. Pada sisi negatifnya: ini membatalkan tanda tangan digital aplikasi.
Ian Boyd
@Ian: sepertinya Anda tidak harus meletakkan manifes di sumber daya.
SamB
3
Dulu .manifestfile diutamakan atas manifes di dalam executable. Hari ini manifes apa pun yang dibangun ke dalam executable akan menimpa .manifestfile eksternal apa pun . saya tidak ingat paket layanan XP mana yang mengubahnya - saya pikir itu SP2.
Ian Boyd
8

Saya baru saja merilis DLL yang menghubungkan dan mengalihkan panggilan ke SetProcessDPIAware. Untuk aplikasi yang menonaktifkan penskalaan DPI melalui kode, ini adalah perbaikan yang cepat dan mudah (dibandingkan dengan penambalan biner).

DPIMangler: Posting blog , kode sumber .

George
sumber
6

Anda masih dapat mengedit manifes, Anda hanya perlu mengeditnya di file .EXE itu sendiri. Cari editor sumber daya yang memiliki dukungan nyata. Contoh dengan dukungan yang belum sempurna adalah XN Resource Editor.) Cukup temukan dan hapus baris yang menyebutkan HIGHDPIAWARE dan simpan yang dapat dieksekusi.

Pastikan untuk membuat salinan dari executable sebelum Anda mengeditnya!

trlkly
sumber
"Pada sisi negatifnya: itu membatalkan tanda tangan digital aplikasi."
Ian Boyd
0

Saya ingin tahu apakah ResizeEnable adalah yang Anda cari?

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

James T
sumber
Tidak, windows sudah bisa diubah ukurannya. Masalahnya adalah ketika kompositor mengkomposit jendela untuk ditampilkan. Saat ini tidak melakukan sesuatu yang istimewa, karena aplikasi mengatakan itu tidak perlu diskalakan. Namun pada kenyataannya jendela tidak perlu ditingkatkan.
Ian Boyd