是否有Windows标准的方法,可以使用C/C++进行"启动风扇"、"降低速度"等操作?
我怀疑这可能是ACPI,但我是个脆弱的凡人,无法阅读那种文档。
编辑:例如,在Windows 7中,您可以在电源计划选项中选择“被动冷却”(只有在温度升高时?)与“主动冷却”(保持CPU主动制冷)。似乎操作系统确实有一种通用的方式来控制风扇。
我目前在从事一个项目,其中之一是控制计算机风扇。基本上,风扇由计算机的超级IO芯片控制。我们使用端口映射IO直接访问该芯片,然后可以访问逻辑风扇设备。使用端口映射IO需要在内核模式下运行代码,但Windows没有提供通用端口IO的驱动程序(这是有很好的理由的,因为它是一个非常强大的工具),所以我们编写了自己的驱动程序,并使用它。
如果您想走这条路线,您基本上需要两个方面的知识:驱动程序开发以及如何访问和解释超级IO芯片信息。当我们开始这个项目时,在这两个领域中我们什么都不知道,所以通过浏览、阅读和最终实践来学习。为了获取这些知识,我们特别受益于查看以下链接:
我没有进行深入的研究,但源代码和WinRing0.sys的使用至少给人留下了这样的印象:如果您知道自己的风扇控制器,并拥有数据表,它应该是可修改的,可以设置值而不仅仅获取它们。我不知道有哪些工具(除了内核调试器)适合查看Speedfan所做的事情,如果您更喜欢窥探并模仿Speedfan,而不是查看数据表并尝试各种方法。
ACPI 可能允许您调整风扇设置,但某些 BIOS 实现可能不允许该控制,因为它们可能会根据 BIOS/CMOS 设置强制控制。在一个好的使用案例中,BIOS 控制(即使是定制的)也可能不足够。我曾经遇到过 BIOS 控制确实不足够的情况,但并非所有可能的主板平台都是如此。
Windows Management Instrumentation库(WMI)提供了Win32_Fan Class,甚至还有一个SetSpeed方法。然而,文档中说这个方法没有被实现,所以我猜它并没有什么帮助。但是你可以通过设置电源状态来控制风扇。