捕捉光驱的动作:在窗体中的代码: Option ExplicitPrivate Sub Form_Load() prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc End Sub建立一模块,代码如下:Option Explicit Public Const WM_DEVICECHANGE& = 537& Public Const DBT_DEVICEREMOVECOMPLETE& = 32772 Public Const DBT_DEVICEARRIVAL& = 32768Public Const GWL_WNDPROC = (-4)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 Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As LongFunction WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的 If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的 If wParam = DBT_DEVICEARRIVAL Then MsgBox "2" '这个是光驱关上时产生的 WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam) End Function在窗体中的代码: Option ExplicitPrivate Sub Form_Load() prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc End Sub建立一模块,代码如下:Option Explicit Public Const WM_DEVICECHANGE& = 537& Public Const DBT_DEVICEREMOVECOMPLETE& = 32772 Public Const DBT_DEVICEARRIVAL& = 32768Public Const GWL_WNDPROC = (-4)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 Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As LongFunction WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的 If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的 If wParam = DBT_DEVICEARRIVAL Then MsgBox "2" '这个是光驱关上时产生的 WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam) End Function
Option ExplicitPrivate Sub Form_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub建立一模块,代码如下:Option Explicit
Public Const WM_DEVICECHANGE& = 537&
Public Const DBT_DEVICEREMOVECOMPLETE& = 32772
Public Const DBT_DEVICEARRIVAL& = 32768Public Const GWL_WNDPROC = (-4)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 Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As LongFunction WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的
If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的
If wParam = DBT_DEVICEARRIVAL Then MsgBox "2" '这个是光驱关上时产生的
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function在窗体中的代码:
Option ExplicitPrivate Sub Form_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub建立一模块,代码如下:Option Explicit
Public Const WM_DEVICECHANGE& = 537&
Public Const DBT_DEVICEREMOVECOMPLETE& = 32772
Public Const DBT_DEVICEARRIVAL& = 32768Public Const GWL_WNDPROC = (-4)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 Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As LongFunction WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的
If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的
If wParam = DBT_DEVICEARRIVAL Then MsgBox "2" '这个是光驱关上时产生的
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function