热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#–UWP:BrightnessOverrideStartOverride逻辑

有人知道StartOverride方法逻辑吗?来自文档:The request to start overriding does not mean that the screen brightnes

有人知道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.


推荐阅读
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
author-avatar
吴玉占_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有