--- ACHTUNG --- Computerthema --- GEFAHR --- (und auch noch Windows) ---
Ich habe hier ein Computerthema, das mich aber schon eine ganze Weile beschäftigt hat und einige Softwarefrickelei beeinhaltet.
Ich habe ein Tablet, das unter Windows 10 läuft. Wer Win10 für Tablets oder Schlepptops kennt, weiß, dass man die Bildschirmhelligkeit recht einfach über einen Klick auf das Akkusymbol und dort die große Schaltfläche ändern kann, aber nur in 25%-Schritten. Das ist mir zu grob. Insbesondere Abends im Bett reichen 10-15% völlig aus, alles andere ist zu hell. Das einzustellen ist aber mit viel Klickerei verbunden.
Vor fast zwei Jahren habe ich mir schon ein Power-Shell-Skript geschrieben, mit dem man über schön große Buttons vordefinierte Helligkeiten einstellen kann. Gesetzt wurde das mit einer im Internet häufig zu findenden Funktion 'WmiSetBrigthness'. Das funktionierte zwar, war aber nicht sehr dauerhaft. Sobald man die externe Stromversorgung an- oder abgesteckt hat, wurde die im Energieschema festgelegte Helligkeit wiederhergestellt, meistens also 25%, manchmal auch was anderes aus den 25%-Stufen, je nach dem, was vorher über das Akkusymbol eingestellt war. Manchmal wurde diese (zu hohe) Helligkeit auch beim reaktivieren aus dem Standby gesetzt. Insgesamt also eher unbefriedigend.
Dass man die Bildschirmhelligkeit auch dauerhaft über das Akkusymbol ändern kann, hat mir keine Ruhe gelassen, das müsste doch auch für andere Programme zugänglich sein. Ist es auch, nur ist das etwas komplizierter. Setzten kann man die Helligkeit auch über die Funktion 'powercfg' mit den richtigen (höhöhö) Parametern. Man kann Parameter der verfügbaren Energieschemata ändern, dazu gehört auch die Bildschirmhelligkeit bei Netz- und bei Akkubetrieb. Dafür braucht man nur die passenden GUIDs. Öhm, jaaaa... Mit etwas Skript-Frickelei bekommt man die GUID des aktuell verwendeten Energieschemas raus und die der Bildschirmhelligkeitseinstellung und der Funktionsgruppe, zu der das gehört auch. Das alles packt man in einen entsprechenden Befehl und man bekommt... Fehlermeldungen.
Warum? Weil die Parameterübergabe uneinheitlich ist. Überall (insbesondere bei Microsoft selbst) steht geschrieben, dass man das so aufruft 'powercfg -Unterfunktion Parameter', die Hilfe ('powercfg -?' oder 'powercfg /?' ist egal) erzählt was von 'powercfg /Unterfunktion Parameter'. In der Shell (cmd.exe) funktioniert nur die Variante mit Bindestrich '-'. Genauso geschrieben auch in einem Beispiel für die Power-Shell, z.B. 'powercfg -getactivescheme' funktioniert wunderbar. Nur bei den Unterfunktionen 'setacvalueindex' und 'setdcvalueindex' mosert die Power-Shell rum, dass das unbekannte Funktionen wären. Mit Slash '/' funktioniert dass dann ohne Fehlermeldung, der Bildschirm behält aber trotzdem seine Helligkeit bei...
Solange, bis man rausfindet, dass man die Änderung noch aktivieren muss, indem man das eigentlich aktuelle Energieschema noch mal als aktiv setzen muss ('powercfg /setactive $SchemeGUID'). Dann, endlich, wird die Bildschirmhelligkeit ordentlich gesetzt.
Hurra! Über ein Jahr dran rum geeiert und endlich zu einem Abschluss gebracht!
Wenn jemand das Skript haben möchte, kann er sich gerne melden.
Edit: Es haben sich welche gemeldet. Deshalb habe ich das Skript angehängt. Ist nicht schön, aber was soll's.
Um das einfach aufzurufen, macht man sich eine Verknüpfung auf dem Desktop zu 'powershell.exe'. Bei mir ist das 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'. Diese Verknüpfung bearbeitet man dann und fügt beim Verknüpfungsziel noch hinzu ' -WindowStyle Hidden -Command "& 'FullPathAndNameOfSkript.ps1'" '. Das '-WindowsStyle Hidden' sorgt dafür, dass kein Shellfenster für das Skript auf gemacht wird, das wird sowieso nicht gebraucht. Das '-Command' ist der Hinweis, das mit dem Start der Power-Shell direkt ein Kommando übergeben werden soll. Das Kommando steht in Anführungszeichen (") und beginnt mit dem kaufmännischen &. Dahinter wird in Hochkommata eingeschlossen das Skript mit seinem kompletten Pfad geschrieben, also zum Beispiel 'D:\MeineSkripte\PowerShell\SetScreenBrigthness.ps1'. Wichtig ist, dass dann am Schluss ein Hochkomma und Anführungszeichen hintereinander kommen. Im Skript habe ich das auch noch mal oben rein geschrieben.
Wenn man das Skript ausführt, bekommt man ein Fenster mit 13 Buttons, 12 für die Helligkeit und ein Cancel. Die Helligkeitsbuttons sind mit den Prozentwerten beschriftet. Wenn man das ändern möchte, kann man das im Code für jeden Button an den Stellen mit
Code: Alles auswählen
$Button2.Text = "5%"
$Button2.Add_Click({$global:x=5;$objForm.Close()})
machen.
Die erste Zeile ist für die Button-Beschriftung, in der zweiten Zeile ist die Zuweisung '$global:x=5' die Stelle, an der der entsprechende Prozentwert für die weitere Verarbeitung gespeichert wird.
Viel Spass damit...
Edit2: Damit überhaupt Skripte ausgeführt werden dürfen, muss man ein Mal ein Power-Shell-Fenster aufmachen und 'Set-ExecutionPolicy Unrestricted' eingeben. Damit werden dann auch nicht-signierte, also auch selbst geschriebene Skripte ausgeführt. In der Grundeinstellung werden nur direkt eingegebene Befehle, aber keine Skripte ausgeführt.