Skalierung per Batch-Befehl?

2 Antworten

Direkt per Batch wird's eher kompliziert.

Die Registry Keys welche emer90 genannt hat dürften einem Anfänger eher in Verwirrung stürzen und benötigen einen Neustart des Systems... Keine Option.

Auf die schnell hätte ich nur eine undokumentierte Systemfunktion zur Hand, welche sofort auf alle Monitore wirkt. (keine Garantie, das eine solche Hintertür mal wieder entfernt wird, einstweilen funktioniert es)

Die entsprechende Powershell-Schnittstelle habe ich so in eine Batch eingebettet, das Du dich nicht weiter Darum kümmern must.

Wenn Du möchtest, kannst Du den Defaultwert ändern. Der Rest ist empfindlich gegen Rumfummelei 😖

changeMonitorScale.cmd

@echo off
::Hilfestellung
:: Scaling = 0 : 100% (default)
:: Scaling = 1 : 125% 
:: Scaling = 2 : 150% 
:: Scaling = 3 : 175% 

rem setze Defaultwert auf 125% Den darfst Du ändern
set "Scaling=1"

rem das geht dir nix an
for %%s in (0 1 2 3) do ( if "%%s" equ "%~1" set "Scaling=%%s")
powershell -c "$User32 = Add-Type -me '[DllImport("""user32.dll""")] public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);' -name WinUser -ns API -PassThru ;$User32::SystemParametersInfo(0x009F, %Scaling%, $null, 1)>$null"

Du kannst die Batch auch mit den Parametern 0 ,1 ,2 oder 3 aufrufen

  • für 100% :
changeMonitorScale.cmd 0
  • für 150%
changeMonitorScale.cmd 2

....oder Verknüpfungen anlegen (am besten an die Taskleiste anpinnen)

Bild zum Beitrag

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
 - (Computer, Windows, programmieren)
BigSanch  13.10.2023, 10:24

Kann man das auf einen speziellen Bildschirm anwenden? Wenn ich zb 3 oder 2 Habe, dass das nur auf Hauptschirm oder meinentwegen Monitor2 angewand wird?, denn dieser Befehl ist schonmal eine sehr gut Hilfe aber in meinem Fall wendet er das auf alle Bildschirma an

0

Die Einstellung wird in der Registry unter den beiden Keys HKLM\System\CurrentControlSet\Control\GraphicsDrivers\ScaleFactors\%MonitorID%
und
HKCU\Control Panel\Desktop\PerMonitorSettings\%MonitorID%
gespeichert. Einfach diese Eintrag entsprechend per bat anpassen und fertig.

Woher ich das weiß:Berufserfahrung – Mehrere Jahre Erfahrung Als Administrator/IT-Supporter
Erzesel  11.04.2022, 19:51
Einfach diese Eintrag entsprechend per bat anpassen und fertig.

🤭🤫

hast Du das auch mal selber probiert? Dir ist schon Klar, das sich für jemanden, der keine tiefgehenden Erfahrungen mit Batch hat zum Fiasko entwickeln könnte? Die meisten DAU-Unfälle gehen auf eine zerschossene Registry...

Zumal die Keys der Monitore nicht unbedingt nutzerfreundlich sind:

HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings\PTS0899708021685_20_07D7_EA^32824AA8EB2229C736A480042FCE9CDF
HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings\SAM0589H9XS912724_26_07D9_7B^26B5A147CB8A8D723C1BDEEFC80F6797
HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings\SAM0A7A0_2E_07DC_57^35A5A689872E8330FDDD076AA1A45FD5

und auch nicht unbedingt übertragbar...

Hast Du genug vertrauen in meine "Künste" für eine "Blindflug" durch Deine Registry? Ich kenne Deine MonitorIDs nicht!

set "Scaling=1" 
for /f "tokens=*" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings"^|find "HKEY_"') do (
  reg add "%%a" /v DpiValue /t REG_DWORD /d %Scaling% /f
)
shutdown /l /f
pause

...und natürlich wird es auch erst nach erneutem Login wirksam...🤮

Da ist es bequemer die Sache in den Einstellungen zu Regeln.

1
emer90  12.04.2022, 08:54
@Erzesel
Dir ist schon Klar, das sich für jemanden, der keine tiefgehenden Erfahrungen mit Batch hat zum Fiasko entwickeln könnte? Die meisten DAU-Unfälle gehen auf eine zerschossene Registry...

Ist mir durchaus bewusst. ich hab auch mal klein angefangen.. und mir die ein oder andere Windowsinstallation versaut. Aber ganz ehrlich? Das ist jetzt 20 Jahre her und ich kann sagen das man durch Fehlersuche am meisten lernen kann.

Aber zurück zum Thema. Sachen wie eine Sicherung der Registry oder eine Vollsicherung sollte man eigentlich als gegeben voraussetzen können. Besonders wenn es sich um ein Produktivsystem und keine Testumgebung handelt.

hast Du das auch mal selber probiert?

Nein habe ich nicht, da ich die Funktion nicht benötige. Ich habe auch keine Lösung gegeben, sondern nur eine Richtung gezeigt. Nächster logischer Schritt wäre natürlich sich zu informieren, welche Werte dort existieren, und wie man diese ändern muss um sein Wunschziel zu erreichen. Klar deine Lösung ist einfacher und sauberer, jedoch wird da dann nur Copy&Paste gemacht, und nichts bei gelernt.

0