gpt4 book ai didi

c# - UWP:BrightnessOverride StartOverride 逻辑

转载 作者:太空狗 更新时间:2023-10-30 01:29:57 26 4
gpt4 key购买 nike

有谁知道StartOverride方法逻辑?来自文档:

The request to start overriding does not mean that the screen brightness level always changes to match the specified override brightness level. It's still up to the system to decide whether or not to honor this override request.

我编写了调试亮度变化的简单方法:

protected override void ApplyBrightness(double brightness)
{
var brightnessOverride = BrightnessOverride.GetForCurrentView();
Debug.WriteLine($"Try to change brightness from {brightnessOverride.BrightnessLevel} to {brightness}");

void overrideActiveChangedHandler(BrightnessOverride sender, object e)
{
sender.IsOverrideActiveChanged -= overrideActiveChangedHandler;
Debug.WriteLine($"BrightnessOverride IsOverrideActive changed to {sender.IsOverrideActive}");
}

void brightnessLevelChangedHandler(BrightnessOverride sender, object e)
{
sender.BrightnessLevelChanged -= brightnessLevelChangedHandler;
Debug.WriteLine($"BrightnessOverride BrightnessLevel changed to {sender.BrightnessLevel}");
}

brightnessOverride.IsOverrideActiveChanged += overrideActiveChangedHandler;
brightnessOverride.BrightnessLevelChanged += brightnessLevelChangedHandler;

brightnessOverride.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);

brightnessOverride.StartOverride();
}

得到如下结果:

Try to change brightness from 0.83 to 0.23
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.23
Try to change brightness from 0.23 to 0.53
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.53
Try to change brightness from 0.53 to 0.14
Try to change brightness from 0.53 to 0.25
Try to change brightness from 0.53 to 0.7
BrightnessOverride IsOverrideActive changed to True
BrightnessOverride BrightnessLevel changed to 0.7

从这个测试中我可以看出,对于第一次亮度变化,可以降低亮度 (0.83 -> 0.23),但之后亮度只能增加 (0.23 -> 0.53, 0.53 -> 0.7)。随后尝试降低它失败了:0.53 -> 0.14, 0.53 -> 0.25

有人对这种奇怪的行为有解释吗?也许我错过了什么?是否有 100% 可靠的解决方案来控制应用程序亮度?

我的系统:Windows 10 Pro,版本 1709,操作系统内部版本 16299.125。应用程序目标和最低版本是 Windows 10 Creators Update(10.0;Build 15063)

最佳答案

我通过实验发现,每次调用 BrightnessOverride.GetForCurrentView() 都会返回一个新的 BrightnessOverride 实例。一个证据是,即使您在每次调用方法时向实例添加新的事件处理程序,输出也只会出现一次。

这意味着,当您多次调用该方法时,您会创建多个 BrightnessOverride 实例,每个实例都有自己的值。我认为,因为当有人从您的屏幕上扫描优惠券代码时,API 通常用于使屏幕更亮,当出现较低亮度覆盖而另一个高亮度覆盖处于事件状态时,它会被忽略(以继续满足高亮度请求).

如果您想将亮度更改为任何值,您只需确保您正在重复使用从 GetForCurrentView 调用中检索到的第一个实例,因为通过在该实例上设置新的亮度,您将“取消”原始请求。

private BrightnessOverride brightnessOverride = null;

private void InitializeBrightnessOverride()
{
brightnessOverride = BrightnessOverride.GetForCurrentView();
Debug.WriteLine($"Try to change brightness from {brightnessOverride.BrightnessLevel} to {brightness}");

void overrideActiveChangedHandler(BrightnessOverride sender, object e)
{
sender.IsOverrideActiveChanged -= overrideActiveChangedHandler;
Debug.WriteLine($"BrightnessOverride IsOverrideActive changed to {sender.IsOverrideActive}");
}

void brightnessLevelChangedHandler(BrightnessOverride sender, object e)
{
sender.BrightnessLevelChanged -= brightnessLevelChangedHandler;
Debug.WriteLine($"BrightnessOverride BrightnessLevel changed to {sender.BrightnessLevel}");
}

brightnessOverride.IsOverrideActiveChanged += overrideActiveChangedHandler;
brightnessOverride.BrightnessLevelChanged += brightnessLevelChangedHandler;
}

protected override void ApplyBrightness(double brightness)
{
brightnessOverride.SetBrightnessLevel(brightness, DisplayBrightnessOverrideOptions.None);

brightnessOverride.StartOverride();
}

现在你可以调用:

InitializeBrightnessOverride();
ApplyBrightness(0.7);
ApplyBrightness(0.14);

只需重用实例就足以完成这项工作。另外作为提示 - 要将屏幕恢复到原始亮度,您可以调用 StopOverride

关于c# - UWP:BrightnessOverride StartOverride 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com