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.
ZitatAlles anzeigen- Im Hauptfenster werden die Tools angezeigt, für die ein Eintrag über ADD angelegt wurde
- Die Spalten können neu/ anders sortiert und die größe verändert werden (wird bei Neustart übernommen) und die Einträge können jeweils mit einem Klick auf den Spaltennamen neu sortiert werden (wird noch nicht übernommen)
- Mit X und ESC (bei aktiven Fenster) wird das Fenster versteckt, Linksklick aufs Trayicon zeigt/ versteckt das Fenster
- Größe und Position des Fensters werden auch bei Neustart übernommen (wenn das Tool regulär beendet wird)
- Programm kann über das Traymenü beendet werden
- Autostart kann über das Traymenü aktiviert werden
- zur 1. Spalte im Hauptfenster (mit dem Kästchen): wenn das aktiviert ist, wird dieses Programm beim laden des Tools automatisch mitgestartet
- Einträge hinzufügen/ ändern/ löschen und/oder die ganze Liste löschen, über Kontextmenü (Rechtsklick in Hauptfenster) möglich
- Einträge können über einen Doppelklick ausgeführt werden
- Erklärung add/ change:
Name: Name, der im Hauptfenster angezeigt wird (falls das Feld leer ist, wird automatisch der Dateiname ohne Endung eingetragen)
Path: über das Ordnersymbol kann zur Datei, die ausgeführt werden soll, navigiert werden. Über den grünen Pfeil kann die Datei direkt gestartet werden (falls dies nötig ist, um z. B. die Login
Options zu füllen)
Im Dropdown-Feld neben dem Namen kann ausgewählt werden, in welchem Zustand das Fenster der Datei gestartet werden soll. Funktioniert aber nur, wenn das Fenster direkt aufgerufen wird, nicht, wenn z. B. ein Login-Fenster vorgeschaltet ist.
Start Options:
bei "Start after" können 1 - n Programme (getrennt miteingetragen werden, auf dessen Beendung gewartet werden soll, bevor die Datei gestartet wird
bei "wait" kann festgelegt werden, wie lange die Verzögerung sein soll, bis die Datei gestartet wird. Zusätzlich kann die Verzögerung mit "before" vor "Start after", oder mit "after" nach "Start after" ausgeführt werden
Login Options:
wenn die Login Options aktiviert werden, startet automatisch das AutoItInfo-Fenster (beim deaktivieren, Klick auf OK oder Cancel wird dies automatisch wieder geschlossen)
WICHTIG: wenn die Login Options aktiviert sind, MUSS ein TITLE angegeben werden
Erklärung der restlichen Felder:
vorne wird immer der Text eingetragen, der zu senden ist, dahinter an welches Control (aus AutoItInfo-Fenster. TIP: mit Doppelklick)
Falls bei Submit kein Control eingetragen wurde, wird ENTER an das Password-Control geschickt
TIP: wurden ein TITLE in den LOGIN OPTIONS gepflegt und existiert dieser TITLE schon, bevor die Datei ausgeführt wurde, wird dieser Fenster verwendet
Main-Programm:
Spoiler anzeigen
#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>
;Tooltips
;Reihenfolge der Sortierung im ListView speichern
;Statusbar-Infos
;~ 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
TraySetClick(8)
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "_ToogleWindow")
Global $ChangeToolFlag = False, $aRow, $Autostart = 0, $Autostart_On = False, $ShowGui = 0
$key = Log(986543568)
$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 "]
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
#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)
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
_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
If $ShowGui = 1 Then GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
WinSetOnTop($Form1, "", 1)
GUIRegisterMsg($WM_SIZE, "_ResizeStatusBar")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($ListView1)]
;~ Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($ListView2)]
$TP2 = TrayCreateItem("Autostart")
TrayItemSetOnEvent(-1, "_Autostart")
TrayCreateItem("")
TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_Exit")
_CheckAutostart()
If $Autostart = 1 Then TrayItemSetState($TP2, 1)
While 1
Sleep(100)
If _IsPressed("1B") And WinGetState($Form1) = 15 Then _ToogleHide()
WEnd
;;;; 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)
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
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])
GUICtrlSetData($Combo2, "before|after", "after")
GUICtrlSetData($Combo3, "Mouse|Enter", "Enter")
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
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 ###
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
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
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
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
Func _SetGroupState($nIDStart, $nIDStop, $nState)
; Author: Prog@ndy
Local $i
For $i = $nIDStart To $nIDStop
GUICtrlSetState($i, $nState)
Next
EndFunc ;==>_SetGroupState
Func _ToogleHide()
GUISetState(@SW_HIDE)
EndFunc ;==>_ToogleHide
Func _ToogleWindow()
$WinState = WinGetState($Form1)
If $WinState = 5 Then
GUISetState(@SW_SHOW)
Else
GUISetState(@SW_HIDE)
EndIf
EndFunc ;==>_ToogleWindow
Func _ResizeStatusBar()
_GUICtrlStatusBar_Resize($StatusBar1)
EndFunc ;==>_ResizeStatusBar
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
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
;~ Func _Exit()
;~ Exit
;~ EndFunc ;==>_Exit
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] - ![]()
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
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
;===============================================================================
; 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
;===============================================================================
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
Programm was zum ausführen benötigt wird:
Spoiler anzeigen
#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>
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
$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
$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)
_SQLite_Close()
_SQLite_Shutdown()
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
$PS = _PathSplit1($aRow[1])
FileChangeDir($PS[2])
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
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
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