• SpaceBar = SB v X.0,

    gestern haben wir mit Xeno und Oscar an dem Problem "Zahlenformat ? bzw. die Funktion _StringAddComma" gearbeitet zum besseren Verständnis habe ich einmal eine SpaceBar gebaut, aber seht selbst. Copy und Paste reicht, ein Download ist nicht erforderlich. 8o


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; by Ritzelrocker04

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

    #include <GUIConstants.au3>
    #include <String.au3>
    #NoTrayIcon

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

    $src_LW = "C:\";<= Hier die Anpassung vornehmen!
    $dest_LW = "D:\";<= Hier die Anpassung vornehmen!

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

    ;###################################################### - Quelle - ################################################################

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

    $VOL_Quelle = DriveGetLabel($src_LW)
    $TOTAL_Quelle = DriveSpaceTotal($src_LW)
    $FREE_Quelle = DriveSpaceFree($src_LW)
    $FREE_Quelle_MB = _StringAddComma(StringReplace(Round ($FREE_Quelle, 2), '.', ','), ".", ",")
    $i_Progress_Quelle = StringReplace(Round(($TOTAL_Quelle - $FREE_Quelle) / ($TOTAL_Quelle / 100), 2), ".", ",")

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

    ;##################################################### - Ziel - ###################################################################

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

    $VOL_Ziel = DriveGetLabel($dest_LW)
    $TOTAL_Ziel = DriveSpaceTotal($dest_LW)
    $FREE_Ziel = DriveSpaceFree($dest_LW)
    $FREE_Ziel_MB = _StringAddComma(StringReplace(Round ($FREE_Ziel, 2), '.', ','), ".", ",");Runden 2 Nachkommast. Pktausg. in Komma
    $i_Progress_Ziel = StringReplace(Round(($TOTAL_Ziel - $FREE_Ziel) / ($TOTAL_Ziel / 100), 2), ".", ",");Tausenderpkt.Runden Pktausg. in Komma
    ; $i_Progress_Ziel => Speicherplatzbelegung wird angezeigt = umgekehrt Proportional zu $FREE_Ziel_Prozent

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

    ;#################################################### - Die GUI - #################################################################

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

    $GUI = GUICreate("SpaceBar v 1.0", 478, 50, -1, 3, $WS_POPUPWINDOW)
    $pg_Quelle = GUICtrlCreateProgress(8, 8, 230, 17)
    GuiCtrlSetData(-1, $i_Progress_Quelle)
    $pg_Ziel = GUICtrlCreateProgress(240, 8, 230, 17)
    GuiCtrlSetData(-1, $i_Progress_Ziel)
    $tb_Quelle = GUICtrlCreateInput("Auf " & $VOL_Quelle & " sind "& $FREE_Quelle_MB & " MB frei", 8, 27, 230, 21, $ES_READONLY)
    $tb_Ziel = GUICtrlCreateInput("Auf " & $VOL_Ziel & " sind "& $FREE_Ziel_MB & " MB frei", 240, 27, 230, 21, $ES_READONLY)
    $trackmenu = GuiCtrlCreateContextMenu ()
    $aboutitem = GuiCtrlCreateMenuitem ("About",$trackmenu)
    GuiCtrlCreateMenuitem ("",$trackmenu)
    $exititem = GuiCtrlCreateMenuitem ("Exit",$trackmenu)

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

    GuiSetState()

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

    AdlibEnable("_Update") ; Empfehlung AdlibEnable("_Update", 500000) = 5min

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

    While 1
    $msg = GuiGetMsg()
    If $msg = $exititem Or $msg = -3 Or $msg = -1 Then ExitLoop
    If $msg = $aboutitem Then Msgbox(0,"About", "SpaceBar v 1.0.06" & @CRLF & "Build 2007-12-18" & @CRLF & "Copyright by Ritzelrocker04 !")
    WEnd

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

    GUIDelete()

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

    Exit

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

    Func _Update()

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

    $src_LW = "C:\"
    $dest_LW = "D:\"
    ; Quelle
    $VOL_Quelle = DriveGetLabel($src_LW)
    $TOTAL_Quelle = DriveSpaceTotal($src_LW)
    $FREE_Quelle = DriveSpaceFree($src_LW)
    $FREE_Quelle_MB = _StringAddComma(StringReplace(Round ($FREE_Quelle, 2), '.', ','), ".", ",")
    $i_Progress_Quelle = StringReplace(Round(($TOTAL_Quelle - $FREE_Quelle) / ($TOTAL_Quelle / 100), 2), ".", ",")
    GUICtrlSetData($pg_Quelle,$i_Progress_Quelle)
    GUICtrlSetData($tb_Quelle,"Auf " & $VOL_Quelle & " sind "& $FREE_Quelle_MB & " MB frei")
    ; Ziel
    $VOL_Ziel = DriveGetLabel($dest_LW)
    $TOTAL_Ziel = DriveSpaceTotal($dest_LW)
    $FREE_Ziel = DriveSpaceFree($dest_LW)
    $FREE_Ziel_MB = _StringAddComma(StringReplace(Round ($FREE_Ziel, 2), '.', ','), ".", ",")
    $i_Progress_Ziel = StringReplace(Round(($TOTAL_Ziel - $FREE_Ziel) / ($TOTAL_Ziel / 100), 2), ".", ",")
    GUICtrlSetData($pg_Ziel,$i_Progress_Ziel)
    GUICtrlSetData($tb_Ziel,"Auf " & $VOL_Ziel & " sind "& $FREE_Ziel_MB & " MB frei")

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

    EndFunc ; ==> AdlibEnable("_Update")

    [/autoit]

    edit: Sorry, wollte es Zeitnah bringen und hab wohl etwas übersehen.Jetzt aktuell 2007-12-18/21:15 Uhr
    Weiterhin viel Spaß!

    Man liest sich...
    Euer Ritzelrocker04</String.au3></GUIConstants.au3>

  • Hallo,

    gestern hat mich Oscar auf einen Denkfehler hingewiesen (siehe Post 2). ;(

    Ich habe mich informiert und möchte mich berichtigen: 8o

    1.000 Millisekunden = 1 Sekunde
    60 Sekunden = 1Minute
    von 5 min war die Rede, also 1.000x60x5=300.000 Millisekunden.

    Fazit:
    Wer zu spät kommt den bestraft das Leben und manchmal geht es um Millisekunden eben
    (kleine Eselsbrücke). :thumbup:

    Danke
    Man liest sich...
    Euer Ritzelrocker04

    • Offizieller Beitrag

    Hallo Ritzelrocker!

    Xeno meint damit, dass Du viele Zeilen einsparen könntest, wenn Du eine zusätzliche Funktion schreiben würdest, in der Du folgendes zusammenfasst:

    [autoit]


    $VOL_Quelle = DriveGetLabel($src_LW)
    $TOTAL_Quelle = DriveSpaceTotal($src_LW)
    $FREE_Quelle = DriveSpaceFree($src_LW)
    $FREE_Quelle_MB = _StringAddComma(StringReplace(Round ($FREE_Quelle, 2), '.', ','), ".", ",")
    $i_Progress_Quelle = StringReplace(Round(($TOTAL_Quelle - $FREE_Quelle) / ($TOTAL_Quelle / 100), 2), ".", ",")

    [/autoit]

    Diesen Code benutzt Du im Prinzip 4 mal in Deinem Skript. Das Ganze zusammenfassen mit Übergabe- und Rückgabewerte und Du brauchst das nur einmal schreiben.

    Außerdem brauchst Du in der Funktion _Update() die Variablen $src_LW und $dest_LW nicht nochmal definieren. Das hast Du im Hauptprogramm bereits getan und so sind es dann globale Variablen.
    Bei der GUI-Erstellung würde ich die Werte auch erstmal weglassen. Die kannst Du doch von der _Update()-Funktion eintragen lassen:

    [autoit]


    ;#################################################### - Die GUI - #################################################################

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

    $GUI = GUICreate("SpaceBar v 1.0", 478, 50, -1, 3, $WS_POPUPWINDOW)
    $pg_Quelle = GUICtrlCreateProgress(8, 8, 230, 17)
    $pg_Ziel = GUICtrlCreateProgress(240, 8, 230, 17)
    $tb_Quelle = GUICtrlCreateInput("", 8, 27, 230, 21, $ES_READONLY)
    $tb_Ziel = GUICtrlCreateInput("", 240, 27, 230, 21, $ES_READONLY)
    $trackmenu = GuiCtrlCreateContextMenu ()
    $aboutitem = GuiCtrlCreateMenuitem ("About",$trackmenu)
    GuiCtrlCreateMenuitem ("",$trackmenu)
    $exititem = GuiCtrlCreateMenuitem ("Exit",$trackmenu)

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

    GuiSetState()
    _Update()
    AdlibEnable("_Update", 300000) ; Empfehlung AdlibEnable("_Update", 300000) = 5min

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hallo,

    ich habe es jetzt einmal so erstellt, es scheint es läuft ? Die Ausführungen klingen logisch, durch „Global“ behalten die Variablen ihre Gültigkeit auch in der Funktion.
    (sollten die Einzüge nicht gehen, dann siehe Anhang)

    Spoiler anzeigen
    [autoit]


    ; by Ritzelrocker04
    ; mit Hilfe von Oscar

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

    #include <GUIConstants.au3>
    #include <String.au3>
    #NoTrayIcon

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

    Global $src_LW = "C:\";<= Hier die Anpassung vornehmen!
    Global $dest_LW = "D:\";<= Hier die Anpassung vornehmen!

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

    $GUI = GUICreate("SpaceBar v 1.0", 478, 50, -1, 3, $WS_POPUPWINDOW)
    $pg_Quelle = GUICtrlCreateProgress(8, 8, 230, 17)
    $pg_Ziel = GUICtrlCreateProgress(240, 8, 230, 17)
    $tb_Quelle = GUICtrlCreateInput("", 8, 27, 230, 21, $ES_READONLY)
    $tb_Ziel = GUICtrlCreateInput("", 240, 27, 230, 21, $ES_READONLY)
    $trackmenu = GuiCtrlCreateContextMenu ()
    $aboutitem = GuiCtrlCreateMenuitem ("About",$trackmenu)
    GuiCtrlCreateMenuitem ("",$trackmenu)
    $exititem = GuiCtrlCreateMenuitem ("Exit",$trackmenu)

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

    GuiSetState()

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

    _Update()

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

    AdlibEnable("_Update") ; Empfehlung AdlibEnable("_Update", 300000) = 5min

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

    While 1
    $msg = GuiGetMsg()
    If $msg = $exititem Or $msg = -3 Or $msg = -1 Then ExitLoop
    If $msg = $aboutitem Then Msgbox(0,"About", "SpaceBar v 1.0.06" & @CRLF & "Build 2007-12-18" & @CRLF & "Copyright by Ritzelrocker04 !")
    WEnd

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

    GUIDelete()

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

    Exit

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

    Func _Update()

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

    ; Quelle
    $VOL_Quelle = DriveGetLabel($src_LW)
    $TOTAL_Quelle = DriveSpaceTotal($src_LW)
    $FREE_Quelle = DriveSpaceFree($src_LW)
    $FREE_Quelle_MB = _StringAddComma(StringReplace(Round ($FREE_Quelle, 2), '.', ','), ".", ",")
    $i_Progress_Quelle = StringReplace(Round(($TOTAL_Quelle - $FREE_Quelle) / ($TOTAL_Quelle / 100), 2), ".", ",")
    GUICtrlSetData($pg_Quelle,$i_Progress_Quelle)
    GUICtrlSetData($tb_Quelle,"Auf " & $VOL_Quelle & " sind "& $FREE_Quelle_MB & " MB frei")
    ; Ziel
    $VOL_Ziel = DriveGetLabel($dest_LW)
    $TOTAL_Ziel = DriveSpaceTotal($dest_LW)
    $FREE_Ziel = DriveSpaceFree($dest_LW)
    $FREE_Ziel_MB = _StringAddComma(StringReplace(Round ($FREE_Ziel, 2), '.', ','), ".", ",")
    $i_Progress_Ziel = StringReplace(Round(($TOTAL_Ziel - $FREE_Ziel) / ($TOTAL_Ziel / 100), 2), ".", ",")
    GUICtrlSetData($pg_Ziel,$i_Progress_Ziel)
    GUICtrlSetData($tb_Ziel,"Auf " & $VOL_Ziel & " sind "& $FREE_Ziel_MB & " MB frei")

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

    EndFunc ; ==> AdlibEnable("_Update")

    [/autoit]

    Danke an Oscar

    Man liest sich...
    Euer Ritzelrocker04

    • Offizieller Beitrag

    Ja, so sieht das schon besser aus. :)

    Aber es geht noch mehr:

    [autoit]


    Func _Update()
    ; Quelle
    $VOL_Quelle = _DriveFree($src_LW)
    GUICtrlSetData($pg_Quelle,$VOL_Quelle[0])
    GUICtrlSetData($tb_Quelle,"Auf " & $VOL_Quelle[1] & " sind "& $VOL_Quelle[2] & " MB frei")
    ; Ziel
    $VOL_Ziel = _DriveFree($dest_LW)
    GUICtrlSetData($pg_Ziel,$VOL_Ziel[0])
    GUICtrlSetData($tb_Ziel,"Auf " & $VOL_Ziel[1] & " sind "& $VOL_Ziel[2] & " MB frei")
    EndFunc ; ==> AdlibEnable("_Update")

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

    Func _DriveFree($LW)
    Local $aDrive[3]
    $aDrive[1] = $LW & ' (' & DriveGetLabel($LW) & ')'
    $TOTAL = DriveSpaceTotal($LW)
    $FREE = DriveSpaceFree($LW)
    $aDrive[2] = _StringAddComma(StringReplace(Round ($FREE, 2), '.', ','), ".", ",")
    $aDrive[0] = StringReplace(Round(($TOTAL - $FREE) / ($TOTAL / 100), 2), ".", ",")
    Return $aDrive
    EndFunc

    [/autoit]

    Deine _Update-Funktion mit einer zusätzlichen Funktion (_DriveFree()) garniert.

    Und wenn Du das Skript jetzt noch erweiterst, dass auch alle Festplatten angezeigt werden... :thumbup:

    • Offizieller Beitrag

    Ich habe mal Dein Skript so angepasst, dass es alle Festplatten anzeigt. Wie Du sehen kannst sind dazu nur ein paar wenige Anpassungen nötig und jetzt wird auch die Überlegenheit der Funktionen (und Arrays) überdeutlich.

    Spoiler anzeigen
    [autoit]


    ; by Ritzelrocker04 und Oscar

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

    #include <GUIConstants.au3>
    #include <String.au3>
    #NoTrayIcon

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

    $aNDrive = DriveGetDrive('FIXED')
    Dim $aProgress[$aNDrive[0]], $aName[$aNDrive[0]]

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

    ;#################################################### - Die GUI - #################################################################

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

    $GUI = GUICreate('SpaceBar v 2.0', 248, 8+$aNDrive[0]*50, @DesktopWidth-250, 27, $WS_POPUPWINDOW, $WS_EX_TOPMOST)
    For $i = 0 To $aNDrive[0] - 1
    $aProgress[$i] = GUICtrlCreateProgress(8, 8+$i*50, 230, 17)
    $aName[$i] = GUICtrlCreateInput('', 8, 27+$i*50, 230, 21, $ES_READONLY)
    Next
    $trackmenu = GuiCtrlCreateContextMenu ()
    $aboutitem = GuiCtrlCreateMenuitem ('About',$trackmenu)
    GuiCtrlCreateMenuitem ('',$trackmenu)
    $exititem = GuiCtrlCreateMenuitem ('Exit',$trackmenu)

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

    GuiSetState()
    _Update()
    AdlibEnable('_Update', 1000) ; Empfehlung AdlibEnable('_Update', 300000) = 5min

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

    While 1
    $msg = GuiGetMsg()
    If $msg = $exititem Or $msg = -3 Or $msg = -1 Then ExitLoop
    If $msg = $aboutitem Then Msgbox(0,'About', 'SpaceBar v 2.0.0.0' & @CRLF & 'Build 2007-12-18' & @CRLF & 'Copyright by Ritzelrocker04 !')
    WEnd

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

    GUIDelete()
    Exit

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

    Func _Update()
    For $i = 0 To $aNDrive[0] - 1
    $aVol = _DriveFree($aNDrive[$i+1])
    GUICtrlSetData($aProgress[$i], $aVol[0])
    GUICtrlSetData($aName[$i], 'Auf ' & $aVol[1] & ' sind ' & $aVol[2] & ' MB frei')
    Next
    EndFunc

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

    Func _DriveFree($LW)
    Local $aDrive[3]
    $aDrive[1] = StringUpper($LW) & ' (' & DriveGetLabel($LW) & ')'
    $TOTAL = DriveSpaceTotal($LW)
    $FREE = DriveSpaceFree($LW)
    $aDrive[2] = _StringAddComma(StringReplace(Round ($FREE, 2), '.', ','), '.', ',')
    $aDrive[0] = StringReplace(Round(($TOTAL - $FREE) / ($TOTAL / 100), 2), '.', ',')
    Return $aDrive
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hi,

    habe noch ein bißchen was geändert.

    Spoiler anzeigen
    [autoit]

    ; by Ritzelrocker04 und Oscar
    Opt('MustDeclareVars', 1)
    #include <GUIConstants.au3>
    #include <String.au3>
    #NoTrayIcon

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

    Global Const $WM_LBUTTONDOWN = 0x0201
    Global $aNDrive = DriveGetDrive('FIXED'), $aProgress[$aNDrive[0]], $aName[$aNDrive[0]], $msg = 0, $aVol = 0
    Global $GUI = GUICreate('SpaceBar v 2.0', 248, 8 + $aNDrive[0] * 50, @DesktopWidth - 250, 27, $WS_POPUPWINDOW, $WS_EX_TOPMOST)

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

    For $i = 0 To $aNDrive[0] - 1
    $aProgress[$i] = GUICtrlCreateProgress(8, 8 + $i * 50, 230, 17)
    $aName[$i] = GUICtrlCreateInput('', 8, 27 + $i * 50, 230, 21, $ES_READONLY)
    Next
    Global $trackmenu = GUICtrlCreateContextMenu()
    Global $aboutitem = GUICtrlCreateMenuItem('About', $trackmenu)
    GUICtrlCreateMenuItem('', $trackmenu)
    Global $exititem = GUICtrlCreateMenuItem('Exit', $trackmenu)
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WinMove")
    GUISetState()

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

    _Update()
    AdlibEnable('_Update', 1000) ; Empfehlung AdlibEnable('_Update', 300000) = 5min

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $exititem Or $msg = -3 Or $msg = -1 Then Exit (0)
    If $msg = $aboutitem Then MsgBox(0, 'About', 'SpaceBar v 2.0.0.0' & @CRLF & 'Build 2007-12-18' & @CRLF & 'Copyright by Ritzelrocker04 !')
    WEnd

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

    Func _Update()
    For $i = 0 To $aNDrive[0] - 1
    $aVol = _DriveFree($aNDrive[$i + 1])
    GUICtrlSetData($aProgress[$i], $aVol[0])
    GUICtrlSetData($aName[$i], 'Auf ' & $aVol[1] & ' sind ' & $aVol[2] & ' MB frei')
    Next
    EndFunc ;==>_Update

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

    Func _DriveFree($LW)
    Local $TOTAL = DriveSpaceTotal($LW), $FREE = DriveSpaceFree($LW), $aDrive[3] = [StringReplace(Round(($TOTAL - $FREE) / ($TOTAL / 100), 2), '.', ','), _
    StringUpper($LW) & ' (' & DriveGetLabel($LW) & ')', _StringAddComma(StringReplace(Round($FREE, 2), '.', ','), '.', ',')]
    Return $aDrive
    EndFunc ;==>_DriveFree

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

    Func _WinMove($HWnd, $Command, $wParam, $lParam)
    If BitAND(WinGetState($HWnd), 32) Then Return $GUI_RUNDEFMSG
    DllCall("user32.dll", "long", "SendMessage", "hwnd", $HWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
    EndFunc ;==>_WinMove

    [/autoit]

    So long,

    Mega