Penskalaan DPI di Windows 8.1 melalui baris perintah

14

Saya ingin membuat pintasan keyboard untuk mengubah skala DPI dengan cepat dan mudah di mesin saya, dengan cara membuat makro kecil untuk dijalankan setelah mendeteksi pintasan keyboard.

Pada Windows 8.1, skala DPI tampilan desktop dapat diatur melalui panel kontrol (gambar di bawah), segera berlaku. Sebagai alternatif, skala dapat diatur secara manual dalam registri, tetapi melakukan hal itu mengharuskan pengguna masuk dan keluar atau menyalakan ulang mesin untuk mengambil efek (dan hanya berfungsi untuk meniru opsi "satu tingkat penskalaan untuk semua tampilan saya") .

Bagaimana saya bisa mengatur skala DPI melalui baris perintah, atau secara terprogram?

http://puu.sh/93YLV.jpg

FThompson
sumber
Sudahkah Anda mencoba membuat perubahan registri, mematikan proses penjelajah, lalu mulai lagi. Karena itulah semua metode GUI akan lakukan dalam teori.
Ramhound
@Ramhound Tidak beruntung. Antarmuka GUI pasti melakukan sesuatu untuk menyegarkan desktop untuk menerapkan pengaturan, tapi saya tidak yakin apa dan belum dapat menemukan apa pun tentang itu.
FThompson
Apakah Anda yakin perubahan itu terjadi segera? Saya mendapatkan dialog yang mengatakan "Anda harus keluar dari komputer Anda untuk menerapkan perubahan ini"
Vinayak
@Vinayak, Perubahan terjadi segera ketika diterapkan oleh dialog di atas. Saya ingat pernah membaca bahwa aplikasi langsung baru untuk Windows 8.1 di atas standar Windows 8, jadi jika Anda tertarik untuk meneliti perbedaan antara mesin Anda dan milik saya, itu bisa menjadi tempat untuk memulai.
FThompson
@ Vulcan Sebenarnya, saya menggunakan Windows 8.1. Namun, saya mencoba melakukan perubahan setelah mengklik Let me choose one scaling level...kotak centang karena bilah geser di atasnya berwarna abu-abu pada notebook saya.
Vinayak

Jawaban:

9

Kunci registri yang benar untuk penskalaan independen monitor adalah HKCU:\Control Panel\Desktopdengan nilainya LogPixels. Informasi lebih lanjut tentang semua pengaturan registri terkait DPI dapat ditemukan di sini: http://technet.microsoft.com/en-us/library/dn528846.aspx#system Ada juga informasi untuk kasus ini ketika Anda mengaktifkan penskalaan yang berbeda untuk setiap tampilan .

Saya menulis skrip PowerShell kecil yang mengubah penskalaan DPI untuk semua tampilan tergantung pada penskalaan saat ini dan melakukan logoff pengguna jadi saya hanya perlu menjalankan skrip ketika saya meletakkan perangkat saya ke monitor yang berbeda.

cd 'HKCU:\Control Panel\Desktop'
$val = Get-ItemProperty -Path . -Name "LogPixels"
if($val.LogPixels -ne 96)
{
    Write-Host 'Change to 100% / 96 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 96
} else {
    Write-Host 'Change to 150% / 144 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 144
}

logoff;exit

Saya pikir Anda dapat memodifikasinya untuk kebutuhan Anda dengan informasi artikel TechNet.

Torben Schramme
sumber
3
Permintaan maaf saya karena tidak merespons lebih cepat; solusi hebat! Sayangnya, bagaimanapun, menggunakan LogPixelsnilai hanya berlaku ketika kotak centang "Biarkan saya memilih satu tingkat penskalaan untuk semua tampilan saya" dicentang, sesuatu yang saya amati ketika mengacaukan nilai registri sendiri tetapi juga dikonfirmasi oleh artikel Technet yang tertaut. Selain itu, solusi Anda memiliki peringatan bahwa pengguna harus keluar; DPI tidak diperbarui tanpa pengguna keluar dan kembali lagi. Di antara dua kelemahan ini, solusi Anda tidak cukup berhasil untuk saya, tetapi semua +1 sama untuk jawaban yang bagus.
FThompson
Itu tidak bekerja pada Windows 10 :(
kokbira
3
@kokbira Untuk ini bekerja pada Windows 10 Anda perlu mengatur kunci registri HKCU:\Control Panel\Desktop\Win8DpiScalinguntuk 1. Kalau tidak, ia akan menggunakan faktor penskalaan default dan mengabaikan nilai dalam LogPixels.
FlyingFoX
1
Jika Skala DPI berbeda untuk setiap monitor, alih-alih HKCU:\Control Panel\DesktoplihatHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Shayan
1
Dan juga di siniHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
Shayan
2

Ada skrip PowerShell untuk mengubah resolusi layar yang mungkin bisa membantu. Saya tidak tahu apakah perubahan itu langsung pada Windows 8.1, tetapi dengan sedikit keberuntungan skrip ini mungkin menggunakan API yang sama seperti yang digunakan oleh applet Panel Kontrol.

Lengkap Set-ScreenResolution.ps1Script tersedia di Repositori Script , tetapi terlalu lama untuk mereproduksi di sini.

Deskripsi oleh penulis dapat ditemukan di artikel:
Hei, Scripting Guy! Bagaimana Saya Dapat Mengubah Resolusi Monitor Desktop Saya melalui Windows PowerShell? .

Beberapa informasi tentang penggunaannya dapat ditemukan di artikel:
Mengubah Resolusi Layar dengan Powershell .

harrymc
sumber
Sumber daya ini terlihat lebih berorientasi pada perubahan resolusi layar daripada DPI. Saya melihat tautan yang Anda berikan, tetapi saya hanya melihat opsi untuk mengatur lebar dan tinggi, dan tidak menyebutkan DPI. Apakah saya salah mengerti jawaban Anda?
FThompson
Mengubah resolusi akan mengubah DPI dan sebaliknya. Anda bisa mengetahui resolusi layar di bawah pengaturan DPI yang berbeda, kemudian mengubah ke resolusi ini menggunakan skrip di atas.
harrymc
1
Sementara mengubah resolusi tidak mengubah DPI, itu tidak sama dengan penskalaan DPI yang ditawarkan di Win8 (mungkin berbeda pada sistem operasi lain?) Contohnya adalah terlepas dari apa penskalaan DPI diatur, desktop dan ikon-ikonnya selalu sama ukuran dan tampilannya, sedangkan jika resolusi diubah, desktop dan ikonnya berubah ukuran sesuai.
FThompson
Ini karena teknologi DPI-aware baru yang diperkenalkan pada Windows 8.1. Saya belum dapat menemukan informasi tentang API-nya - hanya pengaturan registri saat ini tersedia, yang bukan yang Anda cari.
harrymc
Explorer adalah DPI-sadar sehingga ikon desktop menjaga ukurannya, tetapi sangat sedikit program lainnya. Untuk sebagian besar produk, mengubah resolusi sama baiknya dengan mengubah DPI.
harrymc