DrAhmed

Detect Windows SessionEnding/shutdown/Restart ?

3 posts in this topic

hey

I wonder if there is a possibility to do this in Autoit ? I've to make sure that my application is closed properly to prevent crahses / errors

in VB.NET I was able to do it by :

                AddHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf myfunctions_end_mywork
 

I found an old example here : but its not working 

 

 

Share this post


Link to post
Share on other sites



you need to register a function to be called when the script receives the termination signal from the system. in this function, you can detect cause of termination by a built-in macro. this is how it can be done:

OnAutoItExitRegister('OnExit')

; your script here (includes, globals, main loop, functions)
While True
    Sleep(10)
WEnd

Func OnExit()
    Switch @exitMethod
        Case 0, 1, 2
            ; do stuff related to normal exit
        Case 3
            ; do stuff related to log off
        Case 4
            ; do stuff related to shutdown/restart
    EndSwitch
EndFunc   ;==>OnExit

look at the help file for relevant function OnAutoItExitRegister() and macro @exitMethod.

keep in mind that the exit function should be very short and finish its job quickly, or Windows will kill your script if it does not respond in due time. so don't start opening IE windows or perform database maintenance here. do some logging, raise a flag, no more.

1 person likes this

Share this post


Link to post
Share on other sites
On 2/5/2016 at 8:10 PM, orbs said:

you need to register a function to be called when the script receives the termination signal from the system. in this function, you can detect cause of termination by a built-in macro. this is how it can be done:

OnAutoItExitRegister('OnExit')

; your script here (includes, globals, main loop, functions)
While True
    Sleep(10)
WEnd

Func OnExit()
    Switch @exitMethod
        Case 0, 1, 2
            ; do stuff related to normal exit
        Case 3
            ; do stuff related to log off
        Case 4
            ; do stuff related to shutdown/restart
    EndSwitch
EndFunc   ;==>OnExit

look at the help file for relevant function OnAutoItExitRegister() and macro @exitMethod.

keep in mind that the exit function should be very short and finish its job quickly, or Windows will kill your script if it does not respond in due time. so don't start opening IE windows or perform database maintenance here. do some logging, raise a flag, no more.

thanks a lot :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • careca
      By careca
      Lists windows and according to your preferences, waits for a window or process to close, and then shuts down the computer.
      For anyone who doesn't have the download window,
      in "about:config", set "browser.download.manager.useWindow" to "true".
      Source: https://developer.mozilla.org/en-US/docs/Download_Manager_preferences
      "browser.download.manager.useWindow".
    • KF5WGB
      By KF5WGB
      Hi ,
      I wrote a setup function in which the user can change IP or Port of a Server. To make the changes known to the program, it needs to be restarted.
      But it does not restart. Here is the Function:
      Func Setup() #Region ### START Koda GUI section # ## Form=c:\users\kg5cwz\desktop\autohotkey\qrz uploader\a2q.kxf $Form1_1 = GUICreate("Station Setup", 615, 328, -1, -1, BitOR($WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_POPUP)) GUISetBkColor(0xA0A0A4) $CS= GUICtrlCreateInput($Callsign, 200, 120, 201, 29) GUICtrlSetFont(-1, 16, 400, 0, "@GungsuhChe") $Key = GUICtrlCreateInput($QRZKey, 200, 167, 233, 29) GUICtrlSetFont(-1, 16, 400, 0, "@GungsuhChe") $IPAddress = GUICtrlCreateInput($ServerIP, 200, 214, 129, 29) GUICtrlSetFont(-1, 16, 400, 0, "@GungsuhChe") $UPort = GUICtrlCreateInput($Port, 200, 264, 57, 29) GUICtrlSetFont(-1, 16, 400, 0, "@GungsuhChe") $Cancel = GUICtrlCreateButton("Cancel", 384, 272, 81, 25) $Save = GUICtrlCreateButton("Save", 504, 272, 81, 25) $INFO = GUICtrlCreateLabel("A2Q Station Setup", 88, 32, 429, 51) GUICtrlSetFont(-1, 35, 800, 0, "@GungsuhChe") $Icon1 = GUICtrlCreateIcon(".\1475471331_marine_radio.ico", -1, 464, 112, 129, 113) $Label1 = GUICtrlCreateLabel("Callsign:", 24, 120, 130, 31) GUICtrlSetFont(-1, 20, 400, 0, "@GungsuhChe") $Label2 = GUICtrlCreateLabel("QRZ Key:", 25, 166, 116, 31) GUICtrlSetFont(-1, 20, 400, 0, "@GungsuhChe") $Label3 = GUICtrlCreateLabel("IP Address:", 24, 215, 158, 31) GUICtrlSetFont(-1, 20, 400, 0, "@GungsuhChe") $Label4 = GUICtrlCreateLabel("Port:", 26, 261, 74, 31) GUICtrlSetFont(-1, 20, 400, 0, "@GungsuhChe") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $Cancel GUIDelete($Form1_1) ExitLoop Case $Save Global $hFileOpen = FileOpen("Setup.txt", 2) $Callsign = StringUpper(GUICtrlRead($CS)) $QRZKey= StringUpper(GUICtrlRead($Key)) $ServerIP = GUICtrlRead($IPAddress) $Port = GUICtrlRead($Uport) FileWrite($hFileOpen, StringUpper($Callsign) & @CRLF) FileWrite($hFileOpen, StringUpper($QRZKey) & @CRLF) FileWrite($hFileOpen, $ServerIP & @CRLF) FileWrite($hFileopen, $Port) FileClose($hFileOpen) ; End write Setup file GUIDelete($Form1_1) If @Compiled Then Run("A2Q.exe" & "/RESTART");just run the exe Else $AutoIt3Path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "betaInstallDir");installDir for beta $AutoIt3Path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir");installDir for production $ToRun1 = '"' & $AutoIt3Path & '\AutoIt3.exe "' & ' "' & @ScriptFullPath & '"' ConsoleWrite($ToRun1 & @CRLF);to test we have got it right Run($ToRun1) EndIf EndSwitch WEnd EndFunc Func Help() MsgBox(64,"Help","Press:" &@CRLF & @CRLF &"ALT-Shift-S = Setup." & @CRLF & "Shift-ESC = Exit") EndFunc A2Qis an .EXE. For now I have to manually exit it and then do a restart. I also tried RUN(".\A2Q.exe" & " /RESTART") and the @filepath thingy.
      I can not get the script to restart itself :-(
      Any ideas? Thanks for any help.
      KF5WGB
       
       
       
       
    • PEscobar
      By PEscobar
      So I made a loop beginning with while $e = 1. It opens a file and searches for a colour in the file, if the colour isn't there $e = 2 so the loop ends and restarts. Instead of that, the loop runs once and then just stops completely, even if the colour is there. 
      Here is what it looks like basically.
      While $e = 1 
          OpenPng()
            $aCoord = PixelSearch ($left, $top, $right, $bottom, 0x3B5E05, 0)
            If @error Then $e = 2
      WEnd
      How do I make it so the loop restarts if the colour isn't there, but it continues normally if the colour is there?
       
       
    • NiceBoy1234
      By NiceBoy1234
      I want to restart a program, if the window or process closes, the program gets crashed and so on.
      I used Runwait in a While loop, that worked so far really good.
      Now I got the problem that Windows sometimes does show me this window
      http://i.stack.imgur.com/4bCtC.png
      it is not excatly that one but looks close to it.

      So I want to close that window immidiatly if it appears.
    • careca
      By careca
      This will shutdown the pc whenever the download speed goes under the specified nº of KB/s.
      Should you find any issues, please report to me.