在Windows 11中使用支持HDR的显示器时,我们可以在“设置”>“系统”>“显示”>“HDR”下使用“SDR内容亮度”滑块来控制屏幕上常规非HDR元素的亮度。例如,如果显示器最大亮度为400尼特,滑块设置为60%,则SDR内容以240尼特的亮度显示。Windows 10也有类似的功能。我想能够以编程方式更改滑块的值,这样我就可以在白天拥有更明亮的桌面,在晚上则更暗淡。通过WMI或DDC / CI更改亮度的“旧”方法在启用HDR的显示器上不起作用。我使用ProcessMonitor查看滑块的操作,但生成了太多条目,我只能看到它更改了注册表键Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\MonitorDataStore\DELA1E4#G7IYMxgwAAgX_10_07E6_A1\SDRWhiteLevel。在我的显示器上,该值从1000(0%)到3500(50%)到6000(100%)以十进制表示,其中1000等于80尼特。一旦SystemSettings.exe更改了注册表值,它会调用D3D12中的某些内容来实际应用更改。查阅Microsoft Win32 API的文档后,我找不到任何相关信息。请问有人知道如何使其工作吗?任何语言都可以,例如PowerShell、C#、C ++、Python等。谢谢。
DISPLAYCONFIG_SDR_WHITE_LEVEL
可能是你正在寻找的内容。顺便说一下,如果你需要进行注册表比较,regshot可能是更好的工具。 - mirhDISPLAYCONFIG_DEVICE_INFO_SET_SDR_WHITE_LEVEL
。不过如果有帮助的话,经过大量的搜索,我找到了一个名为Windows::Graphics::Display::CDisplayInformation::_CallbackSdrWhiteLevelChanged
的函数(可能与WNF_DX_SDR_WHITE_LEVEL_CHANGED
事件有关),而相应的控制面板应该是在 SettingsHandlers_PCDisplay.dll 文件中实现的(还有更多提到 SDRWhiteLevelSliderValueChanged 和 SystemSettings_Display_AdvancedDisplaySettingsHDRStatus_SDR 的地方,应该是 Windows.UI.SettingsAppThreshold 中对应的设置键)。 - mirhDISPLAYCONFIG_DEVICE_INFO_SET_SDR_WHITE_LEVEL
。不过,如果有帮助的话,经过多次搜索,我找到了一个Windows::Graphics::Display::CDisplayInformation::_CallbackSdrWhiteLevelChanged
函数(可能与WNF_DX_SDR_WHITE_LEVEL_CHANGED
事件相关),而且相对应的控制面板应该在SettingsHandlers_PCDisplay.dll中实现(还有更多关于SDRWhiteLevelSliderValueChanged的提及以及对SystemSettings_Display_AdvancedDisplaySettingsHDRStatus_SDR的引用,这应该是Windows.UI.SettingsAppThreshold中对应的设置键)。 - undefined