Karta Zgodność jest ukryta dla plików systemowych, więc aby powielić funkcję „Wyłącz skalowanie wyświetlacza przy ustawieniach wysokiej DPI”, dodaj do rejestru następujące elementy:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Ma to dodatkową zaletę polegającą na tym, że wszystkie przystawki MMC, takie jak Edytor zasad grupy, również używają natywnego skalowania zamiast rozmytej zrasteryzowanej wersji.
Możesz zapisać ten plik jako .reg i zaimportować go, lub użyć wklej następujące polecenie w oknie dialogowym Uruchom:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Jeśli często używasz tego obejścia, możesz dodać go do menu kontekstowego prawym przyciskiem myszy dla plików .exe. Możesz także dodać go do plików .msi, ponieważ dla tych plików brakuje również karty Zgodność:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
Ponieważ ustawienia „Uruchom jako administrator” i „Wyłącz skalowanie DPI” są przechowywane razem, wywołanie tego polecenia dla pliku, który jest już ustawiony jako uruchamiany jako administrator, usunie tę flagę i zamiast tego ustawi flagę skalowania DPI. Wpływa to tylko na pliki, dla których ręcznie zaznaczyłeś to pole, a nie na pliki z poprawnym żądanym poziomem ExExutionLevel w swoim manifeście.
Tylko w celach informacyjnych, gdy oba są zaznaczone, ciąg znaków to „~ RUNASADMIN HIGHDPIAWARE”, ale nie wstawiłbym tego do opcji menu kontekstowego, ponieważ jest on już dostępny do jednorazowego użytku w menu kontekstowym i nie jest dobrym pomysłem token administratora jest tak łatwy.
Jeśli chcesz wyłączyć skalowanie DPI dla plików wykonywalnych i plików instalatora w określonym folderze, możesz użyć następującego importu .reg:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
Korzystanie z tej opcji w folderze głównym, takim jak Program Files, jest złym pomysłem, ponieważ utworzysz setki wpisów rejestru. Ale w niektórych przypadkach jest to niezbędne, szczególnie dla Process Explorera i pozostałych narzędzi Sysinternals lub narzędzi Nirsoft, które działają doskonale z wyłączonym skalowaniem DPI, ale nie mają wyraźnie określonej opcji w manifestach.
Ostatnia partia kodu używa wewnętrznego polecenia start, aby jak najszybciej usunąć okno wiersza polecenia i zminimalizować je podczas analizowania zawartości folderu. Symbol @ służy do zapobiegania powtórzeniu polecenia na wyjściu, a przekierowanie zerowe służy do ukrycia wyniku „Operacja zakończona powodzeniem”. dla każdego wpisu, ponieważ nigdy się nie zmienia.
Jeśli akurat masz doskonałe narzędzie nircmd, możesz całkowicie ukryć krótkie flashowanie okna wiersza poleceń:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
Jeśli nircmd.exe nie znajduje się na twojej ścieżce, możesz dodać jego lokalizację powyżej lub dodać folder do ścieżki w oknie dialogowym Zmienne środowiska systemowego. Aby wyświetlić to okno, możesz użyć poleceniarundll32 sysdm.cpl,EditEnvironmentVariables
Można argumentować, że bardziej elegancko byłoby dodać klucze rejestru, tworząc plik .reg w czasie wykonywania i importując go po cichu za pomocą reg import /s
opcji nieudokumentowanej . Ale z mojego doświadczenia wynika, że pisanie dowolnych plików w czasie wykonywania wywołuje różnego rodzaju alarmy za pomocą produktów zabezpieczających, takich jak COMODO Internet Securita, jego równoważne wersje z Panda, Norton itp. I wszystko oparte na modelu HIPS. Nie widzę potrzeby, aby to robić, gdy powyższe działa dobrze, szczególnie jeśli używasz tego na wielu komputerach lub udostępniasz go i nie chcesz tworzyć fałszywego alarmu dla kogoś innego.
Jeśli jednak już używasz nircmd, warto użyć jego regsetval
polecenia zamiast reg add
dla rozszerzeń powłoki .exe i .msi. Opcja folderu nadal musiałaby iterować po liście katalogów, aby dodać każdy wpis, aby nie działał dla nich. PowerShell i VBScript są opcjami, ale ich dostępność zależy od wersji systemu Windows i wielu innych zmiennych. Z punktu widzenia bezpieczeństwa VBScript ma reputację wektora wykorzystywania exploitów, szczególnie gdy jest pobierany z Internetu lub udostępniany w sieci, a skrypty PS1 w ogóle nie będą działać bez wyraźnego ustawienia zasad wykonywania PowerShell zezwalających na zdalnie podpisane skrypty.
Daj mi znać, jeśli zauważysz coś dziwnego podczas używania tego kodu, ponieważ wciąż jest on w toku. Biorąc to pod uwagę, powinno to znacznie ułatwić konfigurację ustawień DPI systemu Windows 8.1.