正文开始:
目前网上,能够截获系统注销、关机事件消息的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/
分享到:
相关推荐
VB6 API实现关机、注销、重启 实例
通过VB捕获屏幕分辨率的改变是很重要的,我曾用过一个软件,功能很不错,但是我一改分辨率,这个软件的几个按钮和部分界面就失踪了。而这个源码就讲述了如何通过VB捕获屏幕分辨率的改变,并获得新的分辨率。
VB.net 实现关机注销重启、获取本机的信息
VB捕获屏幕 抓图精灵,除了抓图以外还可以把抓到的图片设置为背景,可以自由选择区域抓图,也可延时抓取,还有简单的图像处理功能。获得屏幕属性,如果屏幕对象有调色板则获得屏幕调色板,将新建立的调色板选如建立...
倒记时关机 定时关机 Visual baisc开发
VB注销、关机和重启计算机的源代码.rar
VB 对象的系统事件 VB 对象的系统事件
VB定时关机,在指定时间内关闭电脑、延长指定时长后关机、立即关机三大功能选项,同时还可定时重启或注销计算机。
vb写自动在下午7点关机的代码。要加一个timer控件,频率随便设,一个按钮(为了取消关机),窗口设置为隐藏,并且开机自动启动。
vb 捕获摄像头图像vb 捕获摄像头图像
VB调用系统关机对话框及直接关机的实现示例,了解一下Vb如何通过调用Windows进行关机,代码比较完整,尽管功能比较单一,但是对于新手来说非常不错的,欢迎下载。 上图为烈火下载提供的调用关机演示
vb写的 自动关机程序 vb写的 自动关机程序 倒计时 关机 VB 倒计时 关机 VB
VB中注销, 重启和关闭计算机 VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机
VB注销关机程序,包括定时关机、重启,可以设置4个时间控制点,程序作者:袁万能。功能方面,不多介绍了,可关闭电脑、注销用户、重启电脑,也可设置定时项完成上述功能。
本程序是用VB6.0编写的代码,主要功能是开机、关机、注销功能等。 QQ223857666勾月
定时关机 VB定时关机 延时关机 定时关机绿色版 VB 6 写的,简单 好用
用vb.net编写的关机程序,全是你码,自己输入的时候一定要小心。。。
VB实现电脑自动关机,注销,重新启动等功能,其实蛮简单
vb做的立即关机小程序 点击就立即关机 就是那个样子
VB编写的,利用了Sockets进行数据包的捕获和分析