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)
;Verwendete Quellen http://www.autoit.de/index.php?page…cess#post105389
;Benützung:
;DEL: Entfernen eigener Einträge
;Enter: Einfügen eigener Einträge
#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"
#RequireAdmin
Global $hPsAPI = DllOpen("Psapi.dll")
Global $hKernel = DllOpen("Kernel32.dll")
Opt("GUIOnEventMode", 1)
$GUIname="Recaller"
$filenameini=@ScriptDir&"\Recaller.ini"
$filenamememory=@ScriptDir&"\storage.ini"
DIM $ownchecked[1]
DIM $Executelist[1]
;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
createGui()
loadini()
If BitAND(GUICtrlRead ($keepselection ) , $GUI_CHECKED) Then
loadData($filenamememory)
Else
refresh()
EndIf
If BitAND(GUICtrlRead ($execute_at_startup ) , $GUI_CHECKED) Then
Executeallmarked()
EndIf
While 1
If _IsPressed("2E", $dll) AND WinActive ( $GUIname) Then ;"del"
Delexpression()
EndIf
If _IsPressed("0D", $dll) AND WinActive ( $GUIname) Then ;"enter"
Addexpression()
EndIf
$keepselectioncheck = GUICtrlRead ($keepselection )
$execute_at_startupcheck = GUICtrlRead ($execute_at_startup )
sleep(100)
WEnd
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
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
Func createGui()
$gui_x=454
$gui_y=454
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)
$menue1b = GUICtrlCreateMenu ( "&Options" )
$keepselection = GUICtrlCreateMenuitem ("Keep Selections at restart",$menue1b)
$execute_at_startup = GUICtrlCreateMenuitem ("Autostart selected at startup",$menue1b)
$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)
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")
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)
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
Func Restore()
$var = FileOpenDialog ( "Restore Selctions",@WorkingDir , "Textfiles (*.txt)",1 )
if @error = 0 Then
loadData($var)
EndIf
EndFunc
Func saveData($filename)
$file= FileOpen ( $filename, 2)
If $file = -1 Then
MsgBox(0, "Error", "Unable to write file.")
FileClose($file)
return
endif
For $i=1 to UBound($Programmlist_duplikatefree)-1
If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
FileWriteLine ( $file, $Programmlist_duplikatefree[$i])
EndIf
Next
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
FileClose($file)
EndFunc
Func loadData($filename)
$file = FileOpen($filename, 0)
If $file = -1 Then
FileClose($file)
return
endif
;Felder löschen
_GUICtrlTreeView_DeleteAll($hTreeView)
Dim $Programmlist_duplikatefree[1]
Dim $Executelist[1]
Dim $check[1]
Dim $ownchecked[1]
$flag=0
$counter=0
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
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
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
Func saveini()
IniWrite( $filenameini , "", "keepselectioncheck", $keepselectioncheck )
IniWrite( $filenameini , "", "execute_at_startupcheck", $execute_at_startupcheck )
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)
$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
;Treemenueeinträge erstellen
Dim $Check[Ubound($Programmlist_duplikatefree)]
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
$Programmlist=_ArrayUnique($Programmlist)
EndFunc
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 )
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
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
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
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
Func Rememberselectiontoggle()
If BitAND($keepselectioncheck,1) = 1 Then
GUICtrlSetState ( $keepselection, $GUI_UNCHECKED )
Else
GUICtrlSetState ( $keepselection, $GUI_CHECKED )
EndIf
EndFunc
Func Beenden()
saveini()
If BitAND($keepselectioncheck,1) = 1 Then
saveData($filenamememory)
EndIf
GUIDelete()
DllClose($dll)
Exit
EndFunc