QuickLauncher

  • Es mag vielleicht schon 10000 verschiedene Variationen geben, allerdings haben die meisten meinen Ansprüchen nicht genügt, deshalb präsentiere ich hier meine Variante(die selbst meinen Ansprüchen noch nicht genügt ;) ). Man kann alle Texte des GUI und selbstverständlich auch die Belegung der Buttons wechseln. Das Prinzip beruht darauf, dass man Kategorien erstellen kann und diese mit einzelnen Aktionen belegen kann, sprich meinetwegen eine Kategorie Mathematik mit den Aktionen "Rechner starten, Excel aufrufen" oder sonst einer Aktion, die man vorher in der Form eines AutoIt-Codes eingeben kann.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.1.1 (beta)
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\program files (x86)\autoit3\scite\koda\forms\schule.kxf
    Global $sIniPath = @ScriptDir & "\Settings.ini", $aiTaskbar, $iWidth, $iHeight, $iLeft, $iTop, $Form1, $Form2, $sForm1, $sForm2, $sGroup1, $sGroup2, $sGroup3, $sGroup4, $sGroup5, _
    $sCombo1, $sCombo2, $sCombo3, $sButton1, $sButton2, $sButton3, $sButton4, $sButton5, $Input1, $Input2, $List1, $Button1, $Button2, $Button3, $Button4, $Button5, _
    $Edit1, $Combo1, $Combo2, $Combo3, $ahButtons
    INIT()
    Func INIT()
    Dim $aiTaskbar = WinGetPos("[CLASS:Shell_TrayWnd]")
    Dim $aiWArea = _GetWorkingArea()
    Dim $iWidth = 179, $iHeight = ((@DesktopHeight-@DesktopHeight) + $aiWArea[3]) - $aiTaskbar[3], $iLeft = @DesktopWidth - $iWidth, $iTop = 0, _
    $sForm1 = IniRead($sIniPath, "Settings", "sForm1", ""), $sForm2 = IniRead($sIniPath, "Settings", "sForm2", "Einstellungen"), _
    $sGroup1 = IniRead($sIniPath, "Settings", "sGroup1", "Modus auswählen"), $sGroup2 = IniRead($sIniPath, "Settings", "sGroup2", "Aktionen"), _
    $sGroup3 = IniRead($sIniPath, "Settings", "sGroup3", "Modi"), $sGroup4 = IniRead($sIniPath, "Settings", "sGroup4", "Aktionen"), _
    $sGroup5 = IniRead($sIniPath, "Settings", "sGroup5", "Beschriftung"), _
    $sCombo1 = IniRead($sIniPath, "Settings", "sCombo1", "Neuen Modus erstellen!"), $sCombo2 = IniRead($sIniPath, "Settings", "sCombo2", ""), _
    $sCombo3 = "sForm1|sForm2|Group1|Group2|Group3|Group4|Group5|Button1|Button2|Button3|Button4|Button5", _
    $sButton1 = IniRead($sIniPath, "Settings", "sButton1", "Einstellungen"), $sButton2 = IniRead($sIniPath, "Settings", "sButton2", "hinzufügen"), _
    $sButton3 = IniRead($sIniPath, "Settings", "sButton2", "entfernen"), $sButton4 = IniRead($sIniPath, "Settings", "sButton4", "OK"), _
    $sButton5 = IniRead($sIniPath, "Settings", "sButton5", "OK")
    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate($sForm1, $iWidth, $iHeight, $iLeft, $iTop)
    GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
    ;WinMove($sForm1, "", $iLeft, $iTop, $iWidth, $iHeight)
    $Group1 = GUICtrlCreateGroup($sGroup1, 8, 8, 161, 49)
    $asIniSections = IniReadSectionNames($sIniPath)
    If IsArray($asIniSections) Then
    $iIndex = _ArraySearch($asIniSections, "Settings")
    If Not @error Then
    _ArrayDelete($asIniSections, $iIndex)
    If IsArray($asIniSections) Then
    $sCombo1 = _ArrayToString($asIniSections, "|",1)
    EndIf
    EndIf
    EndIf
    If StringInStr($sCombo1, "|") Then
    $Combo1 = GUICtrlCreateCombo(StringLeft($sCombo1, StringInStr($sCombo1, "|") - 1), 16, 24, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData($Combo1, StringTrimLeft($sCombo1, StringInStr($sCombo1, "|")))
    Else
    $Combo1 = GUICtrlCreateCombo($sCombo1, 16, 24, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    EndIf
    GUICtrlSetOnEvent($Combo1, "Combo1Change")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup($sGroup2, 8, 64, 161, $iHeight - 125)
    Dim $ahButtons[1][3]
    If IsArray($asIniSections) And UBound($asIniSections) > 1 Then
    For $i = 1 To UBound($asIniSections) - 1
    $aSection = IniReadSection($sIniPath, $asIniSections[$i])
    _ArraySort($aSection,0,0,0,1)
    For $i2 = 1 To UBound($aSection) - 1
    $hButton = GUICtrlCreateButton($aSection[$i2][0], 17, 52+$i2*32,142,26,$WS_GROUP)
    GUICtrlSetOnEvent($hButton, "action")
    If $i <> 1 Then GUICtrlSetState($hButton, $GUI_HIDE)
    $UBound = UBound($ahButtons)
    ReDim $ahButtons[$UBound + 1][3]
    $ahButtons[$UBound][0] = $hButton
    $ahButtons[$UBound][1] = $aSection[$i2][0]
    $ahButtons[$UBound][2] = $asIniSections[$i]
    Next
    Next
    EndIf
    _ArrayDelete($ahButtons, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton($sButton1, 8, $iHeight - 50, 161, 17, $WS_GROUP)
    GUICtrlSetOnEvent($Button1, "Button1Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    #Region ### START Koda GUI section ### Form=C:\Program Files (x86)\AutoIt3\SciTE\Koda\Forms\Einstellungen.kxf
    $Form2 = GUICreate($sForm2, 405, 268, 266, 176, -1, -1, $Form1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
    $Group3 = GUICtrlCreateGroup($sGroup3, 8, 8, 169, 193)
    $Input1 = GUICtrlCreateInput("", 16, 24, 153, 21)
    GUICtrlSetOnEvent($Input1, "Input1Change")
    $Button2 = GUICtrlCreateButton($sButton2, 16, 48, 153, 17, $WS_GROUP)
    GUICtrlSetOnEvent($Button2, "Button2Click")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    ;$List1 = _GUICtrlListBox_Create($Form2, "", 16, 72, 153, 97)
    $List1 = GUICtrlCreateList("", 16, 72, 153, 97)
    GUICtrlSetOnEvent($List1, "List1Click")
    GUICtrlSetData($List1, $sCombo1)
    $Button3 = GUICtrlCreateButton($sButton3, 16, 176, 153, 17, $WS_GROUP)
    GUICtrlSetOnEvent($Button3, "Button3Click")
    GUICtrlSetState($Button3,$GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup($sGroup4, 184, 8, 209, 193)
    $Edit1 = GUICtrlCreateEdit("", 192, 48, 193, 121)
    GUICtrlSetOnEvent($Edit1, "Edit1Change")
    GUICtrlSetState($Edit1, $GUI_DISABLE)
    $Button4 = GUICtrlCreateButton($sButton4, 192, 176, 193, 17, $WS_GROUP)
    GUICtrlSetOnEvent($Button4, "Button4Click")
    GUICtrlSetState($Button4, $GUI_DISABLE)
    $Combo2 = GUICtrlCreateCombo($sCombo2, 192, 24, 193, 25)
    GUICtrlSetOnEvent($Combo2, "Combo2Change")
    GUICtrlSetState($Combo2, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group5 = GUICtrlCreateGroup($sGroup5, 8, 208, 385, 49)
    $Combo3 = GUICtrlCreateCombo("", 16, 224, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData($Combo3, $sCombo3, StringTrimRight($sCombo3,StringInStr($sCombo3,"|") - 1))
    GUICtrlSetOnEvent($Combo3, "Combo3Change")
    $Input2 = GUICtrlCreateInput("", 168, 224, 145, 21)
    GUICtrlSetOnEvent($Input2, "Input2Change")
    $Button5 = GUICtrlCreateButton($sButton5, 320, 224, 65, 25, $WS_GROUP)
    GUICtrlSetOnEvent($Button5, "Button5Click")
    GUICtrlSetState($Button5, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    #EndRegion ### END Koda GUI section ###
    EndFunc ;==>INIT
    While 1
    Sleep(100)
    WEnd

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

    Func quit()
    Exit
    EndFunc ;==>quit
    Func Button1Click()
    GUISetState(@SW_SHOW, $Form2)
    EndFunc ;==>Button1Click
    Func Button2Click()
    Local $sInput = GUICtrlRead($Input1)
    $iIndex = _GUICtrlListBox_FindString($List1, $sInput)
    If $iIndex == -1 Then
    _GUICtrlListBox_BeginUpdate($List1)
    _GUICtrlListBox_AddString($List1, $sInput)
    _GUICtrlListBox_EndUpdate($List1)
    Else
    _GUICtrlListBox_SetSel($List1, $iIndex)
    EndIf
    GUICtrlSetData($Input1, "")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndFunc ;==>Button2Click
    Func Button3Click()
    $iSel = _GUICtrlListBox_GetCurSel($List1)
    If $iSel <> "-1" Then
    IniDelete($sIniPath, _GUICtrlListBox_GetText($List1, $iSel))
    _GUICtrlListBox_BeginUpdate($List1)
    _GUICtrlListBox_DeleteString($List1, $iSel)
    _GUICtrlListBox_EndUpdate($List1)
    GUICtrlSetData($Combo2, "")
    GUICtrlSetData($Edit1, "")
    GUICtrlSetState($Combo2,$GUI_DISABLE)
    GUICtrlSetState($Edit1,$GUI_DISABLE)
    GUICtrlSetState($Button4,$GUI_DISABLE)
    EndIf
    EndFunc ;==>Button3Click
    Func Button4Click()
    If GUICtrlRead($Combo2) == "" Then Return
    $Action = GUICtrlRead($Edit1)
    If $Action <> "" Then
    IniWrite($sIniPath, GUICtrlRead($List1), GUICtrlRead($Combo2), _StringEscape($Action))
    Else
    IniDelete($sIniPath, GUICtrlRead($List1), GUICtrlRead($Combo2))
    INIT()
    GUISetState(@SW_SHOW,$Form2)
    EndIf
    EndFunc ;==>Button4Click
    Func Button5Click()
    IniWrite($sIniPath, "Settings", GUICtrlRead($Combo3), GUICtrlRead($Input2))
    EndFunc ;==>Button5Click
    Func Combo1Change()
    For $i2 = 0 To UBound($ahButtons) - 1
    GUICtrlSetState($ahButtons[$i2][0], $GUI_HIDE)
    Next
    $Section = GUICtrlRead($Combo1)
    $aSection = IniReadSection($sIniPath, $Section)
    For $i = 1 To UBound($aSection) - 1
    For $i2 = 0 To UBound($ahButtons) - 1
    If $ahButtons[$i2][2] == $Section Then GUICtrlSetState($ahButtons[$i2][0], $GUI_SHOW)
    Next
    Next
    EndFunc ;==>Combo1Change
    Func Combo2Change()
    If GUICtrlRead($Combo2) == "" Then
    ;GUICtrlSetState($Edit1, $GUI_DISABLE)
    ;GUICtrlSetState($Button4, $GUI_DISABLE)
    Else
    $Data = IniRead($sIniPath, GUICtrlRead($List1), GUICtrlRead($Combo2), "")
    ;GUICtrlSetState($Edit1, $GUI_ENABLE)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    GUICtrlSetData($Edit1, $Data)
    EndIf
    EndFunc ;==>Combo2Change
    Func Combo3Change()
    If GUICtrlRead($Combo3) <> "" Then
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetState($Button5, $GUI_ENABLE)
    Else
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetState($Button5, $GUI_DISABLE)
    EndIf
    EndFunc ;==>Combo3Change
    Func Edit1Change()

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

    EndFunc ;==>Edit1Change
    Func Form2Close()
    GUISetState(@SW_HIDE, $Form2)
    GUIDelete($Form2)
    GUIDelete($Form1)
    INIT()
    EndFunc ;==>Form2Close
    Func Input1Change()
    Local $sInput = GUICtrlRead($Input1)
    If $sInput == "Settings" Then
    GUICtrlSetData($Input1, "")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    Else
    GUICtrlSetState($Button2, $GUI_ENABLE)
    EndIf
    EndFunc ;==>Input1Change
    Func Input2Change()
    EndFunc ;==>Input2Change
    Func List1Click()
    $sSel = GUICtrlRead($List1)
    $aActions = IniReadSection($sIniPath, $sSel)
    $sString = ""
    GUICtrlSetData($Combo2, "")
    If Not @error And IsArray($aActions) And UBound($aActions) > 1 Then
    For $i = 1 To UBound($aActions) - 1
    $sString &= "|" & $aActions[$i][0]
    Next
    GUICtrlSetData($Combo2, $sString, $aActions[1][0])
    EndIf
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Combo2, $GUI_ENABLE)
    GUICtrlSetState($Edit1, $GUI_ENABLE)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    Combo2Change()
    $aSection = IniReadSection($sIniPath, $sSel)
    EndFunc ;==>List1Click
    Func action()
    If IsArray($ahButtons) Then
    $Section = GUICtrlRead($Combo1)
    $CTRL = @GUI_CtrlId
    $Key = GUICtrlRead($CTRL)
    $Action = IniRead($sIniPath, $Section, $Key, "")
    If $Action <> "" Then
    $Action = StringFormat($Action)
    _RunPlugIn($Action)
    EndIf
    EndIf
    EndFunc ;==>action
    Func _StringEscape($String)
    Local $escaping[5][2] = [['%', '%%'],['\', '\\'],[@CR, '\r'],[@LF, '\n'],[@TAB, '\t']]
    For $i = 0 To UBound($escaping) - 1
    $String = StringReplace($String, $escaping[$i][0], $escaping[$i][1]);,0,1)
    Next
    Return $String
    EndFunc ;==>_StringEscape
    ;===============================================================================
    ;
    ; Function Name: _GetWorkingArea()
    ; Description: Returns the coordinates of desktop working area rectangle
    ; Parameter(s): None
    ; Return Value(s): On Success - Array containing coordinates:
    ; $a[0] = left
    ; $a[1] = top
    ; $a[2] = right
    ; $a[3] = bottom
    ; On Failure - 0
    ;
    ;BOOL WINAPI SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
    ;uiAction SPI_GETWORKAREA = 48
    ;===============================================================================
    Func _GetWorkingArea()
    Local Const $SPI_GETWORKAREA = 48
    Local $stRECT = DllStructCreate("long; long; long; long")
    Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", _
    "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
    If @error Then Return 0
    If $SPIRet[0] = 0 Then Return 0

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

    Local $sLeftArea = DllStructGetData($stRECT, 1)
    Local $sTopArea = DllStructGetData($stRECT, 2)
    Local $sRightArea = DllStructGetData($stRECT, 3)
    Local $sBottomArea = DllStructGetData($stRECT, 4)

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

    Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
    Return $aRet
    EndFunc ;==>_GetWorkingArea
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _RunPlugIn
    ; Description ...: Führt einen Plug-In aus
    ; Syntax.........: _RunPlugIn($Source)
    ; Parameters ....: $Source - Source in AutoIt
    ; Author ........: Burak Keskin <[email='Burak.keskin@arcor.de'][/email]>
    ; ===============================================================================================================================
    Func _RunPlugIn($Source)

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

    Local $StartLoop_Line, $EndLoop_Line

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

    $Split1 = StringSplit($Source, @LF)

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

    For $NextLoop1 = 1 To $Split1[0]

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

    $Split2 = StringSplit($Split1[$NextLoop1], "=")
    $Split3 = StringSplit($Split1[$NextLoop1], " ")
    ;---------------------------------------------------------------------------------------------------------------
    ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ;---------------------------------------------------------------------------------------------------------------
    If $Split3[1] <> "For" And $Split3[1] <> "If" Then
    If $Split2[0] > 1 Then
    Assign(StringTrimLeft(StringTrimRight($Split2[1], 1), 1), Execute(StringTrimLeft(StringReplace($Split2[2], @CR, ""), 1)))
    ElseIf $Split2[0] = 1 Then
    Execute(StringReplace($Split1[$NextLoop1], @CR, ""))
    EndIf
    EndIf
    ;---------------------------------------------------------------------------------------------------------------
    ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ;---------------------------------------------------------------------------------------------------------------
    If $Split3[1] = "For" Then
    $StartLoop_Line = $NextLoop1
    For $NextLoop2 = $StartLoop_Line To $Split1[0]
    If StringInStr($Split1[$NextLoop2], "Next") Then
    $EndLoop_Line = $NextLoop2
    ExitLoop
    EndIf
    Next
    $From = $Split3[4]
    $To = $Split3[6]
    $StartLoop_Line += 1
    $EndLoop_Line -= 1
    $VarName = $Split3[2]
    For $FNLoop = Number($From) To Number($To)
    For $NextLoop3 = Number($StartLoop_Line) To Number($EndLoop_Line)
    Execute(StringReplace($Split1[$NextLoop3], @CR, ""))
    Next
    Next
    $NextLoop1 = $EndLoop_Line
    EndIf
    ;---------------------------------------------------------------------------------------------------------------
    ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ;---------------------------------------------------------------------------------------------------------------
    If $Split3[1] = "If" Then
    $StartLoop_Line2 = $NextLoop1
    For $NextLoop2 = $StartLoop_Line To $Split1[0]
    If StringInStr($Split1[$NextLoop2], "EndIf") Then
    $EndLoop_Line2 = $NextLoop2
    ExitLoop
    EndIf
    Next
    $Var1 = $Split3[2]
    $Var2 = $Split3[4]
    $StartLoop_Line2 += 1
    $EndLoop_Line2 -= 1
    $IfType = $Split3[3]
    If StringLeft(Eval("Var1"), 1) = "$" Then
    $Var1 = Eval(StringTrimLeft(Eval("Var1"), 1))
    Else
    $Var1 = Eval("Var1")
    EndIf
    If StringLeft(Eval("Var2"), 1) = "$" Then
    $Var2 = Eval(StringTrimLeft(Eval("Var2"), 1))
    Else
    $Var2 = Eval("Var2")
    EndIf
    If $IfType = "=" Then
    If String($Var1) = String($Var2) Then
    For $NextLoop4 = $StartLoop_Line2 To $EndLoop_Line2
    Execute(StringReplace($Split1[$NextLoop4], @CR, ""))
    Next
    EndIf
    ElseIf $IfType = "<" Then
    If String($Var1) < String($Var2) Then
    For $NextLoop4 = $StartLoop_Line2 To $EndLoop_Line2
    Execute(StringReplace($Split1[$NextLoop4], @CR, ""))
    Next
    EndIf
    ElseIf $IfType = ">" Then
    If String($Var1) > String($Var2) Then
    For $NextLoop4 = $StartLoop_Line2 To $EndLoop_Line2
    Execute(StringReplace($Split1[$NextLoop4], @CR, ""))
    Next
    EndIf
    ElseIf $IfType = "<>" Then
    If String($Var1) <> String($Var2) Then
    For $NextLoop4 = $StartLoop_Line2 To $EndLoop_Line2
    Execute(StringReplace($Split1[$NextLoop4], @CR, ""))
    Next
    EndIf
    EndIf
    $NextLoop1 = $EndLoop_Line2
    EndIf
    ;---------------------------------------------------------------------------------------------------------------
    ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ;---------------------------------------------------------------------------------------------------------------
    If $Split3[1] = "While" Then

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

    EndIf

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

    Next
    EndFunc ;==>_RunPlugIn

    [/autoit]


    Verbesserungswürdig ist noch die Größenanpassung der GUI(Window-Snap beabsichtigt uvm)
    autoit.de/wcf/attachment/6750/