Получить статус ночного режима в Windows 10
Я использую api для дублирования рабочего стола для захвата содержимого экрана, и, как оказалось, новый режим ночного освещения ("Nachtmodus" на немецком языке) не применяется к содержимому экрана захвата.
Как мне прочитать (если это возможно прямо в C#) статус ночного режима (включен, величина цветового сдвига)?
или же
Как я могу сказать Windows дать мне изображение со сдвигом цвета, используя API дублирования рабочего стола?
По сути, я хочу знать, что настроено внутри этих красных блоков:
Справочная информация: я работаю над реализацией Ambilight, и если включен режим ночного освещения, смещение цвета не отражается на светодиодах вокруг моего экрана, поэтому цвета не отображаются между содержимым экрана и "вокруг экрана".
4 ответа
Вы можете проверить вывод
GetDeviceGammaRamp
Функция из Win API. Сравните выходной сигнал с Night Light ON и OFF, и вы должны его обнаружить.
Или вы можете попробовать следить за этим ключом Reg на предмет изменений
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current
Этот метод работает у меня в Windows 10 версии 2004
private static bool IsNightLightEnabled()
{
const string BlueLightReductionStateKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.bluelightreductionstate\windows.data.bluelightreduction.bluelightreductionstate";
using (var key = Registry.CurrentUser.OpenSubKey(BlueLightReductionStateKey))
{
var data = key?.GetValue("Data");
if (data is null)
return false;
var byteData = (byte[])data;
return byteData.Length > 24 && byteData[23] == 0x10 && byteData[24] == 0x00;
}
}
Вы должны отслеживать другой ключ Reg для изменений
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.bluelightreduction.bluelightreductionstate\Current\Data
Я думаю, что нашел запись в реестре, которая отражает текущий статус ночника.
[HKEY_CURRENT_USER\Control Panel\Quick Actions\Control Center\QuickActionsStateCapture]
"Toggles"="Toggles,...,Microsoft.QuickAction.BlueLightReduction:true,..."
Хотя это не очень надежно, потому что я думаю, что для этого необходимо, чтобы этот конкретный переключатель был виден...