从驱动器号获取特定设备类型

时间:2012-02-12 12:43:49

标签: winapi

我想检测何时将SD(或其他卡)插入读卡器。我知道WM_DEVICECHANGE但我需要获得驱动器号的具体设备类型信息。例如,我想区分读卡器中的任何卡与“普通”闪存驱动器。 GetDriveType()似乎不够精致。我的其他选择是什么?

我对Windows 7解决方案感到满意。我不需要向后兼容。

这种改进是否全部可能?

我发现this topic没有提供令人满意的答案。 This one感觉就像是要走的路,但是没有示例代码的示例代码或指针。令人难以置信的是,没有人为这样一个共同的请求拼凑出一份工作样本。

[编辑]

我也found this。提供的样本有一些错误,但在修复后我仍然没有得到任何结果。对于已插入SD卡的设备,我在BusTypeUnknown中获得BusTypeSd而不是pDeviceDesc.BusType。这似乎很简单,但仍然失败。

2 个答案:

答案 0 :(得分:1)

这看起来很有用:How Can I Determine Which USB Devices are Connected to a Computer?

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大容量存储设备”。如果是,请检查卷名称或autorun.inf(如果有)。

微软是USB的发明者之一,你不太可能需要this Linux info,但它可以用于搜索术语,如“Pendrive”和“Flash Drive”。

答案 1 :(得分:0)

我不认为这是可能的,因为读卡器以与常规闪存驱动器相同的方式呈现其存储器。它们都是USB大容量存储类设备。这是此设备类的Wikipedia article。操作系统无法区分这两种设备类型。