I have 2 problems.
1. In the WM_QUERYENDSESSION description it is mentioned that the application may return FALSE to cancel shutdown. How can I return a value while using MsgHook.
2. I used following code without returning any value. It works, but some other programs (mostly in system tray) are still unloaded. After that my program shows "Shutting Down" message & then shut down is cancelled.
Private Const WM_QUERYENDSESSION = &H11 Private Const ENDSESSION_LOGOFF As Long = &H80000000 Private Const WM_CANCELMODE = &H1F Private Sub Form_Load() Msghook1.HwndHook = Me.hWnd 'intercept messages for my window Msghook1.Message(WM_QUERYENDSESSION) = True 'enable event for WM_QUERYENDSESSION End Sub Private Sub Msghook1_Message(ByVal msg As Long, ByVal wp As Long, ByVal lp As Long, result As Long) If msg = WM_QUERYENDSESSION Then ' result = False MsgBox "Shutting Down" ' Else ' result = Msghook1.InvokeWindowProc(msg, wp, lp) End If End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Msghook1.Message(WM_QUERYENDSESSION) = False Msghook1.HwndHook = 0 'unhook any window End Sub
How can I prevent shutdown so that no program should be closed?