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
'
Option explicite
'egl1044
Const privé GWL_WNDPROC en tant que longtemps = (- 4)
Const privé WM_DEVICECHANGE en tant que longtemps = &H219
Const privé DBT_DEVICEARRIVAL en tant que longtemps = 32768
Const privé DBT_DEVICEREMOVECOMPLETE en tant que longtemps = 32772
Const privé DBT_DEVTYP_DEVICEINTERFACE en tant que longtemps = &H5&
Const privé DBT_DEVTYP_VOLUME en tant que longtemps = &H2&
Const privé GUID_USB comme corde = « {A5DCBF10-6530-11D2-901F-00C04FB951ED} »
Type privé UUID
Data1 en tant que longtemps
Data2 comme nombre entier
Data3 comme nombre entier
Data4 (7) comme byte
Type d'extrémité
Type privé DEV_BROADCAST_HDR
dbch_size en tant que longtemps
dbch_devicetype en tant que longtemps
dbch_reserved en tant que longtemps
Type d'extrémité
Type privé DEV_BROADCAST_DEVICEINTERFACE
dbcc_size en tant que longtemps
dbcc_devicetype en tant que longtemps
dbcc_reserved en tant que longtemps
dbcc_classguid comme UUID
dbcc_name en tant que longtemps
Type d'extrémité
Type privé DEV_BROADCAST_VOLUME
dbcv_size en tant que longtemps
dbcv_devicetype en tant que longtemps
dbcv_reserved en tant que longtemps
dbcv_unitmask en tant que longtemps
dbcv_flags comme nombre entier
Type d'extrémité
Privé déclarer la bibliothèque « User32.dll » de CallWindowProcW de fonction (le _
lpPrevWndFunc de ByVal en tant que longtemps, _
hWnd de ByVal en tant que longtemps, _
uMsg de ByVal en tant que longtemps, _
wParam de ByVal en tant que longtemps, _
lParam de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « User32.dll » de SetWindowLongW de fonction (le _
hWnd de ByVal en tant que longtemps, _
nIndex de ByVal en tant que longtemps, _
dwNewLong de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « User32.dll » de RegisterDeviceNotificationW de fonction (le _
ByVal hRecipient en tant que longtemps, _
ByVal NotificationFilter en tant que longtemps, _
Drapeaux de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « User32.dll » d'UnregisterDeviceNotification de fonction (le _
Poignée de ByVal en tant que longtemps) en tant que longtemps
Privé déclarer la bibliothèque « Ole32.dll » de CLSIDFromString de fonction (le _
Lpsz de ByVal en tant que longtemps, _
Pclsid de ByRef comme UUID) en tant que longtemps
Privé déclarer la bibliothèque secondaire « Kernel32.dll » de RtlMoveMemory (le _
Destination de ByRef en tant que quels, _
Source de ByRef en tant que quels, _
Longueur de ByVal en tant que longtemps)
Privé déclarer la bibliothèque secondaire « Kernel32.dll » de RtlZeroMemory (le _
Dst de ByRef en tant que quels, _
nBytes de ByVal en tant que longtemps)
Fonctionnel public en tant que longtemps
hDev public en tant que longtemps
hWindow public en tant que longtemps
Faible lpdb comme DEV_BROADCAST_HDR
Faible lpdbv comme DEV_BROADCAST_VOLUME
Faible lpdbdi comme DEV_BROADCAST_DEVICEINTERFACE
Faible fUsb comme booléen
Fonction privée GetDriveFromMask (ByVal UnitMask en tant que longtemps) comme corde
GetDriveFromMask = Chr$ (65 + (notation) (d'UnitMask/notation (2)))
Fonction de fin
RegisterDeviceInterfaceToHwnd secondaire public (hWnd de ByVal en tant que longtemps)
Faible lpdbd comme DEV_BROADCAST_DEVICEINTERFACE
Faible lpusb comme UUID
Si 0 <> fonctionnel puis
Sortir le sous-marin
Finir 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)
fonctionnel = SetWindowLongW (hWindow, GWL_WNDPROC, AddressOf OnUsbChange)
Sous-marin d'extrémité
UnRegisterDeviceInterface secondaire public ()
hDev d'UnregisterDeviceNotification
fonctionnel = SetWindowLongW (hWindow, GWL_WNDPROC, fonctionnels)
= 0 fonctionnel
hWindow = 0
Sous-marin d'extrémité
Fonction publique OnUsbChange (hWnd de ByVal en tant qu'uMsg longtemps, de ByVal en tant que wParam longtemps, de ByVal en tant que lParam longtemps, de ByVal en tant que longtemps) en tant que longtemps
Si uMsg = puis WM_DEVICECHANGE
Choisir le wParam de cas
Enfermer DBT_DEVICEARRIVAL
Lpdb de RtlMoveMemory, lParam& de ByVal, Len (lpdb)
Si lpdb.dbch_devicetype = puis DBT_DEVTYP_DEVICEINTERFACE
Lpdbdi de RtlMoveMemory, lParam& de ByVal, Len (lpdbdi)
le fUsb = rectifient
Finir si
Si lpdb.dbch_devicetype = puis DBT_DEVTYP_VOLUME et fUsb
Lpdbv de RtlMoveMemory, lParam& de ByVal, Len (lpdbv)
fUsb = faux
' Inséré
Debug.Print « a inséré @ le drive= » et le GetDriveFromMask (lpdbv.dbcv_unitmask)
Finir si
Enfermer DBT_DEVICEREMOVECOMPLETE
Lpdb de RtlMoveMemory, lParam& de ByVal, Len (lpdb)
Si lpdb.dbch_devicetype = puis DBT_DEVTYP_DEVICEINTERFACE
Lpdbdi de RtlMoveMemory, lParam& de ByVal, Len (lpdbdi)
le fUsb = rectifient
Finir si
Si lpdb.dbch_devicetype = puis DBT_DEVTYP_VOLUME et fUsb
Lpdbv de RtlMoveMemory, lParam& de ByVal, Len (lpdbv)
fUsb = faux
' Enlevé
Debug.Print « a enlevé @ le drive= » et le GetDriveFromMask (lpdbv.dbcv_unitmask)
Finir si
Finir choisi
Finir si
OnUsbChange = CallWindowProcW (fonctionnel, hWnd, uMsg, wParam, lParam)
Fonction de fin
'
'// Form1.frm
'
Option explicite
Form_Load secondaire privé ()
Appel RegisterDeviceInterfaceToHwnd (Me.hWnd)
Sous-marin d'extrémité
Form_QueryUnload secondaire privé (annulation comme nombre entier, UnloadMode comme nombre entier)
Appel UnRegisterDeviceInterface
Sous-marin d'extrémité
|