有沒有一種Windows標準方法可以從C/C++中完成諸如「啓動扇子」,「降低速度」之類的事情?以編程方式訪問筆記本電腦上的CPU風扇? (Windows)
我懷疑它可能是ACPI,但我是一個虛弱的凡人,無法讀取那種文檔。
編輯:例如Windows 7允許您選擇電源計劃選項,例如「被動散熱」(僅當事物變熱時)與「主動散熱」(保持CPU主動冷卻?)。看來操作系統確實有一種方法來一般地控制粉絲。
有沒有一種Windows標準方法可以從C/C++中完成諸如「啓動扇子」,「降低速度」之類的事情?以編程方式訪問筆記本電腦上的CPU風扇? (Windows)
我懷疑它可能是ACPI,但我是一個虛弱的凡人,無法讀取那種文檔。
編輯:例如Windows 7允許您選擇電源計劃選項,例如「被動散熱」(僅當事物變熱時)與「主動散熱」(保持CPU主動冷卻?)。看來操作系統確實有一種方法來一般地控制粉絲。
我現在正在開發一個項目,其中包括控制電腦迷。基本上,球迷是由你的電腦的superIO芯片控制的。我們直接使用端口映射IO訪問芯片,並從那裏我們可以到達邏輯風扇設備。使用端口映射IO需要代碼在內核模式下運行,但windows不提供任何通用端口IO的驅動程序(有充分的理由,因爲它是一個非常強大的工具),所以我們編寫了自己的驅動程序並使用它。
如果你想要走這條路,你基本上需要兩方面的知識:驅動程序開發和如何訪問和解釋superIO芯片信息。當我們開始這個項目時,我們在這些領域都不知道任何東西,所以它一直在瀏覽,閱讀和最終做到。爲了獲得這些知識,我們通過查看這些鏈接特別有所幫助:
是的,這將是ACPI,並且據我所知,Windows並沒有對用戶空間給予太多/任何控制。所以你不得不開始使用驅動程序,這在Windows上幾乎是不可能的。
也就是說,google reveals有一些針對特定硬件的開源Windows庫...所以根據您的硬件您可能能夠找到某些東西。
ACPI可能允許或不允許您調整風扇設置。某些BIOS實現可能不允許該控制 - 它們可能會強制控制取決於BIOS/CMOS設置。有人可能很難對好用 BIOS控制(甚至定製)不足的用例。我遇到過BIOS控制確實不足的情況,但並不適用於所有可能的主板平臺。
WIndows管理規範庫(WMI)確實提供Win32_Fan Class甚至是SetSpeed方法。唉,文件說這沒有實施,所以我想這不是很有幫助。但是你可以通過設置電源狀態來控制事物。
如果你想要一件真正快捷的東西,只需將粉絲降低到你知道事物不會過熱的程度,就可以使用speedfan程序。弄清楚如何在早期版本中配置它,以便在計算機啓動時自動將風扇降低到50%是非常痛苦的,以至於我的第一種方法是簡單地對它進行字節修補,以便啓動我以較低速度運行的唯一的超級管理風扇。新版本仍然有點艱難,但它是可行的 - 有一個圖形滑塊系統看起來像音頻均衡器,除了x軸是溫度,y是風扇速度。你把它們一個接一個地拖下來。在你弄清楚如何爲你想要的風扇進行手動控制之後,這就是下一步。
有監控用C#的硬件(如風扇)的一個項目: http://code.google.com/p/open-hardware-monitor/
我還沒有廣泛地看着它,但WinRing0.sys的源代碼,並使用ATLEAST給人的感覺是,如果你知道你有什麼風扇控制器,並有數據表,它應該是可修改的,以設置值,而不是隻是讓他們。我不知道什麼工具適合(除內核調試器外)來查看Speedfan的功能,如果你喜歡窺探並模仿speedfan,而不是查看數據表並嘗試一下。
ACPI在這裏發揮了什麼作用?理論上,可以修補DSDT,使用ASL編譯器進行編譯,加載修補表,然後風扇速度由該修補邏輯控制。另一種選擇是使用nhc.exe,它有一個插件模型,它允許開發人員編寫代碼來控制ACPI管理的對象。 – Cheeso 2010-11-30 16:17:13