Konfigurieren Sie Windows Creators Update Night Light über die Registrierung

3992
David F. Severski

Wie kann die neue Nachtlichtfunktion in Windows 10 (Pro) Creators Update über die Registrierung konfiguriert werden?

Ich möchte neue / aktualisierte Installationen automatisch konfigurieren, wenn ich mein bevorzugtes Konfigurationsmanagement-Tool (Chef) verwende. Die Systeminspektion über Sysinternals Process Monitor zeigt, dass ein binärer DataSchlüssel tief aktualisiert wird. Dies HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Currentist jedoch ein großer REG_BINARY-Blob und nicht sehr nützlich.

Hilfe bei einer anderen Registrierung, PowerShell oder einer anderen für die Automatisierung geeigneten Methode zum Konfigurieren der Nachtlichtfunktion wäre sehr hilfreich!

9
Verwenden Sie [RegfromApp] (http://www.nirsoft.net/utils/reg_file_from_application.html), um es besser zu verfolgen. Es generiert die REG-Datei. Vielleicht kann er es entschlüsseln magicandre1981 vor 7 Jahren 0
Danke für den Vorschlag @ magicandre198. Der Prozessmonitor gibt mir den genauen Schlüssel und Wert, der geändert wird. Das Problem ist, dass der Schlüssel ein binärer Schlüssel ist und es keine Decodierungsdokumentation für die Erstellung dieses Datenschlüssels gibt. In Anbetracht des fraglichen Funkpfads ist dies möglicherweise kein Abschnitt, der direkt geändert werden soll (möglicherweise ein Speicherort für zwischengespeicherte Einstellungen). Ich hoffe, dass sich jemand mit der neuen Nachtlichtfunktion auseinandersetzen kann, da es bisher nicht viele Informationen darüber gibt. David F. Severski vor 7 Jahren 0
Wie gesagt, verwenden Sie Regfromapp, es werden .reg-Dateien für jede Änderung generiert. magicandre1981 vor 7 Jahren 0
Wir sprechen hier möglicherweise über Kreuz. :) Ich kenne den Schlüssel und den Inhalt des Schlüssels, der eingestellt wird. Es ist nur ein unbeholfener Fleck ohne Dokumentation. Ich habe https://github.com/jaapbrasser/SharedScripts/tree/master/Set-BlueLight gefunden, das ein wenig hackt, um eine PS-Schnittstelle für die Funktion bereitzustellen, aber es ist nicht klar, wie die verschiedenen Einstellungen miteinander kombiniert werden. Ich bin wirklich auf der Suche nach Dokumentation (und einer Schnittstelle), wie diese binäre Zeichenfolge zusammengesetzt wird. David F. Severski vor 7 Jahren 1

1 Antwort auf die Frage

8
Ben N

Mit ein paar Experimenten gelang es mir mehr oder weniger, das Format dieses Registrierungswerts zu ermitteln (siehe unten für Details dazu).

Ich habe dieses PowerShell-Skript erstellt:

Function Set-BlueLightReductionSettings { [CmdletBinding()] Param ( [Parameter(Mandatory=$true)] [ValidateRange(0, 23)] [int]$StartHour, [Parameter(Mandatory=$true)] [ValidateSet(0, 15, 30, 45)] [int]$StartMinutes, [Parameter(Mandatory=$true)] [ValidateRange(0, 23)] [int]$EndHour, [Parameter(Mandatory=$true)] [ValidateSet(0, 15, 30, 45)] [int]$EndMinutes, [Parameter(Mandatory=$true)] [bool]$Enabled, [Parameter(Mandatory=$true)] [ValidateRange(1200, 6500)] [int]$NightColorTemperature ) $data = (2, 0, 0, 0) $data += [BitConverter]::GetBytes((Get-Date).ToFileTime()) $data += (0, 0, 0, 0, 0x43, 0x42, 1, 0) If ($Enabled) {$data += (2, 1)} $data += (0xCA, 0x14, 0x0E) $data += $StartHour $data += 0x2E $data += $StartMinutes $data += (0, 0xCA, 0x1E, 0x0E) $data += $EndHour $data += 0x2E $data += $EndMinutes $data += (0, 0xCF, 0x28) $tempHi = [Math]::Floor($NightColorTemperature / 64) $tempLo = (($NightColorTemperature - ($tempHi * 64)) * 2) + 128 $data += ($tempLo, $tempHi) $data += (0xCA, 0x32, 0, 0xCA, 0x3C, 0, 0) Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current' -Name 'Data' -Value ([byte[]]$data) -Type Binary } 

Speichern Sie es als .ps1Datei und befolgen Sie die Anweisungen im Abschnitt Aktivieren von Skripts des PowerShell-Tag-Wikis . Sie können dann den Inhalt des Skripts durch Dot-Sourcing importieren:

. ./bluelightmanagement.ps1 

Und dann verwenden Sie die Cmdlet-ähnliche Funktion, die es bereitstellt:

Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000 

die Ergebnisse

Die Einstellungen-App aktualisiert sogar alles (außer den Farbregler) sofort, wenn Sie die Blaulichtreduzierungsseite geöffnet haben, wenn Sie den Befehl ausführen.

Das Format

  • 4 konstante Bytes - scheinbar eine Signatur, die allen CloudStoreWerten gemeinsam ist
  • Der zuletzt geänderte Zeitpunkt der Einstellung als 64-Bit- FILETIMEWert (8 Byte, Little Endian)
  • 8 weitere konstante Bytes
  • Die Bytes sind 2dann, 1wenn die Blaulicht-Reduzierungsfunktion aktiviert ist, einfach weg, wenn sie deaktiviert ist
  • 3 weitere konstante Bytes
  • Die Stunde der Startzeit (1 Byte)
  • 1 konstantes Byte
  • Die Minuten der Startzeit (1 Byte)
  • 4 konstante Bytes
  • Die Stunde der Endzeit (1 Byte)
  • 1 konstantes Byte
  • Die Minuten der Endzeit (1 Byte)
  • 3 konstante Bytes
  • Die nächtliche Farbtemperatur in Kelvin, nach einigen seltsamen binären Berechnungen (2 Bytes)
  • 7 konstante Bytes

Die Farbtemperatur wird in Little Endian als zwei Byte gespeichert. Der Wert mit dem höchsten Wert ist der ganzzahlige Teil des Ergebnisses der Division der Temperatur durch 64. Das Byte mit dem niedrigen Wert ist der Rest, der mit zwei multipliziert und dann zu 128 addiert wird. Um die Temperatur aus den Bytes zu berechnen, multiplizieren Sie das High-Byte mit 64 und addieren Sie, was Sie erhalten, wenn Sie die Differenz zwischen dem niedrigen Byte und 128 durch zwei teilen.

Ich versuche ein Skript zu schreiben, um nur das Nachtlicht ein- und auszuschalten. Wenn ich mich nicht irre, sollten die Bytes 20 und 21 anzeigen, ob die Funktion aktiviert ist (gemäß Ihrer Beschreibung mindestens seit 4 + 8 + 8 = 20), aber wenn ich den Registrierungseintrag mit regedit betrachte, kann ich das nicht Bytes 21 ändern sehen, ich sehe überhaupt keine Änderung für diese Angelegenheit. Ich habe sichergestellt, dass ich das Regedit-Fenster mit F5 auffrische und es sogar wieder öffnete, nachdem ich die Nachtlichtfunktion von der Benutzeroberfläche aus umgeschaltet habe. Hast du eine Vorstellung davon, was los ist? Gaboik1 vor 6 Jahren 0
Mit diesem Dienstprogramm von NirSoft http://www.nirsoft.net/articles/find_modified_time_registry_key.html habe ich festgestellt, dass der von Ihnen angegebene Registrierungsschlüssel überhaupt nicht geändert wird, wenn ich die Nachtlichtfunktion aktiviere und deaktiviere. Vielleicht hat Microsoft es im letzten Update geändert? Gaboik1 vor 6 Jahren 1
@ Gaboik1 Dieser Registry-Wert ist insofern merkwürdig, als sich sein Layout stark ändert. Das von mir beschriebene Format ist nur eines, das funktioniert, nicht notwendigerweise das einzige. Ich kenne keinen Weg, um die Daten konsistent aus diesem Wert auszulesen, aber ich habe es unter Windows 10 1709 getestet und mit diesem Skript eingestellt, dass die Einstellungen weiterhin funktionieren. Ben N vor 6 Jahren 1
Wenn ich dies in .net schreibe, stellte ich fest, dass es tatsächlich einen Zeitplan verwendet (vs Code, der bei Sonnenaufgang / Sonnenuntergang zu tun scheint). Ich musste die Bytes 0xC2,0x0A, 0x00 kurz vor CA 14 0E hinzufügen. Dann würde es ausgelöst und auf Stunden basierend gesetzt. Sonst hat es geklappt. Am 1709. Mgamerz vor 6 Jahren 0