Recaller - Viele Programme auf einmal starten

  • Bei mir ist es häufig so, dass ich viele Programme und Ordner für bestimmte Projekte gleichzeitig brauche.
    Das könnte bei AutoIT der SCITE-Editor, der Ordner in dem gerade das Programm sich befindet an dem ich arbeite, der Taschenrechner, ein Messanger und noch eine Webseite sein.
    Natürlich könnte man sich jedesmal den Autostart vollfüllen und bei Bedarf ändern - aber ich weiß ja nicht ob ich nächstesmal lieber eine Runde spielen will, wofür ich wieder ne andere Gruppe von Programmen benütze - und ich starte deswegen bestimmt nicht den Rechner neu.

    Um dem zu entgegnen habe ich ein Skript geschrieben, dass die aktuell laufenden Programme aufzeigt.
    Diese kann ich markieren (und evtl. abspeichern) und beim nächstenmal die ganze Gruppe auf einmal starten.

    Mit der Eingabe Taste kann ich eigene Ausdrücke zufügen - um so z.B. Webseiten wie "www.autoit.de" oder Ordner wie z.b. "D:\Program Files\AutoIt3\Examples"
    Als Option bietet das Programm noch automatisch beim Start die letze Auswahl der Programme alle zu starten.
    Del - Taste lässt eigene Ausdrücke wieder löschen.

    Ansonsten gibt es noch Refresh - was die aktuellen Programmprozesse aktualisiert.

    Herzstück des Programmes ist ein einfacher Shellexecute Funktionsaufruf.

    Denkbare Erweiterungen:
    * Man könnte noch Parameter für den Programmaufruf hinzufügen - für meine eigenen Zwecke ist das kaum nötig: daher falls jemand das so erweitern möchte nur zu.

    * Ignore Funktion - viele Prozesse sind natürlich Systemgegeben, man könnte noch nen Button mit der Funktion einfügen, der bekannte Prozesse ausblendet um die Sache übersichtlicher zu gestalten.

    * Hübscher machen - Treeview erlaubt die Möglichkeit von ChildTrees und Icons zu verwenden, dazu Buttons für die Menüführung noch erweitern und netter gestalten

    Sonstiges:
    Im Skriptverzeichnis erstellt sich das Programme eine INI - Datei, und eine text datei für die Default-Auswahl der Programme.

    Spoiler anzeigen


    (Verwendet Autoit 3.3.0.0)

    [autoit]


    ;Verwendete Quellen http://www.autoit.de/index.php?page…cess#post105389

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

    ;Benützung:
    ;DEL: Entfernen eigener Einträge
    ;Enter: Einfügen eigener Einträge

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

    #include <GUIConstants.au3>
    #Include <Constants.au3>
    #include <Array.au3>
    #include <GuiTreeView.au3>
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $filename="Recaller.txt"

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

    #RequireAdmin
    Global $hPsAPI = DllOpen("Psapi.dll")
    Global $hKernel = DllOpen("Kernel32.dll")

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

    Opt("GUIOnEventMode", 1)
    $GUIname="Recaller"

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

    $filenameini=@ScriptDir&"\Recaller.ini"
    $filenamememory=@ScriptDir&"\storage.ini"

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

    DIM $ownchecked[1]
    DIM $Executelist[1]

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

    ;GUI-Menue-Options
    Global $keepselection, $execute_at_startup
    Dim $ignorelist[3]
    $ignorelist[0] ="Program Manager"
    Dim $Programmlist[1]
    Dim $Programmlist_duplikatefree[1] ;Name ist etwas unglücklich - das ist die verwendete Liste für den Tree

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

    createGui()
    loadini()

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

    If BitAND(GUICtrlRead ($keepselection ) , $GUI_CHECKED) Then
    loadData($filenamememory)
    Else
    refresh()
    EndIf

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

    If BitAND(GUICtrlRead ($execute_at_startup ) , $GUI_CHECKED) Then
    Executeallmarked()
    EndIf

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

    While 1
    If _IsPressed("2E", $dll) AND WinActive ( $GUIname) Then ;"del"
    Delexpression()
    EndIf

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

    If _IsPressed("0D", $dll) AND WinActive ( $GUIname) Then ;"enter"
    Addexpression()
    EndIf

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

    $keepselectioncheck = GUICtrlRead ($keepselection )
    $execute_at_startupcheck = GUICtrlRead ($execute_at_startup )

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

    sleep(100)

    WEnd

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

    Func myArraySearch($feld, $value)
    $result = 0
    $split = StringSplit($value,"|")
    $value = $split[1]
    for $i = 0 to UBound($feld)-1
    If StringLeft ($value,30) = StringLeft($feld[$i],30) Then
    $result=1
    ExitLoop
    EndIf
    Next

    Return $result
    EndFunc

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

    Func _ProcessGetPath($hPID)
    If IsString($hPID) Then $hPID = ProcessExists($hPID)
    If $hPID = 0 Then Return SetError(1,0,'')
    Local $sPath = DllStructCreate("char[1000]")
    Local $hProcess = DllCall($hKernel, "int", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $hPID)
    DllCall($hPsAPI, "long", "GetModuleFileNameEx", "long", $hProcess[0], "int", 0, "ptr", DllStructGetPtr($sPath), "long", DllStructGetSize($sPath))
    DllCall($hKernel, "int", "CloseHandle", "hwnd", $hProcess[0])
    Return DllStructGetData($sPath, 1)
    EndFunc

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

    Func createGui()
    $gui_x=454
    $gui_y=454

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

    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

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

    $main = GUICreate ($GUIname, $gui_x, $gui_y, -1, -1)
    $menue = GUICtrlCreateMenu ( "&Menue" )
    $restore = GUICtrlCreateMenuitem ("&Load Selection",$menue)
    $store = GUICtrlCreateMenuitem ("&Store Selection",$menue)
    $refresh = GUICtrlCreateMenuitem ("&Refresh",$menue)
    $execute = GUICtrlCreateMenuitem ("&Execute selected",$menue)
    $addexpression = GUICtrlCreateMenuitem ("&Add command",$menue)
    $delexpression = GUICtrlCreateMenuitem ("&Remove command",$menue)
    $exit = GUICtrlCreateMenuitem ("&Exit",$menue)

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

    $menue1b = GUICtrlCreateMenu ( "&Options" )
    $keepselection = GUICtrlCreateMenuitem ("Keep Selections at restart",$menue1b)
    $execute_at_startup = GUICtrlCreateMenuitem ("Autostart selected at startup",$menue1b)

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

    $executebutton = GUICtrlCreateButton("Run Selections", 2, 2, $gui_x / 2 * 0.9, 25)
    $refreshbutton = GUICtrlCreateButton("Refresh", $gui_x - $gui_x / 2 * 0.9 - 2 , 2, $gui_x / 2 * 0.9, 25)

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

    GUICtrlSetOnEvent($refreshbutton, "Refresh")
    GUICtrlSetOnEvent($executebutton, "Executeallmarked")
    GUICtrlSetOnEvent($store, "Store")
    GUICtrlSetOnEvent($restore, "Restore")
    GUICtrlSetOnEvent($refresh, "Refresh")
    GUICtrlSetOnEvent($execute, "Executeallmarked")
    GUICtrlSetOnEvent($addexpression, "Addexpression")
    GUICtrlSetOnEvent($delexpression, "Delexpression")
    GUICtrlSetOnEvent($exit, "Beenden")
    GUICtrlSetOnEvent($execute_at_startup , "Startupexecutetoggle")
    GUICtrlSetOnEvent($keepselection , "Rememberselectiontoggle")

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

    Global $hTreeView = _GUICtrlTreeView_Create($main, 2, 32, 450, 450, $iStyle, $WS_EX_CLIENTEDGE)
    GUISetState()
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    Global $Check[Ubound($Programmlist_duplikatefree)]
    _GUICtrlTreeView_EndUpdate($hTreeView)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    GUISetState(@SW_SHOW)

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

    EndFunc

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

    Func Store()

    $var = FileSaveDialog ( "Save Selections",@WorkingDir , "Textfile (*.txt)",2+16,"temp.txt" )
    If StringRight($var, 4) <> ".txt" Then $var &= ".txt"
    if @error = 0 Then saveData($var)
    EndFunc

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

    Func Restore()
    $var = FileOpenDialog ( "Restore Selctions",@WorkingDir , "Textfiles (*.txt)",1 )
    if @error = 0 Then
    loadData($var)
    EndIf

    EndFunc

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

    Func saveData($filename)
    $file= FileOpen ( $filename, 2)

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

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to write file.")
    FileClose($file)
    return
    endif

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
    FileWriteLine ( $file, $Programmlist_duplikatefree[$i])
    EndIf
    Next

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

    FileWriteLine ( $file, "---Executelist---")

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

    For $i=1 to UBound($Executelist)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $ownchecked[$i])) Then
    FileWriteLine ( $file, $Executelist[$i])
    EndIf
    Next

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

    FileClose($file)

    EndFunc

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

    Func loadData($filename)
    $file = FileOpen($filename, 0)
    If $file = -1 Then
    FileClose($file)
    return
    endif

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

    ;Felder löschen
    _GUICtrlTreeView_DeleteAll($hTreeView)
    Dim $Programmlist_duplikatefree[1]
    Dim $Executelist[1]
    Dim $check[1]
    Dim $ownchecked[1]

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

    $flag=0
    $counter=0

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop

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

    If $flag=0 Then
    If $line<>"---Executelist---" Then

    _ArrayAdd($Programmlist_duplikatefree,$line)
    _ArrayAdd($check,_GUICtrlTreeView_Add($hTreeView, 0, $line))
    _GUICtrlTreeView_SetChecked ($hTreeView,$check[UBound($check)-1])
    Else
    $flag=1
    EndIf
    Else
    _ArrayAdd($Executelist,$line)
    _ArrayAdd($ownchecked,_GUICtrlTreeView_Add($hTreeView, 0, $line))
    _GUICtrlTreeView_SetChecked ($hTreeView,$ownchecked[UBound($ownchecked)-1])
    EndIf

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

    Wend

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

    FileClose($file)

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

    Refresh()

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

    EndFunc

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

    Func loadini()
    GUICtrlSetState ( $keepselection, IniRead ( $filenameini , "", "keepselectioncheck", $GUI_CHECKED ))
    GUICtrlSetState ( $execute_at_startup, IniRead ( $filenameini , "", "execute_at_startupcheck", $GUI_UNCHECKED ))

    EndFunc

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

    Func saveini()
    IniWrite( $filenameini , "", "keepselectioncheck", $keepselectioncheck )
    IniWrite( $filenameini , "", "execute_at_startupcheck", $execute_at_startupcheck )

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

    EndFunc

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

    Func Refresh()
    Dim $Keep[1]

    For $i = 1 to UBound($check)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
    _ArrayAdd($Keep,$Programmlist_duplikatefree[$i])
    $Keep[0]=$Keep[0]+1
    EndIf
    Next

    Dim $Programmlist[1]

    $wl = WinList ()
    For $i = 1 To $wl[0][0]
    if $wl[$i][0] <> "" AND myArraySearch($ignorelist, $wl[$i][0])=0 Then
    $split = StringSplit($wl[$i][0],"|")
    _ArrayAdd($Programmlist, _ProcessGetPath(WinGetProcess($split[1])))
    EndIf
    Next

    _ArrayDelete($Programmlist,0)
    $Keepcount=$Keep[0]
    _ArrayConcatenate($Keep,$Programmlist)
    _ArrayDelete($Keep,0)

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

    $Programmlist_duplikatefree=_ArrayUnique($Keep) ; ---- feld 0 enthalt anzahl

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

    For $i=1 to UBound($check)-1
    _GUICtrlTreeView_Delete($hTreeView, $check[$i])
    Next

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

    ;Treemenueeinträge erstellen
    Dim $Check[Ubound($Programmlist_duplikatefree)]

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    $check[$i] = _GUICtrlTreeView_Add($hTreeView, 0, $Programmlist_duplikatefree[$i])
    Next

    For $i=0 to $Keepcount -1
    for $j=1 to UBound($Programmlist_duplikatefree)-1
    If $Keep[$i]=$Programmlist_duplikatefree[$j] Then
    _GUICtrlTreeView_SetChecked ($hTreeView,$check[$j])
    EndIf
    Next
    Next

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

    $Programmlist=_ArrayUnique($Programmlist)

    EndFunc

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

    Func Executeallmarked()

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    If _GUICtrlTreeView_GetChecked($hTreeView, $check[$i]) Then
    $path=StringTrimRight($Programmlist_duplikatefree[$i], StringLen($Programmlist_duplikatefree[$i])- StringInStr( $Programmlist_duplikatefree[$i], "\" , 0 , -1)+1 )

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

    If FileExists($path) Then
    $flag=0
    For $j = 1 to UBound($Programmlist)-1
    if $Programmlist_duplikatefree[$i]=$Programmlist[$j] Then
    $flag=1
    ExitLoop
    EndIf
    Next
    If $flag=0 Then
    ShellExecute($Programmlist_duplikatefree[$i], "", $path )
    EndIf
    EndIf
    EndIf
    Next

    ;eigene Ausdrücke
    For $i = 1 to UBound($ownchecked)-1
    If _GUICtrlTreeView_GetChecked($hTreeView, $ownchecked[$i]) Then
    ShellExecute($Executelist[$i] )
    EndIf
    Next

    EndFunc

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

    Func Addexpression()
    $input=InputBox("Add a command to be executed","Enter e.g. http://www.google.de or D:\Program Files\AutoIt3\Examples")
    If $input<>"" Then
    $newhandle= _GUICtrlTreeView_AddFirst ( $hTreeView, 0,$input)
    _ArrayAdd($ownchecked,$newhandle)
    _ArrayAdd($Executelist,$input)
    EndIf
    sleep(200)
    EndFunc

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

    Func Delexpression()
    $test=_GUICtrlTreeView_GetSelection($hTreeView)
    If $test<>0 Then
    ;prüfen ob handle in eigener LIste
    $pos=_ArraySearch($ownchecked, $test)
    If $pos<0 Then
    MsgBox(0,"Warning","Cant be removed")
    Else
    _GUICtrlTreeView_Delete($hTreeView, $test )
    _ArrayDelete($ownchecked, $pos)
    _ArrayDelete($Executelist,$pos)
    EndIf
    Else
    Beep()

    EndIf
    sleep(200)
    EndFunc

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

    Func Startupexecutetoggle()
    If BitAND($execute_at_startupcheck,1) = 1 Then
    GUICtrlSetState ( $execute_at_startup , $GUI_UNCHECKED )
    Else
    GUICtrlSetState ( $execute_at_startup , $GUI_CHECKED )
    EndIf
    EndFunc

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

    Func Rememberselectiontoggle()
    If BitAND($keepselectioncheck,1) = 1 Then
    GUICtrlSetState ( $keepselection, $GUI_UNCHECKED )
    Else
    GUICtrlSetState ( $keepselection, $GUI_CHECKED )
    EndIf
    EndFunc

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

    Func Beenden()
    saveini()

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

    If BitAND($keepselectioncheck,1) = 1 Then
    saveData($filenamememory)
    EndIf

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

    GUIDelete()
    DllClose($dll)
    Exit
    EndFunc

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

    Einmal editiert, zuletzt von Unicom (13. Dezember 2009 um 17:30)