Abend an alle,
hab mal nen Tool geschrieben das es ermöglicht in einem GUI in eine ComboBox Befehle auszuwählen, die man vorher im selben Ordner als Textfile abgelegt hat.
Dadurch kann man schnell mehrere Programme starten und ist bissl übersichtlicher anstatt der ganzen Klickerei und man muss sich nicht die ganzen Hotkey-Belegungen merken (falls man so wie ich auf der Tastatur ca. 40 Hotkeys vergeben hat :D, strg+0-9,win+0-9,strg+numpad0-9,win+numpad0-9. Ja, es könnte sein, dass ich ein bisschen faul und gemütlich bin, zumindest im Windows-Alltag :D).
War mal ne kleine nette Spielerei/Übung für ComboBoxen, Arrays, Trays und GUIs
Vielleicht könnt ihr ja das Skript/Tool gebrauchen oder Teile hiervon.
So hier noch schnell das Skript mit schlanken 155 Zeilen:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>
#include <ComboConstants.au3>
#include <array.au3>
#include <file.au3>
Opt("TrayMenuMode", 1)
$file = @ScriptDir & "\commands.txt"
Dim $arCmds[1000][2]
$close_after_cmd = 0
$hotkey = 1
$cmd = 0
If FileExists($file) = 1 Then
_read()
Else
MsgBox(266304, 'Commands.txt','Datei nicht existent. Datei nun angelegt im selben Verzeichnis in der die .exe liegt.'&@CRLF&'Bitte in diese Datei Befehle im folgender Art eintragen:'&@CRLF&'NAME DES BEFEHLS;2.NAME DES BEFEHLS!PFAD ZUR DATEI/ORDNER'&@CRLF&'Dies könnte z.Bsp. so aussehen: mozilla;firefox!C:\Programme\Firefox\Firefox.exe'&@CRLF&'Namen der Kommandos werden mit ; getrennt ohne Leerzeichen und vom Namen des Befehls zum Speicherort mit !'&@CRLF&'Es können beliebig viele Namen vergeben werden aber nur ein Pfad zur Datei/Ordner.'&@CRLF&'Namen die doppeltvorkommen werden nicht aufgenommen und im txt-File gekennzeichnet mit # genauso das selbe mit Pfaden die nicht existieren.'&@CRLF&'Aktualisierung der Befehle findet nur dann statt, wenn das Tool beendet und dann neu angestartet wird.'&@CRLF&'Tool wird automatisch beendet wenn keine Commands.txt existiert und wenn keine gültigen Einträge vorhanden sind. Bitte als (Befehls-)Namen nur Buchstaben verwenden.'&@CRLF&'Viel Spaß noch mit dem Tool, greets Stormy aka Patrick.')
FileWriteLine($file, "")
Exit
EndIf
Func _read()
$lines = _FileCountLines($file)
For $i = 1 To $lines
$line = FileReadLine($file,$i)
If $line <> "" Then
$check = StringLeft($line,1)
If $check <> "#" Then
$arMark = StringSplit($line,"!")
If $arMark[0] = 2 Then
If FileExists($arMark[2]) = 1 Then
$arSemi = StringSplit($arMark[1],";")
For $ii = 1 To $arSemi[0]
If $arSemi[$ii] <> "" Then
$end = UBound($arCmds)
$existent = 0
For $iii = 1 To $end
If $arCmds[$iii-1][0] = $arSemi[$ii] Then
$existent = 1
ExitLoop
EndIf
Next
If $existent = 0 Then
$arCmds[$cmd][0] = $arSemi[$ii]
$arCmds[$cmd][1] = $arMark[2]
$cmd += 1
EndIf
EndIf
Next
EndIf
EndIf
EndIf
EndIf
Next
EndFunc ;==>_read
$hGui = GUICreate("Commandbar",220,40,-1,-1,BitOR($WS_CAPTION,$WS_OVERLAPPED,$WS_SYSMENU))
$hCombo = GUICtrlCreateCombo("",10,10,200,20,BitOR($CBS_SORT,$CBS_LOWERCASE,$CBS_DROPDOWN,$CBS_SIMPLE,$CBS_AUTOHSCROLL))
For $counter = 0 To $cmd - 1
GUICtrlSetData($hCombo,$arCmds[$counter][0]&" _"&$counter)
Next
$tGui = TrayCreateItem("Befehl ausführen/GUI öffnen")
TrayCreateItem("")
$tCAC = TrayCreateItem("Nach Befehl GUI schließen")
$tHotkey = TrayCreateItem("Strg+1 als Hotkey setzen")
TrayCreateItem("")
$tExit = TrayCreateItem("Beenden")
_hotkey()
[/autoit] [autoit][/autoit] [autoit]While 1
If WinActive("Commandbar") = 1 Then
HotKeySet("{enter}","_accept")
Else
HotKeySet("{enter}")
EndIf
$msg_gui = GUIGetMsg()
$msg_tray = TrayGetMsg()
Select
Case $msg_gui = $GUI_EVENT_CLOSE
_guiclose()
Case $msg_tray = $tExit
_trayclose()
Case $msg_tray = $tCAC
_cac()
Case $msg_tray = $tHotkey
_hotkey()
Case $msg_tray = $tGui
_guiopen()
EndSelect
WEnd
Func _accept()
$current = GUICtrlRead($hCombo)
$length = StringLen($current)
$position = StringInStr($current, "_", 0, -1)
$count = $length - $position
$nr = StringRight($current, $count)
ShellExecute($arCmds[$nr][1])
If $close_after_cmd = 1 Then _guiclose()
EndFunc
Func _guiopen()
GUISetState(@SW_SHOW, $hGui)
TraySetState(2)
HotKeySet("^1")
HotKeySet("#t")
EndFunc
Func _guiclose()
GUISetState(@SW_HIDE)
TraySetState(1)
HotKeySet("{enter}")
If $hotkey = 1 Then
$hotkey = 0
Else
$hotkey = 1
EndIf
_hotkey()
EndFunc
Func _trayclose()
GUIDelete($hGui)
HotKeySet("#t")
HotKeySet("^1")
HotKeySet("{enter}")
TraySetState(2)
Exit
EndFunc
Func _hotkey()
If $hotkey = 1 Then
HotKeySet("^1")
HotKeySet("#t","_guiopen")
TrayItemSetText($tHotkey,"Strg+1 als Hotkey setzen")
$hotkey = 0
Else
HotKeySet("#t")
HotKeySet("^1", "_guiopen")
TrayItemSetText($tHotkey,"Windows+T als Hotkey setzen")
$hotkey = 1
EndIf
EndFunc
Func _cac()
If $close_after_cmd = 1 Then
$close_after_cmd = 0
TrayItemSetText($tCAC,"Nach Befehl GUI schließen")
Else
$close_after_cmd = 1
TrayItemSetText($tCAC,"Nach Befehl GUI nicht schließen")
EndIf
EndFunc
und natürlich das Skript zum Downloaden
autoit.de/wcf/attachment/2548/
Grüße und schönen Abend noch an alle
Stormy/Patrick