Jump to content

CoolBreeze
 Share

Recommended Posts

It's been a long time since I use autoit, and its time to share something and help to someone.

Now I just wanna to share something from my work, to contribute to the community.
This project is made on request from my friend.
Maybe this will help someone to make something else like NewYear countdown   :)

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=blue_shutdown.ico
#AutoIt3Wrapper_Outfile=Auto ShutDown.Exe
#AutoIt3Wrapper_Res_Description=Auto Shutdown for PC
#AutoIt3Wrapper_Res_Fileversion=1.1
#AutoIt3Wrapper_Res_LegalCopyright=Boris Kerkez - boriskerkez@hotmail.com
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

; AutoIt Version: 3.3.12.0

#include <Constants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <Timers.au3>

; BUG: ako drzis pritisnut taster(broj) i stisnes ENTER moguce je da ce $Button1 ostati NEAKTIVAN posto $input1, $input1 su prazni
; Ako se vreme na PC promeni u toku tajmera, on to nece registrovati zato sto on odbrojava a ne proverava svake sekunde HH:MM

Opt("TrayMenuMode", 1)

Global $hGUI, $Active = 0, $FirstTime = 1
Global $remaining_min, $remaining_sec
Global $timer_countdown, $calc_option = 1, $readInp_H, $readInp_M, $readInp_after_M

$appTitle = "Auto ShutDown v1.1"
$gui_w = 280
$gui_h = 150

$hGUI = GUICreate($appTitle, $gui_w, $gui_h)
    GUISetFont(10, 400, 0, "Verdana")

    ; Start at
    $Label1 = GUICtrlCreateLabel("Shutdown at      (hh:mm):", 6, 8, 200, 20)
    $Input1 = GUICtrlCreateInput(@HOUR, 190, 5, 35, 24, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_NUMBER))
        GUICtrlSetLimit(-1, 2)
    $Input2 = GUICtrlCreateInput(@MIN, 240, 5, 35, 24, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_NUMBER))
        GUICtrlSetLimit(-1, 2)
    GUICtrlCreateLabel(":", 230, 8, 5, 20)

    ; After X minutes
    $Label2 = GUICtrlCreateLabel("Shutdown after (minutes):", 6, 40, 200, 20)
    $Input3 = GUICtrlCreateInput("", 190, 39, 85, 24, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_NUMBER))
        GUICtrlSetLimit(-1, 6)
    $Label3 = GUICtrlCreateLabel("", 0, 80, $gui_w, 24, $ES_CENTER)
        GUICtrlSetFont(-1, 14, 600, 0, "Verdana", 5)
        GUICtrlSetColor(-1, 0x436EEE)
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; fix label flickering

    $Button1 = GUICtrlCreateButton("Set", 5, 120, $gui_w-10, 25, $BS_DEFPUSHBUTTON)
GUISetState(@SW_SHOW)


While 1
    If Not $Active Then
        Local $memoInp_H = $readInp_H, $memoInp_M = $readInp_M, $memoInp_after_M = $readInp_after_M

        $readInp_H = GUICtrlRead($Input1)
        $readInp_M = GUICtrlRead($Input2)
        $readInp_after_M = GUICtrlRead($Input3)

        If $memoInp_H <> $readInp_H OR $memoInp_M <> $readInp_M  OR  $memoInp_after_M <> $readInp_after_M Then
            ; proveri input1 & input2 + input3(mora biti prazan) | moraju da imaju minimalno 1 cifru (max2 ne treba, postavljen je input limit) | trebaju biti u range-u H=0-23, M=0-59
            ;
            If ( StringLen($readInp_H) < 1 OR $readInp_H < 0 OR $readInp_H > 23  OR  StringLen($readInp_M) < 1 OR $readInp_M < 0 OR $readInp_M > 59   AND   StringLen($readInp_after_M) = 0 ) Then
                _Button1StateChange("DISABLE")
                If ($readInp_H < 0 OR $readInp_H > 23) Then
                    GUICtrlSetData($Input1, "")
                EndIf
                If ($readInp_M < 0 OR $readInp_M > 59) Then
                    GUICtrlSetData($Input2, "")
                EndIf
            Else
                If ( StringLen($readInp_after_M) = 0 ) Then
                    $calc_option = 1 ; option: at HH:MM
                Else
                    ; proveri $Input3 da ne bude 0 i da ne pocinje sa 0
                    If (StringLeft($readInp_after_M, 1) = 0) Then
                        GUICtrlSetData($Input3, "")
                        _Button1StateChange("DISABLE")
                    Else
                        $calc_option = 2 ; option: after X minutes
                        GUICtrlSetData($Input1, "")
                        GUICtrlSetData($Input2, "")
                    EndIf
                EndIf
                _Button1StateChange("ENABLE")
            EndIf
            ;
            ;DEBUG
            ;ConsoleWrite( $readInp_H &":"& $readInp_M &" | opt:"& $calc_option &"  |msec:"& @MSEC & @CRLF)
        EndIf
    EndIf

    ; TRAY msg
    $tMsg = TrayGetMsg()
    Switch $tMsg
        Case $TRAY_EVENT_PRIMARYDOWN
            _ShowGUI()
    EndSwitch

    ; GUI msg
    $gMsg = GUIGetMsg()
    Switch $gMsg
        Case $GUI_EVENT_CLOSE
            ; Stop the countdown
            _CountdownStop()
            Exit
        Case $GUI_EVENT_MINIMIZE
            ; Move GUI to tray
            _HideGUI()
            ; First time message
            If $FirstTime Then
                TrayTip($appTitle, $appTitle & " is minimized to the tray. Click on the tray icon here to restore the window.", 10, $TIP_ICONASTERISK)
                $FirstTime = 0
            EndIf
        Case $Button1
            If Not $Active Then
                _GUI_Ctrls_DISABLE()
                ; Calculate and register
                _CalculateRemainingTime()
            Else
                _GUI_Ctrls_ENABLE()
                ; Stop the countdown
                _CountdownStop()
            EndIf
    EndSwitch
WEnd



Func _ShowGUI()
    Opt("TrayIconHide", 1)
    GUISetState(@SW_SHOW)
EndFunc

Func _HideGUI()
    Opt("TrayIconHide", 0)
    GUISetState(@SW_HIDE)
EndFunc

Func _GUI_Ctrls_ENABLE()
    GUICtrlSetState($Input1, $GUI_ENABLE)
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetState($Input3, $GUI_ENABLE)
    GUICtrlSetData($Button1, "Set")
    $Active = 0
EndFunc

Func _GUI_Ctrls_DISABLE()
    GUICtrlSetState($Input1, $GUI_DISABLE)
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetState($Input3, $GUI_DISABLE)
    GUICtrlSetData($Button1, "Cancel")
    $Active = 1
EndFunc


Func _Button1StateChange($button1_state = "ENABLE")
    If $button1_state = "ENABLE" Then
        If ( GUICtrlGetState($Button1) = 144 ) Then
            GUICtrlSetState($Button1, $GUI_ENABLE)
        EndIf
    Elseif $button1_state = "DISABLE" Then
        If ( GUICtrlGetState($Button1) = 80 ) Then
            GUICtrlSetState($Button1, $GUI_DISABLE)
        EndIf
    EndIf
EndFunc


Func _CalculateRemainingTime()
    Do ; fix bug with milliseconds
    Until _MSec() <= 999

    Switch $calc_option
        Case 1 ;OPTION: at HH:MM
            ; ispravi format - dodaj 0 ispred da bude HH:MM
            If ( StringLen($readInp_H) < 2 ) Then
                $readInp_H = 0  & $readInp_H
            EndIf
            If ( StringLen($readInp_M) < 2 ) Then
                $readInp_M = 0  & $readInp_M
            EndIf

            ; izracunaj preostale minute
            If ( $readInp_H >= @HOUR ) Then
                If ( $readInp_H = @HOUR AND $readInp_M < @MIN ) Then
                    $remaining_min = 1440 - ((@HOUR - $readInp_H)*60 + (@MIN - $readInp_M)) ;(24h*60min=1440min) - (H razlika)*60 + (M razlika)
                    ;ConsoleWrite ( "      inH = @H AND inM < @M   |min:" & $remaining_min &@CRLF)
                Else
                    $remaining_min = ((@HOUR - $readInp_H)*60 + (@MIN - $readInp_M)) * -1
                    ;ConsoleWrite ( "  inH >= @H   |min:" & $remaining_min &@CRLF)
                EndIf
            Else
                $remaining_min = 1440 - ((@HOUR - $readInp_H)*60 + (@MIN - $readInp_M)) ;(24h*60min=1440min) - (H razlika)*60 + (M razlika)
                ;ConsoleWrite ( "  inH < @H   |min:" & $remaining_min &@CRLF)
            EndIf

            ; konvertuj u sekunde
            If ($remaining_min = 0) Then
                $remaining_sec = (60-@SEC) - $remaining_min * 60
            Else
                $remaining_sec =  $remaining_min * 60 - @SEC
            EndIf

        Case 2 ; OPTION: after X minutes
            $remaining_sec =  $readInp_after_M * 60 - @SEC
    EndSwitch

    ; loading string
    GUICtrlSetData($Label3, "Loading...")

    ; fix input bug
    If ( $remaining_sec <= 0 ) Then
        GUICtrlSetData($Label3, "Don`t hack me bro!")
        _GUI_Ctrls_ENABLE()
        Return
    EndIf

    ; fix bug with milliseconds
    $remaining_sec -= 1

    ; set timer for countdown function
    $timer_countdown = _Timer_Settimer($hGUI, 1000, "_Countdown")
EndFunc     ;==>CalculateRemainingTime


Func _CountdownStop()
    _Timer_KillTimer($hGUI, $timer_countdown)
    GUICtrlSetData($Label3, "")
EndFunc     ;==>CountdownStop


Func _Countdown($hWnd, $iMsg, $iIDTimer, $iTime)
    #forceref $hWnd, $iMsg, $iIDTimer, $iTime

    If $Active Then
        Local $sec, $min, $hr
        $sec = Mod($remaining_sec, 60)
        $min = Mod($remaining_sec / 60, 60)
        $hr = Floor($remaining_sec / 60 ^ 2)
        GUICtrlSetData($Label3, "Time left:   " & StringFormat("%02i:%02i:%02i", $hr, $min, $sec))
    EndIf

    If $remaining_sec = 300 Then        ; 5min
        TrayTip($appTitle, "Attention: 5 minutes to shudown!", 10, $TIP_ICONEXCLAMATION)
    Elseif $remaining_sec = 120 Then    ;2min
        TrayTip($appTitle, "Attention: 2 minutes to shudown!", 10, $TIP_ICONEXCLAMATION)
    Elseif $remaining_sec = 60 Then     ;1min
        TrayTip($appTitle, "Attention: 1 minute to shudown!", 10, $TIP_ICONEXCLAMATION)
    ElseIf $remaining_sec <= 10 AND $remaining_sec > 0 Then
        _ShowGUI()
        GUICtrlSetColor($Label3, 0xEE4000)
    ElseIf $remaining_sec <= 0 Then
        _CountdownStop()
        ;ConsoleWrite("Shutdown " &@MSEC &@CRLF)
        ;EXECUTE SHUTDOWN
        Shutdown(1)
        Exit
    EndIf
    $remaining_sec -= 1
EndFunc   ;==>Countdown


Func _MSec()
    Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
    DllCall('kernel32.dll', 'none', 'GetSystemTime', 'ptr', DllStructGetPtr($stSystemTime))
    $sMilliSeconds = StringFormat('%03d', DllStructGetData($stSystemTime, 8))
    $stSystemTime = 0
    Return $sMilliSeconds
EndFunc    ;==>Msec

blue_shutdown.ico

Auto ShutDown.rar

Link to comment
Share on other sites

  • Moderators

We have an Examples forum for a reason. This is a forum for users to post their scripts and request help with them, which it does not seem you are in need of. You may want to request a Mod move the thread to the proper area.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

  • Moderators

CoolBreeze,

And here it is in the correct place. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
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
 Share

×
×
  • Create New...