winapi - una - unidad d de la computadora
Obtener el tipo de dispositivo específico de una letra de unidad (2)
Esto parece útil: ¿Cómo puedo determinar qué dispositivos USB están conectados a una computadora?
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
Salida de muestra (debe ser un árbol):
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
Espero que no todo el almacenamiento USB se describa como "Dispositivo de almacenamiento masivo USB". Si lo hace, verifique el nombre del volumen o autorun.inf, si corresponde.
Como Microsoft es uno de los inventores de USB, es poco probable que necesite esta información de Linux , pero podría recopilarse para términos de búsqueda como "Pendrive" y "Flash Drive".
Quiero detectar cuándo se inserta una tarjeta SD (u otra tarjeta) en el lector de tarjetas. Sé sobre WM_DEVICECHANGE
pero necesito obtener información específica del tipo de dispositivo dada la letra de la unidad. Por ejemplo, quiero distinguir entre cualquier tarjeta en el lector de tarjetas de una unidad flash "normal". GetDriveType()
no parece ser lo suficientemente refinado. ¿Cuáles son mis otras opciones?
Estoy contento con una solución de Windows 7. No necesito compatibilidad con versiones anteriores.
¿Es este tipo de refinamiento posible todo?
He encontrado este tema que no proporciona una respuesta satisfactoria. Este se siente como el camino a seguir, pero no hay código de muestra o punteros a código de muestra. Es increíble que nadie haya juntado una muestra de trabajo para una solicitud tan común.
[EDITAR]
También he encontrado esto . La muestra proporcionada tiene algunos errores, pero después de corregirla todavía no obtengo ningún resultado. Para un dispositivo que tiene una tarjeta SD insertada, obtengo un BusTypeUnknown
lugar de BusTypeSd
en pDeviceDesc.BusType
. Esto parecía sencillo y aún fallado.
No creo que sea posible, ya que los lectores de tarjetas presentan su almacenamiento de la misma manera que una unidad flash normal para el sistema operativo. Ambos son dispositivos de clase de almacenamiento masivo USB. Aquí está el artículo de Wikipedia en esta clase de dispositivo. El sistema operativo no tiene forma de distinguir entre esos dos tipos de dispositivos.