VB.NET WMI を使ってシステム情報取得
(Visual Studio 2015 版)

投稿日 2016/05/08

[Home] 

はじめに

WMI という機能を使うと、Windows の様々な情報を取得できます。WMI を使うための手順は次の通りです。

  1. System.Management 名前空間をインポートする。
  2. ManagementClass をインスタンス化する。このとき、取得する情報の種別を指定する。これは下の例では "Win32_Processor" (ハードウェアの基本的な情報) としている。
  3. ManagementClass の GetInstance() メソッドを使って ManagementObjectCollection を取得する。
  4. ManagementObjectCollection の内容を読んで格納先に転送する。

 

サンプル

このサンプルは WMI を使ってプロセッサとメモリ情報を取得します。

Imports System.Management

Namespace MyHardware
    ''' <summary>
    ''' ハードウェア情報
    ''' </summary>
    Public Module ModHardware
        ''' <summary>
        ''' CPU 情報
        ''' </summary>
        Public Class ModelProcessor
            Public Property DeviceId As List(Of String)
            Public Property Name As List(Of String)
            Public Property Clock As List(Of Double)
            Public Property Cache As List(Of Double)

            Public Property Count As Integer

            ''' <summary>
            ''' コンストラクタ
            ''' </summary>
            Public Sub New()
                ' ManagementClass をインスタンス化する。
                Dim mc As New ManagementClass("Win32_Processor")
                ' ManagementObjectCollection を取得する。
                Dim col As ManagementObjectCollection = mc.GetInstances()
                ' 格納先のListオブジェクトを準備
                Count = col.Count
                If Count > 0 Then
                    DeviceId = New List(Of String)
                    Name = New List(Of String)
                    Clock = New List(Of Double)
                    Cache = New List(Of Double)
                Else
                    Return
                End If
                ' 結果をListオブジェクトに転送
                For i As Integer = 0 To Count - 1
                    Dim obj As ManagementObject = col(i)
                    DeviceId.Add(obj("DeviceID"))
                    Name.Add(obj("Name"))
                    Clock.Add(obj("MaxClockSpeed"))
                    Cache.Add(obj("L2CacheSize"))
                Next
            End Sub
        End Class

        ''' <summary>
        ''' メモリ情報
        ''' </summary>
        Public Class ModelMemory
            Public Property PhysicalMemory As List(Of Long)
            Public Property VirtualMemory As List(Of Long)

            Public Property Count As Integer

            ''' <summary>
            ''' コンストラクタ
            ''' </summary>
            Public Sub New()
                ' ManagementClass をインスタンス化する。
                Dim mc As New ManagementClass("Win32_OperatingSystem")
                ' ManagementObjectCollection を取得する。
                Dim col As ManagementObjectCollection = mc.GetInstances()
                ' 格納先のListオブジェクトを準備
                Count = col.Count
                If Count > 0 Then
                    PhysicalMemory = New List(Of Long)
                    VirtualMemory = New List(Of Long)
                Else
                    Return
                End If
                ' 結果をListオブジェクトに転送
                For i As Integer = 0 To Count - 1
                    Dim obj As ManagementObject = col(i)
                    PhysicalMemory.Add(obj("TotalVisibleMemorySize"))
                    VirtualMemory.Add(obj("TotalVirtualMemorySize"))
                Next
            End Sub
        End Class
    End Module

End Namespace

次の画像は上のクラスを使ったアプリケーションでプロセッサとメモリ情報を表示したものです。


WMI ついては下記のサイトに詳しい情報があります。

WMI Fun !!

 

 


 

 開設 2014年12月   著作権 2014-2016 bonk.red  連絡先: こちらからメッセージを送ってください(お仕事も大募集)