65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (5投票s)

2008年5月12日

CPOL

4分钟阅读

viewsIcon

72026

downloadIcon

900

利用戴尔的 XPS LightFX API 创建您自己的 LED 效果。

引言

我最近偶然发现了一篇 Scott Quibell 于 2006 年发表的关于更改 XPS 笔记本电脑 LED 灯的文章。我拥有一台 XPS M1710,并决定自己动手探索如何控制 LED 灯。

我首先从戴尔下载了 QuickSet,这是一个允许您控制笔记本电脑上许多项目的应用程序。它甚至内置了一些 LED 的效果,但没有一个能让我满意。0.5 秒的最小等待时间让效果显得跳跃,不符合我的口味,于是我开始搜索,想看看戴尔是如何通过应用程序控制 LED 的。

Dell QuickSet Application

我找到了使用 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
  • 能力的枚举(notebookdesktopnone)。

  • Color.cs
  • 可能的 LED 颜色的枚举。

  • GamingSDK.dll
  • C++ DLL,作为内容添加并设置为“始终复制”,以便与使用 LightFX 的任何项目一起分发。

  • Intensity.cs
  • LED 亮度或强度的级别枚举。

  • Led.cs
  • 管理的 LED 控制工作流程的暴露类。

  • NativeSettings.cs
  • 一个结构体,用于将 LED 设置存储在内存中,以便传递给 C++ 代码。

  • Setting.cs
  • 包含对 LED 设置名称进行修改的 .NET 结构体。

  • Touchpad.cs
  • 一个枚举,包含触摸板的两个设置:开和关。

  • XPSLightFX.cs
  • 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日

通过删除不必要的引用来修改项目。

© . All rights reserved.