Textbausteine mit Autohotkey für Einsteiger

Mit „Autohotkey“ habe ich mich schon mehrfach beschäftigt. Das war jedoch meist sehr speziell. Aus konkretem Anlass habe ich eine Anleitung für Einsteiger geschrieben, wie damit schlaue Textbausteine erzeugt und verwaltet werden können.

Weil ich selbst weiß, wie doof man sich gelegentlich fühlt, wenn Kenner ein geniales Produkt beschreiben, versuche ich mich nachfolgend mit einer „Einsteiger-Anleitung“. Feedback zur Verbesserung ist willkommen, denn da ich selbst schon ein bisschen Ahnung habe, übersehe ich eventuell selbst schon relevante Details, die zum „Showstopper“ werden können.

Ziel: Eine „Autohotkey-Entwicklungsumgebung“ und Textbausteinverwaltung damit. Die erforderlichen Programme werden alle mit Download-Adresse vorgestellt, die Beispieldaten stehen am Ende in einer herunterladbare Datei, mit der direkt gearbeitet werden kann. Eine kompkate Zusammenfassung ist das nachfolgende Video. Ich empfehle dennoch die aufmerksame Lektüre des Tutorials… .

Was wird benötigt:

  • Der AutoHotkey-Installer. Bitte nur da das Installationsprogramm herunter laden. Er wird von dieversen Zeitschriften, etc. zwar ebenfalls angeboten, dort sind die Daten jedoch oft veraltet oder werden mit fragwürdigen Zusätzen versehen.
  • Auf der gleichen Seite gibt es weiter unten einen Verweis auf „Help files in other languages“, da ist „German (Deutsch)“ von Interesse. Der Link führt zu GitHUB, dort gibt es die aktuelle deutsche Hilfe als ZIP-Datei.
  • Für die Erstellung der Textbausteine ist ein Texteditor erforderlich. Grundsätzlich ist jeder Editor geeignet, der mit Text-Dateien im UTF-8-Format umgehen kann. Es gibt das „Komplettpaket“ SciTE4AutoHotkey, das für AutoHotkey vorkonfiguriert ist. Es ist zwar schon etwas älter, jedoch ein gutes Rundum-Sorglos-Paket, weshalb ich es für diese Anleitung verwende. Bitte das Portable.zip herunter laden.

Word, Open/FreeOffice oder vergleichbare Programme sind ungeeignet.

Tipp
Im AutoHotkey-Forum gibt es einen eigenen Bereich, der sich mit der Konfiguration von Editoren beschäftigt.

Installieren und Auspacken

  1. Zuerst wird der Installer für Autohotkey gestartet. Den vorgeschlagenen Installationspfad unbedingt ändern. Im Windows-Programm-Verzeichnis gelten eingeschränkte Rechte, die für die nachfolgende Beschreibung „Showstopper“ sind. Außerdem werden dann die Dateien „kreuz und quer“ über den Rechner verteilt, was es schwierig bis unmöglich macht, die eigenen Einstellungen auf einen anderen Rechner zu portieren. Vorzugsweise wird das Programm in den Dokumente-Ordner und dort in ein Unterverzeichnis Autohotkey installiert, damit dieses Verzeichnis in der persönlichen Datensicherung mit drin ist. Die Installation wird mit Exit beendet.
  2. Die ZIP-Pakete für die Hilfe und den Editor werden jetzt in dieses Verzeichnis kopiert, weil es das Entpacken mit den richtigen Dateipfaden vereinfacht:
    • Die deutsche Hilfe (AutoHotkeyHelp_DE.zip) wird ohne Unterordner in dieses Verzeichnis entpackt. Der Entpacker wird wahrscheinlich ein Unterverzeichnis vorschlagen, dass einfach aus dem Pfad gelöscht wird. Die Warnung, weil die bereits vorhandene (englische) Hilfe den gleichen Datei-Namen hat, wird ignoriert. Wir wollen es deutsch.
    • Der Editor (SciTe4AHKxxxx_Portable.zip) soll in einem Unterordner SciTE liegen. Der Entpacker wird einen komplizierteren Pfad (den aktuellen verlängert um den Dateinamen) vorschlagen. Den „Dateinamen“ einfach entfernen, denn aus dem Paket wird ein Ordner SciTE entpackt.

Einrichten

Im SciTE-Odern das Programm SciTE.exe starten. Das ist (noch) englisch. Damit der Editor deutsch spricht, das Menü Options aufklappen und Open _config.properties anklicken. Es öffnet sich eine Datei mit der Zeile

locale.properties=locales\English.locale.properties

Die Sprachanpassung sieht so aus Einfach English mit Deutsch ersetzen (keine Leerzeichen, genau so geschrieben). Diese Datei speichern ( STRG + S oder Menü FileSave) und das Programm schließen. Beim nächsten Start wird das Menü deutschsprachig sein.

So lässt sich Schrift und -größe dauerhaft anpassen.
Hinweis: „Bitter“ muss installiert sein!
Schrift und Schriftgröße lässt sich mit OptionenBenutzereinstellungen öffnen dauerhaft einstellen. Details s. nebenstehendes Bild.
Damit die Unterstützung für Autohotkey perfekt wird, sollte noch die Datei AutoHtokey.chm aus dem übergeordneten Verzeichnis („Autohotkey“) in das „SciTE“-Verzeichnis kopiert werden (mit gedrückter STRG-Taste die Datei mit der Maus auf den SciTE-Ordner ziehen).

Der erste Befehl

Damit das Ändern und anlegen von Textbausteinen möglichst bequem geht, ist ein Tastenbefehl nützlich. Weil sich das ebenfalls mit AutoHotkey erledigen lässt, wird das der erste Befehl in der „Textbaustein-Datei“. Ich habe mir dafür die Tastenkombination STRG + WIN + 0 ausgesucht, weil die sehr wahrscheinlich von sonst keinem anderen Programm verwendet wird.

Dafür wird der Editor (SciTE.exe im Verzeichnis SciTE) gestartet und in die leere Datei dieser Text geschrieben:


; AHK datei editieren STRG WIN 0
^#0::
  Run %A_ScriptDir%\SciTE\SciTE.exe %A_ScriptDir%\AutoHotkey.ahk ; 
return

Dieser Text wird im „Autohotkey“-Verzeichnis **mit dem Namen autohotkey.ahk gespeichert.

Unter Windows ist die Schreibweise der Datei (groß/klein) unerheblich. In anderen Betriebsystemen ist die Schreibweise relevant. Falls der Dateiaufruf scheitert, zuerst die Schreibweise in der Datei und den Dateinamen vergleichen!

Oben in der Menü-Leiste des Editors gibt es einen grüne „Wanze“ (Debug, F7). Da mal drücken! Idealerweise erscheint nun unten rechts ein kleiner grüner Knopf mit einem „H“ drauf. Dann ist alles in Ordnung. Es kann auch eine Fehlermeldung erscheinen, die auf einen Fehler in einer Zeile hinweist. Für die Fehlersuche gibt es weiter unten ein paar Hinweise.

Wenn alles glatt lief, geht es jetzt an die …

Textbausteine

Wir beginnen mit einem „Klassiker“, die „freundlichen Grüße“. Mit der Befehlszeile


:*:mfg::Mit freundlichen Grüßen{Enter}

lässt sich das elegant in allen Programmen erledigen, sobald das Skript aktualisiert und aktiviert wurde. Die Eingabe der drei Buchstaben mfg wird sofort in „Mit freundlichen Grüßen“ umgewandelt und mit einem Zeilenvorschub abgeschlossen. Womit sich das Wort in geschwungenen Klammern bereits erklärt haben dürfte. Die Notation für besondere Tasten wird in der Hilfedatei gut erklärt. F1 im Editor drücken und auf der ersten Seite „Hotkeys“ anklicken.

Die „automatische Auslösung“ wird mit dem :*:: (zwei Doppelpunkte am Ende!) eingeleitet. Das eingegebene Kürzel wird dabei wieder entfernt.

Tipp
Damit es keine Überraschungen beim normalen Schreiben gibt, fangen meine spezielleren Kürzel meistens mit # an1. „#das“ ist unkritisch, ohne „#“ würden beim Schreiben wunderliche Dinge passieren.

Damit das Kürzel expandiert wird, muss die Datei gespeichert werden. Dann – zum Ausprobieren – die Tasten F7 (Fehlersuche) und anschließend (wenn keine Fehler) F5 drücken oder den „Play“-Knopf, der nach klicken auf die „Wanze“ erscheint.

In einem Textbaustein kann zusätzlich zur Ausgabe von Text der Eingabecursor gesteuert werden. Ein (einfaches) Beispiel:

:*:#sdh::+{Home}Sehr geehrte Damen und Herren,{Enter}{Enter}

Der Eingabe-Cursor springt von der aktuellen Position auf den Zeilenanfang und markiert dabei vorhandenen Text, der mit der Ausgabe überschrieben wird. Das erspart ggf. das vorherige Löschen eines automatischen Textanfangs („Sehr geehrte“) im Mailprogramm.

+{Home} = Shift+Pos1
In allen gängigen Programmen markiert das einen Textbereich vom Cursor zum Zeilenanfang-

Textbausteine lassen sich personalisieren, indem angehalten und auf eine Eingabe gewartet wird:

Befehl Was bedeutet das
:*:#sg:: Das Kürzel „#sg“ eingeben
sendInput, +{Home}Sehr geehrte Ab Zeilenanfang wird „Sehr geehrte“ ausgegeben
Input, tmp, V, {Enter} auf eine sichtbare Eingabe warten, die mit {Enter} beendet wird
sendInput, {up}{End},{Enter}{Enter} Den Cursor eine Zeile hoch und ans Zeilenende bewegen dort ein Komma und zweimal {Enter} ausgeben
Return Textbaustein („Makro“) beenden

Die Hilfe für die Befehle wird mit F1geöffnet, wenn der Cursor darauf steht.

Der vorige Textbaustein lässt sich problemlos „spezialisieren“, wenn beispielsweise nach dem letzten sendInput weitere folgen, mit denen ein kompletter Text ausgegeben wird.


 :*:#obst::
    sendInput, +{Home}Sehr geehrte
    Input, tmp, V, {Enter} 
    sendInput, {up}{End},{Enter}{Enter}
  sendInput, frisch eingetroffen: Äpfel aus Spanien.{Enter}Ab sofort, solange Vorrat reicht.{Enter}
  sendInput, Wir freuen uns auf Ihren Besuch{!}{Enter}{Enter}Mit freundlichen Grüßen{Enter}{Enter}Obsthandlung Frisch OHG
 Return

sendInput simuliert die Tastatureingabe. Daher ist es völlig egal, wie der Text in der Datei formatiert ist oder wie viele Befehlszeilen dort stehen. Es wird nur ausgegeben, was hinter dem Befehl steht, der nächste fügt sich nahtlos an (kein Zeilenvorschub, Leerzeichen, o.ä.). Weil es Änderungen (und Fehlersuche) vereinfacht, sollten lange Texte trotzdem in mehrere Ausgaben aufgeteilt werden.

Sogar Hervorhebungen sind möglich

Einige Programme beherrschen Auszeichungen wie beispielsweise fett, kursiv, Überschriften, etc. Textbausteine können so angelegt werden, dass sie statt nur den Text „formatierten Text“ ausgeben, wenn das Programm damit etwas anfangen kann.

Dafür ist etwas mehr Vorarbeit und Zubehör erforderlich, damit ein verbesserter Zugriff auf die Zwischenablage möglich ist. Das wird mit dem Zusatzpaket WinClip erreicht. Geschrieben mit Autohotkey, werden die im ZIP enthaltenen Dateien einfach in das Autohotkey-Verzeichnis entpackt.

Damit die Zwischenablage von allen nachfolgenden Befehlen genutzt werden kann, werden nach dem Auspacken der ZIP-Datei diese zwei Zeilen möglichst an den Anfang der Datei geschrieben (die Reihenfolge ist wichtig!):

# Include WinClipAPI.ahk
# Include WinClip.ahk

Sobald das eingefügt ist, funktioniert das nächste Skript, das wie der Vorgänger einen größeren Textblock ausgibt – jedoch wahlweise (übertrieben, zum abgucken) formatiert. Als „i-Tüpfelchen“ wird noch die Anrede in einem Formualr abgefragt:

 :*:#fobst::
   Unformatiert := "Sehr geehrte%a%,`r`n`r`nheute eingetroffen: Äpfel aus Spanien`r`nAb sofort, solange Vorrat reicht.`r`nWir freuen uns auf Ihren Besuch!`r`n`r`nMit freundlichen Grüßen`r`n`r`nObsthandung Frisch"
   Formatiert := "<h4>Sehr geehrte%a%,</h4><p><u>heute eingetroffen</u>: <b>Äpfel aus Spanien</b><br/>Ab sofort, solange Vorrat reicht.</p><p><i>Wir freuen uns auf Ihren Besuch!</i></p><p><br/>Obsthandlung Frisch</p>"

  InputBox, Anrede, "Anrede vervollständigen", Sehr geehrte, ,400,130
  if Errorlevel {
     Anrede := " Damen und Herren"
  }
  else {
    Anrede := StrReplace(Anrede, "Herr", "r  Herr", count)
    Anrede := StrReplace(Anrede, "Frau", "  Frau", count)  
 }

  Unformatiert := StrReplace(Unformatiert, "%a%", Anrede, count) 
  Formatiert := StrReplace(Formatiert, "%a%", Anrede, count)   

  CBackup := ClipboardAll
  WinClip.Clear(Unformatiert)
  WinClip.SetHTML(Formatiert)
  WinClip.Paste()
  WinClip.Clear()
  Clipboard := CBackup
  CBackup = 
return
Befehl Was bedeutet das
:*:#fobst:: Mit dem Kürzel „#vobst“ wird der Textbaustein aufgerufen
Unformatiert := "…" Der Text für Programme, die keine Formatierung anzeigen können
Bitte beachten:
• der Doppenpunkt vor dem „=“,
• statt {Enter} muss `r`n benutzt werden
Formatiert := "…" Formatierter Text in HTML-Schreibweise
InputBox … Erzeugt eine Eingabebox für den Namen
if Errorlevel Wenn „Cancel“ geklickt wird, …
Anrede := "…" …, wird eine allgemeine Anrede erzeugt.
else Andernfalls, …
Anrede := StrReplace … …, wird ein Leerzeichen und bei Herr noch das „r“ für „gehehrter“ ersetzt
Unformatiert := StrReplace … Der Platzhalter %a% wird mit der Anrede ersetzt
Formtiert := StrReplace … dito.
CBackupg := ClipboardAll Die aktuelle Zwischenablage wird in eine Variable gerettet
WinClip.Clear(Unformatiert) Die Ablage wird mit dem reinen Text ersetzt
WinClip.SetHTML(Formatiert) Zusätzlich wird der HTML-formatierte Text in die Ablage gelegt
WinClip.Paste() Die Zwischenablage wird ausgegeben („Einfügen“, STRG+V)
WinClip.Clear() Die Zwischenablage wird geleert
Clipboard := CBackup Die Ablage wird wieder mit dem vorherigen Inhalt gefüllt
CBackup := Die Puffer-Variable wird geleert
Return Fertig.

Die Variante mit der Zwischenablage arbeitet signifikant schneller, weil statt der Ausgabe einzelner Buchstaben (→ sendInput = „wie von Tastatur eingegeben“) ein kompletter Text in einem Zug eingefügt wird.

In der Beispieldatei gibt es den Textbaustein „#tobst“, der ohne „winclip“-Erweiterung reinen Text über die Zwischenablage ausgibt.

Wie fange ich an?

Für den Einstieg kann die Beispieldatei genommen werden, in der alle Beispiele dieser Seite enthalten sind. Mittels „kopieren und ändern“ können schnell eigene Textbausteine erzeugt werden. Das Schema:

  1. Geeignetes Beispiel als Vorlage aussuchen und in die Zwischenablage kopieren
  2. An geeigneter Stelle in die Datei kopieren, darauf achten, dass kein vorhandener Baustein beschädigt wird
  3. Das Aufruf-Kürzel anpassen
  4. Text anpassen
  5. Datei speichern
  6. Das Script mit der „Wanze“ testen, wenn alles funktioniert, den Editor schließen

Wenn AutoHotkey.exe gestartet war, muss jetzt per „Rechtsklick“ auf den grünen „H“-Knopf unten rechts → „Reload“ das geänderte Skript neu geladen werden.

Wie schon weiter oben angerissen:
Es lässt sich vorab testen, ob alles funktioniert. Dafür die Taste F7 im Editor drücken oder auf die „grüne Wanze“ in der Bildleiste klicken. Bei einem Fehler erscheint eine Meldung, in welcher Zeile ein Fehler gefunden wird.

Es wird immer nur ein Fehler angezeigt. Das kann ein Punkt zu viel oder zu wenig sein, manchmal ist der Fehler auch in der vorangegangenen Zeile. Die Nerven behalten.

Für einen Testlauf kann der „Play“-Knopf gedrückt werden . Dann stehen alle Befehle der Datei zur Verfügung, so lange der Editor auf ist. Damit es ohne geht, genügt ein Doppelklick auf autohotkey.exe. Dann läuft das Programm bis zum Herunterfahren des Rechners oder es wird – mit Rechtslick auf das Icon – beendet.

Autostart

Wenn AutoHotkey mit dem Start des Rechners sofort verfügbar sein soll, lässt sich das leicht einrichten:

  1. Im Autohotkey-Verzeichnis mit Rechtsklick auf autohotkey.exe eine → „Verknüfung erstellen“
  2. Mit WIN+rdie Kommando-Zeile öffnen
  3. Mit dem Befehl shell:startup den „Autostart“-Ordner öffnen
  4. In diesen ordner die erzeugte Verknüpfung verschieben

Beim Nächsten Start des Rechners wird AutoHotkey direkt geladen.

Alternativ kann die erzeugte Verknüpfung auch einfach auf den Desktop gezogen werden. AutoHotkey startet dann erst, wenn es damit gestartet wird.

Kopie für den Zweitrechner

Die Übertragung dieser Autohotkey-Installation ist denkbar einfach: Das gesamte Verzeichnis wird 1:1 auf den anderen Rechner kopiert. Lediglich die Verknüpfung für den Autostart bzs. Programmstart muss passend zur neuen Umgebung neu erzeugt werden. Eine „Sicherung“ des aktuellen Standes in einer ZIP- oder [7z-Datei](http://www.7-zip.de/ "Alternatives Format mit höherer Kompressionsrate"] ist nützlich, wenn z.B. ein Update von Teilen unerwartete Seiteneffekte hervorruft. In einem Archiv transportiert sich die Entwicklungs- und Arbeitsumgebung außerdem viel einfacher.

Das Ergebnis

Wie eingangs versprochen, gibt es die Beispiele als fertige Datei zum Herunterladen, eingepackt in eine ZIP-Datei. Wenn es noch keine autohotkey.ahk gibt, kann die Datei autohotkey-demo.ahk entsprechend umbenannt werden.

Beispiele als AutoHotkey-Datei herunterladen

Tipp
Wenn die Datei in autohotkey.ahk umbenannt in das Autohotkey-Verzeichnis kopiert wird, kann sofort damit herumprobiert werden. Danach einfach „autohotkey.exe“ doppelt anklicken.

Zu guter Letzt

Die Hilfe-Datei ist gleichzeitig ein ziemlich brauchbares Tutorial. Weil AutoHotkey viel mehr als nur „Textbausteine einfügen“ kann, lohnt es sich durchaus, sich etwas intensiver damit auseinander zu setzten. So lassen sich probemlos Befehle erstellen, die das aktuelle Datum, die Kalenderwoche, ein Termin in 14 Tagen ausgeben lassen, oder Formulare automatisiert befüllt werden. Ich will daher abschließend nochmal an meine Bitte nach Feedback erinnern. Je nach Interesse, lege ich ggf. weitere Tipps für AutoHotkey auf.


  1. Das „#“-Zeichen ist meine Präferenz. Es könnte jedes beliebige andere Zeichen sein, wenn die Kürzel total kryptisch sind, geht es auch ohne. Mit einem „Startzeichen“ können jedoch problemlos sinnvolle Küzel-Namen verwendet werden, die trotzdem noch als „normales Wort“ geschrieben werden können. ↩︎