控制 Dell XPS 笔记本电脑的 LED 灯






4.25/5 (5投票s)
利用戴尔的 XPS LightFX API 创建您自己的 LED 效果。
引言
我最近偶然发现了一篇 Scott Quibell 于 2006 年发表的关于更改 XPS 笔记本电脑 LED 灯的文章。我拥有一台 XPS M1710,并决定自己动手探索如何控制 LED 灯。
我首先从戴尔下载了 QuickSet,这是一个允许您控制笔记本电脑上许多项目的应用程序。它甚至内置了一些 LED 的效果,但没有一个能让我满意。0.5 秒的最小等待时间让效果显得跳跃,不符合我的口味,于是我开始搜索,想看看戴尔是如何通过应用程序控制 LED 的。
我找到了使用 Dell XPS LightFX 控制 LED 的方法——一个预先构建的 C++ 库,用于控制 LED。我想在 .NET 应用程序中使用它,所以唯一的选择就是将 XPS Light FX 中附带的 GamingSDK.dll 拿出来,并为其编写一个 .NET 包装器。我将这个库命名为 LightFX。
要求
要使用 XPS LightFX,您需要以下条件:
- 一台 XPS 笔记本电脑。(请注意,LightFX 网站声称其仅适用于 M1710 笔记本电脑。这并不完全准确,因为我发现其他型号,如 M170,也支持 XPS Light FX。此外,XPS 台式机似乎也支持。)
- QuickSet,用于测试 XPS LightFX 是否在您的电脑上工作。
- XPS LightFX
LightFX
LightFX 是一个简单的 .NET 包装器,封装了 XPS LightFX。我以 Björn Carlsson 的代码为模板设计了这个库。我的代码与他的非常相似,但经过简化和修改,以符合我自己的编码标准。
LightFX 中包含的文件:
- Capability.cs
- Color.cs
- GamingSDK.dll
- Intensity.cs
- Led.cs
- NativeSettings.cs
- Setting.cs
- Touchpad.cs
- XPSLightFX.cs
能力的枚举(notebook
、desktop
、none
)。
可能的 LED 颜色的枚举。
C++ DLL,作为内容添加并设置为“始终复制”,以便与使用 LightFX 的任何项目一起分发。
LED 亮度或强度的级别枚举。
管理的 LED 控制工作流程的暴露类。
一个结构体,用于将 LED 设置存储在内存中,以便传递给 C++ 代码。
包含对 LED 设置名称进行修改的 .NET 结构体。
一个枚举,包含触摸板的两个设置:开和关。
C++ 代码的包装器。
LightFX 用法
用法已大大简化。LightFX.Led
类处理初始化 SDK 和释放 SDK 之间的逻辑。有两种控制 LED 的方法。第一种是使用 XML 脚本文件通过 SetEffectFile
。
<Effect>
<Sequence Zone1="5" Zone2="5" Zone3="5" Zone4="0" Intensity="7" Time="6000" />
<Sequence Zone1="2" Zone2="2" Zone3="2" Zone4="0" Intensity="7" Time="4000" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="1" Intensity="7" Time="250" />
<Sequence Zone1="1" Zone2="1" Zone3="1" Zone4="0" Intensity="2" Time="250" />
</Effect>
- 区域 1 = 风扇
- 区域 2 = 扬声器
- 区域 3 = 顶盖
- 区域 4 = 触摸板
脚本包含前三个区域(0-16)的颜色定义、触摸板(0 或 1)、强度(0-7)以及时间(毫秒)。此脚本必须以 XML 文件形式传递。
设置 LED 颜色和亮度的另一种方法是使用 SetLed
中的 LightFX.Setting
结构体。
Led led = new Led();
Setting settings = led.GetLedSettings();
settings.Fans = LightFX.Color.Ruby;
settings.Speakers = LightFX.Color.Ruby;
settings.Lid = LightFX.Color.Ruby;
setting.Intensity = LightFX.Intensity.Brightest;
setting.TouchPad = TouchPad.On;
led.SetLed(settings);
上面的代码会将所有区域设置为最高强度的 Ruby 色,并将触摸板设置为开。区域可以独立于彼此更改颜色;但是,强度适用于所有区域,包括触摸板。
当前不足
虽然我提供的代码包含了大部分功能,但可能还有我遗漏的方法。包含的方法仅得益于 Björn Carlsson 的工作。一个特别缺失的功能是检索当前“开机”设置的能力。如果您想深入研究 API 并提取更多方法,请在评论中发布 DLL Import 声明,我将把您的添加项添加到文章中(并注明出处)。
我尚未在台式机上测试此代码,但根据文档,Setting
(和 NativeSetting
)不能用于除笔记本电脑以外的任何设备。如果您有 XPS 台式机,请尝试使用此代码,看看能实现什么。如果您写了一篇关于如何在台式机上使用 XPS LightFX 的文章,请告诉我,我将在此文章中链接到它。
结论
您可以创建一个挂钩到在线游戏(如《魔兽世界》),让您的灯光根据角色的状态而变化。您可以让您的计算机在特定事件(例如新电子邮件)发生时执行灯光秀,或者一直只显示一种效果。QuickSet 应用程序甚至为 Media Player 和 WinAmp 提供了插件,可以根据您正在收听的音乐更改颜色。通过更改 LED 颜色和强度的能力,机会是无限的。如果您正在寻找一个在专业环境中使用的绝佳创意,请查看 Mike Swanson 关于 自动化持续集成和 Ambient Orb™ 的文章。使用视觉辅助工具来增强构建生命周期可以是一个非常有用的工具。
更新
2008年5月15日
通过删除不必要的引用来修改项目。