我想检测何时将SD(或其他卡)插入读卡器。我知道WM_DEVICECHANGE
但我需要获得驱动器号的具体设备类型信息。例如,我想区分读卡器中的任何卡与“普通”闪存驱动器。 GetDriveType()
似乎不够精致。我的其他选择是什么?
我对Windows 7解决方案感到满意。我不需要向后兼容。
这种改进是否全部可能?
我发现this topic没有提供令人满意的答案。 This one感觉就像是要走的路,但是没有示例代码的示例代码或指针。令人难以置信的是,没有人为这样一个共同的请求拼凑出一份工作样本。
[编辑]
我也found this。提供的样本有一些错误,但在修复后我仍然没有得到任何结果。对于已插入SD卡的设备,我在BusTypeUnknown
中获得BusTypeSd
而不是pDeviceDesc.BusType
。这似乎很简单,但仍然失败。
答案 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。操作系统无法区分这两种设备类型。