C/C++ から「ファンを起動する」、「速度を下げる」などの Windows 標準の方法はありますか?
ACPI ではないかと疑っていますが、私は虚弱な人間であり、その種のドキュメントを読むことはできません。
編集: たとえば、Windows 7 では、「パッシブ冷却」(熱くなったときのみ?) と「アクティブ冷却」(CPU を積極的に冷却する?) などの電源プラン オプションを選択できます。OSにはファンを一般的に制御する方法があるようです。
私は現在、特にコンピューターのファンを制御するプロジェクトに取り組んでいます。基本的に、ファンはコンピュータの superIO チップによって制御されます。ポートにマップされた IO を使用してチップに直接アクセスし、そこから論理ファン デバイスにアクセスできます。ポート マップ IO を使用するには、コードをカーネル モードで実行する必要がありますが、Windows は汎用ポート IO 用のドライバーを提供していません (これは非常に強力なツールであるため、正当な理由があります)。そのため、独自のドライバーを作成し、それを使用しました。
このルートをたどりたい場合は、基本的に、ドライバー開発と、superIO チップ情報にアクセスして解釈する方法の 2 つの分野に関する知識が必要です。プロジェクトを開始したとき、私たちはこれらの領域のどちらについても何も知らなかったので、ブラウジング、読書、そして最終的に実行することによって学習してきました。知識を得るために、次のリンクを参照することで特に助けられました。
過熱しないことがわかっているレベルまでファンを下げるだけの非常に迅速な方法が必要な場合は、それを行うための speedfan プログラムがあります。コンピュータの起動時にファンを自動的に 50% に下げるように初期のバージョンで構成する方法を理解するのは非常に苦痛だったので、最初のアプローチは単純にバイトパッチを適用して、superio で管理されている唯一のファンを低速で起動することでした。新しいバージョンはまだ少し難しいですが、実行可能です。x 軸が温度で、y 軸がファン速度であることを除いて、オーディオ イコライザーのように見えるグラフィカル スライダー システムがあります。それらを 1 つずつ下にドラッグします。必要なファンを手動で制御する方法を理解したら、これが次のステップです。
C# でハードウェア (ファンなど) を監視するプロジェクトがあります: http://code.google.com/p/open-hardware-monitor/
私はそれを詳しく見ていませんが、少なくともソースコードと WinRing0.sys の使用は、あなたが持っているファンコントローラーを知っていて、データシートを持っているなら、値を取得するだけでなく値を設定するように変更できるはずだという印象を与えます. データシートを見ていろいろ試してみるよりも、スピードファンを詮索して模倣したいのであれば、どのツールが (カーネル デバッガーのほかに) Speedfan の機能を調べるのに適しているかわかりません。
はい、それはACPIであり、私の知る限り、ウィンドウはユーザー空間からそれをほとんど/まったく制御しません。そのため、ドライバーをいじり始める必要がありますが、これは Windows ではほぼ不可能です。
そうは言っても、Google は、特定のハードウェア用のオープン ソース Windows ライブラリがいくつかあることを明らかにしています。そのため、ハードウェアによっては、何かを見つけることができる場合があります。
ACPI では、ファンの設定を調整できる場合とできない場合があります。一部の BIOS 実装では、その制御が許可されていない場合があります。BIOS/CMOS 設定に応じて強制的に制御される場合があります。BIOS 制御 (たとえカスタマイズされていても) が不十分である場合、適切な使用例を求めるのは難しいかもしれません。BIOS 制御が実際には不十分である状況に遭遇しましたが、考えられるすべてのマザーボード プラットフォームではそうではありませんでした。
Windows Management Instrumentation ライブラリ (WMI) は、Win32_Fan クラスと SetSpeed メソッドを提供します。残念ながら、これは実装されていないとドキュメントに書かれているので、あまり役に立たないと思います。ただし、電源状態を設定することで制御できる場合があります。