New
#11
I have tested it, but the result still same with my previous code. Windows screen dialog still appear when we try to shutdown. And your code make my another code freeze if mouse pointer in hover of my form.How about this?
orCode:Public Sub Handler_SessionEnding(ByVal sender As Object, ByVal e As Microsoft.Win32.SessionEndingEventArgs) If e.Reason = Microsoft.Win32.SessionEndReasons.Logoff Then MessageBox.Show("User is logging off") ElseIf e.Reason = Microsoft.Win32.SessionEndReasons.SystemShutdown Then MessageBox.Show("System is shutting down") End If End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf Handler_SessionEnding End Sub
SystemEvents.SessionEnding Event (Microsoft.Win32)
or a quick google:
FormCode:' Original Code ' Created by E.Spencer - This code is public domain. ' Routines for running an app as an NT service. ' ' modified/rehashed by G.Crisp ' code modified to just detect and cancel windows shutdown - only a few unused bits deleted ' 'orginal code available from 'http://www.ilook.fsnet.co.uk/vb/vbntserv.htm ' Public Const GWL_WNDPROC = (-4) Public Const WM_ENDSESSION = &H16 Public Const WM_QUERYENDSESSION = &H11 Public WndProc 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' exiting from windows '------------------------------------------------------- Public Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long 'EWX_FORCE = 4 Force any applications to quit instead of prompting the user to close them. 'EWX_LOGOFF = 0 Log off the network. 'EWX_POWEROFF = 8 Shut down the system and, if possible, turn the computer off. 'EWX_REBOOT = 2 Perform a full reboot of the system. 'EWX_SHUTDOWN = 1 'call this from your form Public Sub Hook(Lwnd As Long) Dim uProcess As Long WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_QUERYENDSESSION Then 'MsgBox "hw:" + CStr(hw) + " uMsg:" + CStr(uMsg) + " wParam:" + CStr(wParam) WindowProc = False 'send don't shut down 'run code do what you want, then call ExitWindowsEx etc up to you Exit Function ElseIf uMsg = WM_ENDSESSION Then 'MsgBox "hw:" + CStr(hw) + " uMsg:" + CStr(uMsg) + " wParam:" + CStr(wParam) WindowProc = False 'run code Exit Function End If WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) End FunctionForm
Code:Private Sub Form_Load() Hook (Me.hwnd) End Sub