Skalowanie DPI w systemie Windows 8.1 za pomocą wiersza polecenia

14

Chciałbym utworzyć skrót klawiaturowy, aby szybko i łatwo zmienić skalę DPI na moim komputerze, poprzez utworzenie małego makra uruchamianego po wykryciu skrótu klawiaturowego.

W systemie Windows 8.1 skalę DPI ekranu pulpitu można ustawić za pomocą panelu sterowania (na zdjęciu poniżej), od razu zaczynając działać. Alternatywnie skalę można ustawić ręcznie w rejestrze, ale w tym celu użytkownik musi się zalogować i wylogować lub ponownie uruchomić komputer, aby zadziałał (i działa tylko naśladując opcję „jeden poziom skalowania dla wszystkich moich ekranów”) .

Jak ustawić skalę DPI za pomocą wiersza polecenia lub w inny sposób programowo?

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

FThompson
źródło
Czy próbowałeś zmienić rejestr, zabić proces eksploratora, a następnie uruchomić go ponownie? Ponieważ to wszystko metoda GUI zrobiłaby w teorii.
Ramhound
@Ramhound Brak szczęścia. Interfejs GUI zdecydowanie robi coś, aby odświeżyć pulpit w celu zastosowania tego ustawienia, ale nie jestem pewien, co i nie byłem w stanie nic na ten temat znaleźć.
FThompson
Czy na pewno zmiany zostaną wprowadzone natychmiast? Pojawia się okno dialogowe „Musisz wylogować się z komputera, aby zastosować te zmiany”
Vinayak
@ Vinayak, zmiany są wprowadzane natychmiast po zastosowaniu w powyższym oknie dialogowym. Pamiętam, że czytam, że natychmiastowa aplikacja jest nowsza w systemie Windows 8.1 niż standardowa Windows 8, więc jeśli jesteś zainteresowany badaniem różnicy między twoją maszyną a moją, może to być miejsce, od którego można zacząć.
FThompson
@Vulcan Właściwie korzystam z systemu Windows 8.1. Próbowałem jednak wprowadzić zmiany po kliknięciu Let me choose one scaling level...pola wyboru, ponieważ suwak powyżej jest wyszarzony w moim notatniku.
Vinayak

Odpowiedzi:

9

Prawidłowy klucz rejestru do niezależnego skalowania monitora ma HKCU:\Control Panel\Desktopwartość LogPixels. Więcej informacji na temat wszystkich ustawień rejestru związanych z DPI można znaleźć tutaj: http://technet.microsoft.com/en-us/library/dn528846.aspx#system Istnieją również informacje dotyczące przypadku, gdy włączono różne skalowanie dla każdego wyświetlacza .

Napisałem mały skrypt PowerShell, który zmienia skalowanie DPI dla wszystkich wyświetlaczy w zależności od bieżącego skalowania i wykonuje wylogowanie użytkownika, więc po prostu muszę wykonać skrypt, gdy umieszczę urządzenie na innym monitorze.

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

Myślę, że możesz zmodyfikować go dla swoich potrzeb, korzystając z informacji w artykule TechNet.

Torben Schramme
źródło
3
Przepraszam, że nie odpowiedziałem wcześniej; świetne rozwiązanie! Niestety użycie tej LogPixelswartości ma zastosowanie tylko wtedy, gdy pole wyboru „Pozwól mi wybrać jeden poziom skalowania dla wszystkich moich wyświetlaczy” jest zaznaczone, co zauważyłem, gdy sam bałaganiłem wartości rejestru, ale jest to również potwierdzone w powiązanym artykule Technet. Poza tym twoje rozwiązanie wymaga wylogowania użytkownika; DPI nie są aktualizowane bez wylogowania użytkownika i ponownego zalogowania. Pomiędzy tymi dwiema wadami twoje rozwiązanie nie działa dla mnie, ale daje +1, by uzyskać świetną odpowiedź.
FThompson
Nie działa w systemie Windows 10 :(
kokbira
3
@kokbira Aby to działało w systemie Windows 10, musisz ustawić klucz rejestru HKCU:\Control Panel\Desktop\Win8DpiScalingna 1. W przeciwnym razie użyje domyślnego współczynnika skalowania i zignoruje wartość w LogPixels.
FlyingFoX
1
Jeśli Skala DPI jest inna dla każdego monitora, zamiast HKCU:\Control Panel\DesktoppatrzećHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Shayan
1
A także tutajHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
Shayan
2

Istnieje skrypt PowerShell do zmiany rozdzielczości ekranu, który może pomóc. Nie mam pojęcia, czy zmiana jest natychmiastowa w systemie Windows 8.1, ale przy odrobinie szczęścia ten skrypt może korzystać z tego samego interfejsu API, który jest używany przez aplet Panelu sterowania.

Pełny Set-ScreenResolution.ps1skrypt jest dostępny w repozytorium skryptów , ale jest zbyt długi, aby go odtworzyć tutaj.

Jego opis autorstwa autora można znaleźć w artykule:
Hej, skrypciarze! Jak zmienić rozdzielczość monitora pulpitu za pomocą programu Windows PowerShell? .

Niektóre informacje na temat korzystania z niego można znaleźć w artykule:
Zmiana rozdzielczości ekranu za pomocą programu PowerShell .

harrymc
źródło
Te zasoby wydają się bardziej zorientowane na zmianę rozdzielczości ekranu niż DPI. Patrzyłem na podane przez ciebie linki, ale widzę tylko opcje ustawiania szerokości i wysokości, i nie wspominając o DPI. Czy źle rozumiem twoją odpowiedź?
FThompson,
Zmiana rozdzielczości spowoduje zmianę DPI i odwrotnie. Możesz znaleźć rozdzielczość ekranu przy różnych ustawieniach DPI, a następnie zmienić te rozdzielczości za pomocą powyższego skryptu.
harrymc
1
Zmiana rozdzielczości nie zmienia DPI, ale nie jest to dokładnie to samo, co skalowanie DPI oferowane w Win8 (może jest inaczej w innych systemach operacyjnych?) Przykładem tego jest to, że niezależnie od ustawienia skalowania DPI, pulpit a jego ikony są zawsze tego samego rozmiaru i wyglądu, natomiast jeśli rozdzielczość zostanie zmieniona, pulpit i ikony odpowiednio się zmienią.
FThompson
Wynika to z nowej technologii rozpoznającej DPI wprowadzonej w Windows 8.1. Nie udało mi się znaleźć żadnych informacji o jego interfejsie API - obecnie dostępne są tylko ustawienia rejestru, które nie są tym, czego szukasz.
harrymc
Eksplorator obsługuje DPI, więc ikony na pulpicie zachowują swój rozmiar, ale niewiele innych programów tak. W przypadku większości produktów zmiana rozdzielczości jest równie dobra, jak zmiana DPI.
harrymc