Run.Me - Multipler Programmstarter

  • Hiho,

    nachdem ich für die Arbeit ein Tool geschrieben habe, welche sich bei verschiedenen Programmen automatisch anmeldet, hatte ich eigentlich auch immer im Hinterkopf, ein Programm zu entwickeln, dass zum Autostart vom sämtlichen Programmen verwendet werden kann. Das habe ich nun endlich abgeschlossen.

    Das Tool ermöglicht, nach der Konfiguration eines Programmes, dieses z. B. mit Login zu starten. Zusätzlich können aber auch alle anderen Dateitypen gestartet werden. Somit hätte man die Verknüpfungen hierzu nicht irgendwo auf dem Desktop, sondern in diesem Tool gebündelt. Es ist z. B. auch möglich, Passwortgeschützt Excel-Dokumente direkt öffnen zu lassen.

    Die Daten werden in einer DB gepflegt und in einem ListView angezeigt. Das PW ist verschlüsselt. Um zu verhindern, dass es durch Fehler zu Verzögerungen kommt, werden die Dateien über eine 2. Datei aufgerufen. Damit der Login funktioniert, muss der User neben Name und Passwort, auch selber die Controls bestimmen. Daher sicherlich nur für versierte Benutzer zu empfehlen ... aber die können damit sicher was anfangen.

    Main-Programm:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\..\..\Icons\Feed.ico
    #AutoIt3Wrapper_Compression=4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <String.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <GuiTab.au3>
    #include <StructureConstants.au3>
    #include <Constants.au3>
    #include <GuiListView.au3>
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StatusBarConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <SQLite.dll.au3>
    #include <SQLite.au3>
    #include <Process.au3>
    #Include <Misc.au3>

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

    ;Tooltips
    ;Reihenfolge der Sortierung im ListView speichern
    ;Statusbar-Infos

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

    ;~ Opt("OnExitFunc","OnAutoItExit")
    Opt("GUICloseOnESC", 0)
    Opt("GUIOnEventMode", 1)
    Opt("TrayAutoPause", 0) ;0=no pause, 1=Pause
    Opt("TrayIconDebug", 0) ;0=no info, 1=debug line info
    Opt("TrayMenuMode", 1) ;0=append, 1=no default menu, 2=no automatic check, 4=menuitemID not return
    Opt("TrayOnEventMode", 1) ;0=disable, 1=enable

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

    TraySetClick(8)
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "_ToogleWindow")

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

    Global $ChangeToolFlag = False, $aRow, $Autostart = 0, $Autostart_On = False, $ShowGui = 0
    $key = Log(986543568)

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    Global $hListView, $B_DESCENDING

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

    Local $aParts[2] = [100, -1]
    Local $aText[2] = [@TAB & "", @TAB & " © sc4ry "]

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

    If Not FileExists(@ScriptDir & "\_Run.exe") Then FileInstall("_Run.exe", "_Run.exe")

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

    $sSQliteDll = _SQLite_Startup()
    If @error > 0 Then
    MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!", 5)
    Exit -1
    EndIf

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Run.Me V. 0.1", IniRead("Settings.ini", "Pos", "w", "171"), IniRead("Settings.ini", "Pos", "h", "371"), IniRead("Settings.ini", "Pos", "x", "-1"), IniRead("Settings.ini", "Pos", "y", "-1"), BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), BitOR($WS_EX_WINDOWEDGE, $WS_EX_TOOLWINDOW))
    GUISetOnEvent($GUI_EVENT_CLOSE, "_ToogleHide")
    ;~ GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $Tab1 = GUICtrlCreateTab(0, 0, IniRead("Settings.ini", "Pos", "w", "171") - 2, IniRead("Settings.ini", "Pos", "h", "371") - 18)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $TabSheet1 = GUICtrlCreateTabItem("Tools")
    $ListView1 = GUICtrlCreateListView("", 4, 27, IniRead("Settings.ini", "Pos", "w", "171") - 10, IniRead("Settings.ini", "Pos", "h", "371") - 50)
    _GUICtrlListView_AddColumn($ListView1, "", IniRead("Settings.ini", "ColumnWidth", "Column0", "25"))
    _GUICtrlListView_AddColumn($ListView1, "ID", IniRead("Settings.ini", "ColumnWidth", "Column1", "30"))
    _GUICtrlListView_AddColumn($ListView1, "Ext", IniRead("Settings.ini", "ColumnWidth", "Column2", "30"))
    _GUICtrlListView_AddColumn($ListView1, "Name", IniRead("Settings.ini", "ColumnWidth", "Column3", "72"))
    _GUICtrlListView_SetColumnOrder($ListView1, IniRead("Settings.ini", "ColumnOrder", "Order", "0|1|2|3"))
    _GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $CMenu1 = GUICtrlCreateContextMenu($ListView1)
    $CMenu1_1 = GUICtrlCreateMenuItem("add", $CMenu1)
    GUICtrlSetOnEvent(-1, "_Add_Tool")
    $CMenu1_2 = GUICtrlCreateMenuItem("change", $CMenu1)
    GUICtrlSetOnEvent(-1, "_Change_Tool")
    $CMenu1_3 = GUICtrlCreateMenuItem("", $CMenu1)
    $CMenu1_4 = GUICtrlCreateMenuItem("delete", $CMenu1)
    GUICtrlSetOnEvent(-1, "_Del_Tool")
    $CMenu1_5 = GUICtrlCreateMenuItem("", $CMenu1)
    $CMenu1_6 = GUICtrlCreateMenuItem("clear", $CMenu1)
    GUICtrlSetOnEvent(-1, "_Clear_Tool")
    #cs
    $TabSheet2 = GUICtrlCreateTabItem("Sites")
    $ListView2 = GUICtrlCreateListView("", 4, 27, IniRead("Settings.ini", "Pos", "w", "171") - 10, IniRead("Settings.ini", "Pos", "h", "371") - 50)
    _GUICtrlListView_AddColumn($ListView2, "", 20)
    _GUICtrlListView_AddColumn($ListView2, "ID", 30)
    _GUICtrlListView_AddColumn($ListView2, "Name", 107)
    _GUICtrlListView_SetExtendedListViewStyle($ListView2, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $CMenu2 = GUICtrlCreateContextMenu($ListView2)
    $CMenu2_1 = GUICtrlCreateMenuItem("add", $CMenu2)
    $CMenu2_2 = GUICtrlCreateMenuItem("change", $CMenu2)
    $CMenu2_3 = GUICtrlCreateMenuItem("", $CMenu2)
    $CMenu2_4 = GUICtrlCreateMenuItem("delete", $CMenu2)
    $CMenu2_5 = GUICtrlCreateMenuItem("", $CMenu2)
    $CMenu2_6 = GUICtrlCreateMenuItem("clear", $CMenu2)
    #ce
    GUICtrlCreateTabItem("")
    $StatusBar1 = _GUICtrlStatusBar_Create($Form1, $aParts, $aText)
    GUICtrlSetResizing(GUICtrlGetHandle($StatusBar1), $GUI_DOCKBOTTOM + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 17)

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

    If Not FileExists(@ScriptDir & "\database") Then
    $DB_File = _SQLite_Open(@ScriptDir & "\database")
    _SQLite_Exec($DB_File, "Create Table Tools (Name, Path, Show, Start_After, Start_Wait, Title, User, User_F, Password, Password_F, Optional, Optional_F, Submit, Submit_F, Autostart, Parameter);")
    $ShowGui = 1
    Else
    $DB_File = _SQLite_Open(@ScriptDir & "\database")
    _SQLite_Exec($DB_File, "Select Autostart, Rowid, Path, Name From Tools", "_InsertTitle")
    EndIf

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

    _SQLite_Close ()

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

    Func _InsertTitle($aRow)
    Local $index = -1, $subItem = 0
    For $s In $aRow
    If $s = "Autostart" Then Return
    If $index = -1 Then
    $index = _GUICtrlListView_AddItem($ListView1, "")
    If $s = 1 Then
    _GUICtrlListView_SetItemChecked($ListView1, $index, True)
    $Autostart_On = True
    EndIf
    Else
    $subItem += 1
    If $subItem = 2 Then
    $Pathsplit = _PathSplit1($s)
    If Not @error Then _GUICtrlListView_AddSubItem($ListView1, $index, $Pathsplit[7], $subItem)
    Else
    _GUICtrlListView_AddSubItem($ListView1, $index, $s, $subItem)
    If $Autostart_On = True Then
    ShellExecute("_Run.exe", $s, @ScriptDir);_RunDOS(@ScriptDir & "\_Run.exe " & $s)
    $Autostart_On = False
    EndIf
    EndIf
    EndIf
    Next
    EndFunc ;==>_InsertTitle

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

    If $ShowGui = 1 Then GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    WinSetOnTop($Form1, "", 1)
    GUIRegisterMsg($WM_SIZE, "_ResizeStatusBar")
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($ListView1)]
    ;~ Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($ListView2)]

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

    $TP2 = TrayCreateItem("Autostart")
    TrayItemSetOnEvent(-1, "_Autostart")
    TrayCreateItem("")
    TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1, "_Exit")

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

    _CheckAutostart()
    If $Autostart = 1 Then TrayItemSetState($TP2, 1)

    While 1
    Sleep(100)
    If _IsPressed("1B") And WinGetState($Form1) = 15 Then _ToogleHide()
    WEnd

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

    ;;;; TOOL_FUNCS

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

    Func _Add_Tool()

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

    Opt("GUIOnEventMode", 0)

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

    #Region ### START Koda GUI section ### Form=o:\autoit\autoit3_portable\scite\koda\forms\form1.kxf
    $Form2_1 = GUICreate("Add Tool", 377, 355, Default, Default, Default, $WS_EX_ACCEPTFILES, $Form1)
    $Group1 = GUICtrlCreateGroup("ID: ", 0, 0, 377, 65)
    $Input1 = GUICtrlCreateInput("Name", 8, 16, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input2 = GUICtrlCreateInput("", 88, 16, 145, 21)
    $Input3 = GUICtrlCreateInput("Path", 8, 40, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input4 = GUICtrlCreateInput("", 88, 40, 242, 21, Default)
    $Combo1 = GUICtrlCreateCombo("", 240, 16, 129, 25)
    $Button1 = GUICtrlCreateButton("", 331, 40, 20, 20, $BS_ICON)
    GUICtrlSetImage(-1, "shell32.dll", -5, 0)
    $Button4 = GUICtrlCreateButton("", 353, 40, 20, 20, BitOR($BS_CENTER, $BS_VCENTER, $BS_ICON))
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetImage(-1, "shell32.dll", -177, 0)
    $Checkbox1 = GUICtrlCreateCheckbox("Start Options", 3, 71, 361, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("", 0, 82, 377, 90)
    $Input20 = GUICtrlCreateInput("Parameter", 8, 96, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input21 = GUICtrlCreateInput("", 88, 96, 281, 21)
    $Checkbox2 = GUICtrlCreateCheckbox("Start after ...", 8, 122, 81, 17, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_CENTER, $WS_TABSTOP))
    $Input5 = GUICtrlCreateInput("", 88, 119, 281, 21)
    $Checkbox3 = GUICtrlCreateCheckbox("wait", 8, 146, 81, 17, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_CENTER, $WS_TABSTOP))
    $Input6 = GUICtrlCreateInput("", 88, 142, 73, 21, BitOR($ES_NUMBER, $ES_LEFT, $ES_AUTOHSCROLL))
    $Radio1 = GUICtrlCreateRadio("seconds", 169, 145, 65, 17, 0)
    GUICtrlSetState(-1, $GUI_Checked)
    $Radio2 = GUICtrlCreateRadio("minutes", 233, 145, 57, 17)
    $Combo2 = GUICtrlCreateCombo("", 296, 142, 74, 17)
    $GroupEnd2 = GUICtrlCreateDummy()
    _SetGroupState($Group2, $GroupEnd2, $GUI_DISABLE)
    $Checkbox4 = GUICtrlCreateCheckbox("Login Options", 4, 177, 361, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("", 0, 188, 377, 145)
    $Input7 = GUICtrlCreateInput("Title", 8, 204, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input12 = GUICtrlCreateInput("", 88, 205, 281, 21)
    $Input8 = GUICtrlCreateInput("User", 8, 228, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input13 = GUICtrlCreateInput("", 88, 229, 121, 21)
    $Input14 = GUICtrlCreateInput("", 216, 229, 153, 21)
    $Input9 = GUICtrlCreateInput("Password", 8, 252, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input15 = GUICtrlCreateInput("", 88, 253, 121, 21, BitOR($ES_PASSWORD, $ES_LEFT, $ES_AUTOHSCROLL))
    $Input16 = GUICtrlCreateInput("", 216, 253, 153, 21)
    $Input10 = GUICtrlCreateInput("Optional", 8, 276, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Input17 = GUICtrlCreateInput("", 88, 277, 121, 21)
    $Input18 = GUICtrlCreateInput("", 216, 277, 153, 21)
    $Input11 = GUICtrlCreateInput("Submit", 8, 300, 73, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY, $WS_BORDER))
    $Combo3 = GUICtrlCreateCombo("", 88, 301, 121, 25)
    $Input19 = GUICtrlCreateInput("", 216, 301, 153, 21)
    $GroupEnd3 = GUICtrlCreateDummy()
    _SetGroupState($Group3, $GroupEnd3, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button2 = GUICtrlCreateButton("Ok", 0, 337, 65, 17, 0)
    $Button3 = GUICtrlCreateButton("Cancel", 312, 337, 65, 17, 0)

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

    If $ChangeToolFlag = True Then
    $DB_File = _SQLite_Open(@ScriptDir & "\database")

    _SQLite_QuerySingleRow($DB_File, "Select Rowid, * From Tools Where Rowid = '" & _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), _GUICtrlListView_GetSelectedIndices($ListView1), 1) & "' LIMIT 1;", $aRow)
    If Not @error Then

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

    GUICtrlSetData($Group1, "ID: " & $aRow[0])
    GUICtrlSetData($Input2, $aRow[1])
    GUICtrlSetData($Input4, $aRow[2])
    GUICtrlSetState($Button4, $GUI_ENABLE)
    GUICtrlSetData($Combo1, "Show|ShowDefault|Maximize|Minimize|Hide|ShowMaximized|ShowMinimized|ShowMinNoActive|ShowNa|ShowNoActive|ShowNormal", $aRow[3])

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

    GUICtrlSetData($Combo2, "before|after", "after")
    GUICtrlSetData($Combo3, "Mouse|Enter", "Enter")

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

    If $aRow[4] <> "" Or $aRow[5] <> "" Or $aRow[16] <> "" Then
    GUICtrlSetState($Checkbox1, 1)
    _SetGroupState($Group2, $GroupEnd2, $GUI_ENABLE)
    If $aRow[4] <> "" Then
    GUICtrlSetState($Checkbox2, 1)
    GUICtrlSetData($Input5, $aRow[4])
    EndIf
    If $aRow[5] <> "" Then
    GUICtrlSetState($Checkbox3, 1)
    $StringSplit = StringSplit($aRow[5], "%")
    If Not @error Then
    GUICtrlSetData($Input6, $StringSplit[1] / 1000)
    GUICtrlSetData($Combo2, "")
    GUICtrlSetData($Combo2, "before|after", $StringSplit[2])
    EndIf
    EndIf
    If $aRow[16] <> "" Then GUICtrlSetData($Input21, $aRow[16])
    EndIf

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

    If $aRow[6] <> "" Or $aRow[7] <> "" Or $aRow[8] <> "" Or $aRow[9] <> "" Or $aRow[10] <> "" Or $aRow[11] <> "" Or $aRow[12] <> "" Or $aRow[14] <> "" Then
    GUICtrlSetState($Checkbox4, 1)
    _SetGroupState($Group3, $GroupEnd3, $GUI_ENABLE)
    GUICtrlSetData($Input12, $aRow[6])
    GUICtrlSetData($Input13, $aRow[7])
    GUICtrlSetData($Input14, $aRow[8])
    GUICtrlSetData($Input15, _StringEncrypt(0, $aRow[9], $key, 4))
    GUICtrlSetData($Input16, $aRow[10])
    GUICtrlSetData($Input17, $aRow[11])
    GUICtrlSetData($Input18, $aRow[12])
    GUICtrlSetData($Input19, $aRow[14])
    GUICtrlSetData($Input21, $aRow[15])
    GUICtrlSetData($Combo3, "")
    GUICtrlSetData($Combo3, "Mouse|Enter", $aRow[13])
    EndIf
    EndIf
    Else
    GUICtrlSetData($Combo1, "Show|ShowDefault|Maximize|Minimize|Hide|ShowMaximized|ShowMinimized|ShowMinNoActive|ShowNa|ShowNoActive|ShowNormal", "ShowDefault")
    GUICtrlSetData($Combo2, "before|after", "after")
    GUICtrlSetData($Combo3, "Mouse|Enter", "Enter")
    EndIf

    _SQLite_Close ()

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUIDelete($Form2_1)
    ProcessClose("Au3Info.exe")
    ExitLoop
    Case $Button3
    GUIDelete($Form2_1)
    ProcessClose("Au3Info.exe")
    ExitLoop
    Case $Button4
    $PS = _PathSplit1(GUICtrlRead($Input4))
    FileChangeDir($PS[2])
    ShellExecute($PS[0])
    FileChangeDir(@ScriptDir)
    Case $Button1
    $FileOpenDialog = FileOpenDialog("File", "", "All (*.*)", Default, Default, $Form2_1)
    If $FileOpenDialog <> "" And Not @error Then
    GUICtrlSetData($Input4, $FileOpenDialog)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    If GUICtrlRead($Input2) = "" Then
    $FileName = _PathSplit1($FileOpenDialog)
    GUICtrlSetData($Input2, $FileName[6])
    EndIf
    EndIf
    FileChangeDir(@ScriptDir)
    Case $Checkbox1
    If GUICtrlRead($Checkbox1) = 1 Then
    _SetGroupState($Group2, $GroupEnd2, $GUI_ENABLE)
    Else
    _SetGroupState($Group2, $GroupEnd2, $GUI_DISABLE)
    EndIf
    Case $Checkbox4
    If GUICtrlRead($Checkbox4) = 1 Then
    _SetGroupState($Group3, $GroupEnd3, $GUI_ENABLE)
    FileInstall("Au3Info.exe", "Au3Info.exe", 1)
    Run("Au3Info.exe", @ScriptDir)
    Else
    _SetGroupState($Group3, $GroupEnd3, $GUI_DISABLE)
    ProcessClose("Au3Info.exe")
    EndIf
    Case $Button2
    If GUICtrlRead($Input2) = "" Or GUICtrlRead($Input4) = "" Then
    MsgBox(16, "Data is missing", "Please enter a Name and a valid Path.", 5, $Form2_1)
    ContinueLoop
    EndIf
    If GUICtrlRead($Checkbox4) = 1 And GUICtrlRead($Input12) = "" Then
    MsgBox(16, "Data is missing", "Please enter a Title.", 5, $Form2_1)
    ContinueLoop
    EndIf
    $Name = GUICtrlRead($Input2)
    $Path = GUICtrlRead($Input4)
    $Show = GUICtrlRead($Combo1)
    If GUICtrlRead($Checkbox1) = 1 Then
    If GUICtrlRead($Checkbox2) = 1 Then
    $Start_After = GUICtrlRead($Input5)
    Else
    $Start_After = ""
    EndIf
    If GUICtrlRead($Checkbox3) = 1 Then
    If GUICtrlRead($Radio2) = 1 Then
    $Time = GUICtrlRead($Input6) * 60 * 1000
    Else
    $Time = GUICtrlRead($Input6) * 1000
    EndIf
    If $Time <= 0 Then
    $Start_Wait = ""
    Else
    $Start_Wait = $Time & "%" & GUICtrlRead($Combo2)
    EndIf
    Else
    $Start_Wait = ""
    EndIf
    If GUICtrlRead($Input21) <> "" Then $Parameter = GUICtrlRead($Input21)
    Else
    $Start_After = ""
    $Start_Wait = ""
    $Parameter = ""
    EndIf
    If GUICtrlRead($Checkbox4) = 1 Then
    $Title = GUICtrlRead($Input12)
    $User = GUICtrlRead($Input13)
    $User_F = GUICtrlRead($Input14)
    $Password = _StringEncrypt(1, GUICtrlRead($Input15), $key, 4)
    $Password_F = GUICtrlRead($Input16)
    $Optional = GUICtrlRead($Input17)
    $Optional_F = GUICtrlRead($Input18)
    $Submit = GUICtrlRead($Combo3)
    $Submit_F = GUICtrlRead($Input19)
    Else
    $Title = ""
    $User = ""
    $User_F = ""
    $Password = ""
    $Password_F = ""
    $Optional = ""
    $Optional_F = ""
    $Submit = ""
    $Submit_F = ""
    EndIf

    $DB_File = _SQLite_Open(@ScriptDir & "\database")

    If $ChangeToolFlag = True Then
    _SQLite_Exec($DB_File, "Update Tools Set Name='" & $Name & "', Path='" & $Path & "', Show='" & $Show & "', Start_After='" & $Start_After & "', Start_Wait='" & $Start_Wait & "', Title='" & $Title & "', User='" & $User & "', User_F='" & $User_F & "', Password='" & $Password & "', Password_F='" & $Password_F & "', Optional='" & $Optional & "', Optional_F='" & $Optional_F & "', Submit='" & $Submit & "', Submit_F='" & $Submit_F & "', Parameter='" & $Parameter & "' Where rowid = " & StringTrimLeft(GUICtrlRead($Group1), 4) & ";")
    $index = _GUICtrlListView_GetSelectedIndices($ListView1)
    _GUICtrlListView_AddSubItem($ListView1, $index, StringTrimLeft(GUICtrlRead($Group1), 4), 1)
    $Pathsplit = _PathSplit1($Path)
    If Not @error Then _GUICtrlListView_AddSubItem($ListView1, $index, $Pathsplit[7], 2)
    _GUICtrlListView_AddSubItem($ListView1, $index, $Name, 3)
    Else
    _SQLite_Exec($DB_File, "Insert into Tools values ('" & $Name & "','" & $Path & "','" & $Show & "','" & $Start_After & "','" & $Start_Wait & "','" & $Title & "', '" & $User & "', '" & $User_F & "', '" & $Password & "', '" & $Password_F & "', '" & $Optional & "', '" & $Optional_F & "', '" & $Submit & "', '" & $Submit_F & "', '', '" & $Parameter & "');")
    $index = _GUICtrlListView_AddItem($ListView1, "")
    _GUICtrlListView_AddSubItem($ListView1, $index, _SQLite_LastInsertRowID($DB_File), 1)
    $Pathsplit = _PathSplit1($Path)
    If Not @error Then _GUICtrlListView_AddSubItem($ListView1, $index, $Pathsplit[7], 2)
    _GUICtrlListView_AddSubItem($ListView1, $index, $Name, 3)
    EndIf

    _SQLite_Close ()

    GUIDelete($Form2_1)
    ProcessClose("Au3Info.exe")
    ExitLoop
    EndSwitch
    If _IsPressed("1B") Then
    GUIDelete($Form2_1)
    ProcessClose("Au3Info.exe")
    ExitLoop
    EndIf
    WEnd

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

    Opt("GUIOnEventMode", 1)

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

    EndFunc ;==>_Add_Tool

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

    Func _Change_Tool()
    Global $ChangeToolFlag = True
    _Add_Tool()
    Global $ChangeToolFlag = False
    EndFunc ;==>_Change_Tool

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

    Func _Del_Tool()
    $GetSelIndices = _GUICtrlListView_GetSelectedIndices($ListView1)
    If Not @error Then
    $MsgBox = MsgBox(33, "Delete Item?", "Do you really want to delete " & _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), $GetSelIndices, 3) & " ?", Default, $Form1)
    If $MsgBox = 1 Then
    $DB_File = _SQLite_Open(@ScriptDir & "\database")
    $d = _SQLite_Exec(-1, "Delete From Tools Where rowid = '" & _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), $GetSelIndices, 1) & "'")
    _SQLite_Close ()
    _GUICtrlListView_DeleteItem(GUICtrlGetHandle($ListView1), $GetSelIndices)
    EndIf
    EndIf
    EndFunc ;==>_Del_Tool

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

    Func _Clear_Tool()
    $MsgBox = MsgBox(17, "Delete All Items?", "Do you really want to delete all Items?", Default, $Form1)
    If $MsgBox = 1 Then
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    $DB_File = _SQLite_Open(@ScriptDir & "\database")
    _SQLite_Exec($DB_File, "Delete From Tools")
    _SQLite_Close ()
    EndIf
    EndFunc ;==>_Clear_Tool

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

    Func _SetGroupState($nIDStart, $nIDStop, $nState)
    ; Author: Prog@ndy
    Local $i
    For $i = $nIDStart To $nIDStop
    GUICtrlSetState($i, $nState)
    Next
    EndFunc ;==>_SetGroupState

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

    Func _ToogleHide()
    GUISetState(@SW_HIDE)
    EndFunc ;==>_ToogleHide

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

    Func _ToogleWindow()
    $WinState = WinGetState($Form1)
    If $WinState = 5 Then
    GUISetState(@SW_SHOW)
    Else
    GUISetState(@SW_HIDE)
    EndIf
    EndFunc ;==>_ToogleWindow

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

    Func _ResizeStatusBar()
    _GUICtrlStatusBar_Resize($StatusBar1)
    EndFunc ;==>_ResizeStatusBar

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

    Func _Autostart()
    _CheckAutostart()
    If $Autostart = 1 Then
    RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Run\", @ScriptName)
    TrayItemSetState($TP2, 4)
    Else
    RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Run\", @ScriptName, "REG_SZ", @ScriptFullPath)
    TrayItemSetState($TP2, 1)
    EndIf
    EndFunc ;==>_Autostart

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

    Func _CheckAutostart()
    $RegRead = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run\", @ScriptName)
    If Not @error Then
    $Autostart = 1
    Else
    $Autostart = 0
    EndIf
    Return $Autostart
    EndFunc ;==>_CheckAutostart

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

    ;~ Func _Exit()
    ;~ Exit
    ;~ EndFunc ;==>_Exit

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

    Func _Exit()
    $WinGetPos = WinGetPos($Form1)
    IniWrite("Settings.ini", "Pos", "x", $WinGetPos[0])
    IniWrite("Settings.ini", "Pos", "y", $WinGetPos[1])
    IniWrite("Settings.ini", "Pos", "w", $WinGetPos[2] - 8)
    IniWrite("Settings.ini", "Pos", "h", $WinGetPos[3] - 24)
    For $i = 0 To 3
    IniWrite("Settings.ini", "ColumnWidth", "Column" & $i, _GUICtrlListView_GetColumnWidth($ListView1, $i))
    Next
    IniWrite("Settings.ini", "ColumnOrder", "Order", _GUICtrlListView_GetColumnOrder($ListView1))
    $DB_File = _SQLite_Open(@ScriptDir & "\database")
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView1) - 1
    If _GUICtrlListView_GetItemChecked($ListView1, $i) = 1 Then
    _SQLite_Exec($DB_File, "Update Tools Set Autostart='1' Where rowid = " & _GUICtrlListView_GetItemText($ListView1, $i, 1) & ";")
    Else
    _SQLite_Exec($DB_File, "Update Tools Set Autostart='""' Where rowid = " & _GUICtrlListView_GetItemText($ListView1, $i, 1) & ";")
    EndIf
    Next
    _SQLite_Close ()
    _SQLite_Shutdown ()
    $ProcList = ProcessList("_Run.exe")
    If Not @error Then
    For $i = 1 To $ProcList[0][0]
    ProcessClose($ProcList[$i][1])
    Next
    EndIf
    Exit
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $CurTab = _GUICtrlTab_GetCurSel($Tab1)
    If $CurTab = 0 Then
    $hListView = $ListView1
    $CurCMenu = $CMenu1
    ElseIf $CurTab = 1 Then
    ;~ $hListView = $ListView2
    ;~ $CurCMenu = $CMenu2
    ;~ $DESCENDING = $B_DESCENDING
    EndIf
    $hWndListView = $hListView ; ID des LV
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    If $CurTab = 0 Then
    If _GUICtrlListView_GetSelectedIndices($hWndListView) <> "" Then
    ShellExecute("_Run.exe", _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), _GUICtrlListView_GetSelectedIndices($ListView1), 1), @ScriptDir);_RunDOS(@ScriptDir & "\_Run.exe " & _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), _GUICtrlListView_GetSelectedIndices($ListView1), 1));ShellExecute("_Run.exe", _GUICtrlListView_GetItemText($ListView1, _GUICtrlListView_GetSelectedIndices($ListView1), 1), @ScriptDir, "open", @SW_HIDE)
    _GUICtrlStatusBar_SetText($hWnd, _GUICtrlListView_GetItemText(GUICtrlGetHandle($ListView1), _GUICtrlListView_GetSelectedIndices($ListView1), 3))
    Sleep(2000)
    _GUICtrlStatusBar_SetText($hWnd, "")
    Sleep(1000)
    GUISetState(@SW_HIDE, $Form1)
    EndIf
    Else
    EndIf
    Case $LVN_COLUMNCLICK ; A column was clicked
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    If $CurTab = 0 Then
    If _GUICtrlListView_GetItemCount($hWndListView) = 0 Then
    GUICtrlSetState($CMenu1_6, $GUI_DISABLE)
    Else
    GUICtrlSetState($CMenu1_6, $GUI_ENABLE)
    EndIf
    If _GUICtrlListView_GetSelectedIndices($hWndListView) <> "" Then
    GUICtrlSetState($CMenu1_2, $GUI_ENABLE)
    GUICtrlSetState($CMenu1_4, $GUI_ENABLE)
    Else
    GUICtrlSetState($CMenu1_2, $GUI_DISABLE)
    GUICtrlSetState($CMenu1_4, $GUI_DISABLE)
    EndIf
    Else
    ;~ If _GUICtrlListView_GetItemCount($hWndListView) = 0 Then
    ;~ GUICtrlSetState($CMenu2_6, $GUI_DISABLE)
    ;~ Else
    ;~ GUICtrlSetState($CMenu2_6, $GUI_ENABLE)
    ;~ EndIf
    ;~ If _GUICtrlListView_GetSelectedIndices($hWndListView) <> "" Then
    ;~ GUICtrlSetState($CMenu2_2, $GUI_ENABLE)
    ;~ GUICtrlSetState($CMenu2_4, $GUI_ENABLE)
    ;~ Else
    ;~ GUICtrlSetState($CMenu2_2, $GUI_DISABLE)
    ;~ GUICtrlSetState($CMenu2_4, $GUI_DISABLE)
    ;~ EndIf
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    ;===============================================================================
    ; Function Name: _PathSplit1()
    ; Description: Split the path to 8 elements.
    ; Parameter(s): $sPath - Path to split.
    ; Requirement(s): AutoIt 3.2.2.0.
    ; Return Value(s): On seccess - Array $RetArray that contain 8 elements:
    ; $RetArray[0] = Full path ($sPath)
    ; $RetArray[1] = Drive letter
    ; $RetArray[2] = Path without FileName and extension
    ; $RetArray[3] = Full path without File Extension
    ; $RetArray[4] = Full path without drive letter
    ; $RetArray[5] = FileName and extension
    ; $RetArray[6] = Just Filename
    ; $RetArray[7] = Just Extension of a file
    ;
    ; On failure - If $sPath not include correct path (the path is not splitable),
    ; then $sPath returned.
    ; If $sPath not include needed delimiters, or it's emty,
    ; then @error set to 1, and returned -1.
    ;
    ; Note(s): The path can include backslash as well (exmp: C:/test/test.zip).
    ;
    ; Author(s): G.Sandler a.k.a CreatoR (MsCreatoR) - Thanks to amel27 for help with RegExp
    ;===============================================================================

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

    Func _PathSplit1($sPath)
    If $sPath = "" Or StringRegExp($sPath, ('.*\\.*\/')) Then Return SetError(1, 0, -1)
    Local $RetArray[8], $pDelim = ""
    If StringRegExp($sPath, '^(?i)([A-Z]:|\\)(\\[^\\]+)+$') Then $pDelim = "\"
    If StringRegExp($sPath, '(?i)(^.*:/)(/[^/]+)+$') Then $pDelim = "//"
    If $pDelim = "" Then $pDelim = "/"
    If Not StringInStr($sPath, $pDelim) Then Return $sPath
    If $pDelim = "\" Then $pDelim &= "\"
    $RetArray[0] = $sPath
    $RetArray[1] = StringRegExpReplace($sPath, $pDelim & '.*', $pDelim)
    $RetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '')
    $RetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '')
    $RetArray[4] = StringRegExpReplace($sPath, '(?i)([A-Z]:' & $pDelim & ')', '')
    $RetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '')
    $RetArray[6] = StringRegExpReplace($RetArray[5], '\.[^.]*$', '')
    $RetArray[7] = StringRegExpReplace($sPath, '^.*\.', '')
    Return $RetArray
    EndFunc ;==>_PathSplit1

    [/autoit]

    Programm was zum ausführen benötigt wird:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\..\..\Icons\shell32.ico
    #AutoIt3Wrapper_Compression=4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <SQLite.dll.au3>
    #include <SQLite.au3>
    #include <String.au3>

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

    Opt("TrayIconDebug", 0) ;0=no info, 1=debug line info

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

    If $CmdLine[0] <> 1 Then
    Exit MsgBox(16, "Error", "No CMD-Parameter set", 5)
    EndIf

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

    $key = Log(986543568)

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

    Global $aRow

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

    $sSQliteDll = _SQLite_Startup()
    If @error > 0 Then
    MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!", 5)
    Exit -1
    EndIf

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

    $DB_File = _SQLite_Open(@ScriptDir & "\database")

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

    _SQLite_QuerySingleRow($DB_File, "Select * From Tools Where Rowid = " & $CmdLine[1] & " LIMIT 1;", $aRow)
    If @error Then Exit MsgBox(16, "Error", "Parameter must be a valid Number.", 5)

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    If $aRow[3] <> "" Then
    If $aRow[4] <> "" Then
    $StringSplit = StringSplit($aRow[4], "%")
    If Not @error Then
    $Time = $StringSplit[1]
    $Time2 = $StringSplit[2]
    If $Time2 = "before" Then
    Sleep($Time)
    If $aRow[3] <> "" Then
    $StringSplit = StringSplit($aRow[3], ";")
    If Not @error Then
    For $i = 1 To $StringSplit[0]
    ProcessWaitClose($StringSplit[$i])
    Next
    Else
    ProcessWaitClose($aRow[3])
    EndIf
    EndIf
    Else
    $StringSplit = StringSplit($aRow[3], ";")
    If Not @error Then
    For $i = 1 To $StringSplit[0]
    ProcessWaitClose($StringSplit[$i])
    Next
    Else
    ProcessWaitClose($aRow[3])
    EndIf
    Sleep($Time)
    EndIf
    EndIf
    EndIf
    Else
    If $aRow[4] <> "" Then
    $StringSplit = StringSplit($aRow[4], "%")
    If Not @error Then
    $Time = $StringSplit[1]
    $Time2 = $StringSplit[2]
    Sleep($Time)
    EndIf
    EndIf
    EndIf

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

    $PS = _PathSplit1($aRow[1])
    FileChangeDir($PS[2])

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

    If $aRow[5] = "" Then
    ShellExecute($PS[0], $aRow[15])
    If @error Then Exit MsgBox(16, "Error", "Failure occured." & @CRLF & "Error-Code:" & @error)
    Else
    If Not WinExists($aRow[5]) Then
    ShellExecute($PS[0], $aRow[15])
    If @error Then Exit MsgBox(16, "Error", "Failure occured." & @CRLF & "Error-Code:" & @error)
    If $aRow[5] <> "" Then
    WinWait($aRow[5], "", 60)
    If @error Then Exit MsgBox(16, "Error", "Timelimit exceeded.")
    EndIf
    EndIf
    EndIf

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

    Sleep(500)
    If $aRow[6] <> "" Then ControlSend($aRow[5], "", $aRow[7], $aRow[6], 1)
    Sleep(500)
    If $aRow[8] <> "" Then ControlSend($aRow[5], "", $aRow[9], _StringEncrypt(0, $aRow[8], $key, 4), 1)
    Sleep(500)
    If $aRow[10] <> "" Then ControlSend($aRow[5], "", $aRow[11], $aRow[10], 1)
    Sleep(500)
    If $aRow[13] <> "" Then
    If $aRow[12] = "Mouse" Then
    ControlClick($aRow[5], "", $aRow[13], "left", 1)
    Else
    ControlSend($aRow[5], "", $aRow[13], "{Enter}")
    EndIf
    Else
    ControlSend($aRow[5], "", $aRow[9], "{Enter}")
    EndIf

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

    Func _PathSplit1($sPath)
    If $sPath = "" Or StringRegExp($sPath, ('.*\\.*\/')) Then Return SetError(1, 0, -1)
    Local $RetArray[8], $pDelim = ""
    If StringRegExp($sPath, '^(?i)([A-Z]:|\\)(\\[^\\]+)+$') Then $pDelim = "\"
    If StringRegExp($sPath, '(?i)(^.*:/)(/[^/]+)+$') Then $pDelim = "//"
    If $pDelim = "" Then $pDelim = "/"
    If Not StringInStr($sPath, $pDelim) Then Return $sPath
    If $pDelim = "\" Then $pDelim &= "\"
    $RetArray[0] = $sPath
    $RetArray[1] = StringRegExpReplace($sPath, $pDelim & '.*', $pDelim)
    $RetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '')
    $RetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '')
    $RetArray[4] = StringRegExpReplace($sPath, '(?i)([A-Z]:' & $pDelim & ')', '')
    $RetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '')
    $RetArray[6] = StringRegExpReplace($RetArray[5], '\.[^.]*$', '')
    $RetArray[7] = StringRegExpReplace($sPath, '^.*\.', '')
    Return $RetArray
    EndFunc ;==>_PathSplit1

    [/autoit]
  • kleines update im 1. Post

    - wenn Autostart aktiviert ist, wird dies nun auch im Systray mit Haken angezeigt (hatte da irgendwie ne Zeile Code vergessen *g*)
    - nach Programmstart durch doppelklick wird da Fenster wieder versteckt
    - beim beenden des Hauptprogramms werden auch alle laufenden _Run.exe-Instanzen geschlossen

    PS:

    hab noch nen Fehler entdeckt und noch was zugefügt

    - nach Programmstart durch doppelklick erscheint in der Statusbar, was gerade gestartet wurde (2sek), danach wird das Feld wieder geleert und das Fenster dann erst versteckt
    - da ich nun immer die DB erst öffne, wenn ich sie brauche und danach wieder schließe, ist beim EXIT der fehler aufgetreten (da ich dort das SQLite_Open vergessen hatte), dass die Haken (Autostart) nicht gespeichert wurden. ist nun also wieder behoben.