Shutdown for Benjamin - SfB

  • Windows elegant beenden, neu starten oder den Benutzer wechseln. Die Uhrzeit (18:11:50), Wochentag (Sa.), Tag des Monats (14.) und die IP-Adresse werden eingeblendet. SfB erkennt einen Abbruch der Internetverbindung und meldet: "IP: keine". Bei einer Verknüpfung in den Autostart startet SfB zusammen mit Windows. SfB kann man mit der Esc-Taste bei aktiven Fenster beenden.

    SfBv1.9
    Icons sind hinzu gekommen,
    wie auch ein weiteres Fenster für die Einstellungen.
    Der Nutzer kann folgende Einstellungen vornehmen:
    - Mit Windows starten Ja/Nein.
    - Speicherplatz im Tray anzeigen Ja/Nein.
    - Immer im Vordergrund Ja/Nein.
    - Auf Update prüfen.
    - Einstellungen speichern.
    - SfB beenden.
    Diese Einstellungen werden in eine SfB.ini-Datei geschrieben
    und werden dort vor dem nächsten Start eingelesen.
    Weitere Kommentare eingefügt.

    Eine History-Liste gibt es in der "SfB.txt-Datei" ! :)

    Tipp:
    Wer mehr mit seiner "Zeit" anfangen möchte, dem empfehle ich "Digitaluhr" von Oscar.

    Script
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Icon_41.ico
    #AutoIt3Wrapper_Outfile=SfB_v1900.exe
    #AutoIt3Wrapper_Res_Description=Shutdown for Benjamin
    #AutoIt3Wrapper_Res_Fileversion=1.9.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=© 2009 by Ritzelrocker04
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
    #AutoIt3Wrapper_Res_Field=Compiled by|Ritzelrocker04
    #AutoIt3Wrapper_Res_Field=Original Name|Shutdown for Benjamin
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit]

    #include <Inet.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ;i ### Wozu #include ###
    ; _GetIP —> Inet.au3
    ; $BS_ICON —> ButtonConstants.au3
    ; $ES_READONLY —> EditConstants.au3
    ; $GUI_DISABLE —> GUIConstantsEx.au3
    ; $SS_CENTER —> StaticConstants.au3
    ; $WS_BORDER —> WindowsConstants.au3

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1) ;i 1 Schaltet den OnEvent-Mode ein
    Opt('TrayAutoPause', 0) ;i das Script nicht pausieren, wenn auf das Tray-Icon geklickt wird
    Opt('GUICloseOnESC', 0) ;i das drücken der ESC-Taste führt nicht zum beenden des Programms
    Opt('TrayMenuMode', 1) ;i 1 = kein Standard Menü erstellen

    [/autoit] [autoit][/autoit] [autoit]

    Global $aRes[27] = [@ScriptDir & "\SfBsys\W.ico", @ScriptDir & "\SfBsys\A.ico", _
    @ScriptDir & "\SfBsys\N.ico", @ScriptDir & "\SfBsys\S.ico", @ScriptDir & "\SfBsys\i.ico", _
    @ScriptDir & "\SfBsys\ix.ico", @ScriptDir & "\SfBsys\c.ico", @ScriptDir & "\SfBsys\16.ico", _
    @ScriptDir & "\SfBsys\15.ico", @ScriptDir & "\SfBsys\14.ico", @ScriptDir & "\SfBsys\13.ico", _
    @ScriptDir & "\SfBsys\12.ico", @ScriptDir & "\SfBsys\11.ico", @ScriptDir & "\SfBsys\10.ico", _
    @ScriptDir & "\SfBsys\9.ico", @ScriptDir & "\SfBsys\8.ico", @ScriptDir & "\SfBsys\7.ico", _
    @ScriptDir & "\SfBsys\6.ico", @ScriptDir & "\SfBsys\5.ico", @ScriptDir & "\SfBsys\4.ico", _
    @ScriptDir & "\SfBsys\3.ico", @ScriptDir & "\SfBsys\2.ico", @ScriptDir & "\SfBsys\1.ico", _
    @ScriptDir & "\SfBsys\0.ico", @ScriptDir & "\SfBsys\32.ico", @ScriptDir & "\SfBsys\appicon.ico", _
    @ScriptDir & "\SfBsys\Blau4SfB.bmp"]
    ;i Ressourcen deklarieren in einem Array
    Global $title = "SfB_v1.9.00"
    For $z = 0 To 26 ;i statisch kein Ubound - schneller
    If Not FileExists($aRes[$z]) Then Exit _
    MsgBox(16, 'Error ' & $title, $aRes[$z] & @CRLF & @CRLF & "Datei nicht gefunden ! ")
    Next
    ;i Ressourcen auf Existenz prüfen,
    ;i fehlende Dateien werden mit Namen benannt - besserer Support ".../W.ico Datei nicht gefunden !"
    Global $PublicIP
    Global $action
    Global $IniRead[3]
    Global $aOptCkb[3] = ["Mit Windows starten", "Speicherplatz im Tray", "Immer im Vordergrund"], $aCkbOpt[3]
    Global $ini = @ScriptDir & "\SfB.ini" ; Pfad & Name der Ini-Datei
    Global $aShutdownBN[7] = ["W", "A", "N", "S", "IP", "IPa", "X"], $aShutdown[7]
    Global $ar2D[7][2] = [[' Den Benutzer wechseln ', ' Benutzerwechsel '],[' Den PC herunterfahren ', ' Ausschalten '], _
    [' Den PC neu starten ', ' Neustart '],[' Den PC in den Ruhezustand versetzen ', ' Standby '], _
    [' Die IP-Adresse anzeigen ', ' IP '],[' Die IP-Adresse ausblenden ', ' IP '],[' Einstellungen & Beenden ', ' Optionen ']]
    ;i Deklaration - auch der Arrays 1- u. 2D
    _iniRead()
    $GUI = GUICreate($title, 261, 46, @DesktopWidth - 350, @DesktopHeight - 90, $WS_POPUP + $WS_BORDER, $WS_EX_TOOLWINDOW)
    $PicGui = GUICtrlCreatePic($aRes[26], 0, 0, 261, 46) ;i Bild einfügen
    GUICtrlSetState(-1, $GUI_DISABLE) ;i Bild deaktivieren - Button werden nutzbar
    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST") ;i Funktion zum verschieben der Oberfläche
    For $i = 0 To 6 ;i 0 bis 6 = 7x CreateButton - statisch kein Ubound - schneller
    $aShutdown[$i] = GUICtrlCreateButton($aShutdownBN[$i], 5 + $i * 39, 5, 16, 16, $BS_ICON)
    GUICtrlSetImage($aShutdown[$i], $aRes[$i]) ;i Icons in Button einsetzen
    GUICtrlSetOnEvent(-1, '_pressed')
    GUICtrlSetTip($aShutdown[$i], $ar2D[$i][0], $ar2D[$i][1], 1, 5) ;i Tipp als Ballontip
    GUICtrlSetCursor(-1, 0) ;i Cursor als Zeigefinger
    Next
    $tbTime = GUICtrlCreateInput("", 5, 26, 251, 14, $SS_CENTER, $ES_READONLY)
    ;! $SS_CENTER - zentrierte Ausgabe; $ES_READONLY - Eingaben nicht möglich
    GUICtrlSetBkColor(-1, 0xFFFFFF) ;i weisser Hintergrund

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $GUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;### Start $QuGui ###
    $QuGui = GUICreate($title & " Abfrage", 340, 120, -1, -1, $WS_POPUP + $WS_BORDER)
    WinSetOnTop($title & " Abfrage", "", 1) ;i Immer im Vordergrund
    GUISetBkColor(0xFFFFFF) ;i weisse Hintergrundfarbe des Fensters
    $PicQu = GUICtrlCreatePic($aRes[26], 0, 0, 340, 20) ;i Bild einfügen
    GUICtrlCreateIcon($aRes[24], -1, 20, 40, 32, 32, BitOR($SS_NOTIFY, $BS_ICON))
    $lbQu = GUICtrlCreateLabel("", 60, 50, 260, 17, $SS_CENTER)
    $bnQuYes = GUICtrlCreateButton("Ja", 90, 85, 77, 23)
    GUICtrlSetOnEvent(-1, '_QuGui')
    $bnQuNo = GUICtrlCreateButton("Nö", 173, 85, 77, 23)
    GUICtrlSetOnEvent(-1, '_closeQuGui')
    ;### Ende $QuGui ###

    [/autoit] [autoit][/autoit] [autoit]

    ;### Start $OptGui ###
    $OptGui = GUICreate($title & " Optionen", 200, 240, -1, -1, $WS_POPUP + $WS_BORDER)
    WinSetOnTop($title & " Optionen", "", 1) ;i Immer im Vordergrund
    GUISetBkColor(0xFFFFFF) ;i weisse Hintergrundfarbe des Fensters
    $PicOpt = GUICtrlCreatePic($aRes[26], 0, 0, 200, 20) ;i Bild einfügen
    GUICtrlCreateIcon($aRes[25], -1, 14, 40, 32, 32, BitOR($SS_NOTIFY, $BS_ICON))
    For $i = 0 To 2 ;i statisch kein Ubound
    $aCkbOpt[$i] = GUICtrlCreateCheckbox($aOptCkb[$i], 60, 52 + $i * 22, 130, 22)
    If $IniRead[$i] = 1 Then GUICtrlSetState($aCkbOpt[$i], $GUI_CHECKED)
    Next
    GUICtrlSetOnEvent($aCkbOpt[0], '_autoStart')
    ;GUICtrlSetOnEvent($aCkbOpt[1], '_hdd2tray')
    GUICtrlSetOnEvent($aCkbOpt[2], '_alwaysOnTop')
    $bnOpt1 = GUICtrlCreateButton("Auf Update prüfen", 60, 140, 130, 22)
    GUICtrlSetOnEvent(-1, '_UpdateCheck')
    $bnOpt2 = GUICtrlCreateButton("Einstellungen speichern", 60, 162, 130, 22)
    GUICtrlSetOnEvent(-1, '_write_settings')
    $bnOpt3 = GUICtrlCreateButton("SfB Beenden", 60, 184, 130, 22)
    GUICtrlSetOnEvent(-1, '_pressed')
    GUICtrlCreateLabel("Copyright: © 2009 by Ritzelrocker04", 0, 218, 200, 22, $SS_CENTER)
    GUICtrlSetColor(-1, 0x0046D5) ;i blau
    ;### Ende $QuGui ###

    [/autoit] [autoit][/autoit] [autoit]

    AdlibEnable('_hdd', 5000) ;i Empfehlung AdlibEnable('_hdd', 5000) = 5sek

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $time = @HOUR & ':' & @MIN & ':' & @SEC
    $date = @MDAY & '.' & @MON & '.' & @YEAR
    Switch @WDAY ;i der Variable täglich den Wochentag zuweisen 1-7
    Case 1
    $WDAY = " -Sonntag- "
    Case 2
    $WDAY = " -Montag- "
    Case 3
    $WDAY = " -Dienstag- "
    Case 4
    $WDAY = " -Mittwoch- "
    Case 5
    $WDAY = " -Donnerstag- "
    Case 6
    $WDAY = " -Freitag- "
    Case 7
    $WDAY = " -Samstag- "
    EndSwitch
    GUICtrlSetData($tbTime, $time & $WDAY & $date & $PublicIP)
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _hdd()
    Local $hdd = StringLeft(@ScriptDir, 2) ;i Das Laufwerk auf dem sich das Script befindet 2-stellig (zB: C:)
    Local $hddPro = Round((DriveSpaceTotal($hdd) - DriveSpaceFree($hdd)) / (DriveSpaceTotal($hdd) / 100), 2)
    ;i prozentual belegter Festplattenplatz gerundet auf 2 Stellen
    If BitAND(GUICtrlRead($aCkbOpt[1]), $GUI_CHECKED) Then
    TraySetIcon($aRes[Int(.1699 * $hddPro) + 7]) ;i das TrayIcon setzen ; Thx to Oscar
    TraySetToolTip("Auf " & $hdd & " sind " & 100 - $hddPro & "% frei ! ")
    ;i HDD & Prozentzahl im TrayTip ausgeben
    Else
    TraySetIcon()
    TraySetToolTip()
    EndIf
    EndFunc ;==>_hdd

    [/autoit] [autoit][/autoit] [autoit]

    Func _pressed()
    Switch @GUI_CtrlId ;! Der Button bestimmt...
    Case 4
    GUICtrlSetData($lbQu, $ar2D[0][0] & " ?")
    $action = "10000" ;! Codierung => 5 Einstellungen (0=Off 1=Ein)
    GUISetState(@SW_SHOW, $QuGui)
    ;Shutdown(0)
    Case 5
    GUICtrlSetData($lbQu, $ar2D[1][0] & " ?")
    $action = "01000" ;! Codierung => 5 Einstellungen
    GUISetState(@SW_SHOW, $QuGui)
    ;Shutdown(1 + 8)
    Case 6
    GUICtrlSetData($lbQu, $ar2D[2][0] & " ?")
    $action = "00100" ;! Codierung => 5 Einstellungen
    GUISetState(@SW_SHOW, $QuGui)
    ;Shutdown(2)
    Case 7
    GUICtrlSetData($lbQu, $ar2D[3][0] & " ?")
    $action = "00010" ;! Codierung => 5 Einstellungen
    GUISetState(@SW_SHOW, $QuGui)
    ;Shutdown(64)
    Case 8
    _PublicIP() ;i Aufruf der Funktion
    Case 9
    $PublicIP = ""
    GUICtrlSetBkColor($tbTime, 0xFFFFFF) ;i weisser Hintergrund
    Case 10
    GUISetState(@SW_SHOW, $OptGui)
    Case 24
    _write_settings()
    GUICtrlSetData($lbQu, $title & " beenden ?")
    $action = "00001" ;! Codierung => 5 Einstellungen
    GUISetState(@SW_HIDE, $OptGui)
    GUISetState(@SW_SHOW, $QuGui)
    ;Exit
    EndSwitch
    EndFunc ;==>_pressed

    [/autoit] [autoit][/autoit] [autoit]

    Func _QuGui()
    Switch $action ;! ;! Codierung => 5 Einstellungen abfragen
    Case 10000
    _closeQuGui()
    Shutdown(0)
    Case 01000
    _closeQuGui()
    Shutdown(1 + 8)
    Case 00100
    _closeQuGui()
    Shutdown(2)
    Case 00010
    _closeQuGui()
    Shutdown(64)
    Case 00001
    _closeQuGui()
    Exit
    EndSwitch
    EndFunc ;==>_QuGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _write_settings()
    IniWrite($ini, "settings", "AutoStart", GUICtrlRead($aCkbOpt[0]))
    IniWrite($ini, "settings", "onTray", GUICtrlRead($aCkbOpt[1]))
    IniWrite($ini, "settings", "AlwaysOnTop", GUICtrlRead($aCkbOpt[2]))
    _closeOptGui()
    _iniRead()
    EndFunc ;==>_write_settings

    [/autoit] [autoit][/autoit] [autoit]

    Func _iniRead()
    $IniRead[0] = IniRead($ini, "settings", "AutoStart", "0")
    $IniRead[1] = IniRead($ini, "settings", "onTray", "0")
    $IniRead[2] = IniRead($ini, "settings", "AlwaysOnTop", "0")
    EndFunc ;==>_iniRead

    [/autoit] [autoit][/autoit] [autoit]

    Func _autoStart()
    If BitAND(GUICtrlRead($aCkbOpt[0]), $GUI_CHECKED) Then
    If @Compiled Then FileCreateShortcut(@ScriptFullPath, @StartupDir & '\' & $title) ; Verknüpfung im Autostart erstellen
    Else
    If @Compiled Then FileDelete(@StartupDir & '\' & $title & '.lnk') ; Verknüpfung löschen
    EndIf
    EndFunc ;==>_autoStart

    [/autoit] [autoit][/autoit] [autoit]

    Func _alwaysOnTop()
    If BitAND(GUICtrlRead($aCkbOpt[2]), $GUI_CHECKED) Then
    WinSetOnTop($GUI, "", 1)
    Else
    WinSetOnTop($GUI, "", 0)
    EndIf
    EndFunc ;==>_alwaysOnTop

    [/autoit] [autoit][/autoit] [autoit]

    Func _UpdateCheck()
    _closeOptGui()
    ShellExecute("http://ritzelrocker04.bplaced.net/thema1.htm")
    EndFunc ;==>_UpdateCheck

    [/autoit] [autoit][/autoit] [autoit]

    Func _closeQuGui()
    GUISetState(@SW_HIDE, $QuGui)
    EndFunc ;==>_closeQuGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _closeOptGui()
    GUISetState(@SW_HIDE, $OptGui)
    EndFunc ;==>_closeOptGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _PublicIP()
    $PublicIP = " -IP: " & _GetIP()
    If @error Then
    $PublicIP = " -IP: keine"
    GUICtrlSetBkColor($tbTime, 0xFFFF00) ;i gelber Hintergrund
    Else
    GUICtrlSetBkColor($tbTime, 0xFFFFFF) ;i weisser Hintergrund
    EndIf
    EndFunc ;==>_PublicIP

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam) ; Thx to Carsten8
    If ($hWnd = $GUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
    EndFunc ;==>WM_NCHITTEST

    [/autoit] [autoit][/autoit] [autoit]

    ; Ende

    [/autoit]

    [align=center]Die aktuelle Version hier:

    Download Shutdown for Benjamin - SfB.zip

    Viel Spaß mit SfB ! :thumbup:

  • Sieht auf jedem Fall schon mal schick aus!

    Gut so :D

    Mach das doch noch als Sidebar-Gadget oder so... :)

  • Wieder ein Programm, das sehr schön ist.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Kleiner Tipp:
    Ich würd die Inputs auf Readonly setzen
    nur so
    Aber sonst echt schick das tool ich werd jetzt gleich mal damit ausschalten und ins bett gehen :D

    Padmak

  • Ich glaube du hast in der Hdd-Funktion nen Fehler gemacht
    bei

    [autoit]


    Local $hddPro = Round((DriveSpaceTotal($hdd) - DriveSpaceFree($hdd)) / (DriveSpaceTotal($hdd) / 100), 2)

    [/autoit]


    Kommtn error dass $iconfile nicht bekannt ist

    Funzt nur bei

    [autoit]


    Local $hddPro = Round((DriveSpaceTotal($hdd) - DriveSpaceFree($hdd)) / (DriveSpaceTotal($hdd) / 100), 0)

    [/autoit]


    Liegt daran dass die letzte Zahl die NACHkommastellen anzeigt

    Zitat von Aus der Hilfe


    [optional] Zahl die angibt, auf wie viele Nachkommastellen gerundet werden soll. Wenn der Parameter nicht angegeben wird, gibt Round eine ganze Zahl zurück.


    Hoffentlich hab ich recht :D

    Padmak

  • Hallo Padmak !

    Danke für Dein Interesse und Hinweis. :thumbup:
    Ja, hier hat sich wirklich ein Fehler eingeschlichen. ;(

    Das Problem ergibt sich aus meiner korrekten Berechnung der HDD-Belegung mit zwei Stellen nach dem Komma und der ebenfalls korrekten Zuordnung, aber in ganzen Zahlen. Eine falsche Abstimmung beider ! ;(

    [autoit]


    Switch $hddPro ;i einer best. Prozentzahl ein Icon zuweisen
    Case 0 To 5
    $iconfile = @ScriptDir & "\SfBsys\16.ico"
    Case 6 To 11
    $iconfile = @ScriptDir & "\SfBsys\15.ico"
    ; [...]
    ; [...]
    EndSwitch

    [/autoit]


    So entstehen Lücken, die nicht zugeordnet werden können.
    Die Lösung liegt hier in der richtigen Abstimmung von Berechnung und Zuordnung.

    [autoit]


    Switch $hddPro ;i einer best. Prozentzahl ein Icon zuweisen
    Case 0 To 5.99
    $iconfile = @ScriptDir & "\SfBsys\16.ico"
    Case 6 To 11.99
    $iconfile = @ScriptDir & "\SfBsys\15.ico"
    ; [...]
    ; [...]
    EndSwitch

    [/autoit]
  • Bittebitte^^
    ja genau man könnte auch auf 0 Nachkommastellen runden, wäre genau der gleiche Effekt
    wäre weniger Schreibaufwand^^

    Padmak

  • Anpassungen vorgenommen:

    SfBv1.9
    Icons sind hinzu gekommen,
    wie auch ein weiteres Fenster für die Einstellungen.
    Der Nutzer kann folgende Einstellungen vornehmen:
    - Mit Windows starten Ja/Nein.
    - Speicherplatz im Tray anzeigen Ja/Nein.
    - Immer im Vordergrund Ja/Nein.
    - Auf Update prüfen.
    - Einstellungen speichern.
    - SfB beenden.
    Diese Einstellungen werden in eine SfB.ini-Datei geschrieben
    und werden von dort vor dem nächsten Start eingelesen.
    Weitere Kommentare eingefügt.

    Download siehe Post # 1

    Viel Spaß mit SfB ! :thumbup:
    PS: Die jeweiligen Neuankündigungen habe ich gelöscht. Eine History-Liste gibt es in der "SfB.txt-Datei" !