我正在使用桌面复制 api来抓取屏幕内容,事实证明,新的夜灯模式(德语中的“Nachtmodus”)并未应用于抓取的屏幕内容。
如何读取(如果可能直接在 C# 中)夜间模式状态(启用,颜色偏移量)?
或者
如何告诉 Windows 使用桌面复制 api 给我颜色偏移的图像?
基本上,我想知道这些红框中的配置状态:
背景:我正在研究流光溢彩的实现,如果启用了夜灯模式,颜色偏移不会反映在我屏幕周围的 LED 中,因此屏幕内容和“屏幕周围”之间的颜色会关闭。
此方法适用于 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;
}
}
您可以检查的输出
GetDeviceGammaRamp
来自 Win API 的函数。将输出与夜灯 ON 和 OFF 进行比较,您应该可以检测到它。
或者您可以尝试监视此 Reg 键的更改
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,..."
虽然它不是很可靠,因为我认为它要求这个特定的切换应该是可见的......