Получить конкретный тип устройства из буквы диска - PullRequest
17 голосов
/ 12 февраля 2012

Я хочу определить, когда SD-карта (или другая карта) вставлена ​​в устройство чтения карт.Я знаю о WM_DEVICECHANGE, но мне нужно получить конкретную информацию о типе устройства с учетом буквы диска.Например, я хочу отличить любую карту в картридере от «обычной» флешки.GetDriveType() не кажется достаточно утонченным.Какие у меня есть другие варианты?

Я доволен решением Windows 7.Мне не нужна обратная совместимость.

Возможно ли все это уточнение?

Я нашел эту тему , которая не дает удовлетворительного ответа. Этот выглядит как путь, но нет примера кода или указателей на образец кода.Невероятно, что никто не собрал рабочий образец для такого распространенного запроса.

[EDIT]

Я также нашел это .В приведенном примере есть несколько ошибок, но после исправления я все равно не получаю никакого результата.Для устройства, в которое вставлена ​​SD-карта, я получаю BusTypeUnknown вместо BusTypeSd в pDeviceDesc.BusType.Это казалось простым и все же не удалось.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Это выглядит полезным: Как определить, какие USB-устройства подключены к компьютеру?

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDevices = objWMIService.ExecQuery _
    ("Select * From Win32_USBControllerDevice")

For Each objDevice in colDevices
    strDeviceName = objDevice.Dependent
    strQuotes = Chr(34)
    strDeviceName = Replace(strDeviceName, strQuotes, "")
    arrDeviceNames = Split(strDeviceName, "=")
    strDeviceName = arrDeviceNames(1)
    Set colUSBDevices = objWMIService.ExecQuery _
        ("Select * From Win32_PnPEntity Where DeviceID = '" & strDeviceName & "'")
    For Each objUSBDevice in colUSBDevices
        Wscript.Echo objUSBDevice.Description
    Next    
Next

Пример вывода (должен быть деревом):

USB Root Hub
Microsoft USB IntelliMouse Web
Microsoft USB IntelliMouse Web
USB Mass Storage Device
Disk drive
Generic volume
USB Root Hub
USB Root Hub

Надеюсь, не все USB-накопители описываются как «USB Mass Storage Device».Если это так, проверьте имя тома или autorun.inf, если таковой имеется.

Microsoft входит в число изобретателей USB, вряд ли вам понадобится эта информация о Linux , но этобыть собранным для поисковых терминов, таких как «Pendrive» и «Flash Drive».

0 голосов
/ 16 февраля 2012

Я не думаю, что это возможно, поскольку кард-ридеры представляют свою память так же, как обычная флешка в ОС. Они оба запоминающие устройства класса USB. Вот статья Википедии об этом классе устройств. ОС не может различить эти два типа устройств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...