夏普电视清晰度调节:VB 捕获系统注销、关机事件 -
来源:百度文库 编辑:偶看新闻 时间:2024/05/10 08:41:01
目前网上,能够截获系统注销、关机事件消息的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
本文作者经过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
VB中如何实现系统的关机、重启和注销
VB如何让系统关机
javascript如何捕获键盘事件?
在VB中如何实现关机,重新启动和注销?
VB做的系统 注销的代码 还有帮助
系统刚重装,为什么不管是按重启,注销关机都是重启呢?
关机是关闭所有系统,注销是不是呢,
在windows 2003中注销系统或关机无反应!
VB在WIN2K/NT/XP的注销/关机/重起代码
系统注销?
关于vb MouseDown事件
VB按钮事件
vb中的time事件
vb驱动事件
关机注销的问题
注销和关机
求助,在vb中的系统关机,重起代码。
请问在VB中怎么获得系统关机的时间
在VB中,对于窗体,由系统自动触发的第一个事件是什么
急待解决:笔记本xp系统不能正常注销,重启和关机
我的是xp系统不能重新启动关机和注销了!
为什么,系统在关机和注销的时候会自动重起计算机了?
XP系统关机时点“关闭计算机”出现“注销或切换用户”是怎么回事,而且电脑比较慢。
关闭监控程序后提示 I/O error 103,系统无法关机注销重启.