Stimmt! Hatte ich völlig übersehen.
Hab das mal in meinem letzten Post geändert.
Ansonsten läuft es bei Dir?
Stimmt! Hatte ich völlig übersehen.
Hab das mal in meinem letzten Post geändert.
Ansonsten läuft es bei Dir?
@Xeno: Hmm...nettes Script, aber andere Baustelle.
Ich will ja ein Programm, das im Hintergrund (möglichst unauffällig) läuft und mir bei Bedarf die Festplatten-Speicherbelegung anzeigt.
Das Tool aus dem engl. Forum ist eher so ein Laufwerks-Statusbericht. IMHO nicht vergleichbar.
Screenshot von unserem Tool:
Unbenannt.bmp
Ich habe noch ein paar kleine Änderungen vorgenommen:
Die Y-Position des Fensters wird jetzt in einer INI-Datei gespeichert, damit das Fenster beim nächsten Start wieder genau dorthin gesetzt wird.
Außerdem kann man nun im Kontextmenü einstellen, ob das Fenster beim Start versteckt (eingeschoben) werden soll (Hide on Start). Dieser Wert wird ebenfalls in der INI-Datei gespeichert.
Und noch ein paar farbliche Anpassungen, weil ich das Zune-Desktop-Theme habe.
Wer's nicht mag, kann die Farben ja entsprechend anpassen. Habe die Stellen mal kommentiert.
; by Ritzelrocker04, Xenobiologist and Oscar
#NoTrayIcon
Opt('MustDeclareVars', 1)
;[Includes]
#include<Array.au3>
#include<GUIConstants.au3>
#include<String.au3>
If Not IsDeclared('Range') Then Const $Range = 100
If Not IsDeclared('WM_MOVING') Then Const $WM_MOVING = 0x0216
If Not IsDeclared('WM_ENTERSIZEMOVE') Then Const $WM_ENTERSIZEMOVE = 0x0231
If Not IsDeclared('WM_LBUTTONDOWN') Then Global Const $WM_LBUTTONDOWN = 0x0201
If Not IsDeclared('WM_SYSCOMMAND') Then Const $WM_SYSCOMMAND = 0x112
If Not IsDeclared('WM_RBUTTONDOWN') Then Global Const $WM_RBUTTONDOWN = 0x0204
Global $taskbarPos = WinGetPos('[CLASS:Shell_TrayWnd]'), $x_start, $y_start
[/autoit] [autoit][/autoit] [autoit]Global $aFDrive = DriveGetDrive('FIXED'), $aNDrive = DriveGetDrive('NETWORK')
If IsArray($aNDrive) Then
For $i = 1 To $aNDrive[0]
_ArrayAdd($aFDrive, $aNDrive[$i])
$aFDrive[0] += 1
Next
EndIf
Global $iPosY = IniRead(@ScriptDir & '\SpaceBar.ini', 'Pos', 'iPosY', 27)
Global $bHide = IniRead(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bHide', 1)
Global $aProgress[$aFDrive[0]], $aName[$aFDrive[0]], $hidden = $bHide, $icon, $msg = 0, $aVol = 0, $aPos, $aProzent[$aFDrive[0]], $aGB[$aFDrive[0]]
Global $aZwischenspeicher[$aFDrive[0]]
Global $GUI = GUICreate('SpaceBar v 3.1', 380, 8 + $aFDrive[0] * 50, @DesktopWidth - 382, $iPosY, BitOr($WS_POPUP, $WS_BORDER), BitOr($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBKColor(0x444444); Hintergrundfarbe des Fensters
;GUICtrlCreatePic(@ScriptDir & '\bg.png',0,0,500,500)
Global $Colors = _Gradient(0x00CC00,0x00FF00, $aFDrive[0]*2)
Global $hider = GUICtrlCreateLabel(_StringRepeat(':: ', $aFDrive[0] * 4),0,0,6,10 + $aFDrive[0] * 50)
GUICtrlSetBkColor(-1, 0xBBBBBB); Hintergrundfarbe der Seiten-Leiste
Dim $k = 0
For $i = 0 To $aFDrive[0] - 1
If DriveGetType($aFDrive[$i+1]) = "Fixed" Then $icon = -9
If DriveGetType($aFDrive[$i+1]) = "Network" Then $icon = -10
GUICtrlCreateIcon(@SystemDir & "\shell32.dll", $icon, 12, 2 + $i * 50, 32, 32)
$aProgress[$i] = _ProgressCreate(52, 8 + $i * 50, 230, 20,0xAAAA00,0xFF0000,$Colors[$k],$Colors[$k+1])
$aProzent[$i] = GUICtrlCreateLabel('', 290, 8 + $i * 50,70,20,$ES_RIGHT,$GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1,9,700,0,'Arial')
$aGB[$i] = GUICtrlCreateLabel('', 290, 30 + $i * 50,70,20,$ES_RIGHT,$GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1,8,800,0,'Arial')
GUICtrlSetColor(-1, 0xBBBBBB); Farbe der GB-Zahl
$k+=2
;Func _ProgressCreate($x, $y,$w = 204, $h = 24,$Col=0xFFFF00,$BG=0xAAAA00,$GradCol=0x00FF00,$GradBG=0xFF0000)
$aName[$i] = GUICtrlCreateLabel('', 60, 30 + $i * 50, 230, 21, $ES_READONLY)
GUICtrlSetFont(-1,8,800,0,'Arial')
GUICtrlSetColor(-1, 0xBBBBBB); Farbe der Beschriftung unter der Progressbar
Next
Dim $aContext = GUICtrlCreateLabel(' ',290,10,230,-2 + $aFDrive[0] * 50,-1,$GUI_WS_EX_PARENTDRAG) ;Label for ContextMenu over the otherLabels
GUICtrlSetState($aContext,$GUI_ONTOP)
GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
Global $trackmenu = GUICtrlCreateContextMenu($aContext)
Global $aboutitem = GUICtrlCreateMenuItem('About', $trackmenu)
Global $hideitem = GUICtrlCreateMenuItem('Hide on Start', $trackmenu, 3)
If $bHide = 1 Then
GUICtrlSetState($hideitem, $GUI_CHECKED)
Else
GUICtrlSetState($hideitem, $GUI_UNCHECKED)
EndIf
GUICtrlCreateMenuItem('', $trackmenu)
Global $exititem = GUICtrlCreateMenuItem('Exit', $trackmenu)
Dim $aExit = GUICtrlCreateLabel('X',367,0,13,13,$ES_CENTER) ; Label als Exit-Button
GUICtrlSetBkColor(-1,0xDD4444)
GUICtrlSetColor(-1,0xFFFFFF)
GUICtrlSetFont(-1,-1,800)
GUIRegisterMsg($WM_RBUTTONDOWN, '_RightClick') ; Funktion, um das KontextMenu des Labels auch von der Gui aus aufzurufen
GUIRegisterMsg($WM_LBUTTONDOWN, '_WinMove') ; Funktion, um das Fenster zu bewegen
GUIRegisterMsg($WM_ENTERSIZEMOVE, 'On_WM_ENTERSIZEMOVE') ; Docking
GUIRegisterMsg($WM_MOVING, 'On_WM_MOVING') ; Docking
_Update()
AdlibEnable('_Update', 4000) ; Empfehlung AdlibEnable('_Update', 300000) = 5min
If $bHide = 1 Then
WinMove($gui,'',@DesktopWidth-8,Default)
Else
WinMove($gui,'',@DesktopWidth-382,Default)
EndIf
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Select
Case $msg = $exititem Or $msg = -3 Or $msg = -1 Or $msg = $aExit
$aPos = WinGetPos('')
IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'iPosY', $aPos[1])
Exit
Case $msg = $hider
If $hidden Then
WinMove($gui,'',@DesktopWidth-382,Default)
Else
WinMove($gui,'',@DesktopWidth-8,Default)
EndIf
$hidden = Not $hidden
Case $msg = $hideitem
If $bHide = 1 Then
GUICtrlSetState($hideitem, $GUI_UNCHECKED)
$bHide = 0
Else
GUICtrlSetState($hideitem, $GUI_CHECKED)
$bHide = 1
EndIf
IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bHide', $bHide)
Case $msg = $aboutitem
MsgBox(64, 'About', 'SpaceBar v 3.1.0.1 Build 2007-12-18/28 ' & @CRLF & '' & @CRLF & 'In Zusammenarbeit mit: ' & @CRLF & 'Ritzelrocker04, Oscar, Xenobiologist ' & @CRLF & 'Peethebee, Progandy ' & @CRLF & 'Thx an das http://www.Autoit.de Team ')
EndSelect
WEnd
Func _Update()
For $i = 0 To $aFDrive[0] - 1
$aVol = _DriveFree($aFDrive[$i + 1])
If $aZwischenspeicher[$i] = $aVol[2] Then ContinueLoop
$aZwischenspeicher[$i] = $aVol[2]
;_GuiCtrlOCXProgressSetValue($aProgress[$i], $aVol[0])
GUICtrlSetData($aProzent[$i],StringReplace((100-$aVol[0]),'.',',') & '% frei')
If $aVol[3]/1024 < 20.9 Then
Select
Case $aVol[0] >= 60
GUICtrlSetColor($aProzent[$i],0xDD0000)
Case $aVol[0] < 60 And $aVol[0] > 40
GUICtrlSetColor($aProzent[$i],0xEE8800)
Case $aVol[0] <= 40
GUICtrlSetColor($aProzent[$i],0x00CC00)
EndSelect
Else
Select
Case Round(Number($aVol[2])/1024) < 5
GUICtrlSetColor($aProzent[$i],0xDD0000)
Case Round(Number($aVol[2])/1024) <= 10
GUICtrlSetColor($aProzent[$i],0xEE8800)
Case Else
GUICtrlSetColor($aProzent[$i],0x00CC00)
EndSelect
EndIf
GUICtrlSetData($aGB[$i],'von ' & StringReplace(Round(($aVol[3]/1024),1),'.',',') & 'GB')
;_ProgressSet($aProgress[$i], 100-Number($aVol[0])) ;100% = alles frei
_ProgressSet($aProgress[$i], Number($aVol[0])) ;100% = alles voll
If @error Then MsgBox(0, $aVol[0], @error)
GUICtrlSetData($aName[$i], 'Auf ' & $aVol[1] & ' sind ' & _StringAddComma(StringReplace($aVol[2],'.',','),'.',',') & ' MB frei')
Next
EndFunc ;==>_Update
Func _DriveFree($LW)
Local $TOTAL = DriveSpaceTotal($LW), $FREE = DriveSpaceFree($LW), $aDrive[4] = [(Round(($TOTAL - $FREE) / ($TOTAL / 100), 2)), _
StringUpper($LW) & ' (' & DriveGetLabel($LW) & ')', Round($FREE, 2), $TOTAL]
Return $aDrive
EndFunc ;==>_DriveFree
;-------------------------------------------------------------------
#region Moving and Docking
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
; Author: Xenobiologist (Mega)
Func On_WM_ENTERSIZEMOVE()
Local $aMPos = MouseGetPos()
$x_start = $aMPos[0]
$y_start = $aMPos[1]
EndFunc ;==>On_WM_ENTERSIZEMOVE
; Author: Xenobiologist (Mega)
Func On_WM_MOVING($hWnd, $Msg, $wParam, $lParam)
Local $aMPos = MouseGetPos()
Local $rect = DllStructCreate('long left; long top; long right; long bottom', $lParam)
Local $left = DllStructGetData($rect, 'left')
Local $top = DllStructGetData($rect, 'top')
Local $right = DllStructGetData($rect, 'right')
Local $bottom = DllStructGetData($rect, 'bottom')
If $left <= $Range And $aMPos[0] < $x_start Then
DllStructSetData($rect, 'left', 0)
DllStructSetData($rect, 'right', $right - $left)
EndIf
If $top <= $Range And $aMPos[1] < $y_start Then
DllStructSetData($rect, 'top', 0)
DllStructSetData($rect, 'bottom', $bottom - $top)
EndIf
If $right >= (@DesktopWidth - $Range) And $aMPos[0] > $x_start Then
DllStructSetData($rect, 'right', @DesktopWidth)
DllStructSetData($rect, 'left', (@DesktopWidth - $right) + $left)
EndIf
If $bottom >= ($taskbarPos[1] - $Range) And $aMPos[1] > $y_start Then
DllStructSetData($rect, 'bottom', $taskbarPos[1])
DllStructSetData($rect, 'top', ($taskbarPos[1] - $bottom) + $top)
EndIf
On_WM_ENTERSIZEMOVE()
EndFunc ;==>On_WM_MOVING
#endregion
;-------------------------------------------------------------------
;-------------------------------------------------------------------
#region Gradient
;===============================================================================
;
; Function Name: _Gradient($RGB_Color1 ,$RGB_Color2, $Count)
; Description:: Returns an Array of Gradient Colors
; Parameter(s): $RGB_Color1 : The Start-Color in RGB Hexadecimal
; $RGB_Color2 : The End-Color in RGB Hexadecimal
; $Count : The number of Colors in the Gradient
; Requirement(s):
; Return Value(s): An Array with the Colors
; Author(s): Prog@ndy
;
;===============================================================================
;
Func _Gradient($RGB_Color1 ,$RGB_Color2, $Count)
Dim $Color1_R, $Color1_G, $Color1_B, $Color2_R, $Color2_G, $Color2_B, $NeuCol_R, $NeuCol_G, $NeuCol_B
$Color1_R = BitAND( BitShift($RGB_Color1, 16), 0xff)
$Color1_G = BitAND( BitShift($RGB_Color1, 8), 0xff)
$Color1_B = BitAND($RGB_Color1, 0xff)
$Color2_R = BitAND( BitShift($RGB_Color2, 16), 0xff)
$Color2_G = BitAND( BitShift($RGB_Color2, 8), 0xff)
$Color2_B = BitAND($RGB_Color2, 0xff)
$Count -= 1 ; 0-basiert !
Dim $arColors[$Count+1], $pos1
For $i = 0 To $Count
$pos1 = $Count - $i
$NeuCol_R = ($Color1_R * $pos1 + $Color2_R * $i) / ($Count)
$NeuCol_G = ($Color1_G * $pos1 + $Color2_G * $i) / ($Count)
$NeuCol_B = ($Color1_B * $pos1 + $Color2_B * $i) / ($Count)
$arColors[$i] = Execute('0x' & Hex($NeuCol_R,2) & Hex($NeuCol_G,2) & Hex($NeuCol_B,2))
Next
Return $arColors
EndFunc
#endregion
;-------------------------------------------------------------------
;-------------------------------------------------------------------
#region Colored Progressbar
;Hilfsfunktion für doppelten Verlauf
; Author(s): Prog@ndy
Func _ZwischenGrad($RGB_c)
Local $c_R = BitAND( BitShift($RGB_c, 16), 0xff)
Local $c_G = BitAND( BitShift($RGB_c, 8), 0xff)
Local $c_B = BitAND($RGB_c, 0xff)
$c_R = _MyMax(0,$c_R-99)
$c_G = _MyMax(0,$c_G-99)
$c_B = _MyMax(0,$c_B-99)
Return Dec(Hex($c_R,2) & Hex($c_G,2) & Hex($c_B,2))
EndFunc
; Author(s): Prog@ndy
Func _ProgressCreate($x, $y,$w = 204, $h = 24,$Col=0xFFFF00,$GradCol=0x00FF00,$BG=0xAAAA00,$GradBG=0xFF0000)
Local $ID[8]
$ID[0] = GUICtrlCreateGraphic($x,$y,$w,$h)
Local $error = @error
Local $extended = @extended
$ID[1] = $w
$ID[2] = $h
If $Col = -1 Then $Col=0xFFFF00
If $BG = -1 Then $BG=0xAAAA00
If $GradCol = -1 Then $GradCol=0x00FF00
If $GradBG = -1 Then $GradBG=0xFF0000
$ID[3] = $Col
$ID[4] = $BG
$ID[5] = $GradCol
$ID[6] = $GradBG
_ProgressSet($ID,0)
Return SetError($error,$extended,$ID)
EndFunc
; Author(s): Prog@ndy
Func _ProgressDelete(ByRef $ID)
If Not IsArray($ID) Or UBound($ID) <> 8 Then Return SetError(1,0,0)
$ID[1] = -1
$ID[2] = -1
$ID[3] = -1
$ID[4] = -1
$ID[5] = -1
$ID[6] = -1
$ID[7] = -1
Dim $temp = GUICtrlDelete($ID[0])
Return SetError(@error,0,$temp)
EndFunc
; Author(s): Prog@ndy
Func _ProgressSetColors(ByRef $ID,$Col,$BG=-1,$GradCol=-1,$GradBG=-1)
If Not IsArray($ID) Or UBound($ID) <> 8 Then Return SetError(1,0,0)
$ID[3] = $Col
If $BG <> -1 Then $ID[4] = $BG
If $GradCol <> -1 Then $ID[5] = $GradCol
If $GradBG <> -1 Then $ID[6] = $GradBG
MsgBox(0,$ID[6],$ID[7])
_ProgressSet($ID,$ID[7])
Return SetError(@error,0,@error)
EndFunc
; Author(s): Prog@ndy
Func _ProgressSet(ByRef $ID, $value)
Local $Wechsel = Round((9/20)*$ID[2]-4)
Local $Hoehe = $ID[2]-4
Local $Breite = $ID[1]-4
If $value <= $ID[7] Then
GUICtrlSetBkColor($ID[0],0xAAAAAA)
GUICtrlSetColor($ID[0],0x777777)
$ID[7] = $value
Local $temp = _ZwischenGrad($ID[6])
Local $Gradient = _Gradient($ID[4],$temp, $Wechsel)
Local $Gradient2 = _Gradient($temp,$ID[6], $Hoehe-$Wechsel)
For $i = 2 To $Wechsel+1
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient[$i-2])
GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, 2,$i,$Breite,1)
Next
For $i = $Wechsel+2 To $Hoehe+1
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient2[$i-$Wechsel-2])
GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, 2,$i,$Breite,1)
Next
Local $start = 2
Else
Local $start = $ID[7]+2
$ID[7] = $value
EndIf
Local $Faktor = $Breite/100
$value *= $Faktor
If Round($value) >= $Breite Then $value = $Breite
Local $temp = _ZwischenGrad($ID[5])
Local $Gradient = _Gradient($ID[3],$temp, $Wechsel)
Local $Gradient2 = _Gradient($temp,$ID[5], $Hoehe-$Wechsel)
;Local $Gradient = _Gradient(0xFFFF00,0x00AA00, $Wechsel)
;Local $Gradient2 = _Gradient(0x00AA00,0x00FF00, $Hoehe-$Wechsel)
For $i = 2 To $Wechsel+1
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient[$i-2])
GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, $start,$i,$value-$start+2,1)
Next
For $i = $Wechsel+2 To $Hoehe+1
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,$Gradient2[$i-$Wechsel-2])
GUICtrlSetGraphic($ID[0],$GUI_GR_RECT, $start,$i,$value-$start+2,1)
Next
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,0xCCCCCC)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 2,2)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 2,$Hoehe+1);19)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+1,2)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+1,$Hoehe+1)
GUICtrlSetGraphic($ID[0],$GUI_GR_COLOR,0xEEEEEE)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 0,$Hoehe+3)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, 0,0)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+3,$Hoehe+3)
GUICtrlSetGraphic($ID[0],$GUI_GR_PIXEL, $Breite+3,0)
GUICtrlSetGraphic($ID[0],$GUI_GR_REFRESH)
EndFunc
; Original _Max() Function, directly included
; Author(s): Jeremy Landes <jlandes at landeserve dot com>
Func _MyMax($nNum1, $nNum2)
; Check to see if the parameters are indeed numbers of some sort.
If (Not IsNumber($nNum1)) Then
SetError(1)
Return (0)
EndIf
If (Not IsNumber($nNum2)) Then
SetError(2)
Return (0)
EndIf
If $nNum1 > $nNum2 Then
Return $nNum1
Else
Return $nNum2
EndIf
EndFunc ;==>_Max
#endregion
;-------------------------------------------------------------------
;-------------------------------------------------------------------
#region Context Menu Handlers
Func _RightClick($HWnd, $Command, $wParam, $lParam)
ShowMenu($hWnd,$trackmenu,$aContext,1)
EndFunc
;Author: MsCreatoR in http://www.autoitscript.com/forum/index.ph…ndpost&p=453350
;Modified from Help
; Show a menu in a given GUI window which belongs to a given GUI ctrl
Func ShowMenu($hWnd, $nContextID, $nContextControlID, $iMouse=0)
Local $hMenu = GUICtrlGetHandle($nContextID)
Local $iCtrlPos = ControlGetPos($hWnd, '', $nContextControlID)
Local $X = $iCtrlPos[0]
Local $Y = $iCtrlPos[1] + $iCtrlPos[3]
ClientToScreen($hWnd, $X, $Y)
If $iMouse Then
$X = MouseGetPos(0)
$Y = MouseGetPos(1)
EndIf
DllCall('user32.dll', 'int', 'TrackPopupMenuEx', 'hwnd', $hMenu, 'int', 0, 'int', $X, 'int', $Y, 'hwnd', $hWnd, 'ptr', 0)
EndFunc
; Convert the client (GUI) coordinates to screen (desktop) coordinates
;From Help
Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
Local $stPoint = DllStructCreate('int;int')
DllStructSetData($stPoint, 1, $x)
DllStructSetData($stPoint, 2, $y)
DllCall('user32.dll', 'int', 'ClientToScreen', 'hwnd', $hWnd, 'ptr', DllStructGetPtr($stPoint))
$x = DllStructGetData($stPoint, 1)
$y = DllStructGetData($stPoint, 2)
; release Struct not really needed as it is a local
$stPoint = 0
EndFunc
#endregion
;-------------------------------------------------------------------
Edit: Eine Idee hatte ich noch als ich Pee's Screenshot betrachtete: Man könnte ja noch für jedes Laufwerk ein Icon anzeigen. Das habe ich mal erledigt.
Mega-Cool!
Das ist es!
Ich mußte bei mir nur noch drei Zeilen ändern (Schönheitsreparatur):
Zeile 30:
[autoit]
Global $hider = GUICtrlCreateLabel(_StringRepeat(":: ", $aFDrive[0] * 4),0,0,5,10 + $aFDrive[0] * 50)
Include <string.au3> haben wir ja sowieso schon
Zeile 37:
[autoit]
GUICtrlSetFont(-1,9,500,0,"Arial")
Das ist die Zeile mit 'von xxx GB'. Dort stehen bei mir sonst nur ein paar Striche.
und Zeile 49:
[autoit]
Dim $aExit = GUICtrlCreateLabel("X",327,0,13,13,$ES_CENTER) ; Label als Exit-Button
Dann ist das 'X' nicht so eingezwängt.
Man könnte nun vielleicht noch über die 'Warn'-Farben bei <60% und <40% streiten. Bei mir zeigt er 'bedrohliche' 15,45% auf D: an, obwohl diese 15% ja noch 55 GB ausmachen.
Aber das kann ja auch jeder für sich einstellen. Soll Deine Leistung auf keinen Fall schmälern.
Wirklich klasse gemacht!
Edit: Wir haben ja #NoTrayIcon eingefügt, um das TrayIcon wegzukriegen. Soweit so gut. Mir wäre es nun noch ganz lieb, wenn auch der Eintrag in der Taskleiste weg wäre. Geht das irgendwie?
Edit2: Problem gelöst in Zeile 28:
Global $GUI = GUICreate('SpaceBar v 2.0', 340, 8 + $aFDrive[0] * 50, @DesktopWidth - 340, 27, $WS_POPUPWINDOW, BitOr($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
P.S.: Habe das Script für mich mal angepasst, damit es mit dem Zune-Desktop-Theme gut aussieht:
es wird Zeit, dass du weitermachst. Die Konkurrenz schläft nicht.
Ich finde, progandy hat uns mit seinem Beitrag glatt in Führung gebracht.
@progandy: Super Beitrag! Deine Änderungen runden das Ganze ab. Klasse gemacht!
@All: Weiß jemand eine Lösung um das Flackern zu verhindern? Das würde uns den Sieg (gegen das englische Forum) bringen.
Auch von mir: Ein frohes Weihnachtsfest für euch alle.
[Blockierte Grafik: http://www.mathematik.uni-ulm.de/sai/ws03/prog/weihnachten/weihnachten.jpg]
Hallo!
Ich habe eine Funktion geschrieben, die eine recht universelle MsgBox zum Installieren von Programmen erstellt.
Man kann einige Parameter beeinflussen, wie z.B. die Hintergrundfarbe, die Fortschrittsanzeige, das angezeigte Bild, usw...
Alles weitere wird in den Kommentaren erklärt.
#Include <GUIConstants.au3>
$text = 'Installation von Firefox (Beispiel).' & @CRLF & 'Dieses Installations-Script wurde geschrieben von Oscar.' & @CRLF & 'Es ist universell einsetzbar und kann beliebig geändert werden.'
[/autoit] [autoit][/autoit] [autoit]$res = _InstBox('Installation', $text, @ScriptDir & '\firefox.jpg', 0, True, 0xFFFFFF)
Switch $res
Case 0
Exit; User hat auf 'Abbrechen' geklickt
Case 1
; hier kommt der erste Installationsschritt
Case 2
; hier evtl. Code für 'Überspringen', ansonsten leer lassen
EndSwitch
$text = 'Installation von Thunderbird (Beispiel).' & @CRLF & 'Der Text für den nächsten Installationsschritt'
[/autoit] [autoit][/autoit] [autoit]$res = _InstBox('Installation Schritt 1/3', $text, @ScriptDir & '\thunderbird.jpg', 33, False, 0xFFFFFF)
Switch $res
Case 0
Exit; User hat auf 'Abbrechen' geklickt
Case 1
; hier kommt der zweite Installationsschritt
Case 2
; hier evtl. Code für 'Überspringen', ansonsten leer lassen
EndSwitch
$text = 'Installation von IrfanView (Beispiel).' & @CRLF & 'Der Text für den übernächsten Installationsschritt'
[/autoit] [autoit][/autoit] [autoit]$res = _InstBox('Installation Schritt 2/3', $text, @ScriptDir & '\irfanview.jpg', 66, False, 0xFFFFFF)
Switch $res
Case 0
Exit; User hat auf 'Abbrechen' geklickt
Case 1
; hier kommt der dritte Installationsschritt
Case 2
; hier evtl. Code für 'Überspringen', ansonsten leer lassen
EndSwitch
; das kannst Du endlos fortsetzen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$text = 'Alle Programme wurden installiert.' & @CRLF & 'Der Text für den abschließenden Installationsschritt'
[/autoit] [autoit][/autoit] [autoit]_InstBox('Installation Beendet', $text, @ScriptDir & '\ende.jpg', 100, False, 0xFFFFFF)
[/autoit] [autoit][/autoit] [autoit]; hier ist das Ende erreicht
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Funktion Name: _InstBox()
; AutoIt-Version: 3.2.10.0
; Language: German
; Version: 1.0.0.2
; Date: 03. Jan. 2008
; Author: Thomas Stephan <oscar at elektronik-kurs dot de>
;
; Beschreibung:
; Diese Funktion erzeugt eine Installations-Box, mit der man Programminstallationen
; benutzerunterstützt vornehmen kann.
;
; Funktionsaufruf: _InstBox($Title, $Text, $Pic, $ProgBar, $bSkip, [$BackgrCol = 0xDDDDDD])
; $Title = Text, der als Fenstertitel verwendet wird
; $Text = Erste Zeile (bis zum 1. CRLF) wird als Überschrift verwendet. Der Rest
; ist normaler Text
; $Pic = Pfad und Dateiname eines Bildes (max. 150x150 Pixel).
; $ProgBar = Prozentangabe (0...100) für die ProgressBar
; Diese Angabe beeinflusst außerdem die Buttonanzeige:
; 0 Button1 = 'Abbrechen' und Button3 = 'Start'
; 100 Button1 = [nicht vorhanden] und Button3 = 'Beenden'
; 1...99 Button1 = 'Abbrechen' und Button3 = 'Weiter...'
; $bSkip = False = 'Überspringen-Button' nicht vorhanden
; True = 'Überspringen-Button' vorhanden
; [$BackgrCol] = Hintergrundfarbe (Hex-Wert RGB), wenn nicht angegeben, dann grau
;
; Rückgabewerte:
; 0 = auf 'Abbrechen' geklickt
; 1 = auf 'Start', 'Weiter...' oder 'Beenden' geklickt
; 2 = auf 'Überspringen' geklickt
;===============================================================================
Func _InstBox($Title, $Text, $Pic, $ProgBar, $bSkip, $BackgrCol = 0xDDDDDD)
If Not IsBool($bSkip) Then $bSkip = False
If ($ProgBar < 0) Or ($ProgBar > 100) Then $ProgBar = 0
Local $w = 520, $h = 230, $hOpt = Opt('GUIEventOptions')
Opt('GUIEventOptions', 0)
$gui = GUICreate($Title, $w, $h, -1, -1, $WS_DLGFRAME)
GUISetBKColor($BackgrCol)
GUICtrlCreatePic($Pic, 10, 10)
StringRegExp($Text, '\r', 1)
$e = @extended
$Head = StringLeft($Text, $e)
$Text = StringMid($Text, $e + 1)
If $Head <> '' Then
GUICtrlCreateLabel($Head, 170, 10, $w - 200, 40)
GUICtrlSetFont(-1, 14, 800, 0, 'Times New Roman')
EndIf
GUICtrlCreateLabel($Text, 170, 50, $w - 180, $h - 120)
GUICtrlSetFont(-1, 11, 400, 0, 'Times New Roman')
$PB = GUICtrlCreateProgress(170, $h - 85, $w - 180, 15, $PBS_SMOOTH)
GUICtrlSetData($PB, $ProgBar)
If $ProgBar < 100 Then
$Button1 = GUICtrlCreateButton('Abbrechen', $w - 220 - 110 * $bSkip, $h - 55, 100, 24)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
If $bSkip Then
$Button2 = GUICtrlCreateButton('Überspringen', $w - 220, $h - 55, 100, 24)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
Else
$Button2 = -1
EndIf
Else
$Button1 = -1
$Button2 = -1
EndIf
Switch $ProgBar
Case 0
$go = 'Start'
Case 100
$go = 'Beenden'
Case Else
$go = 'Weiter...'
EndSwitch
$Button3 = GUICtrlCreateButton($go, $w - 110, $h - 55, 100, 24)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button1
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (0)
Case $msg = $Button2
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (2)
Case $msg = $Button3
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (1)
EndSelect
WEnd
EndFunc
Für das Beispiel werden noch die vier Bilder benötigt. Die findet ihr zusammen mit dem Script im ZIP-Archiv (Anhang).
Vielleicht kann es ja irgendwer gebrauchen.
Edit: Es gibt jetzt auch einen 'Überspringen'-Button. Damit wird dann die Auswertung etwas umfangreicher. Schaut euch einfach das Beispielscript an, dann versteht ihr das bestimmt.
Edit2: Für den 'Überspringen'-Button gibt es jetzt einen zusätzlichen Übergabeparameter. Bei 'True' gibt es einen Überspringen-Button und bei 'False' gibt es keinen.
Ich versuch's nochmal einfacher:
#Include <GUIConstants.au3>
$text = 'Willkommen zur Installation von BS1KSH Ascent WoW Server.' & @CRLF & 'Dieses Installations Script wurde geschrieben von Cornfl4kes.' & @CRLF & 'Es wurde das Server Pack 5 Beta2 von Tyraels Ascent verwendet.' & @CRLF & 'Mit diesem Script wird der World of Warcraft Ascent Server auf deinem Computer/Server Eingestellt.'
[/autoit] [autoit][/autoit] [autoit]If _NextBox('Installation Ascent Server Schritt 1/3', $text) Then Exit
[/autoit] [autoit][/autoit] [autoit]; hier kommt die Installation hin
[/autoit] [autoit][/autoit] [autoit]$text = 'Der Text für den nächsten Installationsschritt'
[/autoit] [autoit][/autoit] [autoit]If _NextBox('Installation Ascent Server Schritt 2/3', $text) Then Exit
[/autoit] [autoit][/autoit] [autoit]; hier kommt der nächste Installationsschritt
[/autoit] [autoit][/autoit] [autoit]$text = 'Der Text für den nächsten Installationsschritt'
[/autoit] [autoit][/autoit] [autoit]If _NextBox('Installation Ascent Server Schritt 3/3', $text) Then Exit
[/autoit] [autoit][/autoit] [autoit]; hier kommt der übernächste Installationsschritt
[/autoit] [autoit][/autoit] [autoit]; das kannst Du endlos fortsetzen
[/autoit] [autoit][/autoit] [autoit]Func _NextBox($title, $text)
$hOpt = Opt('GUIEventOptions')
Opt('GUIEventOptions', 0)
$gui = GUICreate($title, 380, 260, -1, -1, $WS_DLGFRAME)
GUICtrlCreateLabel($text, 10, 10, 360, 170)
GUICtrlSetFont(-1, 10, 400, 0, 'Times New Roman')
$b1 = GUICtrlCreateButton('Abbrechen', 120, 190, 80, 20)
$b2 = GUICtrlCreateButton('Weiter', 220, 190, 80, 20, $BS_DEFPUSHBUTTON)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $b1
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (1)
Case $msg = $b2
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (0)
EndSelect
WEnd
EndFunc
Warum so umständlich?
Versuch's mal hiermit:
#Include <GUIConstants.au3>
If _NextBox('Installation 1/3', 'Mit der Installation von Thunderbird fortfahren?') Then Exit
[/autoit] [autoit][/autoit] [autoit]If _NextBox('Installation 2/3', 'Mit der Installation von Firefox fortfahren?') Then Exit
[/autoit] [autoit][/autoit] [autoit]If _NextBox('Installation 3/3', 'Mit der Installation von IrfanView fortfahren?') Then Exit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _NextBox($title, $text)
$hOpt = Opt('GUIEventOptions')
Opt('GUIEventOptions', 0)
$gui = GUICreate($title, 320, 160, -1, -1, $WS_DLGFRAME)
GUICtrlCreateLabel($text, 10, 20, 300, 80)
GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')
$b1 = GUICtrlCreateButton('Abbrechen', 120, 100, 80, 20)
$b2 = GUICtrlCreateButton('Weiter', 220, 100, 80, 20, $BS_DEFPUSHBUTTON)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $b1
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (1)
Case $msg = $b2
Opt('GUIEventOptions', $hOpt)
GuiDelete($gui)
Return (0)
EndSelect
WEnd
EndFunc
Das war jetzt nahezu zeitgleich. Und auch noch mit der gleichen Lösung.
@Xeno: Vielen Dank für den Link. Ich werde mal versuchen mich da 'reinzulesen'.
Aus aktuellem Anlass (ich habe mir eine ICY-Box IB-NAS4220 gekauft) habe ich das Script mal so angepasst, dass auch Netzlaufwerke mit angezeigt werden.
; by Ritzelrocker04, Xenobiologist and Oscar
Opt('MustDeclareVars', 1)
#include <GUIConstants.au3>
#include <String.au3>
#include <Array.au3>
#NoTrayIcon
Global Const $WM_LBUTTONDOWN = 0x0201
Global $aFDrive = DriveGetDrive('FIXED'), $aNDrive = DriveGetDrive('NETWORK')
If IsArray($aNDrive) Then
For $i = 1 To $aNDrive[0]
_ArrayAdd($aFDrive, $aNDrive[$i])
$aFDrive[0] += 1
Next
EndIf
Global $aProgress[$aFDrive[0]], $aName[$aFDrive[0]], $msg = 0, $aVol = 0
Global $GUI = GUICreate('SpaceBar v 2.0', 248, 8 + $aFDrive[0] * 50, @DesktopWidth - 250, 27, $WS_POPUPWINDOW, $WS_EX_TOPMOST)
For $i = 0 To $aFDrive[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()
_Update()
AdlibEnable('_Update', 60000) ; Empfehlung AdlibEnable('_Update', 300000) = 5min
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
Func _Update()
For $i = 0 To $aFDrive[0] - 1
$aVol = _DriveFree($aFDrive[$i + 1])
GUICtrlSetData($aProgress[$i], $aVol[0])
GUICtrlSetData($aName[$i], 'Auf ' & $aVol[1] & ' sind ' & $aVol[2] & ' MB frei')
Next
EndFunc ;==>_Update
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
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
Schönes Script!
Aber nach dem ProgressSet() habe ich ein Sleep(50) einbauen müssen, weil sonst die Anzeige fürchterlich flackert.
Wenn ich das richtig verstehe, dann suchst Du den Befehl: Eval()
Ich habe mal ein Beispiel-Script erstellt. Hoffe das ist halbwegs verständlich.
#Include <GUIConstants.au3>
#Include <GuiListView.au3>
Global $script = 'test', $w = 320, $h = 200, $x = -1, $y = -1, $trans = 10, $list2
$gui = GUICreate($script, $w, $h, $x, $y, $WS_POPUPWINDOW, $WS_EX_TRANSPARENT + $WS_EX_TOOLWINDOW )
WinSetOnTop($script,'',1)
WinSetTrans($script,'', (100 - $trans) * 2.55)
_NewListView()
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]Sleep(2000)
[/autoit] [autoit][/autoit] [autoit]WinMove($script, '', default, default, 640, 480)
GUICtrlDelete($list2)
_NewListView()
While 1
Sleep(20)
WEnd
Func _NewListView()
$aSize = WinGetPos($script)
$list2 = _GUICtrlListView_Create($gui,"||", 5, 5, $aSize[2] - 10, $aSize[3] - 10)
_GUICtrlListView_SetColumn($list2, 0, "Name", ($aSize[2] / 2) - 30, 2)
_GUICtrlListView_SetColumn($list2, 1, "IP", ($aSize[2] / 2) - 30, 2)
_GUICtrlListView_SetColumn($list2, 2, "Status", 50, 2)
EndFunc
Geht es auch etwas ausführlicher?
Was willst Du denn geändert haben? Vielleicht ließe sich das mit $GUI_HIDE und $GUI_SHOW bewerkstelligen.
@Xeno: Ich finde es schon fantastisch, was man alles so im engl. Forum findet, aber eigentlich wollte ich wissen, wie man hinter das Geheimnis der DllCalls kommt.
Ich meine, ein Aufruf von: DllCall("user32.dll", "long", "SendMessage", "hwnd", $HWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0) bewirkt, dass man ein PopupFenster verschieben kann!?
Gibt's da irgendwo eine Doku drüber?
Entschuldigung, dass ich das so sagen muss, aber Dein Skript macht nicht das, was es sollte.
Beispiel= 'Der Nachtwächter hatte verschlafen, weil er zuviel getrunken hatte.'
Ergebnis= er: 4, hatte: 2, hatte.: 2
Ich dachte auch erst, dass man das Problem am einfachsten mit StringRegExp angehen könnte, aber dann versuchte ich das mal anders. Rausgekommen ist das:
#Include <GUIConstants.au3>
#include <array.au3>
Global $pfad = ''
#Region GUI
$Form1 = GUICreate("Textworthäufigkeit Analysator 1.0.0", 338, 247, 193, 125)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 321, 209, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL))
$MenuDatei = GUICtrlCreateMenu("Datei")
$MenuItem_laden = GUICtrlCreateMenuItem("Text laden...", $MenuDatei)
$MenuItem4 = GUICtrlCreateMenuItem("", $MenuDatei)
$MenuItem_analyse = GUICtrlCreateMenuItem("Analysieren...", $MenuDatei)
$MenuItem5 = GUICtrlCreateMenuItem("", $MenuDatei)
$MenuItem_as = GUICtrlCreateMenuItem("Auswertung speichern", $MenuDatei)
$Quit = GUICtrlCreateMenuItem("Beenden", $MenuDatei)
$MenuInfo = GUICtrlCreateMenu("&Info")
$MenuItemUber = GUICtrlCreateMenuItem("Über...", $MenuInfo)
GUISetState(@SW_SHOW)
#EndRegion GUI
While 1
$msg = GUIGetMsg()
Select
Case $msg = $MenuItem_laden
$pfad = FileOpen(FileOpenDialog("Bitte zu analsysierende Textdatei auswählen:", @MyDocumentsDir, "Textdatei (*.txt)"), 0)
If $pfad <> -1 Then
$sText = FileRead($pfad)
FileClose($pfad)
If MsgBox(64 + 4, "Meldung", "Die Textdatei wurde erfolgreich geladen. Analyse durchführen?") = 6 Then
If GUICtrlRead($Edit1) <> "" Then
If MsgBox(48 + 4, "Achtung!", "Ihre alte Auswertung wird gelöscht werden! Fortfahren?") = 6 Then Woerteranalyse($sText)
Else
Woerteranalyse($sText)
EndIf
EndIf
Else
MsgBox(32, "Meldung", "Das Laden der Textdatei ist fehlgechlagen!")
EndIf
Case $msg = $MenuItemUber
MsgBox(64, "Über...", "Programm Name: Textworthäufigkeit Analysator 1.0.0" & @CRLF & "Programm Version : 1.0.0" & @CRLF & @CRLF & "Autor: Vinschni")
Case $msg = $MenuItem_analyse
Woerteranalyse($sText)
Case $msg = $MenuItem_as
If Not GUICtrlRead($Edit1) = "" Then FileWrite(FileOpenDialog("Datei zum Speichern der Auswertung wählen:", @DesktopCommonDir, "Textdatei (*.txt)"), GUICtrlRead($Edit1))
Case $msg = $GUI_EVENT_CLOSE Or $msg = $Quit
ExitLoop
EndSelect
WEnd
Func Woerteranalyse($text)
$text = StringRegExpReplace($text, "[':,.!?\x22]", ' '); alle Satzzeichen sowie Anführungszeichen in Leerzeichen umwandeln
$text = StringStripWS($text, 4); doppelte Leerzeichen entfernen
$text = StringStripCR($text); Zeilenumbrüche entfernen
$wortarray = StringSplit($text, ' '); Text in einzelne Wörter aufsplitten
Dim $haeufigkeit[UBound($wortarray)][2], $i = 1
While $i < UBound($wortarray) - 1; Schleife so lange durchlaufen bis alle Wörter analysiert wurden
$haeufigkeit[$i-1][0] = $wortarray[$i]; das zu analysierende Wort im Ausgabe-Array speichern
$haeufigkeit[$i-1][1] = 1; Vorkommen dieses Wortes auf 1 sezten
$j = $i + 1; Zählvariable auf das nächste Wort setzen
While $j < UBound($wortarray) - 1; Schleife so lange durchlaufen bis alle folgenden Wörter analysiert wurden
If $wortarray[$i] = $wortarray[$j] Then; Ist das nächste Wort ($j) gleich dem momentanen Wort ($i)
_ArrayDelete($wortarray, $j); dann den Array-Eintrag löschen und
$haeufigkeit[$i-1][1] += 1; das Vorkommen dieses Wortes um 1 erhöhen
EndIf
$j += 1; Schleifenzähler erhöhen
WEnd
$i += 1; Schleifenzähler erhöhen
WEnd
ReDim $haeufigkeit[$i-1][2]; Ausgabe-Array anpassen
_ArraySort($haeufigkeit, 1, 0, 0, 2, 1); Array sortieren
_ArrayDisplay($haeufigkeit); und ausgeben
EndFunc
So nebenbei habe ich noch das FileOpen-Problem behoben.
@xeno: Genial! Jetzt habe ich auch noch was gelernt.
Jetzt kann man das Fenster auch noch verschieben, wenn's im Weg rumsteht.
Wo findet man sowas?
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.
; by Ritzelrocker04 und Oscar
#include <GUIConstants.au3>
#include <String.au3>
#NoTrayIcon
$aNDrive = DriveGetDrive('FIXED')
Dim $aProgress[$aNDrive[0]], $aName[$aNDrive[0]]
;#################################################### - 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)
GuiSetState()
_Update()
AdlibEnable('_Update', 1000) ; Empfehlung AdlibEnable('_Update', 300000) = 5min
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
GUIDelete()
Exit
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
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
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")
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
Deine _Update-Funktion mit einer zusätzlichen Funktion (_DriveFree()) garniert.
Und wenn Du das Skript jetzt noch erweiterst, dass auch alle Festplatten angezeigt werden...