`

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/
分享到:
评论

相关推荐

    VB定时关机 重启、注销.rar

    在这个“VB定时关机 重启、注销.rar”压缩包中,包含的VB源码提供了实现计算机定时关机、重启和注销的功能。这些功能对于日常使用或者特定场景下的自动化管理非常实用。 1. **定时关机**: 在VB中,可以使用...

    vb远程控制可以实现远程注销和关机

    在VB中实现远程控制功能,可以让我们进行远程注销和关机等操作,这对于系统管理员进行远程维护或者在多设备环境下的协同工作具有重要意义。 远程注销和关机是远程控制的两个基本功能。远程注销允许管理员无须物理...

    VB做的定时关机

    本项目利用VB2010来实现定时关机、重启和注销计算机的功能,这在日常使用或系统维护中非常实用。 要创建这样一个程序,我们需要了解以下几个关键知识点: 1. **事件驱动编程**:VB是基于事件驱动的编程语言,这...

    windows关机、重启、注销类 vb.net实现

    在Windows操作系统中,开发者经常需要实现对系统的控制功能,如关机、重启和注销等。在VB.NET(Visual Basic .NET)环境下,这些操作可以通过调用操作系统提供的API(应用程序编程接口)来实现。本篇文章将深入探讨...

    VB远程文件传输、远程控制、监控程序.rar

    VB远程文件传输、监控程序,使用到了DIjpg.dll,并且还有局域网消失发送测试模块,通过远程控制它还可完成屏幕捕获、锁定客户端、解锁客户端、注销、关机、显示隐藏客户端等操作,程序启动时,先启动服务端,再运行...

Global site tag (gtag.js) - Google Analytics