USBメモリーの存在確認を行うために、 PCのハードウェア情報の取得をWMI(Windows Management Instrumentation)を使います。
ManagementObjectSearcherクラスを使って、WMIの情報を取得します。
WMIにはいろいろな情報を持っていますが、それを取得するための言語WQL(WMI Query Language)を使って取得します。
SQL言語のような記述で、以下のソースの中では
「SELECT * FROM Win32_DiskDrive where InterfaceType='USB'」
の部分です。
ManagementObjectSearcherクラスのコンストラクタの第1引数のスコープの指定で、"root\cimv2"と設定します。
この"root\cimv2"はシステム管理者にとって関心のあるWMIクラスのほとんどが格納されているそうです。
(cimv2とはCommon Information Model Version 2 というらしい)
さてSELECT文の中のWin32_DiskDriveですが、 Win32_DiskDriveクラスは、Win32 オペレーティング システムを 実行しているコンピューターで見ることができる物理ディスクドライブを表すそうです。
InterfaceTypeには以下の種類があります。
・SCSI
・HDC
・IDE
・USB
・1394
この中の”USB”を指定します。
=====
2015/04/16:の時の情報
ManagementObjectSearcherクラスを使って、WMIの情報を取得します。
WMIにはいろいろな情報を持っていますが、それを取得するための言語WQL(WMI Query Language)を使って取得します。
SQL言語のような記述で、以下のソースの中では
「SELECT * FROM Win32_DiskDrive where InterfaceType='USB'」
の部分です。
ManagementObjectSearcherクラスのコンストラクタの第1引数のスコープの指定で、"root\cimv2"と設定します。
この"root\cimv2"はシステム管理者にとって関心のあるWMIクラスのほとんどが格納されているそうです。
(cimv2とはCommon Information Model Version 2 というらしい)
さてSELECT文の中のWin32_DiskDriveですが、 Win32_DiskDriveクラスは、Win32 オペレーティング システムを 実行しているコンピューターで見ることができる物理ディスクドライブを表すそうです。
InterfaceTypeには以下の種類があります。
・SCSI
・HDC
・IDE
・USB
・1394
この中の”USB”を指定します。
'''尚、上記のプログラムをテストする場合に、プロジェクトの中の参照設定にSystem.Management.dllを追加する必要があります。''' USBメモリの存在チェック ''' ''' <param name="strPNPDeviceID">USBメモリのPNPDeviceID文字列</param> ''' <param name="lst">USB機器を列挙情報</param> '''True:存在する、False:存在しない Public Function CheckExistUSB(ByVal strPNPDeviceID As String, _ Optional ByRef lst As Hashtable() = Nothing) As Boolean '戻り値初期化 CheckExistUSB = False 'USBメモリの存在チェック処理 Try 'WMI(Windows Management Instrumentation)を利用してUSBの情報を取得 Dim searcher As New System.Management.ManagementObjectSearcher( _ "root\CIMV2", _ "SELECT * FROM Win32_DiskDrive where InterfaceType='USB'") '全てのUSB機器を列挙 For Each queryObj As System.Management.ManagementObject In searcher.Get() Dim s As String = "" If Not lst Is Nothing Then 'USB機器の情報をHashtableに格納 Dim hash As New Hashtable hash.Add("Caption", queryObj("Caption")) hash.Add("DeviceID", queryObj("DeviceID")) hash.Add("PNPDeviceID", queryObj("PNPDeviceID")) 'Hashtableの配列に格納 Dim i As Integer = LBound(lst) If Not lst(0) Is Nothing Then i += 1 ReDim Preserve lst(i) End If lst(i) = hash End If '指定のPNPDeviceIDが等しいかチェック If queryObj("PNPDeviceID") = strPNPDeviceID Then '指定のUSBメモリが見つかった CheckExistUSB = True Exit For End If Next Catch ex As System.Management.ManagementException MsgBox("WMI Error: " & ex.Message, MsgBoxStyle.Critical) End Try End Function '''''' USBをチェックするためのボタンClickイベント ''' Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click 'USB機器を列挙情報用のHashtable設定 Dim lst As Hashtable() ReDim lst(0) 'USBメモリの存在チェック(USB機器を列挙) Me.CheckExistUSB("", lst) 'USB機器を列挙 Dim str As String = "" For i As Integer = 0 To UBound(lst) If i > 0 Then str += vbCr For Each col As System.Collections.DictionaryEntry In lst(i) str &= col.Key & " : " & col.Value & vbCr Next Next MsgBox(str) End Sub
=====
2015/04/16:の時の情報
PR
コメント