是否有Windows标准方法可以从C/C++中执行诸如"启动风扇","降低速度"等操作?
我怀疑它可能是ACPI,但我是一个虚弱的凡人,无法阅读那种文件.
编辑:例如,Windows 7允许您选择电源计划选项,例如"被动冷却"(仅当事情变热?)与"主动冷却"(保持CPU主动冷却?).OS似乎确实有一种控制风扇的方法.
我目前正致力于一个项目,除其他外,控制电脑迷.基本上,风扇由计算机的superIO芯片控制.我们使用端口映射IO直接访问芯片,从那里我们可以访问逻辑风扇设备.使用端口映射IO需要代码在内核模式下运行,但是Windows不提供通用端口IO的任何驱动程序(有充分的理由,因为它是一个非常强大的工具),所以我们编写了自己的驱动程序,并使用它.
如果你想沿着这条路走下去,你基本上需要两个领域的知识:驱动程序开发以及如何访问和解释superIO芯片信息.当我们开始这个项目时,我们对这两个方面都没有任何了解,所以它一直在通过浏览,阅读和最终的方式进行学习.为了获得知识,我们通过查看这些链接得到了特别的帮助:
该WDK,它是Windows驱动程序工具包.你需要这个来编译你为windows编写的任何驱动程序,它带来了很多示例驱动程序的源代码,包括一般端口映射IO的驱动程序,称为portio.
WinIO具有C语言驱动程序的源代码,C语言中的dll以编程方式安装和加载该驱动程序,以及GUI的一些C#代码,用于加载DLL并读取/写入端口.驱动程序非常类似于portio中的驱动程序.
lm-sensors是一个linux项目,除其他外,它会检测你的superIO芯片./ prog/detect/sensors-detect是执行检测的perl程序,我们花了一些时间浏览代码,看看如何与superIO芯片接口.
当我们浏览lm-sensors代码时,拥有像RapidDriver和RW-everything这样的工具非常好,因为它们允许我们模拟一系列传感器检测.后者是更强大的,并且在可视化IO空间方面非常有用,而前者提供了更容易访问某些操作,这些操作更好地映射到传感器中的那些 - 检测(读/写字节到端口)
最后,您需要找到superIO芯片的数据表.从我看到的示例中,每个芯片的环境控制器提供类似的功能(r/w风扇速度,读取温度,读取芯片电压),但是为了获得此功能,您必须写入哪些寄存器. .这个地方已经有了所有的数据表,我们到目前为止还需要这些数据表.