10 Tipps für AutoHotkey-Einsteiger
AutoHotkey ist unter Windows der wohl beste Scripting-Einstieg, weil wirklich jeder binnen Minuten ein erstes wirklich nützliches Skript hinbekommt. Und mit ein paar Tipps, lassen sich auch die ersten Hürden auf dem Weg zu komplexeren Anwendungen schnell nehmen.
Zu AutoHotkey findet Ihr hier allerlei Artikel, beispielsweise zum besagten allerersten Skript, zu kleinen Beispielanwendungen und natürlich auch ein ganzes Tutorial. In diesem Artikel gibt es zunächst 5 Tipps für die Arbeit mit AutoHotkey und dann 5 Tipps zu typischen Wie-geht-das-Fragen.
1. Arbeiten mit Notepad++
AutoHotkey-Entwicklung geht mit Notepad++ dank zweier Features besonders komfortabel: Zum einen wird AutoHotkey als Sprache erkannt, womit Ihr Autovervollständigung und Syntax-Highlighting bekommt. Zum anderen könnt Ihr Skripte direkt aus Notepad++ starten. Das macht das Testen sehr einfach. Allerdings müsst Ihr beide Features nachrüsten.
AutoHotkey als Sprache: Die Dateien zum Herunterladen findet Ihr hier. Für das Syntax-Highlighting speichert einfach die Datei userDefineLang_AHK.xml im Notepad++-Verzeichnis, startet Notepad++ neu und aktiviert die Sprache über Sprache/Eigene Sprache importieren. Für die Autovervollständigung speichert die Datei AutoHotkey.xml im Notepad++-Verzeichnis unter plugins\APIs und aktiviert sie unter Einstellungen/Optionen/Autovervollständigung.
Skripte aus Notepad++ starten: Entpackt diese ZIP-Datei und speichert das enthaltene Skript irgendwo. In Notepad++ gebt Ihr unter Ausführen/Externes Programm ausführen eben dieses Skript an und vergebt einen Hotkey, beispielsweise ALT+ENTER, das kann man sich leicht merken. Sub-Tipp: Ein so gestartetes Skript wird von AutoHotkey automatisch ersetzt, wenn Ihr es aktualisiert und erneut per ALT+ENTER startet.
2. Grafisches IDE nutzen
Natürlich gibt es für AutoHotkey auch eine grafische Entwicklungsumgebung. AutoGUI ist ziemlich intuitiv, hat aber einen großen Haken: Sobald Ihr den Code grafischer Elemente wie Buttons oder Texte im Code manuell antastet, könnt Ihr den GUI-Designer nicht mehr nutzen, das Vorschaufenster verschwindet für immer - und das passiert bisweilen ganz fix aus Versehen.
Aber: AutoGUI eignet sich hervorragend, um mal eben den Code für ein paar Design-Elemente per Drag&Drop zu erstellen und in ein Projekt einzufügen.
3. Skripte als EXE speichern
Eure eigenen Skripte werdet Ihr in der Regel einfach als AHK-Skripte laufen lassen. Wenn Ihr sie weitergeben wollt, könnt Ihr sie aber auch als EXE-Dateien speichern, genauer gesagt als solche kompilieren. Den Compiler findet Ihr im AutoHotkey-Verzeichnis, es geht aber auch über das Kontextmenü von AHK-Dateien - einfach mal einen Rechtsklick drauf machen.
4. Befehlsreferenz nutzen
Der vielleicht wichtigste Tipp: Nutzt die AutoHotkey-Referenz! Diese ist nämlich sehr gut, hat immer kurze Beispiele und wenn Ihr den Aufbau eines Eintrags einmal verstanden habt, liest sich das Ganze auch sehr einfach. Meistens findet Ihr zuerst etwas in der Art:
GuiControl, SubCommand, ControlID , Value
Diese Begriffe werden dann unter Parameters erklärt. GuiControl ist die Funktion zum Ändern eines grafischen Elements. Dann werden die SubCommands ausführlich erklärt, die hier eben bestimmen, wie die Elemente verändert werden sollen. ControlID sagt welches Element verändert werden soll und Value ist dann der neue Inhalt.
In der Praxis stehen sich also die grundsätzliche Darstellung vom Anfang und ein Code-Beispiel gegenüber:
Artikel-Anfang: GuiControl, SubCommand, ControlID , Value
Mit SubCommand: GuiControl, Text, ControlID , Value
Echter Code am Ende: GuiControl, Text, MeinElement, Mein neuer Text
Alles dazwischen ist eben viel Erklärtext.
5. Cut&Paste aus Skripten
Gerade am Anfang ist es nicht immer ganz leicht mit der lieben Syntax. Und auch das Kombinieren von einzelnen Funktionen ist nicht immer ganz trivial. Wenn Ihr beispielsweise wisst, wie man eine GUI mit Button baut und wie man Programme startet, ist es immer noch nicht selbsterklärend, wie Ihr das Programm über den Button startet (siehe Tipp 10). Und daher solltet Ihr immer zunächst schauen, ob Ihr nicht ein AutoHotkey-Skript findet, in dem die Funktion so ähnlich enthalten ist.
Dann kopiert einfach den Teil, den Ihr benötigt, testet es ohne Veränderungen, ändert eine Kleinigkeit, testet, ändert, testet und so weiter. Und genau dieses Kopieren führt oft zum nächsten Tipp.
6. Zwei Wege, Variablen zu belegen
Variablen können in AutoHotkey auf zwei unterschiedliche Arten belegt werden. Hier erstmal zwei Beispiele:
Legacy-Methode: MeineVariable1 = Hallo Welt
Expression-Methode: MeineVariable2 := "Hallo Welt"
Es werden also einmal per = Zeichenketten ohne Anführungszeichen übergeben und per := solche mit Anführungszeichen. Und auch die Ansprache von Variablen ist entsprechend anders:
Legacy-Methode: MsgBox, %MeineVariable1%
Expression-Methode: MsgBox % MeineVariable2
Die Funktion an sich ist soweit identisch, in der Praxis ist aber schon mal die eine oder andere einfacher zu nutzen (meist, wenn's um die lieben Anführungszeichen in den Zeichenketten geht). Wichtig ist aber eigentlich nur, dass Ihr davon wisst - ansonsten kann das schon mal verwirren.
7. Daten aus externen Programmen einlesen
Ein typischer Wunsch von Anfängen: Ein externes Programm aus einem Skript aufrufen und dessen Ausgabe im weiteren Skript nutzen. Natürlich könnt Ihr in eine Datei ausgeben lassen und diese einlesen - einfach, aber nicht schön und braucht viel Code. Es gibt aber eine simple Möglichkeit:
^#u::
clipboard =
Run cmd /c "dir|clip"
ClipWait
MsgBox % clipboard
return
Das könnt Ihr so wie es ist kopieren und testen. Über das Tastenkürzel STRG+WIN+U wird erst die vorgegebene AutoHotkey-Variable clipboard geleert, dann startet run die Eingabeaufforderung (cmd - das /c schließt sie wieder), dort wird der Befehl dir ausgeführt, dessen Ausgabe per |clipboard in die Zwischenablage geschrieben wird. ClipWait wartet einfach nur ab, bis die Zwischenablage gefüllt ist. Schlussendlich startet MsgBox einen Dialog mit dem Inhalt der Zwischenablage. Das ist ein ziemlich universelles Muster und reicht häufig aus.
8. Abfrage mit Ja-Nein-Dialog
Ein Windows-Dialog mit den üblichen Buttons OK und CANCEL gehört zu den absoluten Basics, wenn man dem Nutzer des Skript die Chance geben will, eine Aktion doch noch abzubrechen - etwa das Überschreiben von Dateien. Und das ist erfreulich einfach:
MsgBox, 4,, Weiter oder abbrechen?
IfMsgBox, NO, return
...
Über die Option 4 wird aus der Standard-MsgBox eine Ja/Nein-Box, anschließend müsst Ihr nur per IfMsgBox fragen, ob die Antwort NO war und dann per return abbrechen - war die Antwort Ja, geht es einfach weiter im Skript.
9. Wenn-Dann-Abfrage erstellen
So eine Abfrage geht natürlich auch allgemeiner, hier ein simples, universelles Wenn-Dann-Konstrukt
if (MeineVariable = samstag)
MsgBox Heute ist Samstag.
else if (MeineVariable = sonntag)
MsgBox Heute ist Sonntag.
else
{
MsgBox Heute ist ein Wochentag.
MsgBox Ein zweiter Dialog ...
}
return
Der Aufbau dürfte selbsterklärend sein, wichtig ist, die Kombination aus if und else if und else zu verinnerlichen. if setzt die erste Option, weitere Optionen werden über auch mehrere else-if-Abfrage gesetzt und das finale else übernimmt einfach alle anderen Fälle. Und wenn nicht nur ein Befehl ausgeführt werden soll, müssen alle Befehle in geschweifte Klammern gefasst werden.
10. GUI mit Button-Aktion erstellen
Mit Skripten kann man sich wunderbar simple GUIs für Kommandozeilen-Tools basteln - hier mal ein konkretes Beispiel. Die Grundlage ist ein Button, der eine Aktion auslöst, daher hier auch dafür der simpelst mögliche Code:
Gui Show, x500 y500 w200 h200, MeineGUI
Gui Add, Button, gmeinbutton x10 y10 w100 h30, Ein Button
return
meinbutton:
MsgBox Hallo Welt
return
Hier wird per Gui Show ein Fenster erstellt, dann per Gui Add ein Button hinzugefügt - schon steht die GUI. Das "Geheimnis" liegt in gmeinbutton: Das g steht für GoSub, was hier soviel heißt wie: Springe im Skript zur Stelle "meinbutton:". Und anschließend folgt eben diese Zeile mit dem gewünschten Code - hier wird also einfach ein simpler Dialog mit dem Text "Hallo Welt" gezeigt. Das Ansprechen über diese so genannten **g-Label ist wunderbar einfach - da könnte sich manch eine Sprache eine Scheibe von abschneiden.
Wie geht's weiter?
Bei AutoHotkey ist neben der Referenz auch das Forum eine sehr wichtige Hilfsquelle, da sich dort zum einen viele sehr hilfsbereite Leute finden (auch auf Deutsch) und zum anderen auch sehr sehr viele Lösungen, Code-Beispiele und oft sogar ganze Programme - schaut also mal vorbei.
Ein Tipp für erste Projekte: Nehmt Euch entweder einen konkreten eigenen Bedarf vor oder schnappt Euch ein fertiges AutoHotkey-Programm und ändert am Quellcode herum. Ersteres garantiert die Motivation und hält die Angelegenheit sehr simpel. Zweiteres liefert eben fertigen Code in korrekter Syntax, erschlägt Euch aber unter Umständen mit der schieren Code-Menge oder Komplexität. Geschmackssache.
Vor allem aber ist es eine wirklich gute Idee, sich am Anfang gar nicht unbedingt die ganze Referenz zu geben und gleich an einem AutoHotkey-basierten Photoshop-Konkurrenten zu arbeiten, sondern etwas Einfaches, etwas Sinnvolles zu basteln - und sei es ein das erwähnte typische erste Skript für Textbausteine. Ihr werdet nämlich schnell merken, dass das die Arbeit ungemein erleichtert und viel, viel Tipparbeit erspart - und dann nicht mehr ohne AutoHotkey leben wollen! Apropos: Tools für mehr Effizienz - aka Mehr Kaffeezeit.
Und wenn so ein Skript sowieso ständig im Hintergrund läuft, könnt Ihr es nach Bedarf immer wieder mal ganz fix erweitern. Einfach wie oben in Tipp Nr. 7 beschrieben einen Hotkey mit einer (gerne auch komplexeren) Funktion versehen und schon kann Euer Skript viel mehr, als nur Programme starten und Textbausteine einsetzen. Das ist ja das Schöne an eigenen Skripten: Ihr könnt einfach all Eure Wünsche mit einer einzelnen Datei realisieren, auch wenn es um unterschiedlichste Themen geht.
Wollt Ihr mehr über AutoHotkey erfahren? Oder habt Ihr eigene Skripte geschrieben? Lasst es uns wissen!
Noch ein Versuch: Ich benötige Hilfe, die ich auch gerne bezahlen werde. In einem Anwenderprpgramm sollen Artikelnummern von einer alten Variante auf eine neue umgestellt werde, z.B. soll aus 4711 (Ursprung) 0815A werden. Da aber alle Belege und Statistiken auch dieser Konsequenz folgen sollen, geht das (eigentlich) nur manuell. Erst wird der zu ändernde Schlüssel erfasst, dann der Zielschlüssel – dann wird die Eingabe bestätigt und alles läuft durch. Nur bei der Anzahl der umzustellenden Artikelnummern verbietet sich eine manuelle Vorgehensweise. Kann mir Mirco (vermutlich noch jünger als ich selbst) helfen. Ich bin jederzeit zu erreichen.
Tja, das ist schwierig so pauschal. Wenn die Umstellung in diesem Programm geschehen muss, kann ich absolut nichts Sinnvolles dazu sagen – außer, dass es möglicherweise schlichtweg nicht gehen könnte. Bei einem proprietären Programm mit proprietärem Dateiformat halte ich das leider sogar für recht wahrscheinlich.
Wenn die ganzen Daten in Form von Textdateien verfügbar sind, sei es ein Datenbank-Dump oder seien TXT-ähnliche Dateien, sollte das machbar sein. Das Zauberwort heißt Regular Expression: Man müsste eine allgemeingültige Definition bauen, die die alten Artikelnummern findet; also zum Beispiel „Finde alle Stellen, an denen „Artikelnummer:“ gefolgt von Leerzeichen, 4 Ziffern und einem Umbruch steht.“ Dann müssten diese gefundenen Artikelnummern nach einem festen Muster umgewandelt werden.
Das Ganze funktioniert aber nur, wenn:
die Daten in einem Textformat vorliegen, eine RegEx formuliert werden kann, die eindeutig ist (4 Ziffern allein könnten auch eine Jahresangabe sein) und es eine Logik gibt, nach der sich die neuen Nummern von den alten ableiten lassen.
Tendenziell bräuchte es auch noch ein wenig Scripting-Unterbau, um Ausnahmen, Fehler und so weiter zu handhaben.
Am Ende hängt es sehr von den Dateiformaten und der Beschaffenheit der Daten und Artikelnummern im Detail ab. Im besten Fall (Textdateien und eindeutig zu erkennende Artikelnummern) könnte sich das Ganze mit ein, zwei sed-Befehlen und einer RegEx erledigen lassen – wirklich einfach ist aber auch das nicht unbedingt. Im schlimmsten Fall landest Du bei mehr Programmieraufwand, als dass es sich noch lohnen würde.
Die Kurzversion: sed und Regular Expression wären meine Empfehlungen für weitere Recherchen. Darüber hinaus kann ich leider auch nicht groß weiterhelfen, da bräuchtest Du im Zweifelsfall einen Entwickler.