コマンドラインで情報監視(その3)

コマンドラインで情報監視シリーズ、その第三回です。

OpenHardwareMonitorLib.dllの準備

svnまたは、gitでプロジェクトをcheckout/cloneし、そこからOpenHardwareMonitorLib.dllを取り出します。
SVNの場合

$ svn checkout http://open-hardware-monitor.googlecode.com/svn/trunk/ open -hardware-monitor-read-only
U open-hardware-monitor-read-only/GUI/AboutBox.Designer.cs
U open-hardware-monitor-read-only/GUI/MainForm.cs
U open-hardware-monitor-read-only/Utilities/PersistentSettings.cs
U open-hardware-monitor-read-only/Properties/AssemblyInfo.cs
U open-hardware-monitor-read-only/Properties/AssemblyLibInfo.cs
U open-hardware-monitor-read-only/Properties/AssemblyVersion.cs
U open-hardware-monitor-read-only/Hardware/Mainboard/SuperIOHardware.cs
U open-hardware-monitor-read-only/Hardware/Nvidia/NvidiaGPU.cs
U open-hardware-monitor-read-only/Hardware/ATI/ATIGPU.cs
U open-hardware-monitor-read-only/Hardware/Control.cs
U open-hardware-monitor-read-only/Hardware/CPU/IntelCPU.cs
U open-hardware-monitor-read-only/Hardware/CPU/CPUID.cs
U open-hardware-monitor-read-only/Hardware/CPU/CPUGroup.cs
U open-hardware-monitor-read-only/Hardware/IControl.cs
U open-hardware-monitor-read-only/Hardware/ThreadAffinity.cs
Checked out revision 475.
$

Gitの場合

$ git clone https://github.com/spl0k/open-hardware-monitor
Cloning into 'open-hardware-monitor'...
remote: Counting objects: 4204, done.
remote: Compressing objects: 100% (924/924), done.
remote: Total 4204 (delta 3213), reused 4204 (delta 3213), pack-reused 0
Receiving objects: 100% (4204/4204), 1.87 MiB | 913.00 KiB/s, done.
Resolving deltas: 100% (3213/3213), done.
Checking connectivity... done.
Checking out files: 100% (522/522), done.
$
SVN Gitのインストール方法は?

Chocolateyもしくは、Cygwin

OpenHardwareMonitorLib.dllはどこにある?

OpenHardwareMonitorLibを一旦ビルドすると下記にdll が生成されます。
(VSプロジェクト名ディレクトリ)objDebug
完成形から抽出しても構いません。

VSで新規プロジェクトを作成

ファイル -> 新規作成-> プロジェクト

Windowsデスクトップ -> Visual C# -> コンソールアプリケーション
名前は適当にOpenHardwareConsole とでもしておきます。

プロジェクトを作成したら、先ほどのdllをソリューションエクスプローラの参照設定からインポートさせます。

Program.csの中身は、(Open Hardware Monitor Reportフォーラムの投稿の)ココの記事を参考にしてください。

実行します。

なにか、それらしきものが表示されればOK

次に中身を変えていきます。
センサー情報はハードに依存するところがあって、機器によっては取り出せない要素があります。ここでは、比較的簡単なCPU温度のセンサー情報を取り出してみます。

Console.Out.Write(computer.GetReport());の部分をコメントアウトして、次を追加します。(//ここからから、//ここまで)

class Program
{
static void Main(string[] args)
{
...省略

//Console.Out.Write(computer.GetReport());
// ここから
var temps = new List();
foreach (var hardware in computer.Hardware)
{
if (hardware.HardwareType != HardwareType.CPU)
continue;
hardware.Update();
foreach (var sensor in hardware.Sensors)
{
if (sensor.SensorType == SensorType.Temperature)
{
if (sensor.Value != null)
{
StringBuilder sb = new StringBuilder();
sb.Append(sensor.Name + " = ");
sb.Append(sensor.Value.ToString() + " ℃");
sb.Append(" ,Max " + sensor.Max.ToString() + "℃");
sb.Append(" ,Min " + sensor.Min.ToString() + "℃");
sb.Append("n");
temps.Add(sb.ToString());
}
}
}
}
foreach (var temp in temps)
{
Console.WriteLine(temp);
//Debug.WriteLine(temp);
}
Console.ReadLine();
// ここまで
computer.Close();
}

}

public class UpdateVisitor : IVisitor
{
...省略
}

実行します。

他のパラメータを取り出すには?

var temps = new List();のあたりで、ブレイクポイントをかけてcomputer.Hardwareというクラスを自動変数かウォッチウインドウで分解していくと出てきます。

詳しく解説されている方がいらっしゃいました
■[C#]Open Hardware Monitorを使ってPCの温度や電圧、ファン回転数を取得する -うさ☆うさ日記-
machi_ponさんありがとうございます!

注意など
  • Visual Studio、ビルドしたexeの実行は必ず、管理者=Administratorとして起動してください。
  • 正確な値を保証するものではありません。
  • 掲載のコードは、例外発生を考慮していません。
  • 配布・公開する場合には、ライセンスに配慮してください。
  • シリーズ次回は、値を判断メールを送信する部分を掲載予定です。

参考

Can’t get OpenHardwareMonitorLib.dll to work -stackoverflow-

連載

コマンドラインでCPU情報監視 Open Hardware Monitor (Windows Server 2012 R2 Essentials)

改訂

2015/04/27 注意事項「Administratorで実行」を追加。「詳しく解説」を追加。