ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

IronPythonとWMIを使って、接続しているUSBデバイスの列挙

IronPythonの良い所は、ちょっくらテストが簡単に出来る事だよな。と思いつつ、
ちょっくら勉強していたのでメモ。

#!/usr/bin/env python
# coding: cp932
import sys
import clr
clr.AddReference("System.Management")
from System.Management import *
from System.IO import *
from System.IO.Ports import *


def get_usb_device():
    """単純なUSBデバイスの列挙
    """
    ret = []
    
    o = ManagementObjectSearcher()
    o.Query.QueryString = "Select * from Win32_USBControllerDevice"
    for a in o.Get():
        print "-----"
        print a["Dependent"]
        e = ManagementObject(a["Dependent"])
        for v in e.Properties:
            print v.Name, "=", v.Value
        
        ret.append((e["Name"], e["DeviceID"], e["Service"], e["Manufacturer"]))
    return ret

def get_usb_tree():
    """USBコントローラ毎のUSBデバイスを列挙する
    """
    o = ManagementObjectSearcher()
    o.Query.QueryString = "Select * from Win32_USBController"
    for a in o.Get():
        print a["Name"], a["Status"]
        for b in a.GetRelationships ("Win32_USBControllerDevice"):
            e = ManagementObject(b["Dependent"])
            print "  ", e["Name"], "=", e["Service"]
    

def main():
    #print get_usb_device()
    get_usb_tree()

if __name__=="__main__":
    main()

以下、実行結果例:

$ ipy test.py
Intel(R) 82801EB USB Universal Host Controller - 24D2 OK
   USB ルート ハブ = usbhub
Intel(R) 82801EB USB Universal Host Controller - 24D4 OK
   USB ルート ハブ = usbhub
Intel(R) 82801EB USB Universal Host Controller - 24D7 OK
   USB ルート ハブ = usbhub
   USB 大容量記憶装置デバイス = USBSTOR
   I-O DATA USB Flash Disk USB Device = disk
   汎用ボリューム = None
Intel(R) 82801EB USB Universal Host Controller - 24DE OK
   USB ルート ハブ = usbhub
   USB ヒューマン インターフェイス デバイス = HidUsb
   HID 準拠ゲーム コントローラ = None
標準エンハンス PCI to USB ホスト コントローラ OK
   USB ルート ハブ = usbhub
   USB 大容量記憶装置デバイス = USBSTOR
   Apple iPod USB Device = disk