本主题介绍了 Windows 应用如何在已连接的设备之间提供动态照明效果,这些设备实现了开放的 人机接口设备 (HID)灯光和照明标准。 特别是,针对具有一个或多个灯具(照明灯、LED、灯泡等)的设备的 LampArray 规范。
- 重要 API:Windows.Devices.Lights
概述
动态照明可让Windows应用开发人员和最终用户控制照明效果,并在兼容外围设备和其他连接设备之间同步照明效果。 这些功能可用于打造连贯一致的体验,为用户带来娱乐、提高工作效率,甚至让他们在整个 Windows 中的体验更易于访问。
支持的应用类型和平台
- Win10 版本 1809(2018 年 10 月)及更高版本。
- 适用于前台 UWP 和 Win32 应用。
- Windows 11 内部版本 23466(预览版)或更高版本。
- 适用于前台和背景(环境)UWP 和 Win32 应用。
- Xbox GDK 2023 年 3 月更新 1 及更高版本。
- 请参阅游戏开发工具包(GDK)中的照明 API。
支持的设备和设备类型
- 键盘或小键盘
- 鼠标
- 游戏控制器(游戏板、飞行杆、方向盘等)。
- 外围设备(如扬声器、鼠标垫、麦克风、摄像头等)。
- 场景(会议室/舞台/区域设备,如灯泡、聚光灯、闪闪灯、广告牌、相机闪光等)。
- 通知(用户注意设备,如警报、语音助理等)。
- 机箱(RAM、主板、风扇等内部电脑组件)。
- 可穿戴设备(耳机、手表、健身跟踪器、鞋子等配件)。
- 家具(如椅子、桌子、书柜等)。
- 艺术(如绘画或雕塑)。
- 耳机(专为头部设计的配件,如耳机或麦克风)。
Windows 应用可以在应用于前台运行时(从 Windows 10 开始)以及在后台运行时(也称为 环境照明,从 Windows 11 开始)控制 HID LampArray 设备。
设备优先级
Windows根据应用状态确定动态照明的优先级。 默认情况下,除非用户在“设置”中另有指定,否则 LampArray 设备的控制权始终分配给前台应用。 如果两个或多个环境后台应用尝试控制 LampArray 设备,系统会将控制权分配给在“设置”中确定优先级的应用。
背景(环境)照明
Windows 中的“环境”API。Devices.Lights使后台应用程序能够控制 LampArray 设备,而用户正在前台与不相关的应用交互(例如驱动同步照明效果的音乐应用)。
应用可以接收 LampArray.AvailabilityChanged 事件,具体取决于用户设置。 与 DeviceWatcher 类结合使用,应用可以跟踪和管理所有已连接/断开连接的 LampArray 设备,并查看用户期望应用控制哪些设备。 一个示例是这样的 UI:为每个已连接设备显示一个图标,将不可用的设备对应图标灰显,并提供指向 动态照明 设置页的链接,用户可在其中更改前台/后台应用偏好设置。
用户设置
用户可以通过“设置 - 个性化 ->> 动态照明”屏幕自定义其 LampArray 设备体验(前台和背景)。
连接后,兼容的设备将显示在页面顶部的设备卡中,用户可以在其中更改单个设备设置。
全局动态照明设置位于设备卡下方(这些设置的更改会影响所有连接的设备)。
- “ 在我的设备上使用动态照明 ”开关允许用户打开或关闭动态照明。 当动态照明关闭时,设备应使用其默认的非动态照明行为。 动态照明包括一组内置的基本效果。
- 前台的兼容应用始终控制照明,允许用户打开或关闭默认的动态照明应用行为。 当此功能关闭时,即使某个想要取得控制权的前台应用当前处于活动状态,后台应用仍可控制其关联的设备。
- “背景光控制”部分可让用户设置已安装应用的优先级,这些应用已将自己注册为环境背景控制器。 将某个应用拖到列表顶部会将其设为优先,并确保它比列表中的其他应用更优先控制设备。 环境背景设置绑定到设备及其连接的端口。 如果拔下电源,然后将 LampArray 插入其他(USB)端口,它将显示为其他设备。
- “亮度”滑块允许用户在其设备上设置 LED 亮度。
- “ 效果 ”下拉列表允许用户为其设备选择颜色和效果。
注释
如果未在 背景灯光控制中选择设备,则该设备将以“自主模式”运行。
这在 HID 规范中定义为硬件回退到其固件定义的默认行为的模式。 例如,当 OS 未主动控制设备或用户选择退出设备的 OS 参与时,设备可能有预编程的视觉效果,这是默认设置。 设备必须响应 HID 命令才能从自治模式返回,以确保与用户期望的顺利交互。
打包和应用标识
环境后台应用程序必须在应用清单中声明“com.microsoft.windows.lighting”AppExtension(有关如何执行此操作的详细信息,请参阅 创建和托管应用扩展)。 此要求由 AmbientLightingServer 强制执行,它只接受来自 AmbientLightingClient 的连接,且该客户端必须位于具有包标识(打包应用)并支持该扩展的进程中。 必须满足此要求,使用户能够定义已安装应用的策略,然后在运行时关联该策略。
环境应用程序需要应用标识,以便可以在运行时确定用户首选项。 安装应用程序后,如果使用环境 API,系统需要将应用的正在运行实例与用户的首选项相关联。 此外,使应用在设置中向用户可用需要一个安装后项目,它向系统指示你的应用是环境照明 API 的合法用户。
此标识要求是通过 MSIX 打包(以前称为 APPX 的Microsoft部署和打包技术)实现的。
如果已在使用 MSIX 打包进行打包和安装,则无需进一步要求。
如果有未打包的应用,则需要执行其他步骤才能获取应用程序标识。 可以将安装迁移到完整的 MSIX,也可以使用 MSIX 的简化 稀疏打包和外部位置 功能。 采用外部位置的稀疏打包旨在让已安装的现有应用具备应用标识所带来的优势,而无需将现有安装程序或安装流程完整转换为 MSIX。 这是安装/安装中的一个新步骤,它使用工具创建 MSIX 包来表示要安装的应用。
必须定义描述安装的 AppXManifest.xml 打包清单 。 MSIX 包是使用 MakeAppXPackage 工具创建的。 在安装时,使用指定已安装可执行文件的位置的 程序包管理器 API 安装 MSIX 包。 为方便起见, add-appxpackage PowerShell 脚本 也会包装此 API 行为。 或者,可以在安装时使用 AddPackageByUriAsync 来安装 MSIX 包。
对于未打包应用的安装,你的可执行文件还必须满足 并行部署应用程序清单 要求。
有关打包和解压缩的应用的更深入说明,请参阅 部署概述 。
示例
演示如何使用 Windows.Devices.Lights 和 Windows.Devices.Lights.Effects API 控制外围设备的 RGB 灯光。
演示如何从桌面屏幕中提取具有代表性的单个颜色,并使用它在连接的 RGB 设备上照亮 LED 灯。