在 Windows 10 中获取夜灯模式的状态

Get status of night light mode in Windows 10

我使用的desktop duplication api to grab the screen content and as it turns out, the new night light mode(德语中的'Nachtmodus')没有应用在抓取的屏幕内容中。

如何读取(如果可能的话直接在 c# 中)夜间模式状态(启用、颜色偏移量)?

如何告诉 Windows 使用桌面复制 api 给我颜色偏移图像?

基本上,我想知道这些红框内配置的状态:


背景:我正在开发 ambilight implementation,如果启用了夜灯模式,颜色偏移不会反映在我屏幕周围的 LED 中,因此屏幕内容和 'around screen'.

你可以检查

的输出
GetDeviceGammaRamp

来自 Win 的函数 API。将输出与 Night Light ON 和 OFF 进行比较,您应该可以检测到它。

或者您可以尝试监控此注册表项的变化

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount$$windows.data.bluelightreduction.settings\Current

我想我找到了反映当前夜灯状态的注册表项。

[HKEY_CURRENT_USER\Control Panel\Quick Actions\Control Center\QuickActionsStateCapture]
"Toggles"="Toggles,...,Microsoft.QuickAction.BlueLightReduction:true,..."

虽然它不是很可靠,因为我认为它要求这个特定的切换应该是可见的...

此方法适用于 Windows 10 Version 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;
    }
}