Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Programme per Kürzel starten


  • Please log in to reply
22 replies to this topic
AutomateEverything
  • Members
  • 60 posts
  • Last active: Aug 25 2014 06:02 AM
  • Joined: 03 Dec 2012
Hallo,
Ich möchte Programme per Text-Kürzel starten. Dafür verwende ich im Moment diesen Code:
#a::
InputBox, shortcut ; get program-shortcut
if ErrorLevel = Max
{
MsgBox, You entered "%shortcut%", which is the maximum length of text.
return
}
if ErrorLevel = Timeout
{
MsgBox, You entered "%shortcut%" at which time the input timed out.
return
}
if ErrorLevel = NewInput
return
IfInString, ErrorLevel, EndKey:
{
MsgBox, You entered "%shortcut%" and terminated the input with %ErrorLevel%.
return
}
; Otherwise, a match was found.
SetKeyDelay, -1 ; Most editors can handle the fastest speed.
; Choose program by shortcut
if shortcut = ff
Run C:\Programme\Firefox\firefox.exe
else if shortcut = op
Run C:\Programme\Opera\opera.exe
else if shortcut = ...
...
return
Wenn man jedoch sehr viele Einträge dieser Art hat, dauert es recht lang, bis das Programm startet. Gibt es evtl. eine effizientere Umsetzung?

Vielen Dank,
Michael

ruespe
  • Members
  • 567 posts
  • Last active: Dec 01 2014 07:59 PM
  • Joined: 17 Jun 2008
1. Du fragst jede Menge Fehleroptionen für Input ab, die aber nie ausgelöst werden, weil du sie nicht anforderst
2. Bau dir doch stattdessen ein Menü, über das du deine Auswahl direkt treffen kannst

AutomateEverything
  • Members
  • 60 posts
  • Last active: Aug 25 2014 06:02 AM
  • Joined: 03 Dec 2012
Ok, danke für den Tipp. Habe die Fehlerbehandlung von einem anderen Skript kopiert. Dachte eigentlich, dass diese von InputBox geworfen werden.

Was meinst du mit Menü? Ich möchte die Programme ohne Maus starten.

jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
z.B. so in der Art
Posted Image
mit Shortkey zum Starten der Ansicht und Tabs für verschiedene Arten von Programmen
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

ruespe
  • Members
  • 567 posts
  • Last active: Dec 01 2014 07:59 PM
  • Joined: 17 Jun 2008
Oder du schaust dir mal das Menu-Kommando an. Menüpunkte lassen sich auch mit Shortcuts auslösen.

jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Keine Ahnung was du da machst, habs mit 20 programmen probiert und funktioniert alles schnell

#a::
InputBox, Test, Geben sie einen Befehl ein:, Geben sie einen Befehl ein:

if (Test = "ff")
Run, Firefox.exe
else if (Test = "np")
Run, Notepad.exe
else
MsgBox, Wrong Input: %Test%

[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

AutomateEverything
  • Members
  • 60 posts
  • Last active: Aug 25 2014 06:02 AM
  • Joined: 03 Dec 2012
Zum Menü: Sicherlich keine schlechte Lösung, aber ich bevorzuge lieber ein Text-Kürzel wie "ff" für Firefox statt Alt + F (menu shortcuts).

Vmtl. bilde ich mir nur ein, dass es bei den unteren Einträgen länger dauert. Trotzdem ist die Umsetzung im Moment recht schlecht zum Lesen. Mir gefällt das if-else Konstrukt einfach nicht. Ein switch-case wäre schöner, aber auch nicht optimal.

jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
meinst sowas? (AutoDingensIt)

$input = InputBox("Geben sie einen Befehl ein:","Geben sie einen Befehl ein:")

Switch $input
Case $input = "msghallo"
MsgBox(0,"Hallo","Hallo")
Case $input = "iprenew"
ShellExecute("ipconfig","/flushdns")
Case $input = "exit"
Exit
Endswitch

[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012
Es geht doch auch ohne switch...
#SingleInstance, force
#a::
InputBox, shortcut
if(shortcut = "np")
Run, notepad.exe
else if(shortcut = "ff")
Run, firefox.exe
else if(shortcut = "gc")
Run, chrome.exe
else if(shortcut = "scite")
Run, C:\Program Files\AutoHotkey\SciTE\SciTE.exe
return


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
und wenn du vom if else weggehst und nur if benutzt?

#a::
InputBox, Test, Geben sie einen Befehl ein:, Geben sie einen Befehl ein:

if (Test = "ff")
Run, Firefox.exe
if (Test = "np")
Run, Notepad.exe


dann ist es auch wieder leslicher
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012
Hi jNizM, wie bekommst du den Code bunt?

SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012
Mit dem Tag
[php]


AutomateEverything
  • Members
  • 60 posts
  • Last active: Aug 25 2014 06:02 AM
  • Joined: 03 Dec 2012
Vielen Dank schon mal für die vielen Antworten. Hier wird einem echt schnell geholfen.

meinst sowas? (AutoDingensIt)


$input = InputBox("Geben sie einen Befehl ein:","Geben sie einen Befehl ein:")

Switch $input
Case $input = "msghallo"
MsgBox(0,"Hallo","Hallo")
Case $input = "iprenew"
ShellExecute("ipconfig","/flushdns")
Case $input = "exit"
Exit
Endswitch

Ja


Es geht doch auch ohne switch...

#SingleInstance, force
#a::
InputBox, shortcut
if(shortcut = "np")
Run, notepad.exe
else if(shortcut = "ff")
Run, firefox.exe
else if(shortcut = "gc")
Run, chrome.exe
else if(shortcut = "scite")
Run, C:\Program Files\AutoHotkey\SciTE\SciTE.exe
return

So habe ich es im Moment auch gelöst. Nur ohne #SingleInstance, was aber Sinn macht.


und wenn du vom if else weggehst und nur if benutzt?


#a::
InputBox, Test, Geben sie einen Befehl ein:, Geben sie einen Befehl ein:

if (Test = "ff")
Run, Firefox.exe
if (Test = "np")
Run, Notepad.exe


dann ist es auch wieder leslicher

Das macht aber nicht das gleiche und ist zudem aufwendiger. Lesbarer is es nur bedingt.

Mir ist eine andere Idee gekommen. Ich möchte dafür Dictionaries verwenden. Allerdings weiß ich nicht, wie ich die Initialisierung richtig vornehmen kann (siehe Code-Kommentare):

; Das Dictionary soll beim Starten vom Skript erstellt werden,
; so dass man später darauf zugreifen kann
Dic()
; Hinzufügen der Elemente (Text-Kürzel mit Programm verknüpfen)
Dic_Add("ff", "C:\Programme\Firefox\firefox.exe")
Dic_Add("op", "C:\Programme\Opera\opera.exe")

; Starten von Programmen über InputBox
#a::
InputBox, shortcut ; Text-Kürzel abfragen
path := Dic_Get(shortcut) ; Programm-Pfad abrufen
IfEqual path,, return ; Kürzel mit Programm verknüpft?
Run path ; Programm starten
return

; Muss beim beenden vom Skript aufgerufen werden
Dic("Exit")
Return

Die Kürzel-Programm-Verknüpfungen könnte ich theoretisch noch aus einer entsprechenden Datei lesen (z.B. csv).

Gruß, Michael

SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012
Was denke ich noch eine interessante Idee für dich wäre (die auch ziemlich einfach ist...):

#SingleInstance, force
#a::
InputBox, shortcut
IniRead, path, shortcuts.ini, Shortcuts, %shortcut%, None
if(path = "None")
MsgBox, 16, Error, This path doesn't exist!, 2
else
Run, %path%
return


Dann könnte deine shortcuts.ini (im gleichen Verzeichnis wie das Programm) etwa so aussehen:
[Shortcuts]
gc=chrome.exe
op=opera.exe

PS: Ich nutze #SingleInstance nur, um die Meldungen beim Programmstart zu vermeiden Posted Image

AutomateEverything
  • Members
  • 60 posts
  • Last active: Aug 25 2014 06:02 AM
  • Joined: 03 Dec 2012
Danke, dieser Ansatz gefällt mir schon recht gut. Es wäre jedoch praktisch, wenn es einen Befehl "help" geben würde, der eine Liste der Kürzel anzeigt. Am besten ist vmtl. eine Tabelle mit 3 Spalten: Kürzel, Programm-Name und Programm-Pfad. Zudem wäre es super, wenn man einem Programm mehrere Kürzel zuweisen kann.

Wie könnte man das realisieren? Eignen sich .ini's noch dafür?

Vielen Dank,
Michael