Macropad - das gescheiterte Experiment

vorhergehende Artikel in: Java Komponenten Python
08.02.2024

Ich habe neulich ein Projekt angefangen, das sich aber nach einigen Tagen als undurchführbar herausstellte. Eigentlich wollte ich das gar nicht selbst entwickeln - es stellte sich aber heraus, dass es die geforderte Lösung so noch nicht gab. Als ich dann nach dem alten Amiga-Magazin-Grundsatz "Fehlt Dir was? Programmiers Dir doch!" vorgehen wollte stellte ich schnell fest, dass alles gar nicht so einfach war, wie ich es mir vorgestellt hatte.

Aber beginnen wir von vorn: Ich war auf $dayjob mit einer Aufgabe betraut, die erforderte, an vielen Stellen Text einzufügen. Die einzufügenden Texte wiederholten sich aber hin und wieder. Daher dachte ich, es wäre toll, ein Macropad zu haben, das automatisch die 10 (Beispiel) letzten in die Zwischenablage kopierten Texte auf die Tasten legt und mit Druck auf die Taste den jeweiligen Text einfügt.

Da ich kein Macropad kaufen wollte, habe ich überlegt, das per Software zu realisieren und dachte, dass es eine solche Software doch bereits geben müsste: Die 10 Hotkeys werden einfach konfiguriert - zum Beispiel Alt+F1 bis Alt+F10 und anschließend braucht man nur noch die Zwischenablage beobachten und die Texte automatisiert einzutippen.

OK -ich hielt also nach Möglichkeiten Ausschau, die Zwischenablage zu überwachen. Das stellte sich als einigermaßen schwierig, aber machbar heraus - ich fand solche Lösungen für Java und Python. Ich entschied mich für Java. Das nächste Puzzleteilchen war schon etwas schwieriger zu finden: zuverlässig systemweit Tastendrücke detektieren auch wenn die Anwendung vielleicht gar kein eigenes Fenster hat oder dieses Fenster den Eingabefokus nicht hat. Für Java konnte ich hier nur Bibliotheken finden, die JNI oder JNA benutzten. Ich biss in den sauren Apfel und entschied mich für eine davon, habe aber bisher noch keine Tests zur Portabilität der Lösung gemacht. Der Grund für die Vernachlässigung war, dass das dritte und letzte Puzzleteil (aus meiner Sicht) nicht realisierbar ist:

Das dritte Puzzleteil ist - überraschenderweise für mich - das schwierigste und das, für das ich keine Lösung finden konnte. Das ist auch der Grund, warum ich das Projekt wieder abgesagt habe: Das dritte Puzzleteil ist die Anforderung, Text in den Eingabestrom der Tastaturevents einzuspeisen. Denn egal, wo der Eingabefokus ist - auf Druck der festgelegten Taste muss der Content dort eingegeben werden. In Java, dies könnte mittels Robot erledigt werden - meine Tests zeigen aber, dass dies nicht zuverlässig funktioniert - außerdem ist es schwierig, Text in der Zwischenablage wieder in raw Key Events umzuwandeln. Und ich musste feststellen, dass bereits einfache Tastendrücke mittels Robot nicht zuverlässig einzuspeisen sind. Die alternative Idee, auf einen der konfigurierten Tastendrücke hin den aktuellen Wert der Zwischenablage zu überschreiben und anschließend die Tastenkombination für Einfügen aus der Zwischenablage auszulösen. Es stellte sich aber heraus, dass diese Idee mittels Robot gar nicht funktionierte.

Weitere Arbeit wollte ich aus Frustration nicht hineinstecken: Man könnte natürlich weitere Entdeckungsreisen in anderen Programmiersprachen unternehmen, aber...

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Fährnisse des Buildprozesses unter Windows

    17.07.2019

    Nachdem ich begonnen hatte, mich mit der Beschleunigung der Berechnung des Mandelbrot-Fraktals unter Zuhilfenahme der Shadereinheiten in Graphikkarten zu beschäftigen und erste Erfolge feiern konnte, wollte ich das mal auf einer richtigen Graphikkarte ausprobieren...

    Weiterlesen...

Neueste Artikel

  • Datenvalidierung UTF8 mit BiDi-Steuerzeichen (TrojanSource 2.0)

    Ich bin heute nochmal inspiriert worden, weiter über die Trojan Source Vulnerability nachzudenken. Meiner Meinung nach bestehen hier noch Probleme - speziell bei Nutzereingaben oder Daten, die über externe Schnittstellen ampfangen werden.

    Weiterlesen...
  • OpenStreetMap Navi als Docker-Container

    Ich habe die auf OpenStreetMap basierende OpenSource Navigationslösung Graphhopper in einen Docker-Container gepackt und als neuestes Mitglied in meinem Docker-Zoo willkommen geheißen.

    Weiterlesen...
  • SQL-Aggregatfunktionen in SQLite als BeanShell-Scripts

    Ich habe neulich über eine Möglichkeit berichtet, SQLite mittels der sQLshell und Beanshell-Skripten um SQL-Funktionen zu erweitern. In diesem Artikel versprach ich auch, über eine solche Möglichkeit für Aggregatfunktionen zu berichten.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.