'NTDLL
Private Declare Function NtQueryInformationProcess Lib "NTDLL" (ByVal hProcess As Long, ByVal ProcessInformationClass As Long, ProcessInformation As Any, ByVal ProcessInformationLength As Long, ReturnLength As Long) As Long
Private Type PROCESS_DEVICEMAP_INFORMATION
DriveMap As Long
DriveType(1 To 32) As Byte
End Type
Private Const ProcessDeviceMap = 23
Public Function NtGetPenDrives() As Collection
Dim cTMP As New Collection
Dim tPDC As PROCESS_DEVICEMAP_INFORMATION
Dim i As Long
Dim lMask As Long
If NtQueryInformationProcess(-1, ProcessDeviceMap, tPDC, Len(tPDC), ByVal 0&) = 0 Then
For i = 1 To 25
If tPDC.DriveMap And 2 ^ i Then
If (tPDC.DriveType(i + 1) = 2) Then
cTMP.Add Chr$(65 + i) & ":\"
End If
End If
Next i
End If
Set NtGetPenDrives = cTMP
End Function
Ejemplo de uso:Sub Main()
Dim v As Variant
For Each v In NtGetPenDrives
Debug.Print v
Next v
End Sub
Notas:
- No incluye la unidad A:
- No filtra las unidades por BusType...
Simplemente he hecho una nueva funcion a partir de estas funciones Nativas que hice algun tiempo:
http://www.advancevb.com.ar/?p=335
Interesante, pero por las dudas le cambiaria el nombre de getPendrives, es bastante curiso ver una funcion con ese nombre dentro de un .exe
:P
en fin, interesante
saludos
Cita de: el_c0c0 en 31 Octubre 2009, 18:18 PM
Interesante, pero por las dudas le cambiaria el nombre de getPendrives, es bastante curiso ver una funcion con ese nombre dentro de un .exe
:P
en fin, interesante
saludos
Si bueno, algo como esto?:
Public Function () As Collection
For Each v In
Debug.Print v
Next v
:rolleyes:
No es un espacio, sino un Chr$(160) :D
De todas formas eso da igual , lo que mola es la forma en que saca la informacion ::) :xD
muy bueno, ahora me hiciste acordar de que tengo que hacer un post unico para juntar todo estos codigos, ahora dentro de un rato me pongo a hacerlo y te aviso que lo postees ahi cuando tengas uno.
saludos.
Muy bueno!
Gracias por compartir ;D
Muy buen code!!Gracias ;D
;-) ;-) ;-)
Una, me jor dicho 3 :P imagenes dicen mas que 4 palabras :P