2012-02-12 8 views
17

Voglio rilevare quando una scheda SD (o altra scheda) è inserita nel lettore di schede. So di WM_DEVICECHANGE ma ho bisogno di ottenere informazioni sul tipo di dispositivo specifico data la lettera di unità. Ad esempio, voglio distinguere tra qualsiasi carta nel lettore di schede da una "normale" unità flash. GetDriveType() non sembra abbastanza raffinato. Quali sono le mie altre scelte?Ottieni un tipo di dispositivo specifico da una lettera di unità

Sono felice con una soluzione Windows 7. Non ho bisogno di compatibilità con le versioni precedenti.

Questo tipo di rifinitura è possibile?

Ho trovato this topic che non fornisce una risposta soddisfacente. This one sembra la strada da percorrere ma non ci sono codici di esempio o indicatori per l'esempio del codice. È incredibile che nessuno abbia messo insieme un campione funzionante per una richiesta così comune.

[EDIT]

devo anche found this. L'esempio fornito ha alcuni errori ma dopo averlo risolto non ho ancora ottenuto alcun risultato. Per un dispositivo dotato di una scheda SD inserita, viene visualizzato il numero BusTypeUnknown anziché anziché . Questo sembrava semplice e ancora fallito.

+1

Hai già provato WMI? Win32_LogicalDrive e Win32_PhysicalMedia sembrano promettenti. Utilizzare l'utilità WMI Code Creator prima di scrivere qualsiasi codice. –

+0

No. Ho avuto solo mal di testa con WMI prima. Cerco di evitarlo quando è possibile. WMI funzionerebbe in un servizio di Windows? – wpfwannabe

+0

Ciao, hai avuto risposta a questa domanda? Devo farlo anche –

risposta

0

Non credo sia possibile, dal momento che i lettori di schede presentano la loro archiviazione allo stesso modo di una normale unità flash al sistema operativo. Sono entrambi dispositivi di archiviazione di massa USB. Ecco lo Wikipedia article su questa classe di dispositivi. Il sistema operativo non ha modo di distinguere tra questi due tipi di dispositivi.

1

Questo sembra utile: 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 

Esempio di output (dovrebbe essere un albero):

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 

spero non tutti di memorizzazione USB si descrive come "USB Mass Storage Device". In tal caso, controllare il nome del volume o autorun.inf, se presente.

Microsoft è tra gli inventori di USB, è improbabile che sia necessario il this Linux info, ma potrebbe essere raccolto per termini di ricerca come "Pendrive" e "Flash Drive".

Problemi correlati