web-dev-qa-db-ja.com

pythonまたはCMDを使用して、Windowsから接続されているUSBデバイスリストを取得する方法

pythonまたはCMDを使用して、WindowsからUSBデバイスリストを接続する必要があります。

pythonでは、これを試しています。

_import win32com.client
def get_usb_device():
    try:
        usb_list = []
        wmi = win32com.client.GetObject("winmgmts:")
        for usb in wmi.InstancesOf("Win32_USBHub"):
            print(usb.DeviceID)
            print(usb.description)
            usb_list.append(usb.description)

        print(usb_list)
        return usb_list
    except Exception as error:
        print('error', error)


get_usb_device()
_

その結果、私はこれを得る:

_['USB Root Hub (USB 3.0)', 'USB Composite Device', 'USB Composite Device']
_

しかし、私は意味の氏名を取得しません。

そしてCMDのために私はこれもこれを試しています:

_wmic path CIM_LogicalDevice where "Description like 'USB%'" get /value
_

また、接続されているUSBデバイスの氏名を意味しません。

私はマウス、キーボード、ペンドライブまたはプリンタをUSBを通して接続するとき、この種の名前が欲しいのです。 「A4Tech Mouse」と同様に、または私が「マウス」だけを受けるたとえ問題もあります。このタイプの名前は、Windows 10の設定の[デバイス]セクションに表示されます。ただし、「USBルートハブ(USB 3.0)」、「USBコンポジットデバイス」を取得します。 Pythonでは可能ですか?

この答えを知っていれば助けてください。私にとって非常に重要です。

3
SNA Nilim

マウス、キーボード、ペンドライブ、またはプリンタをUSBに接続しているとき、この種の名前が欲しいのですが...

それは「フレンドリーな名前」と呼ばれ、次のようにします。

import subprocess, json

out = subprocess.getoutput("PowerShell -Command \"& {Get-PnpDevice | Select-Object Status,Class,FriendlyName,InstanceId | ConvertTo-Json}\"")
j = json.loads(out)
for dev in j:
    print(dev['Status'], dev['Class'], dev['FriendlyName'], dev['InstanceId'] )
 _

Unknown HIDClass HID-compliant system controller HID\VID_046D&PID_C52B&MI_01&COL03\9&232FD3F1&0&0002
OK DiskDrive WD My Passport 0827 USB Device USBSTOR\DISK&VEN_WD&PROD_MY_PASSPORT_0827&REV_1012\575836314142354559545058&0
...
 _
1
Pedro Lobito

それがあなたが探しているものであるかどうかはわからないが、Python 3のWindows 10で pywin32 "を使用して、これを使用してすべてのドライブ文字と型を取得することができます。

_import os
import win32api
import win32file
os.system("cls")
drive_types = {
                win32file.DRIVE_UNKNOWN : "Unknown\nDrive type can't be determined.",
                win32file.DRIVE_REMOVABLE : "Removable\nDrive has removable media. This includes all floppy drives and many other varieties of storage devices.",
                win32file.DRIVE_FIXED : "Fixed\nDrive has fixed (nonremovable) media. This includes all hard drives, including hard drives that are removable.",
                win32file.DRIVE_REMOTE : "Remote\nNetwork drives. This includes drives shared anywhere on a network.",
                win32file.DRIVE_CDROM : "CDROM\nDrive is a CD-ROM. No distinction is made between read-only and read/write CD-ROM drives.",
                win32file.DRIVE_RAMDISK : "RAMDisk\nDrive is a block of random access memory (RAM) on the local computer that behaves like a disk drive.",
                win32file.DRIVE_NO_ROOT_DIR : "The root directory does not exist."
              }

drives = win32api.GetLogicalDriveStrings().split('\x00')[:-1]

for device in drives:
    type = win32file.GetDriveType(device)

    print("Drive: %s" % device)
    print(drive_types[type])
    print("-"*72)

os.system('pause')
_

USBデバイスにはタイプ_win32file.DRIVE_REMOVABLE_がありますので、これはあなたが探しているものです。すべてのドライブとタイプを印刷する代わりに、そのようなリムーバブルデバイスのみを処理するためのif条件を挿入することができます。

注意してください:SDカードやその他のリムーバブルストレージメディアには同じドライブタイプがあります。

H!

0
xph