我從網上找到下面的方法來判斷電腦是否是關機,然后才決定程式退出時是否顯示確認對話框,代碼如下,但是每次退出程式時,就會出現“Visual basic已停止作業”,請大家幫忙看看是怎么回事
Private Sub Form_Load()
lpPrevWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProcShutdown)
gShutdown = False
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim Temp As Long
Dim f As Form
Dim res As Long
'非關機時要求確認軟體關閉操作
If gShutdown = True Then
res = vbYes
Else
res = MsgBox("Are you sure to exit?", vbInformation + vbYesNo + vbDefaultButton2, Caption)
End If
If res = vbNo Then
Cancel = 1 'Cancel
Else 'res=vbYes
'恢復原視窗函式
Temp = SetWindowLong(Me.hWnd, GWL_WNDPROC, lpPrevWndProc)
For Each f In Forms
Unload f
Next
End 'Close
End If
End Sub
========模塊==========================
Public lpPrevWndProc As Long '存放原視窗函式句柄
Public Const GWL_WNDPROC = -4& '指定替換原視窗函式常數
Public gShutdown As Boolean '關機時設定此變數從而繞過軟體關閉確認對話框
Public fno As Long
'呼叫指定視窗函式的API函式定義
Public 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
'設定Windows長引數的API函式定義
'(本程式中設定指定視窗函式替換原視窗函式,回傳原視窗函式地址,當nIndex=GWL_WNDPROC)
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'我們自己的視窗函式
Public Function WindowProcShutdown(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = 17 Then ' WM_QUERYENDSESSION
gShutdown = True
Else
If uMsg = 22 Then ' WM_ENDSESSION
If wParam = 0 Then '代表將順利關機或LogOff,這時便得做正常結束程式的操作
gShutdown = True
End If
End If
End If
'將之送往原來的Window Procedure
WindowProcShutdown = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7306.html
標籤:VB基礎類
上一篇:大眾評審 | 最佳敏捷實踐獎
下一篇:vb
