Private Declare Function CallWindowProc Lib "user32" _ Alias "CallWindowProcA" _ (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _ ByVal Msg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long, _ ByVal wNewWord As Long) As LongPrivate Const GWL_WNDPROC As Long = (-4) Private Const DBT_DEVICEARRIVAL As Long = 32768 Private Const DBT_DEVICEREMOVECOMPLETE As Long = 32772 Private Const DBT_DEVTYP_VOLUME As Long = &H2 Public Const WM_CLOSE As Long = &H10 Private Const WM_DEVICECHANGE As Long = &H219Public DeviceCallBack As LongPublic Sub StartUSBWatch(ByVal hWnd As Long) DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf OnDeviceChange) End SubPublic Sub StopUSBWatch(ByVal hWnd As Long) DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, DeviceCallBack) End SubPublic Function OnDeviceChange(ByVal hWnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then '在这里处理 End If OnDeviceChange = CallWindowProc(DeviceCallBack, hWnd, Msg, wParam, lParam) End Function
Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal wNewWord As Long) As LongPrivate Const GWL_WNDPROC As Long = (-4)
Private Const DBT_DEVICEARRIVAL As Long = 32768
Private Const DBT_DEVICEREMOVECOMPLETE As Long = 32772
Private Const DBT_DEVTYP_VOLUME As Long = &H2
Public Const WM_CLOSE As Long = &H10
Private Const WM_DEVICECHANGE As Long = &H219Public DeviceCallBack As LongPublic Sub StartUSBWatch(ByVal hWnd As Long)
DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf OnDeviceChange)
End SubPublic Sub StopUSBWatch(ByVal hWnd As Long)
DeviceCallBack = SetWindowLong(hWnd, GWL_WNDPROC, DeviceCallBack)
End SubPublic Function OnDeviceChange(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then
'在这里处理
End If
OnDeviceChange = CallWindowProc(DeviceCallBack, hWnd, Msg, wParam, lParam)
End Function
http://msdn.microsoft.com/en-us/library/aa363432(VS.85).aspx