Back to Top

プログラムの覚書

Author Archives: miyunsarna

VB.NET WMIで情報を取得する

WMIを使用すると、ハードウェア情報、ソフトウェア情報など様々な情報を所得することが出来ます。

WMIを使用するためには、「System.Management.dll」を参照する必要があります。

ManagementObjectSearcher、ManagementObjectクラスを使用して情報を取得得します。

現在起動中のプロセスを取得する

Dim MS = New System.Management.ManagementObjectSearcher()
Dim MC As System.Management.ManagementObjectCollection

MS.Query.QueryString = "SELECT * FROM Win32_Process"
MC = MS.Get()

For Each MO As System.Management.ManagementObject In MC
    Dim s = MO("Description").ToString() & ":" & MO("ProcessId").ToString()
    Console.WriteLine("{0}", s)
Next

・検索はSQL文と同じようなものです。

選択の内容は、WMI/MI/OMI Providersを見てください。

ちなみに”Win32_Process”は、CIMWin32 WMI Providers > Win32 Provider > Operating System Classes > Win32_Process class にあります。

 

シリアルポートのデバイス名を取得する

Dim MS = New System.Management.ManagementObjectSearcher()
Dim MC As System.Management.ManagementObjectCollection

MS.Query.QueryString = "SELECT * FROM Win32_SerialPort"
MC = MS.Get()

For Each MO As System.Management.ManagementObject In MC
    Dim s = MO("Name").ToString()
    Console.WriteLine("{0}", s)
Next

※プロセス取得との違いは、QueryStringの選択文字列と項目の名前だけです。

 

VB.NET デバイス名マッピングを取得する

現在のデバイス名マッピングを取得する方法を記載します。

取得には、Win32APIを使用します。

Imports System.Runtime.InteropServices

<DllImport("Kernel32.dll")>
Public Shared Function QueryDosDevice(lpDeviceName As String, lpTargetPath As System.Text.StringBuilder, ucchMax As Integer) As Integer
End Function


''' <summary>
''' デバイス名マッピングを取得します。
''' </summary>
''' <param name="lpDeviceName"></param>
''' <returns></returns>
Public Function GetDriveMapping(lpDeviceName As String) As String
    Dim sb = New System.Text.StringBuilder(1024 * 64)
    QueryDosDevice(lpDeviceName, sb, sb.Capacity)
    Return sb.ToString()
End Function

・上記でsbに64KByte割り当てていますが、そこまでの領域は必要ありませんが、領域が少なすぎると、取得できませんので注意してください。

呼び出し側

For i = 0 To 25
    Dim drv = Chr(&H41 + i) + ":"
    Dim s = GetDriveMapping(drv)
    If s <> "" Then
        Console.WriteLine("{0} {1}", drv, s)
    End If
Next

表示結果

C: \Device\HarddiskVolume2
D: \Device\HarddiskVolume4
E: \Device\HarddiskVolume7

上記のようなものが表示されます。

・QueryDosDeviceのlpDeviceNameには、A:~Z: 以外にも”COM1″ や  “Volume{GUID}” なども指定できます。

※Volume{GUID}の例としては”Volume{0f0eee7d-39d3-11e6-9ce5-001583544e78}”などGUIDが変わります。

・ドライブのGUIDを調べるには、コマンドプロンプトで

Mountvol

[Enter]キーを押すと表示されます。