2009-01-27 134 views
17

有没有一种Windows标准方法可以从C/C++中完成诸如“启动扇子”,“降低速度”之类的事情?以编程方式访问笔记本电脑上的CPU风扇? (Windows)

我怀疑它可能是ACPI,但我是一个虚弱的凡人,无法读取那种文档。

编辑:例如Windows 7允许您选择电源计划选项,例如“被动散热”(仅当事物变热时)与“主动散热”(保持CPU主动冷却?)。看来操作系统确实有一种方法来一般地控制粉丝。

回答

20

我现在正在开发一个项目,其中包括控制电脑迷。基本上,球迷是由你的电脑的superIO芯片控制的。我们直接使用端口映射IO访问芯片,并从那里我们可以到达逻辑风扇设备。使用端口映射IO需要代码在内核模式下运行,但windows不提供任何通用端口IO的驱动程序(有充分的理由,因为它是一个非常强大的工具),所以我们编写了自己的驱动程序并使用它。

如果你想要走这条路,你基本上需要两方面的知识:驱动程序开发和如何访问和解释superIO芯片信息。当我们开始这个项目时,我们在这些领域都不知道任何东西,所以它一直在浏览,阅读和最终做到。为了获得这些知识,我们通过查看这些链接特别有所帮助:

  1. WDK,这是Windows驱动程序工具包。你需要这个来编译你为Windows编写的任何驱动程序,它包含了很多示例驱动程序的源代码,包括用于通用端口映射IO的驱动程序,称为portio。
  2. WinIO有C语言驱动程序的源代码,C语言中的一个dll,它以编程方式安装并加载该驱动程序,以及一些用于GUI的C#代码,用于加载dll和读取/写入端口。这个司机跟Portio的司机非常相似。
  3. lm-sensors是一个linux项目,其中包括检测你的superIO芯片。/prog/detect/sensors-detect是perl程序,它执行检测,我们花了一些时间仔细阅读代码,以了解如何与superIO芯片进行交互。
  4. 当我们通过lm-sensors代码时,非常高兴有类似RapidDriverRW-everything的工具,因为它们允许我们模拟一系列传感器 - 检测。后者功能更强大,对IO空间的可视化非常有帮助,而前者提供了更易于访问的一些操作,可以更好地映射传感器 - 检测(读/写字节到端口)
  5. 最后,您需要找到你的superIO芯片的数据表。从我看到的例子中可以看出,每个芯片的环境控制器都提供类似的功能(r/w风扇速度,读取温度,读取芯片电压),但是为了获得这种功能,必须写入哪些寄存器。 This地方有所有的数据表,我们迄今为止需要。
+1

ACPI在这里发挥了什么作用?理论上,可以修补DSDT,使用ASL编译器进行编译,加载修补表,然后风扇速度由该修补逻辑控制。另一种选择是使用nhc.exe,它有一个插件模型,它允许开发人员编写代码来控制ACPI管理的对象。 – Cheeso 2010-11-30 16:17:13

1

是的,这将是ACPI,并且据我所知,Windows并没有对用户空间给予太多/任何控制。所以你不得不开始使用驱动程序,这在Windows上几乎是不可能的。

也就是说,google reveals有一些针对特定硬件的开源Windows库...所以根据您的硬件您可能能够找到某些东西。

0

ACPI可能允许或不允许您调整风扇设置。某些BIOS实现可能不允许该控制 - 它们可能会强制控制取决于BIOS/CMOS设置。有人可能很难对好用 BIOS控制(甚至定制)不足的用例。我遇到过BIOS控制确实不足的情况,但并不适用于所有可能的主板平台。

0

WIndows管理规范库(WMI)确实提供Win32_Fan Class甚至是SetSpeed方法。唉,文件说这没有实施,所以我想这不是很有帮助。但是你可以通过设置电源状态来控制事物。

2

如果你想要一件真正快捷的东西,只需将粉丝降低到你知道事物不会过热的程度,就可以使用speedfan程序。弄清楚如何在早期版本中配置它,以便在计算机启动时自动将风扇降低到50%是非常痛苦的,以至于我的第一种方法是简单地对它进行字节修补,以便启动我以较低速度运行的唯一的超级管理风扇。新版本仍然有点艰难,但它是可行的 - 有一个图形滑块系统看起来像音频均衡器,除了x轴是温度,y是风扇速度。你把它们一个接一个地拖下来。在你弄清楚如何为你想要的风扇进行手动控制之后,这就是下一步。

有监控用C#的硬件(如风扇)的一个项目: http://code.google.com/p/open-hardware-monitor/

我还没有广泛地看着它,但WinRing0.sys的源代码,并使用ATLEAST给人的感觉是,如果你知道你有什么风扇控制器,并有数据表,它应该是可修改的,以设置值,而不是只是让他们。我不知道什么工具适合(除内核调试器外)来查看Speedfan的功能,如果你喜欢窥探并模仿speedfan,而不是查看数据表并尝试一下。

相关问题