以编程方式访问笔记本电脑上的CPU风扇? (视窗)

有没有一种Windows标准的方式来从C / C + +做“启动扇子”,“减速”之类的东西?

我怀疑它可能是ACPI,但我是一个虚弱的人,不能读这种文件。

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

目前我正在开展一个项目,其中包括控制电脑爱好者。 基本上,球迷是由你的电脑的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代码的时候,能够使用像RapidDriver和RW-everything这样的工具是非常好的,因为它们允许我们模拟一系列传感器 – 检测。 后者功能更强大,对IO空间的可视化非常有用,而前者提供了更容易访问的一些操作,这些操作更好地映射到传感器检测(读/写字节到端口)
  5. 最后,你需要找到你的superIO芯片的数据表。 从我看到的例子中可以看出,每个芯片的环境控制器提供了类似的功能(r / w风扇速度,读取温度,读取芯片电压),但是为了获得这个功能,你必须写入什么寄存器。 这个地方有所有的数据表,我们迄今为止需要的。

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

有一个使用C#监视硬件(如粉丝)的项目: http : //code.google.com/p/open-hardware-monitor/

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

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

这就是说, 谷歌显示有一些针对特定硬件的开源Windows库…所以根据你的硬件,你可能会找到一些东西。

ACPI可能允许或不允许您调整风扇设置。 有些BIOS实现可能不允许这种控制 – 它们可能会强制控制取决于BIOS / CMOS设置。 对于BIOS控制(甚至是定制的)不足的情况,可能会有一些困难。 我遇到了BIOS控制确实不足的情况,但是并不是所有可能的主板平台都是如此。

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