Kleine Einführung in Autohotkey (mit Beispielen)

13. Juli 2008 | 34 Kommentare

Dieser Artikel liegt mir schon lange auf dem Herzen, weil ich Autohotkey ziemlich genial finde und seit rund einem dreiviertel Jahr benutze. Hintergrund war bei mir, dass die Software für meine Cherrytastatur immer wieder von alleine die linke STRG-Taste umbelegt hat und mir dieses Verhalten ziemlich auf den Senkel ging. Also brauchte ich was, womit ich das abstellen konnte. Also bin ich wiedermal auf Autohotkey gestoßen und habe das Problem damit gelöst, indem ich mir ein Skript geschrieben habe, was die Funktionalität des Tastaturtreibers nachbildet und sogar noch erweitert.

Und weil ich der Meinung bin, dass Autohotkey für andere interessant sein könnte, schreibe ich in diesem Artikel mal ein paar Grundsätzlichkeiten auf und zeige an Beispielen, wie das eine oder andere umgesetzt werden kann.

Autohotkey installieren

So, bevor es losgeht, musst du dir natürlich Autohotkey besorgen und installieren. Die aktuelle Version gibts immer hier. Nachdem du das Programm installiert hast, passiert erstmal garnix. Das liegt daran, dass du ein Script brauchst, wo Anweisungen drinstehen. Diese Scripte haben immer die Dateiendung AHK. Also beispielsweise “MeinScript.ahk”. Du kannst solch ein Script per Doppelklick starten. Dann erscheint es im Tray (links neben der Uhr) als grünes Symbol mit einem “H”. Du kannst diese Scripte auch in den Autostartordner legen, dann werden sie bei jedem Windowsstart gleich ausgeführt.

Welcher Editor?

Im Prinzip ist es ganz einfach, Autohotkey-Scripte zu schreiben. Ein ganz einfacher Texteditor (kein Word) reicht völlig aus. Ich benutze am liebsten den Notepad++. Für diesen Editor gibt es im Autohotkey-Installationsverzeichnis im Ordner “Extras\Editors\Notepad++” ein Skript, was die entsprechenden AHK-Befehle zum Programm hinzufügt und so eine farbliche Hervorhebung unterstützt.

Es geht los mit den Tastenkombinationen

Eine Anweisung in Autohotkey sieht immer so aus, dass zuerst das da steht, was das Ereignis auslöst. Also beispielsweise die Tastenkombination oder der Text, der geschrieben wird. Dahinter steht dann das, was passieren wird, wenn der Auslöser eintritt.

Als einfaches Beispiel soll bei gleichzeitigem Drücken der Tasten [Alt Gr] und [c] das Copyrightzeichen © ausgegeben werden. Also suchst du dir aus der AHK-Tastenreferenz die entsprechenden Tasten heraus und schreibst sie hin. Normalerweise werden Tastenkombiantionen einfach nacheinander geschrieben. Gerade bei der [Alt Gr]-Taste gibts eine Sonderbehandlung. Damit Autohotkey erkennt, dass beide Tasten gleichzeit gedrückt werden, müssen beide Tasten per “&” verknüpft werden. Der Code sieht dann also so aus:

RAlt & c:: Send ©

Du siehst also, dass zuerst die beiden Tasten da stehen und dann per “Send”-Befehl das ©-Zeichen ausgegeben wird. Wenn du diese Codezeile in eine Textdatei kopierst, diese beispielsweise “Test.ahk” nennst und ausführst, steht dir das ©-Zeichen unter der o.g. Tastenkombination zur Verfügung.

Du kannst mit Tastenkombinationen auch Programme starten. Dann verwendest du anstelle des “Send”-Befehls den “Run”-Befehl. Würdest du beispielsweise wollen, dass per [Alt Gr] + [c] der Firefox-Browser geöffnet werden soll, sähe der Befehl so aus:

RAlt & c:: Run, c:\Programme\Mozilla Firefox\firefox.exe

Natürlich kannst du pro Tastenkombination auch mehrere Anweisungen abarbeiten. Vielleicht möchtest du mehrere Programme starten? Dann schreibst du die Anweisungen einfach in geschweifte Klammern:

RAlt & c::
{
Run, c:\Programme\Mozilla Firefox\firefox.exe
Run, c:\Programme\Mozilla Sunbird\sunbird.exe
Run, c:\Programme\Mozilla Thunderbird\thunderbird.exe
}
Return

Weiter gehts mit Textersetzungen

Das nächste interessante Ding, was man mit Autohotkey machen kann, sind Textersetzungen. Viele kennen sie sicher aus Word, wo man beispielsweise “mfg” schreibt und dieses Wort durch “mit freundlichen Grüßen” ersetzt wird. Solche Dinge kann man mit Autohotkey auch machen. Die Syntax ist ähnlich zu den Tastenkombinationen, mit dem Unterschied, dass Textersetzungen immer mit einem doppelten Doppelpunkt beginnen. Du hast richtig gelesen und im Beispiel von oben mit dem “mfg” sieht der Code dann so aus:

::mfg::mit freundlichen Grüßen

Angewendet wird das ganze dann einfach beim nächsten Leerzeichen oder nach Drücken der [Enter]-Taste. Du kannst mit dieser Technik auch Signaturen verwalten. Ich habe das so gemacht und zwar habe ich jeder Signatur ein eigenen Auslösetext zugewiesen, der normalerweise nie im geschriebenen Text vorkommt. Also bspw. #sig1 oder #sig2. Mehrzeilige Texte fasst du in runde Klammern. Alles, was du in diese Klammern schreibst, wird 1:1 übernommen, also auch evtl. Zeilenumbrüche.

Scriptschnipsel

Ok, soviel erstmal dazu. Natürlich kann Autohotkey noch viel mehr. Besonders, wenn man sich mal in den offiziellen Foren umschaut, sieht man schon, was alles mit Autohotkey geht. Aber ich möchte diese Anleitung hier bewusst simpel halten. Jetzt also komme ich zu den Beispielen und hilfreichen Schnipseln, wie ich sie in meinen Skripten verwende.

1. Autofresh

Wenn du an deinem AHK-Skript etwas änderst, während es läuft, musst du im Normalfall diese Änderung per Hand und Kontextmenü des Scripts anstoßen. Das geht alles auch automatisch, wenn du folgenden Code in den Script ganz oben (noch vor allen anderen Scriptbefehlen) reinkopierst:

SetTimer,UPDATEDSCRIPT,1000
UPDATEDSCRIPT:
FileGetAttrib,attribs,%A_ScriptFullPath%
IfInString,attribs,A
{
FileSetAttrib,-A,%A_ScriptFullPath%
SplashTextOn,,,Script wurde aktualisiert,
Sleep,500
Reload
}
Return

2. Script nur einmal zulassen

Um zu verhindern, dass dein Script mehrfach aufgerufen werden kann, fügst du folgendes hinzu:

#SingleInstance, Force

3. Capslock-Taste sperren

Wenn es dir auch auf den Keks geht, dass die [Capslock]-Taste (die über die [Umschalt]-Taste), immer wieder ausversehen aktiviert wird, dann schreibe folgendes in dein Script:

CapsLock::SetCapsLockState, AlwaysOff

3. Anzeige der Aktionen bei Tastenkombinationen

Wenn du sehen möchtest, welche Aktion ausgelöst wird, wenn du eine Tastenkombination drückst, dann kannst du diese Funktion in dein Script übernehmen:

OSD(text)
{
#Persistent
Progress, hide x1050 Y900 b1 w150 h27 zh0 FM10 cwEEEEEE ct111111,, %text%, AutoHotKeyProgressBar, Verdana BRK
WinSet, TransColor, 000000 120, AutoHotKeyProgressBar
Progress, show
SetTimer, RemoveToolTip, 1000
Return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
Progress, Off
return
}

Nun musst du all deinen Befehlen noch folgende Zeile hinzufügen:

OSD("angezeigter Text")

Im Beispiel mit dem Copyrightzeichen von weiter oben sähe der Befehl dann insgesamt so aus:

RAlt & c::
{
OSD("© einfügen")
Send ©
}
Return

Der Text wird jeweils unten rechts angezeigt.

4. Tastenkombination oder Ersetzung nur im bestimmten Programm anwenden

Du möchtest vielleicht bestimmte Tastenkombinationen nur in einem Programm anwenden und nicht systemweit. Dann benutzt du folgende Abfrage (hier mit FixFoto als Beispiel):

IfWinExist, FixFoto
{
...
Deine Befehle
...
}
Return

5. HTML-Umlaute
Wenn du Webseiten gestaltest, musst du die Umlaute im HTML-Quelltext schreiben. Das kann auf Dauer anstrengend sein, wenn du keinen entsprechenden Editor verwendest. Folgende Zeilen ermöglichen es dir, die entsprechenden Codes jeweils mit gedrückter [Strg]-Taste (^) zu schreiben.

^ö:: Send & ouml;
^ä:: Send & auml;
^ü:: Send & uuml;
^Ö:: Send & Ouml;
^Ä:: Send & Auml;
^Ü:: Send & Uuml;
^ß:: Send & szlig;

Blöderweise wandelt die Blogsoftware HTML-Zeichen um, deshalb musst du bei obigem Beispiel die Leerzeichen nach dem & in jeder Zeile rausmachen.

6. Klammern wieder schließen
Wenn du öfter mit eckigen, geschweiften oder runden Klammern arbeitest, wäre es vielleicht hilfreich, wenn sich diese Klammern automatisch schließen würden, wenn du eine schreibst. Außerdem liegen die eckigen und geschweiften so, dass du dir regelmäßig die Finger verknotest? Dann kopiere diesen Schnipsel:

^.::
{
Send, {{}
Send, {}}
Send, {Left}
}
Return

Dieses Beispiel legt die geschweiften Klammern auf die Tastenkombination [Strg] + [.] (der Punkt). Die Zeile:

Send, {Left}

sorgt dafür, dass der Cursor nach dem Einfügen der geschlossenden Klammer zwischen beide Klammern springt.

7. Aktuelles Datum und Uhrzeit einfügen
Ich brauche manchmal das aktuelle Datum und die Zeit. Zu diesem Zwecke habe ich mir diesen Schnipsel eingefügt:

::#dt::
	FormatTime,Datum,,dd.MM.yy - HH:mm:ss
	Send, %Datum% Uhr
Return

8. Fenster von einem Monitor auf den anderen schieben
Ich verwende zwei Monitore und machmal ist es sehr hilfreich, ein Programmfenster auf dem anderen Monitor darzustellen. Man kann ein eigenes Programm dafür installieren oder folgenden Schnipsel nehmen:

MoveWindow(Cmd)
{
	SysGet, MonitorCount, MonitorCount
	if MonitorCount < 2
		return
	SysGet, Mon1, MonitorWorkArea, 1
	SysGet, Mon2, MonitorWorkArea, 2
	;MsgBox %Mon1Left% %Mon1Right% %Mon2Left% %Mon2Right%
	WinGetActiveStats ,Title, Width, Height, x, y
	WinGet, state, MinMax, A
	if (state == 1)
		WinRestore , A
	if ((Cmd == "Left") and (X > Mon1Right-10))	; 10 Pixel Toleranz
		WinMove, %Title%, , %Mon1Left%, 0
	else if ((Cmd == "Right") and (X < Mon2Left))
		WinMove, %Title%, , %Mon2Left%, 0
	if (state == 1)
		WinMaximize , A
}

<^Left::MoveWindow("Left")
>^Right::MoveWindow("Right")

Damit kann ich jederzeit mit der Kombination [Rechte Strg] + [Pfeiltaste nach links oder rechts] das aktive Programmfenster hin- und herschieben. Die Fenstergröße bleibt erhalten, allerdings hängen die Fenster immer oben links.

9. Monitor in den Standby
Wenn ich längere Zeit nicht am Rechner bin, kann ich per Tasten druck die beiden Bildschirme in den Standby schalten. Das geht so:

SC163::  				; Monitore in den Standby schalten
	;Send, {Media_Stop}
	OSD("Monitore aus")
	Sleep 1000
	SendMessage, 0x112, 0xF170, 1,, Program Manager
Return

SC163 ist in diesem Falle die Taste für den Standby an meiner Tastatur.

10. Rechner ausschalten
Wenn ich diese Taste aus 9. in Verbindung mit [Strg] drücke, fährt der Rechner komplett runter. Der Code dafür ist dieser:

^SC163::  				; Rechner aus
        OSD("Rechner aus")
	Sleep 1000
	shutdown,5
Return

Abschließende Bemerkungen

Du siehst also, mit Autohotkey ist viel machbar, ohne dass du dafür noch viele weitere Programme installieren musst. Im Falle meines Tastaturtreibers ist es sogar so, dass Autohotkey ca. 50% weniger Systemresourcen verbraucht, als die originale Treibersoftware. Ich liste hier nochmal die wichtigsten Autohotkeyseiten auf, auf denen du weitere Informationen finden kannst:

Die Hilfe zu Autohotkey erreichst du immer, indem du im Tray auf das “H” rechtsklickst und “Help” wählst. Ich hoffe, dieser kurze Einstieg war für dich hilfreich. Viele der hier verwendeten Schnipsel habe ich über oben genannte Quellen bekommen.

Im Folgenden noch die Liste der Strg, Alt, Umschalt -Tasten, die immer wieder gebraucht wird, wenn man neue Tastenkombinationen benutzen möchte:

# = Windows-Taste
! = [Alt]-Taste
^ = [Strg]-Taste
+ = [Umschalt]-Taste

Ausführlicher gibts das Ganze in der Hotkeysreferenz in der Hilfe oder im Wiki auch auf deutsch.

Das könnte dich auch interessieren

Rivva | Trackback-URL | Kommentarfeed | 10,372 x gelesen

Diesen Beitrag kommentieren.

34 Kommentare

  1. Den Satz solltest du vielleicht nochmal umschreiben, oder…?

    “Es geht los mit Tastenkombinationen

    So, nun gehts aber los. Eine Anweisung in Autohotkey sieht immer so aus, dass du erst das da steht, was das Ereignis auslöst….”

  2. Eine klasse Einführung Micha. Das ist ja wirklich ein Tausendsassa und erinnert mich an frühe Programme auf der Arbeit, mit denen das Arbeiten auch viel Spaß gemacht hat. Siemens HIT war so ein Groß-Rechner-AutoText-Spezi. Mit dem hab ich auf 3-stellige Kürzel ganze Textpassagen in meine Bescheide aufgenommen oder Paragraphen zitiert.

    Danke!

  3. Hab die Formulierung oben nochmal geändert. Ich habe den Text während des Schreibens x-mal umgestellt, da konnte schonmal was durcheinander kommen.

  4. Vielen Dank für die wirklich sehr hilfreiche Einführung. Ich bin auf Autohotkey auch schon über die c’t gestoßen, doch hatte ich es mir nie näher angeschaut, weil ich mit dem Programm Texter sehr zufrieden war. Aber was du hier vorstellst, scheint mir viel mächtiger zu sein (u.a. weil man damit auch Programme starten kann, bzw. auch festlegen kann, in welchen Programmen welche Tastenkombinationen gelten sollen). Werde es jedenfalls testen und danke dir für die gut nachvollziehbaren Hinweise und die Links.

  5. Ich glaube, Texter basiert selber auch auf Autohotkey. Ist natürlich schöner, weils eine Oberfläche bietet. Aber wenn man drauf verzichten kann gehts auch so. Es gibt wohl auch in dem active’aid-Paket von der c’t ein entsprechendes Modul, aber mir persönlich ist active’aid zu aufgeblasen.

  6. Stimmt, Texter basiert da auch drauf. Und dieses active’aid war mir in der Tat zu viel. Hatte mich also doch schon mit Autohotkey beschäftigt, aber damals wohl zu schnell aufgegeben (hab auch das grüne Icon mit dem “H” in der Taskleiste wiedererkannt).

    Bin schon dabei anhand deiner Tipps das mittlerweile installierte Autohotkey für mich zu konfigurieren und meine Tastenkürzel aus Texter zu übertragen. Wirklich klasse. Und die ahk-Datei kann man dann ja auch an mehreren Rechnern einsetzen.

  7. Das freut mich, dass dir mein Artikel hilft. :)

  8. AutoText ist heute (15.07.2008) the GiiveAwayOfTheDay bei http://de.giveawayoftheday.com/

  9. Ergänzung für AutoText: Die Seriennummer ist dem Installer im Readme.txt mitgegeben…

  10. Danke, Eike, für den Tipp. Wer also nur Textersetzungen braucht, kann durchaus dieses Tool benutzen. Es ersetzt den Text gleich nach Eingabe (braucht also kein Leerzeichen oder Enter).

  11. Hier meintest du wohl “#SingleInstance, Force”?

    >>2. Script nur einmal zulassen

    Um zu verhindern, dass dein Script mehrfach aufgerufen werden kann, fügst du folgendes hinzu:

    SetTitleMatchMode, 2<<

  12. Danke für die Hinweis, Thalon. Habs geändert.
    Keine Ahnung, warum das da reingerutscht war.

  13. Hallo, ich habe mir Autohotkey geladen um in World of warcraft Multiboxen zu können, mir wurd dieses Programm empfolen, aber ich habe keine ahnung wie ich es schaffe das wenn ich 2 fenster öffne auf beiden das selbe passiert (z.B. 2 ma googel aufmachen und auf einem schreiben **Myvideo** und das das auf dem 2 geöffneten auch steht) sogesehen das meine Befehle auf 2 fenstern ausgeführt werden, nur kann icha us den Beschreibungen nicht wirklich etwas rausfinden.
    würde mich über hilfe freuen.

  14. Wende dich doch mit deinem Problem am besten ans deutsche Autohotkeyforum. Dort sind die wirklichen Profis versammelt.

  15. 15
    Proffni  
    Montag, 2. Februar 2009

    Hi leute, erst mal SUPER einführung, Micha

    nur eine Frage hätte ich noch:

    könntest du die sache mit den key/Tastatur-makros erklären?
    die bräuchte ich, finde aber nirgends eine gute anleitung!

  16. Was meinst du mit “Key/Tastaturmakros”? Was willst du denn genau machen?

  17. 17
    felixxx  
    Dienstag, 21. April 2009

    Hallo,

    schöne Beschreibung. Habe mein eigenes Script gebastelt. Aber eine Frage:

    Kann ich dieses per Tastendruck aktivieren und deaktivieren? So das z.B. wenn ich einmal ” H ” drücke das Script aktiv ist und wenn ich wieder ” H ” drück das Script wieder deaktiviert wird?
    grüße

  18. Ja, das geht ganz einfach:

    H::Suspend,Toggle
  19. Hallo,

    ich möchte mich erkundigen, wie ich beim Kopieren – Einfügen verschiedene Programme anwenden kann. Z.B. aus Excell ins Word. Kann man einfach den Ablauf aufzeichnen?
    Danke im voraus
    MfG

  20. Eine tolle Einführung. vielen Dank :)

    Bin so sehr schnell in das Programm reingekommen.

  21. Hi bei mir ist das Problem, wenn ich
    zum Beispiel T::Suspend,Toggle mache, dann schreibt der bei mir in den Scrpits keine “t”s mehr und das ist schlecht!

    Ich will einen hotkey, bei dem ich auf T drücke und dann der in den Suspend-Mode geht und wenn ich dann wieder Enter drücke wieder in den normalen Status geht!

    Ich benutze das für GTA!

    Wenn mir jemand helfen könnte wäre gut!

    Mit freundlichen Grüßen
    Ronon

  22. Klar, wenn du die [T]-Taste mit Suspend belegst, ist es logisch, dass sie dann für nichts anderes mehr geht. Nimm einfach eine Kombination mit [Strg], [Alt], [Win] oder [Shift].

    Die bessere Hilfe zu Autohotkey bekommst du aber im deutschen oder englischen Forum.

  23. 23
    Ronon  
    Montag, 13. Juli 2009

    und wo finde ich dieses Forum?

  24. Im obigen Artikel sind die Links.

  25. Von Deiner Beschreibung bin ich hell begeistert, weil ich Autohotkey nicht kannte. Vor allem die Erstellung diverser Signaturen fand ich sehr praktisch. Also habe ich bei den ersten Gehversuchen damit herum experimentiert und bin schier verzweifelt. Du schreibst nämlich zum Thema Textersetzungen “Mehrzeilige Texte fasst du wieder in geschweifte Klammern” und genau das funktionierte nicht. Richtig muss es heißen “runde Klammern”, was ich erst durch Recherchen im Internet heraus bekommen habe. Das solltest Du unbedingt ändern.
    Nochmals Dank für Deinen Hinweis und Artikel zum Programm Autohotkey, das mir heute viel Arbeit abnimmt.

  26. Danke für den Hinweis. Habs oben geändert. Komisch, dass das noch niemanden aufgefallen ist.

    Ich benutze allerdings schon lange keine Klammern mehr, sondern schreibe den ganzen Text auf eine einzige Zeile und packe den Zeilenumbruch immer per {Enter} rein. Das ist für mich deshalb hilfreich, weil ich dann den Cursor mit bspw. {Up 5} wieder vor die Signatur setzen kann.

  27. Wie muss ich das schreiben wenn ich jetzt alle8 sek die zahl 6 gedrückt haben will? Need help
    lg help

  28. 28
    Brauche Hilfe  
    Samstag, 16. Januar 2010

    Wie kann man machen, das der Script am ende noch ein Enter macht? Also dass wenn ich nen Link damit eingebe er Enter drückt?

  29. @Brauche Hilfe:

    Es gehört in den String einfach ein {enter} rein, dann führt er ein Enter ein..

    Ich hätte aber auch noch einmal eine Frage: Ich verwenden AHK nur für rudimentäre Signaturkürzel.. Aber ich möchte in eine Signatur gern ein Bild mit einbinden, aber finde keine Möglichkeit, wie ich das machen kann..
    Hat jemand eine Idee?

    Würde mich freuen, wenn mir jemand schnell helfen kann..

    Grüße!

    M.

  30. Bild einbinden geht natürlich nur, wenn du deine Mails als HTML versendest. Dann sollte es ein ganz normaler HTML-IMG-Tag tun.

Kommentar abgeben