`

VB 捕获系统注销、关机事件

阅读更多
正文开始:

目前网上,能够截获系统注销、关机事件消息的VB代码,非常少,即便是有,作者也大多胡乱拷贝,不是很负责任。

本文作者经过3个小时的辛苦努力,终于搞定这两个小问题,本代码在VB6.0环境下测试通过,仅有3步,直接复制即可使用,希望能给在网络中苦苦追寻的网友,带来福音。

1、先建一bas模块文件,此处为Public.bas,代码如下:

'专门用于处理注销、关机消息截获及处理事件__开始
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
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

Public Const GWL_WNDPROC = (-4)
Public Const WM_ENDSESSION = &H16
Public Const WM_QUERYENDSESSION = &H11

Public preWinProc As Long

Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_QUERYENDSESSION Then '如果是注销

     '在这里,你可以加一些自定义操作

     End'程序退出,防止用户因为本程序未退出而无法注销。
Else
  If Msg = WM_ENDSESSION Then '如果是关机
    If wParam = 0 Then '代表将顺利关机或LogOff,这时便得做正常结束程序的操作        

     '在这里,你可以加一些自定义操作

     End'程序退出,防止用户因为本程序未退出而无法关机。

End If
End If
End If
'将之送往原来的Window Procedure
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
'专门用于处理注销、关机消息截获及处理事件__结束



2、然后在Form_Load()事件中添加如下代码:

Private Sub Form_Load()

'专门用于处理注销、关机消息截获及处理事件__开始
Dim ret As Long
'记录原来的Window Procedure的位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'设定form的window Procedure到wndproc
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
'专门用于处理注销、关机消息截获及处理事件__结束

End Sub



3、最后在Form_Unload()事件中添加如下代码:

Private Sub Form_UnLoad(Cancel As Integer) '用于捕获用户注销,关机等强退事件

'专门用于处理注销、关机消息截获及处理事件__开始
  Dim ret As Long
  '取消Message的截取,而使之又只送往原来的Window Procedure
  ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
  '这里只是要看看用关机的方式结束程序时,会不会执行到这里
'专门用于处理注销、关机消息截获及处理事件__结束

End Sub
转自:http://wanghaibin0921.blog.163.com/blog/static/3606884020091010103733166/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics