1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
|
'
'// Module1.bas
'
Opción explícita
'egl1044
Const privado GWL_WNDPROC como de largo = (- 4)
Const privado WM_DEVICECHANGE como de largo = &H219
Const privado DBT_DEVICEARRIVAL como de largo = 32768
Const privado DBT_DEVICEREMOVECOMPLETE como de largo = 32772
Const privado DBT_DEVTYP_DEVICEINTERFACE como de largo = &H5&
Const privado DBT_DEVTYP_VOLUME como de largo = &H2&
Const privado GUID_USB como secuencia = “{A5DCBF10-6530-11D2-901F-00C04FB951ED}”
Tipo privado UUID
Data1 como de largo
Data2 como número entero
Data3 como número entero
Data4 (7) como octeto
Tipo del extremo
Tipo privado DEV_BROADCAST_HDR
dbch_size como de largo
dbch_devicetype como de largo
dbch_reserved como de largo
Tipo del extremo
Tipo privado DEV_BROADCAST_DEVICEINTERFACE
dbcc_size como de largo
dbcc_devicetype como de largo
dbcc_reserved como de largo
dbcc_classguid como UUID
dbcc_name como de largo
Tipo del extremo
Tipo privado DEV_BROADCAST_VOLUME
dbcv_size como de largo
dbcv_devicetype como de largo
dbcv_reserved como de largo
dbcv_unitmask como de largo
dbcv_flags como número entero
Tipo del extremo
Privado declarar la liberación “User32.dll” de CallWindowProcW de la función (el _
lpPrevWndFunc de ByVal como de largo, _
hWnd de ByVal como de largo, _
uMsg de ByVal como de largo, _
wParam de ByVal como de largo, _
lParam de ByVal como de largo) como de largo
Privado declarar la liberación “User32.dll” de SetWindowLongW de la función (el _
hWnd de ByVal como de largo, _
nIndex de ByVal como de largo, _
dwNewLong de ByVal como de largo) como de largo
Privado declarar la liberación “User32.dll” de RegisterDeviceNotificationW de la función (el _
ByVal hRecipient como de largo, _
ByVal NotificationFilter como de largo, _
Banderas de ByVal como de largo) como de largo
Privado declarar la liberación “User32.dll” de UnregisterDeviceNotification de la función (el _
Manija de ByVal como de largo) como de largo
Privado declarar la liberación “Ole32.dll” de CLSIDFromString de la función (el _
Lpsz de ByVal como de largo, _
Pclsid de ByRef como UUID) como de largo
Privado declarar la liberación secundaria “Kernel32.dll” de RtlMoveMemory (el _
Destinación de ByRef como cualesquiera, _
Fuente de ByRef como cualesquiera, _
Longitud de ByVal como de largo)
Privado declarar la liberación secundaria “Kernel32.dll” de RtlZeroMemory (el _
Dst de ByRef como cualesquiera, _
nBytes de ByVal como de largo)
Funcional público como de largo
hDev público como de largo
hWindow público como de largo
Lpdb dévil como DEV_BROADCAST_HDR
Lpdbv dévil como DEV_BROADCAST_VOLUME
Lpdbdi dévil como DEV_BROADCAST_DEVICEINTERFACE
fUsb dévil como boleano
Función privada GetDriveFromMask (ByVal UnitMask como de largo) como secuencia
GetDriveFromMask = Chr$ (65 + (registro ()/registro de UnitMask (2)))
Función del final
RegisterDeviceInterfaceToHwnd secundario público (hWnd de ByVal como de largo)
Lpdbd dévil como DEV_BROADCAST_DEVICEINTERFACE
Lpusb dévil como UUID
Si 0 <> funcional entonces
Salir el submarino
Terminar si
hWindow = hWnd
CLSIDFromString StrPtr (GUID_USB), lpusb
lpdbd.dbcc_size = Len (lpdbd)
lpdbd.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE
lpdbd.dbcc_classguid = lpusb
hDev = RegisterDeviceNotificationW (hWindow, VarPtr (lpdbd), 0)
funcional = SetWindowLongW (hWindow, GWL_WNDPROC, AddressOf OnUsbChange)
Submarino del extremo
UnRegisterDeviceInterface secundario público ()
hDev de UnregisterDeviceNotification
funcional = SetWindowLongW (hWindow, GWL_WNDPROC, funcionales)
= 0 funcional
hWindow = 0
Submarino del extremo
Función pública OnUsbChange (hWnd de ByVal como uMsg de largo, de ByVal como wParam de largo, de ByVal como lParam de largo, de ByVal como de largo) como de largo
Si uMsg = WM_DEVICECHANGE después
Seleccionar el wParam del caso
Encajonar DBT_DEVICEARRIVAL
Lpdb de RtlMoveMemory, lParam& de ByVal, Len (lpdb)
Si lpdb.dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE después
Lpdbdi de RtlMoveMemory, lParam& de ByVal, Len (lpdbdi)
el fUsb = verdad
Terminar si
Si lpdb.dbch_devicetype = DBT_DEVTYP_VOLUME y fUsb después
Lpdbv de RtlMoveMemory, lParam& de ByVal, Len (lpdbv)
fUsb = falso
' Insertado
Debug.Print “insertó @ el drive=” y GetDriveFromMask (lpdbv.dbcv_unitmask)
Terminar si
Encajonar DBT_DEVICEREMOVECOMPLETE
Lpdb de RtlMoveMemory, lParam& de ByVal, Len (lpdb)
Si lpdb.dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE después
Lpdbdi de RtlMoveMemory, lParam& de ByVal, Len (lpdbdi)
el fUsb = verdad
Terminar si
Si lpdb.dbch_devicetype = DBT_DEVTYP_VOLUME y fUsb después
Lpdbv de RtlMoveMemory, lParam& de ByVal, Len (lpdbv)
fUsb = falso
' Quitado
Debug.Print “quitó @ el drive=” y GetDriveFromMask (lpdbv.dbcv_unitmask)
Terminar si
Terminar selecto
Terminar si
OnUsbChange = CallWindowProcW (funcional, hWnd, uMsg, wParam, lParam)
Función del final
'
'// Form1.frm
'
Opción explícita
Form_Load secundario privado ()
Llamada RegisterDeviceInterfaceToHwnd (Me.hWnd)
Submarino del extremo
Form_QueryUnload secundario privado (cancelación como número entero, UnloadMode como número entero)
Llamada UnRegisterDeviceInterface
Submarino del extremo
|