中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【C#.net VB.net】USBデバイスが認識しているか確認する

開発環境: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】の参照設定が必要です。
f:id:tsu--kun:20190805191935p:plain



例えば自分の手持ちの【BUFFALO】製のUSBメモリを例にとります。
デバイスマネージャから確認すると下図のとおりになっています。

f:id:tsu--kun:20190618183835p:plain

【USB\VID_0411&PID_023B\CN**************】
実際にはこの文字列を比較してUSBデバイスを認識しているかどうかのチェックを行っています。
私が実際に使っているのは
【USB\VID_0411】までで、PID以降は使用していません。
なぜならこの種のデバイスが認識しているかどうかわかればいいので、PID、シリアルナンバーまでは不要だからです。
どうしても世界にたった一つしかないこのデバイスを監視したいというなら
全部を比較しないといけないですが・・・