AutoHotkey, Teil 3

Fenster und GUIs mit AHK-Skripten manipulieren

| Autor / Redakteur: Mirco Lang / Stephan Augsten

AutoGUI ist ein super Helferlein für den Einstieg, bei sorgfältiger Arbeit aber auch eine echte IDE.
AutoGUI ist ein super Helferlein für den Einstieg, bei sorgfältiger Arbeit aber auch eine echte IDE. (Bild: Lang / AutoHotkey)

Im dritten Teil unserer AutoHotkey-Reihe wird es spannend: Wir manipulieren Fenster und bauen eigene grafische Oberflächen. Zudem zeigt dieser Beitrag, wie Sie Dateien schreiben und live in Notepad überwachen.

In den ersten beiden Teilen haben Sie einige Grundkonzepte von AutoHotkey kennengelernt, Schleifen, Abfragen und den Umgang mit Variablen. Nach den Hotkeys ist die zweite große Stärke der Skriptsprache der Umgang mit Fenstern: Man kann recht einfach Informationen auslesen und Fenstereigenschaften manipulieren.

Auch eigene Fenster sind nicht weit, wie wir später sehen werden. Am Ende des letzten Teils stand das Versprechen, eine Alternative zum MsgBox-Dialog aufzuzeigen, mit der sich Skriptausgaben ebenfalls gut testen lassen: Mit dem Befehl „FileAppend“ wird Text an eine Datei angehängt. Sofern diese Datei nicht existiert, wird sie erstellt:

FileAppend, Hallo Welt`n, D:\testing.txt

Das „`n“ steht wie üblich für einen Zeilenumbruch. Ist die Arbeitsumgebung wie in Teil 1 beschrieben eingerichtet, genügt es, die obige Zeile in eine neue Datei zu schreiben. Schon lässt sich der Code direkt aus Notepad++ heraus ausführen. Es wird also eine Datei „testing.txt“ erstellt.

Öffnen Sie diese in Notepad++ und aktivieren Sie den Überwachungsmodus über „Ansicht/Überwachen (tail -f)“. Linux-Nutzer kennen den tail-Befehl vermutlich sehr gut, da er dort oft im Terminal genutzt wird, um Log-Dateien und dergleichen zu beobachten. Die Datei ist nun schreibgeschützt geöffnet und zeigt live jede Veränderung des Inhalts.

Statt also Abfragen über den Befehl „MsgBox“ zu kontrollieren, können Sie auch einfach in eine Datei schreiben – das Erspart Klickerei. Generell ist der Umgang mit Dateien sehr einfach gehalten, alle Möglichkeiten finden Sie in der Referenz zum FileAppend-Befehl von AHK.

Fenster manipulieren

Fenster sind ein recht komplexes Thema, aber mit ein paar Grundlagen hat man bereits einen guten Einstieg. Am besten beginnt man mit dem Window Spy: Das Programm wird mit AutoHotkey installiert und befindet sich im Programmordner. Alternativ lässt sich der Spion über das Kontextmenü eines Tray-Icons eines beliebigen laufenden Skripts aufrufen.

Der Window Spy zeigt ausführliche Informationen zu dem Fenster unter dem Mauszeiger. Bei den programmabhängigen Hotkeys haben wir bereits den Aufruf „ifWinActive ahk_exe“ gesehen und hier taucht „ahk_exe“ auch wieder auf: Im obersten Bereich steht als dritter Eintrag ein Text wie „ahk_exe soffice.bin“; hier ist der Zeiger also über einem LibreOffice-Fenster.

Was aber, wenn AutoHotkey ein bestimmtes LibreOffice-Fenster ansprechen soll? Das ließe sich etwa über den Titel erledigen, der schließlich den Namen der geöffneten Datei enthält, hier also „AutoHotkey_3v3.odt – LibreOffice Writer“.

Der Window Spy liefert viele wichtige Infos zu Fenstern.
Der Window Spy liefert viele wichtige Infos zu Fenstern. (Bild: Lang / AutoHotkey)

Allerdings enthält der Window Spy nicht alle Fensterinformationen. Jedes Fenster hat zum Beispiel eine eigene, individuelle AHK-ID. So könnten beispielsweise auch zwei ansonsten identische Fenster unterschieden werden, etwa zweimal die Eingabeaufforderung. Ein Beispiel verrät mehr:

WinGet, a, ID, ahk_class ConsoleWindowClass
FileAppend, %a%`n, D:\testing.txt

„WinGet“ liest die Information „ID“ aus dem angegebenen Fenster. Wenn zwei Fenster zu „ahk_class ConsoleWindowClass“ (die Windows-Eingabeaufforderung) passen, zieht WinGet die Infos aus dem zuletzt aktiven Fenster. Zum Testen können Sie einfach zwei CMD-Fenster öffnen und dann erst das eine davon in den Vordergrund holen und den Code ausführen, anschließend das Gleiche mit dem zweiten Fenster. Nun gibt es zwei MsgBox-Fenster mit unterschiedlichen IDs.

Zwei weitgehend identische Fenster, aber mit eigenen IDs.
Zwei weitgehend identische Fenster, aber mit eigenen IDs. (Bild: Lang / AutoHotkey)

Die Referenz zeigt, dass sehr viele Informationen aus Fenstern gezogen werden können – und auch weitere Befehle, wie etwa „WinGetTitle“, „WinGetPos“ (Positionsdaten) oder „WinGetActiveStats“. Die Funktionen überschneiden sich teils, aber mal funktioniert das eine Feature besser, mal das andere. Ein letzter Tipp zum Auslesen: Häufig sieht man etwas in der Art wie „WinGetTitle, MeinTitel, A“ – das „A“ hinten steht für das aktuell aktive Fenster und ist eine Alternative für „ahk_class“, „ahk_exe“ und so weiter.

Mit den dem Wissen darüber, wie man ein Fenster adressiert und Informationen ausliest, können Sie sich nun um die Aktionen kümmern. Ein ganz simples Beispiel demonstriert das Konzept:

WinActivate, ahk_class ConsoleWindowClass

„WinActivate“ holt schlicht und ergreifend das letzte aktive Fenster in den Vordergrund, das zu „ahk_class ConsoleWindowClass“ passt. Dies erlaubt es beispielsweise Hotkeys anzulegen, die einen Messenger, einen Terminal oder ähnliches in den Vordergrund holen.

Ein wesentliches Gegenstück zu WinGet ist WinSet. Damit ist zum Beispiel möglich, Fenster in den Vordergrund zu holen, ohne sie zu aktivieren, den Stil ändern oder Transparenzen setzen, wie das folgende Beispiel zeigt:

WinSet, Transparent, 150, A

Hier wird für das aktuelle Fenster eine Transparenz zwischen 0 und 255 angegeben, in diesem Fall also rund 59 Prozent. Das Schema ist bei sehr vielen Fenster-Funktionen von AutoHotkey gleich: Kommando, Sub-Kommndo, Werte, Ziel-Fenster.

So einfach lassen sich Transparenzen umsetzen.
So einfach lassen sich Transparenzen umsetzen. (Bild: Lang / AutoHotkey)

Die Möglichkeiten reichen natürlich noch viel weiter, wie etwa das in Teil 1 erwähnte NiftyWindows nur allzu deutlich zeigt. Aber selbst wenn man per Hotkey nur die Transparenz des aktuellen Fensters festlegen, ergibt sich bereits ein Nutzen.

GUIs erstellen

Da AutoHotkey die Windows-API nutzt, sind einfache GUIs im Handumdrehen erstellt – selbst im Texteditor. Es wird jetzt erstmal etwas nach Crashkurs aussehen, aber das lichtet sich gleich. Zunächst einmal der Code für ein Fenster mit einer Schaltfläche, über die der Text „HALLO“ in die bereits oben genutzte Datei „D:\testing.txt“ geschrieben wird:

Gui Show, w400 h400, Mein Fenster
Gui Add, Button, gKnopf1 w200, Schreibe HALLO
return
; Ende der GUI-Erstellung
GuiClose:
   ExitApp
Knopf1:
   FileAppend, HALLO`n, D:\testing.txt

Gui Show“ erstellt ein 400-mal-400-Pixel-Fenster mit dem Titel „Mein Fenster“ – damit wäre das Fenster schon lauffähig. Anschließend wird über „Gui Add“ ein 200-Pixel-Button mit der Aufschrift „Schreibe HALLO“ platziert. Die Anweisung „return“ schließt das Fenster bereits ab.

Eine simple GUI mit einfacher Button-Aktion.
Eine simple GUI mit einfacher Button-Aktion. (Bild: Lang / AutoHotkey)

Fenster können Verhalten an den Tag legen: Über das Event „GuiClose“, also das Schließen des Fensters über ALT+F4 oder das Schließen-X, wird die Aktion „ExitApp“ ausgeführt. Das sorgt einfach nur dafür, dass mit dem Fenster auch das Skript geschlossen wird und sollte in der Art in den meisten Anwendungen vorkommen.

Spannend ist aber vor allem der nächste Teil: Bei der Definition des Buttons haben wir die Angabe „gKnopf2“ unterschlagen. Diese so genannten g-Label (Gosub) machen es extrem einfach, Aktionen auf Knopfdruck auszuführen. Es gilt lediglich, das Label ohne das anführende „g“ gefolgt von einem Doppelpunkt anzugeben.

Alles was von da ab bis zum nächsten „return“ folgt, wird durch den Klick auf den Button ausgelöst. Und auch hier zeigt sich wieder, wie weit AutoHotkey auf überflüssige Syntax verzichtet. Freilich können Sie solche Aktionen genauer definieren und mit Wartezeiten, Doppelklicks oder Loslassen von Tasten arbeiten, aber der normale Klick als Standardaktion ist extrem nutzerfreundlich.

Aber das alles ist nur für den Hinterkopf gedacht und für den Einstieg: Grafische Oberflächen lassen sich wesentlich besser mit einer grafischen IDE erstellen – und die gibt es mit AutoGUI auch. AutoGUI selbst ist ein AutoHotkey-Skript und erlaubt es, mit wenig Aufwand komplette Projekte zu entwickeln oder auch nur die eigentliche GUI zu bauen. AutoGUI verfügt über nette Features wie das Ausführen nur des markierten Codes, Debugger, Wizard zum Erstellen eigener Benachrichtigungsdialoge, Konvertierungshilfen, Suchfunktionen, Menü-Designer und so weiter.

AutoGUI ist ein super Helferlein für den Einstieg, bei sorgfältiger Arbeit aber auch eine echte IDE.
AutoGUI ist ein super Helferlein für den Einstieg, bei sorgfältiger Arbeit aber auch eine echte IDE. (Bild: Lang / AutoHotkey)

Nur in einem Punkt lässt die User Experience von AutoGUI zu wünschen übrig: Im von AutoGUI erstellten Code ist nach der Definition der GUI der Hinweis „Do not edit above this line“ zu lesen – und das ist leider sehr ernst gemeint. Sobald GUI-Elemente im Quellcode verändert werden, verschwindet das Vorschau- und Design-Fenster von AutoGUI für immer, selbst beim rückgängig machen der Änderungen.

Zwar lässt sich das Skript danach immer noch ganz normal nutzen und auch aus AutoGUI heraus kompilieren, doch das grafische Designen wird nicht mehr funktionieren. Scheinbar gibt es keine Synchronisation der Quelltexte in Richtung Design-Fenster. Insofern ist dazu angeraten, möglichst häufig Zwischenversionen zu speichern.

AutoGUI ist aber auch schlicht eine gute Möglichkeit, sich mal eben Code-Schnipsel zum Kopieren zu erstellen. Man könnte noch lange über AutoHotkey reden, aber mit ein wenig Grundwissen auch über AutoHotkey-Besonderheiten, fällt alles Weitere im Grunde relativ leicht. Die Dokumentation ist hervorragend, die Foren sind lebendig und es gibt reichlich gute Skript in der freien Wildbahn, die zum Re-use einladen. Wer eine Idee für die nächsten Stunden braucht: Include und DllCall dürften weitere Möglichkeiten eröffnen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45589863 / IDEs & Programmiersprachen)