首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

~请教怎么检测系统关机

2012-01-18 
求助~请问如何检测系统关机?如题~请教下各位大哥,我的程序如何能检测到系统在关机呢?以便在关机前弹出提示

求助~请问如何检测系统关机?
如题~请教下各位大哥,我的程序如何能检测到系统在关机呢?以便在关机前弹出提示:“正在关机。。。”

[解决办法]
拦截系统关机消息:

’以下在Form

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

Private Sub Form_Unload(Cancel As Integer)

 Dim ret As Long

 ’取消 Message 拦截,而使之又只送往原来的Window Procedure

 ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
 
End Sub


’以下在.Bas

Option Explicit

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
Dim blnShutdown As Boolean
 If Msg = WM_QUERYENDSESSION Then

   Debug.Print "QryEnd", wParam, lParam

 Else

  If Msg = WM_ENDSESSION Then

   If wParam 0 Then ’代表将顺利关机或LogOff,这时便得做正常结束程序的操作

     blnShutdown = True 

   End If

  End If

 End If

 ’将之送往原来的Window Procedure

 wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

If blnShutdown Then MsgBox "Shutdown ..."
End Function
[解决办法]

VB code
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    If UnloadMode = vbAppWindows Then        MsgBox "正在关机。。。"    End IfEnd Sub
[解决办法]
1楼是大姐,不是大哥!

热点排行