Newsgroup: it.comp.lang.visual-basic
Titolo: Intercettare evento di inserimento chiave USB

Buongiorno a tutti,
	ho provato a utilizzare gli script in WSH ma non funzionano. L'evento 
entra in loop senza sbloccarsi all'inserimento di una periferica USB. 
Esiste qualche altro sistema? Un'API da richiamare?
Grazie!


mi serviva anche a me tempo fa, non ho pensato di postare sul
newsgroup, e ho risolto in un modo penso altamente schifoso (vb2005).
ho messo questo codice in timer_tick:
        For x As Integer = 0 To My.Computer.FileSystem.Drives.Count -
1
            If My.Computer.FileSystem.Drives(x).DriveType =
IO.DriveType.Removable Then
                MsgBox("Inserita")
            End If
        Next
Per quello che mi serviva a me, funziona.
Però se sei in vb6... boh!
ciao

 Però se sei in vb6... boh!
In VB6 è molto più macchinoso:
Public Function GetUSBDriveLetter() As String
     Dim strComputer As String
     strComputer = "."
     Dim objWMIService As Object
     Dim objDisk As Object
     Dim colDisks As Object
     Set objWMIService = GetObject("winmgmts:" _
         & "{impersonationLevel=impersonate}!\\" & strComputer & 
"\root\cimv2")
     Set colDisks = objWMIService.ExecQuery _
         ("Select * from Win32_LogicalDisk")
     GetUSBDriveLetter = ""
     For Each objDisk In colDisks
         'GetUSBDriveLetter = objDisk.DeviceID
         Select Case objDisk.DriveType
             Case 2
                 If UCase(objDisk.DeviceID) <> "A:" And 
UCase(objDisk.DeviceID) <> "B:" Then
                     GetUSBDriveLetter = GetUSBDriveLetter & 
objDisk.DeviceID & "-"
                 End If
         End Select
         DoEvents
     Next
End Function
Nel mio caso però se ho un'unità mappata come di rete e la periferica 
USB prende la stessa lettera, l'unità usb non è visibile e la procedura 
non indica nessuna lettera. Non so davvero come risolvere. WinXP non 
associa alla periferica USB alcuna lettera. Per questo mi serviva 
intercettare l'inserimento della periferica in modo tale che posso 
cercare fisicamente la periferica in qualche modo da trovare chiaramente 
ma intanto è un punto di partenza.
Ma non c'è modo di leggere le periferiche che si trovano in "Gestione 
disco"?
Grazie!


Fai attenzione che per usare WMI devi avere DCOM abilitate.... e non sempre
è possibile.
La stessa cosa si può fare via API eventualmente, ma è ancora più comlicato.
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

Incolla questo codice a un Form a cui aggiungi una ListBox:
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As
String) As Long
Private Sub Form_Load()
    Dim S As String
    S = String(255, Chr(0))
    GetLogicalDriveStrings 255, S
    D = Split(S, Chr(0))
    For a = 0 To UBound(D)
        If D(a) = "" Then
            Exit For
        Else
            List1.AddItem D(a) + " - " + Dir(D(a), vbVolume)
        End If
    Next a
End Sub
A questo punto se vuoi trovare la tua chiavetta, basta che gli dai un nome!
--
Ciao Fede
By Chicco Production
http://www.webalice.it/bychicco/