#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=SpaceBar.ico
#AutoIt3Wrapper_Allow_Decompile=n
#AutoIt3Wrapper_Res_Description=SpaceBar
#AutoIt3Wrapper_Res_Fileversion=3.2.0.2
#AutoIt3Wrapper_Res_LegalCopyright=Ritzelrocker04, Xenobiologist, Oscar and Prog@ndy
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; by Ritzelrocker04, Xenobiologist, Oscar and Prog@ndy
Opt('MustDeclareVars', 1)
;[Includes]
#include<Array.au3>
#include<GUIConstants.au3>
#include<String.au3>
#include <Misc.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


Global $bREMOVABLE = IniRead(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'REMOVABLE', False)
Global $bFIXED = IniRead(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'FIXED', True)
Global $bCDROM = IniRead(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'CDROM', False)
Global $bNETWORK = IniRead(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'NETWORK', True)
Global $bRAMDISK = IniRead(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'RAMDISK', False)

Global $aFDrive[1]
If Execute($bFIXED) Then $aFDrive = DriveGetDrive('FIXED')
If Execute($bNETWORK) Then 
    Dim $aNDrive = DriveGetDrive('NETWORK')
    If IsArray($aNDrive) Then
        For $i = 1 To $aNDrive[0]
            _ArrayAdd($aFDrive, $aNDrive[$i])
            $aFDrive[0] += 1
        Next
    EndIf
EndIf
If Execute($bREMOVABLE) Then 
    Dim $aNDrive = DriveGetDrive('REMOVABLE')
    If IsArray($aNDrive) Then
        For $i = 1 To $aNDrive[0]
            If $aNDrive[$i] = "a:" Then ContinueLoop
            _ArrayAdd($aFDrive, $aNDrive[$i])
            $aFDrive[0] += 1
        Next
    EndIf
EndIf
If Execute($bCDROM) Then 
    Dim $aNDrive = DriveGetDrive('CDROM')
    If IsArray($aNDrive) Then
        For $i = 1 To $aNDrive[0]
            _ArrayAdd($aFDrive, $aNDrive[$i])
            $aFDrive[0] += 1
        Next
    EndIf
EndIf
If Execute($bRAMDISK) Then 
    Dim $aNDrive = DriveGetDrive('RAMDISK')
    If IsArray($aNDrive) Then
        For $i = 1 To $aNDrive[0]
            _ArrayAdd($aFDrive, $aNDrive[$i])
            $aFDrive[0] += 1
        Next
    EndIf
EndIf

Global $iPosY = IniRead(@ScriptDir & '\SpaceBar.ini', 'Pos', 'iPosY', 27)
Global $bHide = IniRead(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bHide', True)
Global $bAutostart = IniRead(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bAutostart', False)
If Execute($bAutostart) And @Compiled Then
	FileCreateShortcut(@AutoItExe, @StartupDir & '\SpaceBar.lnk', '', 'SpaceBar')
Else
	FileDelete(@StartupDir & '\SpaceBar.lnk')
EndIf
Global $cGUIColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cGUIColor', 0x444444)
Global $cBarColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cBarColor', 0xBBBBBB)
Global $cGBColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cGBColor', 0xBBBBBB)
Global $cTextColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cTextColor', 0xBBBBBB)
Global $cTextBGColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cTextBGColor', 0x444444)
Global $cWarnColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cWarnColor', 0xDD0000)
Global $cAttentionColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cAttentionColor', 0xEE8800)
Global $cOKColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cOKColor', 0x00CC00)
Global $cCloseBGColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cCloseBGColor', 0xDD0000)
Global $cCloseXColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cCloseXColor', 0xFFFFFF)
Global $cProgressFrontColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressFrontColor', 0xAAAA00)
Global $cProgressFrontGradColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressFrontGradColor', 0xFF0000)
Global $cProgressBGColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressBGColor', 0x00CC00)
Global $cProgressBGEndColor = IniRead(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressBGEndColor', 0x00FF00)

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]]
For $i = 0 To $aFDrive[0] - 1
	$aZwischenspeicher[$i] = -1; ist notwendig, damit der Text auch bei CDROMs angezeigt wird (CDROM = 0% frei) 
Next
Global $aZwischenspeicher2[$aFDrive[0]]
Global $GUI = GUICreate('SpaceBar v 3.2', 380, 8 + $aFDrive[0] * 50, @DesktopWidth - 382, $iPosY, $WS_POPUP+$WS_BORDER,  BitOr($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBKColor($cGUIColor); Hintergrundfarbe des Fensters

;GUICtrlCreatePic(@ScriptDir & '\bg.png',0,0,500,500)
Global $Colors = _Gradient($cProgressBGColor,$cProgressBGEndColor, $aFDrive[0]*2)
Global $hider = GUICtrlCreateLabel(_StringRepeat(':: ', $aFDrive[0] * 4),0,0,6,10 + $aFDrive[0] * 50)
GUICtrlSetBkColor(-1, $cBarColor); Hintergrundfarbe der Seiten-Leiste
Dim $k = 0
For $i = 0 To $aFDrive[0] - 1
				Switch DriveGetType($aFDrive[$i+1])
					Case "RAMDisk"
						$icon = -13
					Case "CDROM"
						$icon = -12
					Case "Removable"
						$icon = -8
					Case "Fixed"
						$icon = -9
					Case "Network"
						$icon = -10
				EndSwitch
        GUICtrlCreateIcon(@SystemDir & "\shell32.dll", $icon, 12, 2 + $i * 50, 32, 32)
    $aProgress[$i] = _ProgressCreate(52, 8 + $i * 50, 230, 20,$cProgressFrontColor,$cProgressFrontGradColor,$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, $cGBColor); Farbe der GB-Zahl
    $k+=2
    $aName[$i] = GUICtrlCreateLabel('', 52, 30 + $i * 50, 230, 21)
    GUICtrlSetFont(-1,8,800,0,'Arial')
        GUICtrlSetColor(-1, $cTextColor); Farbe der Beschriftung unter der Progressbar
        GUICtrlSetBkColor(-1, $cTextBGColor); Farbe des Hintergrundes 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 $optitem = GUICtrlCreateMenuItem('Optionen', $trackmenu)
        GUICtrlCreateMenuItem('', $trackmenu)
        Global $exititem = GUICtrlCreateMenuItem('Exit', $trackmenu)
Dim $aExit = GUICtrlCreateLabel('X',367,0,13,13,$ES_CENTER) ; Label als Exit-Button
GUICtrlSetState($aExit,$GUI_ONTOP)
    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-7,Default)

GUISetState()

While 1
    $msg = GUIGetMsg()
        Select
            Case $msg = $exititem Or $msg = -3 Or $msg = -1 Or $msg = $aExit
                $aPos = WinGetPos($GUI)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'iPosY', $aPos[1])
                Exit
            Case $msg = $hider
                If $hidden Then 
                    WinMove($gui,'',@DesktopWidth-382,Default)
                Else
                    WinMove($gui,'',@DesktopWidth-7,Default)
                EndIf
                $hidden = Not $hidden
            Case $msg = $optitem
                _OptionGUI()
            Case $msg = $aboutitem
                MsgBox(64, 'About', 'SpaceBar v 3.2.0.3 Build 2007-12-18/29 ' & @CRLF & '' & @CRLF & 'In Zusammenarbeit mit: ' & @CRLF & 'Ritzelrocker04, Oscar, Xenobiologist ' & @CRLF & 'Peethebee, Prog@ndy ' & @CRLF & 'Thx an das www.Autoit.de Team ')
        EndSelect
WEnd
    

Func _Update()
    For $i = 0 To $aFDrive[0] - 1
        $aVol = _DriveFree($aFDrive[$i + 1])
				If $aVol[2] = 0 Then $aVol[0] = 100
				If ($aZwischenspeicher[$i] = $aVol[2]) And ($aZwischenspeicher2[$i] = $aVol[3]) Then ContinueLoop
        $aZwischenspeicher[$i] = $aVol[2]
        $aZwischenspeicher2[$i] = $aVol[3]
				GUICtrlSetData($aProzent[$i],StringReplace(Round(100-$aVol[0]+0.0001, 2),'.',',') & '% frei')
        If $aVol[3]/1024 < 20.9 Then 
        Select
            Case $aVol[0] >= 60
                GUICtrlSetColor($aProzent[$i],$cWarnColor)
            Case $aVol[0] < 60 And $aVol[0] > 40
                GUICtrlSetColor($aProzent[$i],$cAttentionColor)
            Case $aVol[0] <= 40
                GUICtrlSetColor($aProzent[$i],$cOKColor)
        EndSelect
        Else
        Select
            Case Round(Number($aVol[2])/1024) < 5
                GUICtrlSetColor($aProzent[$i],$cWarnColor)
            Case Round(Number($aVol[2])/1024) <= 10
                GUICtrlSetColor($aProzent[$i],$cAttentionColor)
            Case Else
                GUICtrlSetColor($aProzent[$i],$cOKColor)
        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) + 0.0001, 2), _
		StringUpper($LW) & ' (' & DriveGetLabel($LW) & ')', _
		Round($FREE, 2), $TOTAL]
    Return $aDrive
EndFunc   ;==>_DriveFree

;Author: Progndy
Func _OptionGUI()
    
    #Region ### START Koda GUI section ### Form=D:\Dokumente\Dateien von Andreas\OptGUI.kxf
    Local $OptGUI = GUICreate("SpaceBar Optionen", 316, 441, 458, 122)
    GUISetIcon(@SystemDir & "\shell32.dll", -58)
    Local $Tab1 = GUICtrlCreateTab(0, 0, 313, 401)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    Local $tabMisc = GUICtrlCreateTabItem("Optionen")
		Local $chkAutostart = GUICtrlCreateCheckbox("Mit Windows starten", 40, 38, 249, 25)
    If Execute($bAutostart) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $chkHideOnStart = GUICtrlCreateCheckbox("Versteckt Starten", 40, 68, 249, 25)
    If Execute($bHide) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $grpDrives = GUICtrlCreateGroup("Laufwerkstypen", 24, 116, 265, 185)
    GUICtrlSetBkColor(-1, 0xFFFBF0)
    Local $chkCDROM = GUICtrlCreateCheckbox("CD- und DVD- Laufwerke", 40, 140, 225, 25)
    If Execute($bCDROM) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $chkREMOVABLE = GUICtrlCreateCheckbox("Wechseldatenträger", 40, 170, 225, 25)
    If Execute($bREMOVABLE) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $chkFixed = GUICtrlCreateCheckbox("Festplatten", 40, 200, 225, 25)
    If Execute($bFIXED) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $chkNETWORK = GUICtrlCreateCheckbox("Netzlaufwerke", 40, 230, 225, 25)
    If Execute($bNETWORK) Then GUICtrlSetState(-1,$GUI_CHECKED)
    Local $chkRAMDISK = GUICtrlCreateCheckbox("RamDisks", 40, 260, 225, 25)
    If Execute($bRAMDISK) Then GUICtrlSetState(-1,$GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetTip(-1, "Laufwerke, die angezeigt werden sollen")
    Local $tabColor = GUICtrlCreateTabItem("Farben")
    GUICtrlSetState(-1,$GUI_SHOW)
    Local $btnGUI = GUICtrlCreateButton("GUI-Hintergrund", 24, 40, 121, 25, 0)
    Local $btnBar = GUICtrlCreateButton("Hide-Bar", 24, 65, 121, 25, 0)
    Local $btnGB = GUICtrlCreateButton("GB-Label", 24, 89, 121, 25, 0)
    Local $btnText = GUICtrlCreateButton("Info-Text", 24, 114, 121, 25, 0)
    Local $btnTextBG = GUICtrlCreateButton("Info-Text Hintergrund", 24, 138, 121, 25, 0)
    Local $btnWarn = GUICtrlCreateButton("Warnfarbe", 24, 163, 121, 25, 0)
    Local $btnAttention = GUICtrlCreateButton("Achtung-Farbe", 24, 188, 121, 25, 0)
    Local $btnOKColor = GUICtrlCreateButton("OK-Farbe", 24, 212, 121, 25, 0)
    Local $btnCloseBG = GUICtrlCreateButton("Schileßen Hintergrung", 24, 237, 121, 25, 0)
    Local $btnCloseX = GUICtrlCreateButton("Schließen X", 24, 262, 121, 25, 0)
    Local $btnProgress = GUICtrlCreateButton("Progressbar", 24, 286, 121, 25, 0)
    Local $btnProgressGrad = GUICtrlCreateButton("Progressbar Verlauf", 24, 311, 121, 25, 0)
    Local $btnProgressBG = GUICtrlCreateButton("Progress BG", 24, 335, 121, 25, 0)
    Local $btnProgressBGGrad = GUICtrlCreateButton("Progress BG Verlauf", 24, 360, 121, 25, 0)
    Local $grGUI = GUICtrlCreateLabel("",168, 43, 65, 19)
    GUICtrlSetBkColor(-1,$cGUIColor)
    Local $grBar = GUICtrlCreateLabel("",168, 68, 65, 19)
    GUICtrlSetBkColor(-1,$cBarColor)
    Local $grGB = GUICtrlCreateLabel("",168, 92, 65, 19)
    GUICtrlSetBkColor(-1,$cGBColor)
    Local $grText = GUICtrlCreateLabel("",168, 117, 65, 19)
    GUICtrlSetBkColor(-1,$cTextColor)
    Local $grTextBG = GUICtrlCreateLabel("",168, 141, 65, 19)
    GUICtrlSetBkColor(-1,$cTextBGColor)
    Local $grWarn = GUICtrlCreateLabel("",168, 166, 65, 19)
    GUICtrlSetBkColor(-1,$cWarnColor)
    Local $grAttention = GUICtrlCreateLabel("",168, 191, 65, 19)
    GUICtrlSetBkColor(-1,$cAttentionColor)
    Local $grOKColor = GUICtrlCreateLabel("",168, 215, 65, 19)
    GUICtrlSetBkColor(-1,$cOKColor)
    Local $grCloseBG = GUICtrlCreateLabel("",168, 240, 65, 19)
    GUICtrlSetBkColor(-1,$cCloseBGColor)
    Local $grCloseX = GUICtrlCreateLabel("",168, 265, 65, 19)
    GUICtrlSetBkColor(-1,$cCloseXColor)
    Local $grProgress = GUICtrlCreateLabel("",168, 289, 65, 19)
    GUICtrlSetBkColor(-1,$cProgressFrontColor)
    Local $grProgressGrad = GUICtrlCreateLabel("",168, 314, 65, 19)
    GUICtrlSetBkColor(-1,$cProgressFrontGradColor)
    Local $grProgressBG = GUICtrlCreateLabel("",168, 338, 65, 19)
    GUICtrlSetBkColor(-1,$cProgressBGColor)
    Local $grProgressBGGrad = GUICtrlCreateLabel("",168, 363, 65, 19)
    GUICtrlSetBkColor(-1,$cProgressBGEndColor)
    GUICtrlCreateTabItem("")
    Local $btnOK = GUICtrlCreateButton("OK + Neustart", 24, 408, 105, 25, 0)
    Local $btnCancel = GUICtrlCreateButton("Abbrechen", 152, 408, 113, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    Local  $nMsg
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                GUIDelete($OptGUI)
                ExitLoop
            Case $btnCancel
                GUIDelete($OptGUI)
                ExitLoop
            Case $btnAttention
                $cAttentionColor = _ChooseColor(2,$cAttentionColor,2)
                GUICtrlSetBkColor($grAttention,$cAttentionColor)
            Case $btnWarn
                $cWarnColor = _ChooseColor(2,$cWarnColor,2)
                GUICtrlSetBkColor($grWarn,$cWarnColor)
            Case $btnGUI
                $cGUIColor = _ChooseColor(2,$cGUIColor,2)
                GUICtrlSetBkColor($grGUI,$cGUIColor)
            Case $btnBar
                $cBarColor = _ChooseColor(2,$cBarColor,2)
                GUICtrlSetBkColor($grBar,$cBarColor)
            Case $btnGB
                $cGBColor = _ChooseColor(2,$cGBColor,2)
                GUICtrlSetBkColor($grGB,$cGBColor)
            Case $btnText
                $cTextColor = _ChooseColor(2,$cTextColor,2)
                GUICtrlSetBkColor($grText,$cTextColor)
            Case $btnTextBG
                $cTextBGColor = _ChooseColor(2,$cTextBGColor,2)
                GUICtrlSetBkColor($grTextBG,$cTextBGColor)
            Case $btnOKColor
                $cOKColor= _ChooseColor(2,$cOKColor,2)
                GUICtrlSetBkColor($grOKColor,$cOKColor)
            Case $btnCloseBG
                $cCloseBGColor= _ChooseColor(2,$cCloseBGColor,2)
                GUICtrlSetBkColor($grCloseBG,$cCloseBGColor)
            Case $btnCloseX
                $cCloseXColor= _ChooseColor(2,$cCloseXColor,2)
                GUICtrlSetBkColor($grCloseX,$cCloseXColor)
            Case $btnProgress
                $cProgressFrontColor= _ChooseColor(2,$cProgressFrontColor,2)
                GUICtrlSetBkColor($grProgress,$cProgressFrontColor)
            Case $btnProgressGrad
                $cProgressFrontGradColor= _ChooseColor(2,$cProgressFrontGradColor,2)
                GUICtrlSetBkColor($grProgressGrad,$cProgressFrontGradColor)
            Case $btnProgressBG
                $cProgressBGColor= _ChooseColor(2,$cProgressBGColor,2)
                GUICtrlSetBkColor($grProgressBG,$cProgressBGColor)
            Case $btnProgressBGGrad
                $cProgressBGEndColor= _ChooseColor(2,$cProgressBGEndColor,2)
                GUICtrlSetBkColor($grProgressBGGrad,$cProgressBGEndColor)
            Case $btnOK
                ;$bHide = False
                ;If BitAND(GUICtrlRead($chkHideOnStart), $GUI_CHECKED) Then $bHide = True
								If (BitAND(GUICtrlRead($chkAutostart), $GUI_CHECKED)) And (@Compiled = 1) Then
									FileCreateShortcut(@AutoItExe, @StartupDir & '\SpaceBar.lnk', '', 'SpaceBar')
								Else
									FileDelete(@StartupDir & '\SpaceBar.lnk')
								EndIf
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'REMOVABLE', BitAND(GUICtrlRead($chkREMOVABLE), $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'FIXED', BitAND(GUICtrlRead($chkFixed) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'CDROM', BitAND(GUICtrlRead($chkCDROM) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'NETWORK', BitAND(GUICtrlRead($chkNETWORK) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'DriveTypes', 'RAMDISK', BitAND(GUICtrlRead($chkRAMDISK) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bHide', BitAND(GUICtrlRead($chkHideOnStart) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'bAutostart', BitAND(GUICtrlRead($chkAutostart) , $GUI_CHECKED))
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cGUIColor', $cGUIColor);0x444444)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cBarColor', $cBarColor);0xBBBBBB)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cGBColor', $cGBColor);0xBBBBBB)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cTextColor', $cTextColor);0xBBBBBB)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cTextBGColor', $cTextBGColor);0x666666)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cWarnColor', $cWarnColor);0xDD0000)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cAttentionColor', $cAttentionColor);0xEE8800)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cOKColor', $cOKColor);0x00CC00)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cCloseBGColor', $cCloseBGColor);0xDD0000)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cCloseXColor', $cCloseXColor);0xFFFFFF)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressFrontColor', $cProgressFrontColor);0xAAAA00)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressFrontGradColor', $cProgressFrontGradColor);0xFF0000)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressBGColor', $cProgressBGColor);0x00CC00)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Color', 'cProgressBGEndColor', $cProgressBGEndColor);0x00FF00)
                $aPos = WinGetPos($GUI)
                IniWrite(@ScriptDir & '\SpaceBar.ini', 'Pos', 'iPosY', $aPos[1])
                GUIDelete($OptGUI)
                If Not @Compiled Then
										Run('"' & @AutoItExe & '" ' & @ScriptFullPath)
                Else
                    Run(@AutoItExe)
                EndIf
                Exit
                ExitLoop
        EndSwitch
    WEnd
EndFunc


;-------------------------------------------------------------------
#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.php?s=&showtopic=60192&view=findpost&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
;-------------------------------------------------------------------