「C Sharpの基礎 - デバイス情報」の版間の差分

ナビゲーションに移動 検索に移動
83行目: 83行目:
<u>Linux上での使用は可能であるが、一部の機能が制限される、あるいは、追加の設定が必要な場合がある。</u><br>
<u>Linux上での使用は可能であるが、一部の機能が制限される、あるいは、追加の設定が必要な場合がある。</u><br>
<br>
<br>
===== LibreHardwareMonitorライブラリのインストール =====
===== LibreHardwareMonitorライブラリのインストール =====
RiderまたはVisual StudioからNuGetを使用して、LibreHardwareMonitorライブラリをインストールする。<br>
RiderまたはVisual StudioからNuGetを使用して、LibreHardwareMonitorライブラリをインストールする。<br>
132行目: 131行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
===== 使用例 =====
===== 使用例 =====
以下の例では、CPU情報を取得している。<br>
以下の例では、CPU情報を取得している。<br>
186行目: 184行目:
   
   
       computer.Close();
       computer.Close();
    }
}
</syntaxhighlight>
<br>
==== Hardware.Infoライブラリ ====
===== Hardware.Infoライブラリとは =====
<u>Hardware.Infoライブラリのライセンスは、MITライセンスに準拠している。</u><br>
<br>
* Hardware.Infoライブラリの公式Webサイト
*: https://github.com/Jinjinov/Hardware.Info
<br>
===== 取得可能な情報 =====
* BIOS
* CPU および SoC
* RAM
* ストレージドライブ
* ネットワークアダプタ
* サウンドカード
* グラフィックカード
* バッテリー
* マザーボード
* マウス
* キーボード
* モニタ
* プリンタ
<br>
Hardware.Infoライブラリは、WindowsではWMI、Linuxでは/dev、/proc、/sys、MacOSではsysctl、system_profilerを使用する。<br>
<br>
===== Hardware.Infoライブラリのインストール =====
RiderまたはVisual StudioからNuGetを使用して、Hardware.Infoライブラリをインストールする。<br>
* Riderの場合
*# プロジェクトを開く。
*# [ツール]メインメニュー - [Nuget] - [ソリューション の Nuget パッケージを管理] (または、[<プロジェクト名> の Nuget パッケージを管理])を選択する。
*# メイン画面下部にある[パッケージ]タブから <u>Hardware.Info</u> と入力して検索する。
*# メイン画面下部の右にある[+]ボタンを押下して、Hardware.Infoライブラリをインストールする。
*: <br>
* Visual Studioの場合
*# プロジェクトを開く。
*# NuGetパッケージマネージャーを開く。
*#* [ツール]メインメニュー - [NuGetパッケージマネージャー]を選択して、[ソリューションのNuGetパッケージの管理]を選択する。
*#* または、ソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[NuGetパッケージの管理]を選択する。
*# Hardware.Infoライブラリを検索する。
*#: NuGetパッケージマネージャーの検索ボックスに <u>Hardware.Info</u> と入力して検索する。
*# Hardware.Infoライブラリのインストール
*#: 検索結果からHardware.Infoライブラリを選択して、[インストール]ボタンを押下する。
*# インストールの確認ダイアログが表示されるので、[OK]ボタンを押下してインストールを完了する。
*# 参照の確認
*#: インストールが完了した後、プロジェクトの参照にHardware.Infoライブラリが追加されていることを確認する。
*: <br>
* パッケージマネージャーコンソールからインストールする場合
*# プロジェクトを開く。
*# [表示]メインメニュー - [その他のウィンドウ] - [パッケージマネージャーコンソール]を選択して、パッケージマネージャーコンソールを開く。
*# パッケージマネージャーコンソールから、Hardware.Infoライブラリをダウンロードしてインストールする。
*#: <code>Install-Package Hardware.Info</code>
*# ソリューションエクスプローラーのプロジェクトの参照において、Hardware.Infoライブラリが追加されていることを確認する。
*: <br>
* <code>dotnet</code>コマンドを使用する場合
*# ターミナルを開く。
*# プロジェクトのルートディレクトリに移動する。
*# Hardware.Infoライブラリをインストールする。
*#: 最新の安定版をインストールする場合
*#: <code>dotnet add package Hardware.Info</code>
*#: <br>
*#: バージョンを指定してインストールする場合
*#: <code>dotnet add package Hardware.Info --version <バージョン></code>
*#: <br>
*: <u>※注意</u>
*: <u>プロジェクトがGit等のバージョン管理システムを使用している場合、これらの変更がトラッキングされることを確認すること。</u>
*: <u>プロジェクトを再ビルドして、新しく追加されたパッケージが正しく統合されていることを確認することを推奨する。</u>
<br>
プロジェクトにおいて、Hardware.Infoライブラリを使用する場合は、ソースコードファイルの先頭にusingステートメントを追加する。<br>
これにより、名前空間を使用することで、Hardware.Infoライブラリに関する主要な機能にアクセスすることができる。<br>
<syntaxhighlight lang="c#">
using Hardware.Info;
</syntaxhighlight>
<br>
===== 使用例 =====
以下の例では、CPU情報を取得している。<br>
<br>
HardwareInfoクラスのtimeoutInWMIには、各クエリを実行するManagementObjectSearcherのEnumerationOptionsのTimeoutプロパティを設定する。<br>
デフォルト値は、EnumerationOptions.InfiniteTimeoutである。<br>
各ハードウェアコンポーネントには1つ以上のクエリが存在するため、RefreshAllメソッドでは16を超えるクエリが実行される。<br>
<br>
クエリがタイムアウトに達すると、System.Management.ManagementException例外がスローされる。<br>
ここで、ErrorCodeはSystem.Management.ManagementStatus.Timedoutになる。<br>
<br>
<u>timeoutInWMIを設定する場合は、try-catchブロックを使用する必要がある。</u><br>
<br>
<syntaxhighlight lang="c#">
using System;
using Hardware.Info;
class Program
{
    static void Main()
    {
      IHardwareInfo hardwareInfo;
      try
      {
          hardwareInfo = new HardwareInfo(timeoutInWMI: TimeSpan.FromMilliseconds(100));
          hardwareInfo.RefreshAll();
      }
      catch (ManagementException ex) when (ex.ErrorCode == ManagementStatus.Timedout)
      {
          Console.WriteLine(ex);
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex);
      }
      // CPUの情報のみを取得する場合
      //IHardwareInfo hardwareInfo = new HardwareInfo();
      //hardwareInfo.RefreshCPUList();
      foreach (var cpu in hardwareInfo.CpuList)
      {
          Console.WriteLine($"CPU Name: {cpu.Name}");
          Console.WriteLine($"Manufacturer: {cpu.Manufacturer}");
          Console.WriteLine($"Caption: {cpu.Caption}");
          Console.WriteLine($"Description: {cpu.Description}");
          Console.WriteLine($"Number of Cores: {cpu.NumberOfCores}");
          Console.WriteLine($"Number of Logical Processors: {cpu.NumberOfLogicalProcessors}");
          Console.WriteLine($"L2 Cache Size: {cpu.L2CacheSize}");
          Console.WriteLine($"L3 Cache Size: {cpu.L3CacheSize}");
          Console.WriteLine($"Socket Designation: {cpu.SocketDesignation}");
          Console.WriteLine($"Max Clock Speed: {cpu.MaxClockSpeed}");
      }
     }
     }
  }
  }

案内メニュー