Ganze Briefe mit Autohotkey schreiben

Hans hat mich in den Kommentaren zur kleinen Autohotkey-Einführung gefragt, wie man das Datum in einen Brief bekommt. Da die Antwort etwas ausführlicher ausfällt, möchte ich sie in einem eigenen Beitrag beantworten.

Die Aufgabenstellung ist, einen kompletten Brief in eine Textersetzung zu packen. Dazu gehört auch das Datum. Normalerweise würde man das Ganze so formulieren:

::#brief::
(
Max Mustermann
Musterstraße 3
12345 Musterstadt

Sehr geehrte Damen und Herren,

Mit freundlichen Grüßen
)
Return

Der Brief ist soweit komplett, es fehlt nur das Datum. Ich habe in der Einführung ja auch geschrieben, wie man das Datum benutzen kann. Nur leider kann man die Variable aus dem Beispiel (%Datum%) nicht in den Fließtext (also zwischen die Klammern) setzen. Autohotkey erkennt das als Text und schreibt dann eben auch %Datum%. Also muss die gesamte Textersetzung anders formuliert werden. Und zwar so, dass sämtliche Zeilenumbrüche und Leerzeichen explizit angegeben werden. Man könnte das Ganze auch in eine Zeile packen, ich teile es der Übersichtlichkeit halber mal in verschiedene Zeilen:

::#brief::
FormatTime,Datum,,dd.MM.yyyy
SendInput, Max Mustermann{Enter}
SendInput, Musterstraße 3{Enter}
SendInput, 12345 Musterstadt{Space 35}
SendInput, Stadt, den{Space}
SendInput, %Datum%{Enter 3}
SendInput, Sehr geehrte Damen und Herren,{Enter 4}
SendInput, Mit freundlichen Grüßen{Enter}{Up 3}
return

Ich greife mal einige Zeilen zwecks Erkärung raus:

FormatTime,Datum,,dd.MM.yyyy

Hier wird das Datum festgelegt. Diese Zeile muss immer ganz oben in der Textersetzung stehen

SendInput, Max Mustermann{Enter}

Die erste Zeile. Für den Zeilenumbruch muss hier {Enter} hingeschrieben werden. Für zwei Zeilen schreibt man {Enter 2}, für fünf {Enter 5} usw.

SendInput, Stadt, den{Space}

Um ein Leerzeichen am Ende der Zeile anzugeben, muss es explizit geschrieben werden. Einfach nur eins mit der Leertaste zu setzen funktioniert nicht, weil es am Ende der Zeile steht und von Autohotkey als solches nicht erkannt wird. Das triff auch für Leerzeichen am Anfang zu.

SendInput, %Datum%{Enter 3}

Hier kommt nun das Datum zum Zug. Variablen müssen in Autohotkey immer mit umschlossenen Prozentzeichen angegeben werden, wenn mit ihnen gearbeitet werden soll. In diesem Fall soll der Inhalt der Variable einfach ausgegeben werden. Das geschieht mit “SendInput”.

SendInput, Mit freundlichen Grüßen{Enter}{Up 3}

Die letzte Anweisung in dieser Zeile sorgt dafür, dass der Cursor an die Stelle im Text springt, an der dann losgeschrieben wird

Um Platz zu sparen, kann die Textersetzung auch kompakter formuliert werden. Ich mache das bei meinen Texten nur so. Ist übersichtlicher, finde ich. Für das Beispiel von oben sieht das so aus:

::#brief::
FormatTime,Datum,,dd.MM.yyyy
SendInput, Max Mustermann{Enter}Musterstraße 3{Enter}12345 Muster{Space 35}Stadt, den{Space}%Datum%{Enter 3}Sehr geehrte Damen und Herren,{Enter 4}Mit freundlichen Grüßen{Enter}{Up 3}
return

Ich hoffe, das Ganze etwas verständlich beschrieben zu haben. Ich benutze diese Schreibweise eigentlich lieber, weil ich schon direkt im Quelltext sehe, was später geschrieben wird. Und wenn es Fragen gibt, einfach fragen.

7 Gedanken zu „Ganze Briefe mit Autohotkey schreiben“

  1. Es geht auch anders. Guggst du:

    FormatTime,Datum,,dd.MM.yyyy
    
    BriefText1 = Max Mustermann`t`t`t`t`t`t%Datum%`nMusterstraße 3`n12345 Musterstadt`n`nSehr geehrte Damen und Herren`n`n`n`nMit freundlichen Grüßen`nIhr Max Mustermann
    
    ::#brief::
    SendInput, %BriefText1%
    SendInput, {Up 3}
    return

    oder wenn man den Brieftext unbedingt in mehreren Zeilen definieren will gehts auch so:

    FormatTime,Datum,,dd.MM.yyyy
    
    BriefText21 = Max Mustermann`t`t`t`t`t`t%Datum%`nMusterstraße 3`n12345 Musterstadt`n`nSehr geehrte Damen und Herren
    BriefText22 = `n`n`n`nMit freundlichen Grüßen`nIhr Max Mustermann
    BriefText2 = %BriefText21%%BriefText22%
    
    ::#brief2::
    SendInput, %BriefText2%
    SendInput, {Up 3}
    return

    MfG strudel

    Antworten
  2. Ah ok, der Weg über Variablen geht natürlich auch. Ich nehme an, dass das ‘t einem Tabulator und ‘n einem Zeilenumbruch entspricht?

    BTW: Ich habe den Code da oben mal formatiert (geht mit pre)

    Antworten
  3. richtig, die `t und `n werden auch in der Hilfe irgendwo erläutert, aber so richtig funktioniert das Suchen in der Hilfedatei ja leider nicht.

    Hier wirds erläutert: in der Autohotkey-Hilfedatei – Index – #EscapeChar.

    BTW: ich hatte die -Auszeichung gesetzt. Aber bei den Kommentaren wird sowas wohl rausgefiltert. Besten Dank also fürs nachträgliche Wiedereinfügen. Ist auch gleich wieder viel besser lesbar.

    Antworten
    • Hallo,

      bin Neuling in AHK und würde gerne Textbausteine erstellen. Gibt es die Möglichkeit, dass der Text formatiert (Schriftart, Größe) eingefügt wird?

      Danke für eine Antwort.

      Antworten
      • Soweit mir bekannt, geht das mit Autohotkey nicht. Dazu brauchst du ein Programm, dass Textschnipsel entsprechend formatiert weitergeben kann. Phrase Express kann das beispielsweise.

        Antworten
        • Zumindest mittelbar müsste das gehen, wenn man die Textbausteine immer im gleichen Programm erstellt bzw. unterschiedliche Programme auf dieselben Shortcuts reagieren. Dann könnte man AutoHotkey anweisen, vor einem bestimmten Textteil einen Shortcut zu senden, auf den dann das jeweilige Programm doch eigentlich reagieren müsste.

  4. Vielen Dank für die Tipps. Bei mir werden die Sonderzeichen nicht ausgespielt. Woran liegt das?

    Script:

    ^+m::
    SEND Mit freundlichen Grüßen,{enter}{enter}Chrissi
    return

    Sieht so aus:

    Mit freundlichen Grüßen,

    Chrissi

    Antworten

Schreibe einen Kommentar zu Chrissi Antworten abbrechen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.