Windows を実行しているコンピュータの USB バスの (アン) プラグ イベントを監視したいと考えています。デバイスが (アン) プラグインされている場合、そのデバイスの USB アドレス、ベンダー ID、ルート ハブ ID、およびデバイス上のハブ ポートを知りたいです。例: usb_addr: 10、vendor_id: 1234、product_id: 5678、bus_id: 2、port_path: 5/4/3
これは、バス ID 2 のポート 5 にあるデバイスであり、別のハブが接続されており、そのハブのポート 4 に別のハブがあり、そのハブのポート 3 に報告されているデバイスがあることを意味します。
USB デバイスのホットプラグ検出を実行して、より大きなクロスプラットフォーム (Linux、Windows、Mac) テスト プログラムに統合するための小さな OS 固有のコード チャンクを作成しようとしています。このホットプラグ コードを使用するコードは Python 3 で記述されているため、ホットプラグ コードも Python で記述したいと考えていますが、それについては多少柔軟に対応できますが、支払いが必要になるようなことは避けたいと考えています。ライセンスのために。
2つの主なオプションがあるようです:
Windows API 関数 RegisterDeviceNotification に関するいくつかの議論を見てきましたが、すべての USB デバイスのイベントを受信するために登録できるかどうか、または特定のデバイス インターフェイス (キーボード、マウスなど)。その場合、すべての USB デバイスを監視したいので、このソリューションは機能しないようです。
もう 1 つのオプションには、「WMI」と呼ばれるものが含まれているようです。これは、主に「マネージ」コードの議論で出てくるようで、C# や IronPython などの .NET 言語でこのコンポーネントを作成することを余儀なくされます。この質問 ( Get List of connected USB Devices ) では、USB デバイスを照会する方法について質問し、例を示していますが、ホットプラグ イベントを扱っておらず、ユーザー "Nedko" は、Win32_USBHub ではなくクラスWin32_USBControllerDeviceを使用する必要があることを示唆しています。Win32_USBControllerDevice オブジェクトが実際に何をモデル化しているのか、よくわかりません。おそらく Dependent メンバーは CIM_LogicalDevice オブジェクトへの参照のようですが、それでも私が探している USB 固有の情報が欠落しているようです。
この問題を解決するには、どの API を調べる必要がありますか?