5 Punkte von GN⁺ 2023-08-23 | 1 Kommentare | Auf WhatsApp teilen
  • Da AutoHotKey ein leistungsstarkes, aber für Einsteiger zunächst einschüchterndes Windows-Automatisierungstool ist, wird eine echte Sammlung persönlicher Skripte als Lernmaterial veröffentlicht
  • Das Material besteht aus insgesamt 14 Dateien und konzentriert sich auf Automatisierungsbeispiele, die man sofort ausprobieren kann, etwa Ordner öffnen, Text einfügen oder Shortcuts pro Programm erweitern
  • Enthalten sind schnelle Eingaben für das aktuelle Datum, den em dash und ¯\\_(ツ)_/¯ sowie ein modales Shortcut-System für vim-Nutzer und eine einfache GUI-Demo
  • Es gibt auch ein Skript, das Zeitstempel in UTC und lokale Zeit umwandelt, sodass man über reine Tastenkürzel hinaus praktische Workflow-Automatisierung sehen kann
  • Jede Datei enthält Kommentare dazu, was der Code macht, und teilweise auch, warum er so implementiert wurde, wodurch sie sich gut als pädagogische Codebasis lesen lässt

Eine Sammlung von AutoHotKey-Beispielen nahe an realen Arbeitsabläufen

Wie man sie als pädagogische Codebasis liest

  • Dieses Repository ist ein Beispiel für eine pädagogische Codebasis, die so gestaltet wurde, dass Menschen durch das Lesen des Codes lernen können
  • Jede Datei enthält viele Kommentare dazu, was der Code macht; bei manchen Implementierungen wird auch erläutert, warum ein bestimmter Ansatz gewählt wurde
  • Eine separate Erklärung zu pädagogischen Codebasen folgt im Newsletter-Beitrag
  • Wenn an bestimmten Stellen mehr Erklärung nötig ist, kann man diese per GitHub-Issue anfragen

1 Kommentare

 
GN⁺ 2023-08-23
Meinungen auf Hacker News
  • Ich glaube, ich kann zum ersten Mal etwas Nützliches zu einer Code-Diskussion beitragen. Als jemand, der schreibt, habe ich mir ein AutoHotkey-Skript gebaut, das jederzeit schnell eine leere notepad.exe öffnet: Mit der Taste ~ wird sie geöffnet, beim erneuten Drücken geschlossen, und wenn Inhalt vorhanden ist, erscheint der Speichern-Dialog.
    Das ist alles, was mein AHK macht.

    • Interessant ist, dass dieselbe Taste üblicherweise auch für einen Terminal-Toggle verwendet wird. So wie Programmierer im Terminal „leben“, frage ich mich, ob digitale Grafiker ähnlich schnell ein Sketchpad oder Zeichenprogramm einblenden.
      Wenn man schnell zum vorherigen Fenster zurückwechseln möchte, ohne Fenster zu schließen oder zu minimieren, ist der Windows-Standard-Shortcut Alt + Escape nützlich. Anders als Alt+Tab zeigt er keine Fensterübersicht, sondern wechselt direkt zum zuletzt fokussierten Fenster.
      In AutoHotkey v1 kann man Boilerplate für einen Switcher/Launcher bauen, der nach einem Teil des Fenstertitels sucht und das Fenster aktiviert; wenn es bereits aktiv ist, kehrt er mit send, !{escape} zurück, und wenn es nicht existiert, startet er es. Wenn man die Taskleiste nicht vollmüllen will, kann man auch WinHide/WinShow verwenden, aber das passt bei manchen Fenstern nicht gut; für die Fenstererkennung sind ahk_exe oder ahk_class manchmal besser geeignet.
    • Notepad++ wäre wegen Auto-Save vielleicht besser. Ich halte die Funktion, dass sogar ungespeicherte Dokumente automatisch gespeichert werden, für eine der besten Funktionen.
    • Wenn man das obige Skript nach AutoHotkey 2 portiert, lässt es sich einfacher schreiben, etwa als „Tilde opens Notepad“. Dabei prüft man WinActive("Untitled - Notepad") und WinExist("*Untitled - Notepad"), schließt oder aktiviert es, und führt andernfalls Run "Notepad" aus.
    • Es ist nur ein klein wenig schneller, als die Windows-Taste zu drücken, „Notepad“ einzugeben und Enter zu drücken. Wenn man es stattdessen so baut, dass ein einzelnes notes.txt-Dokument geöffnet wird, könnte man Notizen laden, anhängen und mit einem Shortcut speichern/schließen; das wäre noch schicker.
    • Gute Methode. Mit den Funktionen WinActive() oder WinExist() kann man mehrere Titelbedingungen per or kombinieren und bei Bedarf auch eine ahk_class-Bedingung wie "Untitled - Notepad ahk_class Notepad" hinzufügen.
  • AutoHotkey ist großartig, aber ich wünschte, die Sprache wäre etwas normaler. Ich habe mich damit abgequält, eine stabile Version von Aero Snap mit Golden-Ratio-Aufteilung zu bauen. Es sollte eigentlich nicht so schwierig sein, mehrere Monitore und Größen zu handhaben, aber merkwürdige Loop-Syntax und stille Fehlschläge bei einfachen Fehlern haben mir den Spaß verdorben, sodass ich aufgegeben habe.
    Ich habe auch das ahk-Modul für Python gefunden, aber in Kombination mit dem keyboard-Modul funktionierte es als Shortcut-Listener nicht so gut wie AutoHotkey.
    https://github.com/idbrii/daveconfig/blob/main/win/autohotke...
    https://pypi.org/project/ahk/

    • Deshalb gibt es AutoHotkey v2. Das ist so etwas wie AHKs Python-3-Moment: Es war jahrelang verfügbar, die stabile Version kam vor ungefähr einem Jahr heraus, aber die Adoption scheint noch nicht besonders groß zu sein.
    • Deshalb habe ich es außer zum Umbelegen von CapsLock auf Control kaum genutzt. Vielleicht ist jetzt der Zeitpunkt, eine Lisp-DSL zu bauen, die nach AHK kompiliert.
    • Genau, das ist das größte Problem von AHK, und v2 verbessert hier vieles. Ich träume davon, dass ein universeller Shortcut-Listener, den man aus jeder Sprache nutzen kann, mit irgendeiner wasm-Plugin-Magie möglich wäre.
  • Bei meiner Hochzeit habe ich mit AutoHotKey eine Fotobox gebaut. Ich habe eine einfache Software verwendet, die die Nikon meiner Verlobten per USB steuert, zusammen mit IrfanView auf dem Laptop; IrfanView war so konfiguriert, dass es einen Ordner überwacht und immer das neueste Foto anzeigt.
    Mit AutoHotKey habe ich eine einfache GUI mit Preview-, Autofocus- und „SNAP“-Button gebaut. Wenn man SNAP drückte, lief ein großer Countdown, danach wurde ein Foto aufgenommen, die Kamera-Software minimiert und IrfanView in den Vordergrund geholt. Nach ein paar Sekunden ging es zurück zur Button-GUI. Die Gäste mochten es, wir sparten mehrere hundert Euro für die Miete einer Fotobox und bekamen schöne Fotos.

  • Dieses AutoHotKey-Skript war für mich ein Gamechanger. Ich habe Ctrl + Shift + V auf Einfügen ohne Formatierung gemappt: Es wandelt die Zwischenablage in Text um, fügt sie ein, wartet kurz und stellt dann die ursprüngliche Zwischenablage wieder her.

    • Zur Info: Das geht auch ohne AutoHotKey mit Powertoys oder PureText. Sehr nützlich.
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • Dass das Einfügen mit Formatierung der Standard ist, ist wirklich seltsam. Ich wollte bisher noch nie mit beibehaltener Formatierung einfügen und verstehe auch nicht, für welchen Use Case das gedacht ist.
    • Ctrl+Shift+V ist wirklich großartig. Es sollte ein Betriebssystem-Standard-Shortcut für die Zwischenablage sein.
      Eine Zwischenablage mit mehreren Werten, etwa den letzten 5 Clips, wäre auch schön, aber das ist vielleicht zu viel verlangt.
  • AHK gehört zu den Apps, die einen an Windows binden. Ich nutze es etwa, um der Tastatur Zeichen wie äöüß oder áóúñ hinzuzufügen, die Helligkeit der Zimmer- und Wohnungsbeleuchtung zu steuern, Zeitstempel wie 08:39 –, 2023-08-22 08:39:46 oder 2023-08-22 — Tuesday mit ein oder zwei Tasten einzufügen und beim Umschalten der Pause-Taste den Monitor über eine Tasmota-fähige Steckdose ein- und auszuschalten.
    Allerdings hätte ich gern eine Funktion, mit der ich eine zweite Tastatur wie ein Button-Pad verwenden kann, während deren Tasteneingaben abgefangen werden. Deshalb nutze ich derzeit eine kleine Bluetooth-Tastatur, die an einen Raspberry Pi Zero angeschlossen ist, um mehr Buttons zu haben.

    • Unter macOS scheint Hammerspoon die beste Wahl zu sein.
      https://www.hammerspoon.org/
    • Wenn die Kosten vertretbar sind, kann man nach einer günstigen Tastatur mit QMK oder anderer Custom-Firmware suchen und einige Tasten auf F13–F24 oder schwer zu drückende Kombinationen wie Ctrl+Alt+Shift+P mappen.
    • Mit Luamacros habe ich schon gute Ergebnisse erzielt, indem ich eine zweite Tastatur abgefangen und die Tasteneingaben an AutoHotKey weitergegeben habe.
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      Das hier gibt es auch: https://github.com/evilC/AutoHotInterception
    • Unter Linux verwende ich AutoKey. Es ist weniger mächtig als AHK, aber schön, weil es normales Python nutzt.
      https://github.com/autokey/autokey
    • Mit AutoHotInterception kann AHK verschiedene Tastaturen/Mäuse anhand der Hardware-ID unterscheiden. So kann man einer separaten Tastatur ein eigenes Layout und eigene Makros geben.
  • Ich nutze AutoHotKey ebenfalls ständig. Darin habe ich sechs Shortcuts für Datums-/Zeitstempel, PuTTY-/SSH-Launcher für häufig genutzte Hosts und serielle Ports, zustandsbasierte Launcher für über zehn Apps wie Outlook, Windows Terminal und Total Commander, unformatiertes Einfügen überall, Einfügen mit entfernten Zeilenumbrüchen, eine AltGr-Eingabeebene für Sonderzeichen und Emojis sowie Medien-/Lautstärke-Shortcuts.

  • Auf meinem privaten Linux-Laptop habe ich Caps Lock und Escape vertauscht und mich daran gewöhnt. Als ich Windows im Dual-Boot genutzt habe, habe ich dieselbe Einstellung mit PowerToys vorgenommen, aber in der Firma kann ich weder PowerToys noch Uncap installieren, daher bleibt nur AutoHotKey.
    Als ich einer StackOverflow-Antwort gefolgt bin, sendeten Caps Lock und Escape beide jeweils beide Tasten, was gelegentlich meine Teams-Nachrichten ruiniert.
    https://github.com/microsoft/PowerToys
    https://github.com/susam/uncap
    https://stackoverflow.com/questions/38558376/how-to-map-caps...

    • Kanata ist hervorragend. Es unterstützt sowohl Linux als auch Windows, aber da ich hauptsächlich unter Linux arbeite, habe ich es unter Windows noch nicht ausprobiert.
      https://github.com/jtroo/kanata
    • Home-Row-Modifikatortasten kann ich ebenfalls empfehlen. Dabei verhalten sich Tasten bei kurzem Drücken wie gewohnt und übernehmen bei längerem Drücken eine andere Funktion.
      Zum Beispiel implementiert https://github.com/evilC/TapHoldManager das in AHK. Wenn man Shift/Ctrl/Win/Alt unter fdsa und jkl; legt, muss man den kleinen Finger weniger benutzen und die Finger bleiben öfter auf der Home Row.
    • Ich habe diese Tasten jahrelang mit AHK vertauscht, und ein einfaches Skript wie dieses funktioniert: CapsLock::Esc, Esc::CapsLock
      Andere schnelle AHK-Verbesserungen wie das Starten von Programmen per globalem Shortcut habe ich ebenfalls zusammengestellt: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • Auch die Scancode-Map in der Registry ist einen Versuch wert. Ich nutze sie, um Ctrl/CapsLock zu tauschen, und sie funktioniert auch in RDP-Software oder Apps mit Administratorrechten gut, womit PowerToys nicht zurechtkam.
      https://superuser.com/questions/550679/where-can-i-find-wind...
    • Ich hing beim gleichen Problem fest und habe schließlich etwas gebaut, das irgendwie funktioniert.
      https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
      Es implementiert auch eine Dual-Function-Taste: CapsLock wirkt als Ctrl, wenn es zusammen mit einer anderen Taste gedrückt wird, und als Esc bei kurzem Drücken.
  • Wie andere schon gesagt haben, ist es erstaunlich, wie viel AHK unter Windows möglich macht. Persönlich kann ich sagen, dass ich dank AHK über 100.000 Dollar gespart oder verdient habe.
    Allerdings gehört die AHK-Sprache selbst nicht gerade zu den angenehmsten zum Schreiben. Ich frage mich, warum es in Python oder Lua kein ähnlich mächtiges Tool gibt; auch https://github.com/pywinauto/pywinauto hat in der Praxis nicht so gut funktioniert wie AHK. Darunter steckt am Ende die WinAPI, daher könnte auch C# eine Option sein, wenn es eine gute Wrapper-Bibliothek gäbe. Ich denke, AHK ist deshalb beliebt, weil es hässlich ist, aber funktioniert.

    • Falls noch nicht geschehen, lohnt sich ein Umstieg auf v2. Sie ist Anfang des Jahres erschienen, und die Sprache ist deutlich weniger hässlich geworden. Die Trennung zwischen Commands und Funktionen ist verschwunden; alles ist jetzt eine Funktion.
    • Es gibt einen Versuch, AHK in C# neu zu schreiben und auch andere Betriebssysteme zu unterstützen.
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • AHK ist beliebt, weil gerade die Hässlichkeit, die die meisten „echten“ Programmiersprachen nicht akzeptieren würden, den Einstieg am Anfang erleichtert.
    • PyAutoGui ist ebenfalls sehr gut. Ich nutze es seit langer Zeit und habe kürzlich ein paar einfache AHK-Automatisierungen damit neu geschrieben. Es ist kein 1:1-Ersatz, daher nutze ich weiterhin AutoHotKey, aber die UI-Automatisierungsfunktionen sind gut gemacht.
  • AutoHotKey ist großartig. Ich nutze es für schnelleres App-Switching; in meinem Fall steuere ich alles, indem ich Right Alt als Taste zum „Aktivieren von Shortcuts“ verwende.
    Wenn ich sie gedrückt halte und eine Buchstabentaste drücke, rotiert es durch die Instanzen der jeweiligen App. Zum Beispiel wechselt Alt+C zu einem VS-Code-Fenster, und Alt+F-Varianten öffnen neue App-Instanzen, etwa ein neues Chrome-Fenster mit einem bestimmten Profil. Alt+Zahl kann auf das aktuell fokussierte Fenster gesetzt werden, und wenn ich Alt antippe, wird ein Bearbeitungsmodus aktiviert, in dem ich das aktuelle Fenster einer Zahlentaste zuweisen kann. Im Bearbeitungsmodus werden H/J/K/L zu Navigationstasten für oben/unten/links/rechts, wodurch das Wechseln zwischen Apps viel schneller wird.

  • Am eindrucksvollsten war ein Skript, das ich früher gefunden und angepasst habe, als ich Diablo 3 gespielt habe. Weil ich meine Maushand zu stark auf das Mauspad drückte und dadurch Probleme mit Repetitive Strain Injury bekam, suchte ich nach einer Möglichkeit, mit einem Controller zu spielen.
    Dieses Skript band die analoge Bewegung an einen kleinen Kreis um den Charakter, sodass man in jede Richtung flüssig laufen konnte; wenn man eine Taste drückte, wurde die Reichweite weiter nach außen verlegt, um Fernkampffähigkeiten zu wirken. Mit ein wenig Anpassung pro Klasse funktionierte es erstaunlich gut.