開発環境:visual studio2015
USBデバイスの故障が多く非常に困った時があったので
とりあえずWindowsがUSBデバイスとして認識しているかどうかだけでも取れたらなと考えて作成しました。
USBデバイスはメーカーごとに固有のVIDを持っていて
そのIDが認識しているどうか確認します。
今回は【ManagementObjectSearcher】クラスを使用しました。
関数の動作として
引数でDeviceIDを文字列で渡し
存在すれはtrue、存在しなければfalseを返すようにしています。
Imports System.Management Public Function deviceIDCheck(ByVal DeviceID As String) As Boolean Try Dim searcher As ManagementObjectSearcher searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity") For Each queryObj As ManagementObject In searcher.Get() If queryObj("DeviceID").ToString() <> Nothing Then If queryObj("DeviceID").ToString().StartsWith(DeviceID) Then Return True Exit Function End If End If Next Catch ex As Exception Console.WriteLine(ex.Message) End Try Return False End Function
using System.Management; public bool deviceIDCheck(string deviceID) { try { ManagementObjectSearcher searcher; searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity"); foreach(ManagementObject queryObj in searcher.Get()) { if (queryObj["DeviceID"].ToString() != null) { if (queryObj["DeviceID"].ToString().StartsWith(deviceID)) { return true; } } } } catch(Exception ex) { Console.WriteLine(ex.Message); } return false; }
2019.08.05追記
【System.Management】の参照設定が必要です。
例えば自分の手持ちの【BUFFALO】製のUSBメモリを例にとります。
デバイスマネージャから確認すると下図のとおりになっています。
【USB\VID_0411&PID_023B\CN**************】
実際にはこの文字列を比較してUSBデバイスを認識しているかどうかのチェックを行っています。
私が実際に使っているのは
【USB\VID_0411】までで、PID以降は使用していません。
なぜならこの種のデバイスが認識しているかどうかわかればいいので、PID、シリアルナンバーまでは不要だからです。
どうしても世界にたった一つしかないこのデバイスを監視したいというなら
全部を比較しないといけないですが・・・