• Deutsch
  • Polski

INGENIEURBÜRO PROCHOTTA

Dariusz Prochotta

Dipl.-Ing. (PL)

staatlich anerkannter und vom OLG Hamm ermächtigter Übersetzer für Polnisch

Mitglied im Bundesverband der Dolmetscher und Übersetzer e.V. (BDÜ)

Kategorie: Autohotkey

Autohotkey – Modul 04

05.10.2017 Autohotkey Keine Kommentare

Wiederholung:

Das haben wir bereits gelernt:

– Tastaturtasten austauschen: x::y

– Eine Zeichenkette durch eine andere ersetzen: ::x::y

– Ein einfaches Skript konstruieren:

   ^Numpad1::

   ….

   ….

   return

– Physikalische Tasten simulieren

– Eine Loop-Schleife konstruieren

   Loop 10 {

  ….

  ….

   }

– Ein Skript unterbrechen

   #z::ExitApp

   return

– Einer Variable einen Wert zuweisen (Operatoren „=“ und „:=“)

– Einfache Rechenoperationen durchführen

– Einen Wert in das Programm eingeben (mithilfe von „InputBox“)

– Sich einen Wert anzeigen lassen (mithilfe von „MsgBox“)

In unserem nächsten Programm geht es um Fenster, genauer gesagt, um das Umschalten zwischen mehreren Applikationen.

Wenn ich einen Text im Programm Word übersetze, habe ich normalerweise auf einem Bildschirm meine Vorlage (den Ausgangstext) z.B. im PDF-Format, und auf dem zweiten Bildschirm das Programm Word mit meiner Übersetzung. Die aktive Anwendung ist Word, aber ab und zu muss ich auch das PDF-Dokument aktivieren, um auf die nächste Seite zu scrollen. Unser Skript soll also ein PDF-Dokument aktivieren, eine Seite nach unten scrollen und dann wieder Word aktivieren. Der große Nutzen für uns: Wir können flüssig weiterschreiben, ohne ständig nach der Maus greifen zu müssen.

Die hierfür hilfreichen Befehle finden sich unter https://ahkde.github.io/docs/Tutorial.htm in der Kategorie „Fenster“. In meinem vorigen Beitrag habe ich aber versprochen, etwas Brauchbares ohne zu viel Theorie zu liefern. Ich verzichte also auf eine detaillierte Erläuterung dieser Befehle, auch deshalb, weil diese Anweisungen sehr komplex sind. Besprochen wird also nur das, was für unser Beispiel relevant ist.

Ausgangspunkt: Ein Word-Dokument mit der Übersetzung und ein PDF-Dokument mit dem Ausgangstext sind beide geöffnet.

^Numpad5::

MsgBox, 4096,, „Aktivieren Sie das Dokument mit dem Quelltext und bestätigen Sie mit OK“

ID_Nummer_1 = WinActive(„A“)

MsgBox, 4096,, „Aktivieren Sie das Dokument mit dem Zieltext und bestätigen Sie mit OK“

ID_Nummer_2 = WinActive(„A“)

return

In der ersten und der dritten Zeile habe ich die etwas längere Variante der Anweisung 

MsgBox verwendet. Ähnlich wie „MsgBox, Text“ generiert auch diese Anweisung ein Fenster mit der entsprechenden Aufforderung. Der Nutzer soll mit der Maus das PDF-Dokument aktivieren, dann bestätigt er mit dem OK-Button, und die nächste Programmzeile wird ausgeführt. Der Parameter „4096“ sorgt dafür, dass dieses Fenster immer im Vordergrund bleibt, also nicht durch ein anderes Fenster, z.B. das PDF-Dokument, verdeckt werden kann.

In der nächsten Zeile sehen wir die Anweisung:

ID_Nummer_1 = WinActive(„A“)

Dieser Befehl erstellt die Variable „ID_Nummer_1“ und weist ihr den Ausgabewert der Funktion WinActive(„A“) zu. Diese Funktion führt (in dieser Form) zur Ausgabe der Identifikationsnummer des aktiven Fensters zurück. Das Programm speichert diesen Wert als Variable ID_Nummer_1.

Danach verwenden wir wiederholt die Anweisung „MsgBox“ und geben dem Nutzer Gelegenheit, das Word-Programm zu aktivieren. Die letzte Zeile sorgt dafür, dass die Identifikationsnummer des Word-Dokuments als Variable ID_Nummer_2  gespeichert wird. 

Nach diesen Vorbereitungen erstellen wir nun das nächste Skript:

^Numpad6::

WinActivate, ahk_id %ID_Nummer_2%

sleep, 200

SendInput {PgDn}

sleep, 200

WinActivate, ahk_id %ID_Nummer_1%

sleep, 200

return

Die Anweisung WinActivate (bitte nicht verwechseln mit „WinActiv“) aktiviert das entsprechende Dokument.

Der Parameter „ahk_id“ ist hier eine der zahlreichen Optionen für „WinActivate“. Nach diesem Parameter erwartet das Programm eine Identifikationsnummer, und diese wurde zuvor als Variable „ID_Nummer_1“ bzw. „ID_Nummer_2“ gespeichert. Somit weiß das Programm, was zu tun ist. Die Anweisung „SendInput {PgDn}“ erledigt das Scrollen.

In einem kleinen Film von mir sehen wir, dass dieses Skript sehr gut funktioniert. Immer wenn wir das PDF-Dokument scrollen wollen, müssen wir nur „Ctrl+Numpad6“ drücken.

Eine wichtige Frage ist noch zu klären, nämlich, wie lange Werte in den Variablen gespeichert bleiben? Die Antwort lautet: So lange, wie das entsprechende Skript aktiv ist (das grüne Icon mit dem Buchstaben „H“ ist dann auf der Bildschirmleiste zu sehen). Wird dieses Skript deaktiviert, muss in diesem Fall nach einer erneuten Aktivierung des Skripts der Befehl „Ctrl+Numpad5“ wiederholt werden, um die Variablen „ID_Nummer_1“ und „ID_Nummer_2“ mit Werten zu versehen.

Ein weiterer Punkt: Die Identifikationsnummer einer Anwendung (hier ein Word-Dokument und ein PDF-Dokument) wird nicht ein für alle Mal eindeutig zugewiesen. Wird ein Dokument geschlossen und später erneut geöffnet, bekommt sie (die Anwendung) eine neue Identifikationsnummer. In diesem Fall muss ich also zuerst „Ctrl+Numpad5“ drücken, um die Variablen „ID_Nummer_1“ und „ID_Nummer_2“ zu aktualisieren.

Das nächste Skript schreiben wir einfach ab. Es geht um ein Tool, das ähnlich wie das sog. Intellisense arbeitet. Als Resultat bekommt der Nutzer während des Schreibens einen Vorschlag aus einer in einer txt-Datei gespeicherten Liste.

Schauen wir uns die folgende Seite an:

https://autohotkey.com/board/topic/636-intellisense-like-autoreplacement-with-multiple-suggestions/

In diesem Autohotkey-Forum lässt sich verfolgen, wie ein Programm von mehreren Programmierern entwickelt wurde. Nehmen wir uns als Beispiel ein halbwegs fertiges Skript (Beitrag Nr. 16 vom Nutzer „Maniac“). Hier werden 2 Versionen präsentiert (2 press version und 1 press version). Das Programm steht zur kostenlosen Nutzung zur Verfügung. Kopieren wir uns die erste der beiden Versionen und fügen den Code in eine neue AHK-Datei ein. Der Code beginnt mit der Zeile

Intellitype: typing aid

und endet mit:

Return New

}

(Bitte nur den ersten Teil kopieren, die beiden Abschnitte sind sehr ähnlich)

Dieses Programm ist sehr komplex und wir müssen es nicht unbedingt analysieren. Wichtig für uns ist nur eine Zeile, ziemlich am Anfang:

Loop, Read, %A_ScriptDir%\Wordlist.txt

Anhand dieser Zeile wissen wir, dass eine Liste mit Wörtern Inhalt der Datei „Wordlist.txt“ ist und dass diese Datei sich in demselben Verzeichnis wie das AHK-Skript selbst befinden soll (Parameter „A_ScriptDir“).

Die Datei „Wordlist.txt“ müssen wir selber erstellen – zunächst, später versuchen wir das zu ändern.

Hier ein Beispiel aus meinem letzten Übersetzungsprojekt:

Ausführungsdokumentation

Beanspruchungskategorie

Bedingung der Stabilität

Beschriftung der Abbildung:

Beschriftung der Tabelle:

Dimensionierung der Sparre

Einhüllende für die Biegemomente

Einhüllende für die Druckkräfte

Element des oberen Rings

Element des unteren Rings

Grenzzustand der Tragfähigkeit

Grenzzustand der Gebrauchstauglichkeit

Seilverbindungselemente

Sicherheitsbeiwerte

Zuverlässigkeitsklasse

Zuverlässigkeitsniveau

Überdachungskonstruktion

Sobald das neue Skript aktiv ist, sehen wir, während wir schreiben, Vorschläge aus der Liste „Wordlist.txt“.

In den nächsten Beiträgen versuche ich, die Funktionalitäten dieses Skripts mit sehr einfachen Mitteln zu erweitern, sodass es für uns Übersetzer noch nützlicher wird.

Wenn Euch dieser Beitrag gefällt, könnt Ihr ihn gerne mit dem Button „Gefällt mir“ kommentieren.

Autohotkey – Modul 03

05.10.2017 Autohotkey Keine Kommentare

Wiederholung:

Das haben wir bereits gelernt:

– Tastaturtasten austauschen: x::y

– Eine Zeichenkette durch eine andere ersetzen: ::x::y

– Ein einfaches Skript konstruieren:

   ^Numpad1::

   ….

   ….

   return

– Physikalische Tasten simulieren

– Eine Loop-Schleife konstruieren

   Loop 10 {

  ….

  ….

   }

– Ein Skript unterbrechen

   #z::ExitApp

   return

AutoHotkey kann natürlich viel mehr als nur Tasten simulieren.

Schauen wir uns die Seite https://ahkde.github.io/docs/Tutorial.htm an.

Im Menü auf der linken Seite sehen wir sehr viele AHK-Anweisungen, die in mehrere Kategorien gruppiert wurden, z.B. Ablaufsteuerung, Mathematik, Zeichenkette, Bildschirm. Im Rahmen dieses Blogs versuche ich, die wichtigsten dieser Anweisungen herauszupicken, die man zur Erstellung von typischen und einfachen Anwendungen braucht.

Ein Begriff von zentraler Bedeutung für das Programmieren ist die Variable.

Die Variable ist nichts anderes als ein Platzhalter, der verschiedene Werte annehmen kann.

Sie hat einen Namen (bestehend aus Buchstaben und eventuell Unterstrichen, z.B. „Anzahl_Elemente“, „AnzahlElemente“ oder „anzahlelemente“).

Üblicherweise hat eine Variable auch einen Typ, z.B. Text („string“), Ordnungszahl („integer“) oder reale Zahl.

AutoHotkey verwendet keine explizit definierten Typen, das Programm interpretiert sie automatisch. Das funktioniert sehr gut; wenn ich natürlich versuche, ein Wort mit einem anderen zu multiplizieren, wird das wahrscheinlich schiefgehen, z.B.:

Var_Produkt = Var_1 * Var_2

Wenn hier Var_1 den Wert 3 und Var_2 den Wert 5,5 hat, bekommt die Variable Var_Produkt nach dieser Anweisung den Wert 16,5. Hätten dagegen die Variablen Var_1 und Var_2 die Werte „Sonne“ und „Erde“, wäre die Anweisung sinnlos und wir würden wahrscheinlich eine Fehlermeldung zurückbekommen.

Selbstverständlich ist es auch möglich, einer Variable einen Wert zuzuweisen.
Dafür gibt es in AutoHotkey zwei Methoden:

Die traditionelle Methode:

Zahl = 123 ; der Variable „Zahl“ wird der Wert 123 zugewiesen

Zahl = 123.5 ; der Variable „Zahl“ wird der Wert 123,5 zugewiesen

Zeichenkette = Ingenieurbüro Prochotta ; der Variable „Zeichenkette“ wird der Wert „Ingenieurbüro Prochotta“ zugewiesen

Var_2 = %Var_1% ; hier wird der Wert der Variable „Var_1“ abgerufen und anschließend der Variable „Var_2“ zugewiesen

Die Ausdrucksmethode:

Zahl := 123 ; anstatt des Operators „=“ verwenden wir den Operator „:=“

Zahl := 123.5

Zeichenkette := „Ingenieurbüro Prochotta“ ; hier verwenden wir Anführungszeichen

Var_2 := Var_1  ; ohne Prozentzeichen

Aber was macht man mit diesen Variablen?

Mit Zahlen kann man natürlich rechnen. Zum Beispiel:

Wert_1 := (8 + 2) * 40 ; AutoHotkey behandelt mathematische Operatoren wie die klassische Mathematik

Es geht aber auch so:

c := Sqrt(a*a + b*b)

Das ist die bekannte Pythagoras-Formel. Die Funktion Sqrt gibt eine Quadratwurzel aus.

Zuerst brauchen wir aber noch die Werte (fachsprachlich: Argumente) und b. Vorerst sind sie nämlich noch leer (ohne Zahlenwert).

^Numpad3::

a := 2

b := 3

c := Sqrt (a*a + b*b)

return

Das funktioniert, aber es hat nicht allzu viel Sinn, die Zahlenwerte für und im Programmcode fest zuzuweisen. Es muss doch auch möglich sein, diese Werte beim Benutzer abzufragen. 

Das geht, und dafür gibt es die Anweisung InputBox. Dieser Befehl öffnet ein Eingabefenster, das den Benutzer zur Eingabe einer Zeichenkette auffordert.

Die Syntax lautet:

InputBox, AusgabeVar [, Titel, Anzeigetext, HIDE, Breite, Höhe, X, Y, Schriftart, Zeitlimit, Standardwert]

„AusgabeVar“ ist der Name der Variable, in der die Angabe aus dem Fenster gespeichert wird. Die restlichen Argumente (Werte) sind optional, siehe  InputBox.. Für dieses Beispiel brauche ich nur den „Anzeigetext“. Unser Skript sieht jetzt so aus:

^Numpad3::

InputBox, a,, Geben Sie das Argument a ein:

InputBox, b,, Geben Sie das Argument b ein:

c := Sqrt(a*a + b*b)

return

Unsere Variablen sind und b, einen Titel brauchen wir nicht, und anschließend kommt die Aufforderung „Geben Sie das Argument …“.

Nach der Ausführung des Skripts sehen wir dieses Fenster:

Wir geben die Werte für und ein, bestätigen sie jeweils und … es passiert nichts.
Das Programm hat zwar den Wert 
errechnet, behält ihn aber für sich.

Mithilfe der Anweisung MsgBox können wir uns diesen Wert anzeigen lassen.

Die Syntax dafür lautet:

MsgBox, Text

oder

MsgBox [, Optionen, Titel, Text, Zeitüberschreitung]

^Numpad3::

InputBox, a,, Geben Sie das Argument a ein:

InputBox, b,, Geben Sie das Argument b ein:

c := Sqrt(a*a + b*b)

MsgBox % c ; Durch Voranstellen von „%“ wird jeder Parameter zu einem Ausdruck (Wert der Variable c).

return

Das wäre nun etwas für die Schule; machen wir lieber was Sinnvolles.

^Numpad4::

InputBox, a,, Geben Sie die Anzahl der Anschläge ein:

InputBox, b,, Geben Sie den Zeilenpreis ein:

c := b*a/55

MsgBox, % c

return

Noch eine kleine Modifizierung:

^Numpad4::

InputBox, a,, Geben Sie die Anzahl der Anschläge ein:

InputBox, b,, Geben Sie den Zeilenpreis ein:, , , , , , , , 1.25 ; hier verwende ich den Parameter „Standardwert“

c := b*a/55

d:= „Der Preis für die Übersetzung beträgt: “ . c ; der Punkt verbindet den Text mit dem Wert der Variable „c“

MsgBox, % d

return

Ich habe jetzt sehr viele Variablen produziert. Das mache ich absichtlich – zum besseren Verständnis. Es geht auch einfacher:

^Numpad4::

InputBox, a,, Geben Sie die Anzahl der Anschläge ein:

InputBox, b,, Geben Sie den Zeilenpreis ein:, , , , , , , , 1.25

MsgBox, % „Der Preis für die Übersetzung beträgt: “ . b*a/55

return

Mit den Zahlen-Variablen lässt sich, wie wir sehen, sehr gut rechnen. Analog können wir auch die Text-Variablen verarbeiten, was für unsere Berufsgruppe sicherlich von größerem Interesse ist. So lassen sich viele Operationen an Texten durchführen, z.B. kürzen, sortieren, die einzelnen Buchstaben zählen, kleine Buchstaben durch große ersetzen und umgekehrt, bestimmte Zeichenfolgen in Texten suchen, Textabschnitte durch andere ersetzen und vieles mehr.

Diese Funktionen möchte ich jetzt aber nicht detailliert besprechen. Dafür wird es später noch genug Gelegenheiten geben. Eine Zusammenstellung mit einer sehr ausführlichen Beschreibung findet sich unter https://ahkde.github.io/docs/Tutorial.htm in der Kategorie „Zeichenkette“.

Das war diesmal ziemlich viel Theorie. Im nächsten Beitrag kommen interessante Beispiele. Versprochen.

Wenn Euch dieser Beitrag gefällt, könnt Ihr ihn gerne mit dem Button „Gefällt mir“ kommentieren.

Autohotkey – Modul 02

04.10.2017 Autohotkey Keine Kommentare

Nachdem wir das Programm AutoHotkey installiert und bereits die ersten sehr nützlichen Befehle kennengelernt haben, nämlich:

x::y (ersetzt die Taste „x“ durch die Taste „y“)

::aaa::bbb (ersetzt die Zeichenkette „aaa“ durch die Zeichenkette „bbb“),

gehen wir einen Schritt weiter.

Sehr nützlich wäre z.B. auch, wenn man mit einem Shortcut eine öffnende eckige Klammer am Anfang und eine schließende am Ende eines Textteils einfügen könnte – es stimmt, die eckigen Klammern sind meine Lieblingstasten –, aber ganz ehrlich: Wer mag schon seine Finger andauernd mit der Tastenkombination „AltGr-[“ und „AltGr-]“ strapazieren? Darüber hinaus spare ich mir mit dem Shortcut immerhin einen Anschlag, und das kann sich besonders beim Übersetzen von Gutachten lohnen, wo üblicherweise mit eckigen Klammern auf Quellen verwiesen wird, also [1], [2] usw.

Zuerst überlege ich, wie das Einsetzen der Klammern mit einer physikalischen Tastatur erledigt wird. Notwendig sind die folgenden Schritte:

1) Zuerst den Inhalt schreiben, z.B. die Zahl 24

2) Sprung zum Anfang der Zahl, mit der Tastenkombination Ctrl-left (so macht man das normalerweise; „left“ bedeutet hier die Taste „Pfeil nach links“)

3) Eingabe [

4) Sprung zum Ende der Zahl, mit der Tastenkombination „Ctrl-right“

5) Eingabe ]

6) Eingabe Leertaste

Diese Schritte lassen sich in einer AHK-Datei durch folgenden Code darstellen:

^Numpad1:: ; die Kombination „Ctrl-1“ (auf dem numerischen Tastaturblock) startet das Skript

SendInput {Ctrl down}{Left}{Ctrl up}  ; Sprung zum Anfang eines Wortes

sleep, 200 ; wartet 200 Millisekunden, damit der Befehl ausgeführt werden kann

SendInput [ ; fügt eine öffnende Klammer ein

sleep, 200

SendInput {Ctrl down}{Right}{Ctrl up}  ; Sprung zum Ende eines Wortes

sleep, 200

SendInput ]{Space} ; fügt eine schließende Klammer und einen Leerschritt ein

sleep, 200

return ; Ende des Skripts

Alles, was hinter dem Semikolon steht, sind optionale Kommentare – man kann sie einfügen, wenn man will, man muss aber nicht.

Dazu noch ein paar Erläuterungen:

^Numpad1::  ist der auslösende Shortcut. Die Tastenkombination „Ctrl-1“ löst nacheinander sämtliche Aktionen aus, die sich zwischen dem Shortcut und dem abschließenden Return befinden. Selbstverständlich kann dies auch eine andere Tastenkombination als „^Numpad1“ sein.

Der Befehl SendInput sendet simulierte Tastatureingaben an die aktive Anwendung (dort, wo sich der Cursor befindet).

{Ctrl down}{Left}{Ctrl up} entspricht der Sequenz: „Ctrl“-Taste drücken, Taste „Linkspfeil“ tippen, „Ctrl“-Taste loslassen.

Der Befehl sleep verursacht eine Verzögerung bei der Ausführung. Die Verzögerung wird in Millisekunden angegeben. Die Zahl 200 ist ein Erfahrungswert.

Die Bezeichnungen für sämtliche Tasten finden sich hier.

Und fertig ist unser erstes Skript, das so funktionieren soll:

Vielleicht noch ein weiteres einfaches Beispiel, das dieses Arbeitsprinzip erläutert:

Als ich für meine letzte Steuererklärung mehrere Dutzend PDF-Rechnungen ausdrucken musste, habe ich mich darüber geärgert, dass in der Druckmaske immer die Option „Alle Seiten drucken“ aktiv ist. Normalerweise will ich nämlich nur die erste Seite drucken und muss dementsprechend die Option mit der Maus aktualisieren.

Die Maske sieht etwa so aus:

Ich möchte nun also mithilfe eines AHK-Skripts dieses Druckformular aufrufen, die Option „Aktuelle Seite“ aktivieren und dann den Druckvorgang starten.

Wie immer überlege ich zuerst, mit welcher Tastenfolge auf der physikalischen Tastatur sich diese Aktionen durchführen lässt.

Das Druckformular im PDF-Programm lässt sich standardmäßig mit „Ctrl-p“ aufrufen.

Um die Option „Aktuelle Seite“ zu aktivieren, muss ich 7-mal nacheinander die Taste „Tab“ und anschließend einmal die Taste „Pfeil nach unten“ (Down) tippen. Möglicherweise verläuft diese Sequenz bei anderen Adobe-Reader-Versionen ein klein wenig anders, aber das ist sehr leicht herauszufinden.

Mein neues Skript sieht nun so aus:

^Numpad2::

send {Ctrl down}p{Ctrl up}

sleep, 500 ; weil die Druckmaske sich erst nach einer gewissen Verzögerung zeigt

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Down}

sleep, 200

SendInput {Enter} ; der „Drucken“-Button im Formular ist aktiv, deshalb reicht ein „Enter“ aus

sleep, 200

return

So weit, so gut. Wichtig ist, dass vor dem Auslösen des Skripts das gewünschte PDF-Dokument aktiv ist.

Noch wichtiger: Bevor ein Skript ausgeführt wird, muss alles gespeichert werden.
Das hat etwas mit dem großen Nachteil dieser Programmierungsart zu tun. Sollte z.B. Acrobat Reader aus irgendeinem Grund die Druckmaske innerhalb 500 Millisekunden nicht aufrufen, stimmen die folgenden Befehle nicht mehr. Das passiert auch, wenn ich vergesse, das PDF-Dokument zu aktivieren und mich noch z.B. im Word-Programm befinde. In einem solchen Fall muss ich aber nicht hilflos zuschauen, sondern kann das Skript sofort abbrechen.

Dafür gibt es die Anweisung ExitApp.

Und so lässt sich die entsprechende Zuweisung durchführen:

#z::ExitApp ; Abbruch mit „Win-z“

return

Jetzt unterbricht der Shortcut „Win-z“ („Win“ = Taste „Windows“) das laufende Skript (den entsprechenden Shortcut sollte man sich sehr gut merken).

Meine vollständige Skriptdatei sieht jetzt etwa so aus:

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.

; #Warn ; Enable warnings to assist with detecting common errors.

SendMode Input ; Recommended for new scripts due to its superior speed and reliability.

SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

#z::ExitApp ; Abbruch mit — Win + z — !!!

return

^Numpad1::

SendInput {Ctrl down}{Left}{Ctrl up}

sleep, 200

SendInput [

sleep, 200

SendInput {Ctrl down}{Right}{Ctrl up}

sleep, 200

SendInput ]{Space}

sleep, 200

return

^Numpad2::

SendInput {Ctrl down}p{Ctrl up}

sleep, 500

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Tab}

sleep, 200

SendInput {Down}

sleep, 200

SendInput {Enter}

return

Das letzte Skript ist aber nicht besonders geistreich.

Es lässt sich auch so schreiben:

^Numpad2::

SendInput {Ctrl down}p{Ctrl up}

sleep, 500

Loop 7 {

   SendInput {Tab} ; der Einzug ist nicht notwendig, schafft aber besseren Überblick

   sleep, 200

}

SendInput {Down}

sleep, 200

SendInput {Enter}

return

Die Konstruktion:

Loop 7 {

…..

…..

}

ist ein sehr wichtiges Element der Programmierung: eine Schleife. In diesem Fall sorgt sie dafür, dass die Anweisungen SendInput {Tab} und sleep siebenmal wiederholt werden. Die entsprechenden, zu wiederholenden Anweisungen werden immer in geschweiften Klammern zusammengefasst.

Wenn ich ein Skript modifiziert habe, muss ich dieses natürlich speichern und im Windows-Explorer aufrufen. Sollte dieses Skript bereits aktiv sein (grünes Icon sichtbar auf der Bildschirmleiste), erhalte ich die folgende Meldung, die ich bestätigen muss:

„An older instance of this script is already running. Replace it with this instance?“

Fortsetzung folgt

Wenn Euch dieser Beitrag gefällt, könnt Ihr ihn gerne mit dem Button „Gefällt mir“ kommentieren.

Autohotkey – Modul 01

22.09.2017 Autohotkey Keine Kommentare

Herzlich willkommen!

Der Gedanke, einen Blog für Übersetzer zu schreiben, beschäftigt mich schon seit längerer Zeit. Ich möchte meinen Kollegen vom Fach gern ein Werkzeug zur Erleichterung der täglichen EDV-Arbeit an die Hand geben.

Meine ersten Beiträge möchte ich der Skriptsprache AutoHotkey (AHK) widmen. Warum AHK, was kann diese Software so besonders gut? Ich denke, es ist fast leichter, zu sagen, was sie nicht kann: Kochen, Gartenarbeit und dergleichen kann sie leider nicht, aber ansonsten kann sie ziemlich alles.

Es wird oft gesagt, dass es nicht so leicht ist, Computerprogramme zu schreiben. Das stimmt – allerdings nur, wenn man komplizierte Sachen schreibt. In Wirklichkeit lässt sich bereits mithilfe relativ einfacher, selbstfabrizierter Applikationen die tägliche Arbeit viel leichter bewältigen. Für Übersetzer sind die wichtigsten Anwendungsbereiche: erleichterte Bedienung, Automatisierung, Datenaustausch, Recherche und Terminologiearbeit (siehe Beispiele). Deshalb glaube ich, dass meine Beiträge auch für Projektmanager in Übersetzungsagenturen von Interesse sein könnten.

Natürlich muss man AutoHotkey zuerst lernen, aber der Aufwand dafür ist geringer als man denkt. Eine Fremdsprache auf A1-Niveau zu erlernen ist ja schließlich auch nicht so schwer. Vergleichbare Grundkenntnisse einer Programmiersprache genügen nämlich schon, um sehr nützliche Anwendungen für den eigenen Bedarf zu schreiben. Darüber hinaus müssen wir auch nicht alles selbst programmieren. Im Netz sind sehr viele fertige Lösungen (Programmcodes) zu finden, die lediglich ein wenig angepasst werden müssen.

Auch eine Programmiersprache ist im Grunde nichts anderes als eine Sprache, also nichts, wovor ein Übersetzer Angst haben muss. Um sie zu lernen, ist keine besondere mathematische Begabung erforderlich (auch wenn diese Vorstellung bis heute ziemlich weit verbreitet ist), sondern lediglich Kenntnisse der Sprachsyntax und ein wenig Übung. Mittlerweile werden heute ja auch in vielen Schulen Programmierkenntnisse vermittelt – sie gehören also auch in gewisser Weise zur Allgemeinbildung.

AHK ist eine sehr universale Programmiersprache, d.h. man kann sie fast immer einsetzen, unabhängig davon, mit welchem Programm man gerade arbeitet. Für Computernutzer, die viel mit mehreren Anwendungen arbeiten müssen, ist dieses Werkzeug einfach perfekt.

Bei der Benutzung von AHK lässt sich sehr gut mit sogenannten Shortcuts arbeiten. Wenn ich z.B. ein Dokument speichern will, muss ich die entsprechende Anweisung gar nicht kennen (in den meisten Programmiersprachen wäre es eine Save-Anweisung). AHK nutzt dafür einfach die allgemein bekannte Tastenkombination Ctrl-S. Mit anderen Worten: Mit AutoHotkey werden die Skripte gewissermaßen aus Kürzeln zusammengestellt. Aus diesem Grund sind die ersten Schritte sehr leicht nachzuvollziehen.

Zunächst möchte ich aber erst noch ein paar Worte zu diesem Blog schreiben. Er ist nämlich zum Mitmachen gedacht. Fragen und Kommentare sind ausdrücklich erwünscht, und ich freue mich natürlich auch darüber, wenn jemand meine Beiträge mit einem „Gefällt mir“ markiert und weiterempfiehlt. Anregungen für neue Aufgaben wären besonders toll. Wenn also jemandem bei der täglichen Arbeit mit seiner EDV der Gedanke kommt, „Hier könnte man doch etwas optimieren“, sollte er oder sie sich bitte einfach auf dieser Seite melden. Nach Möglichkeit versuchen wir dann, das Problem gemeinsam zu lösen.

Bei der sprachlichen Gestaltung dieses Blogs unterstützt mich Cristoforo Schweeger, ein sehr vielseitiger und gründlich arbeitender Kollege, der aus dem Englischen, Französischen, Italienischen, Niederländischen, Spanischen, Portugiesischen und den skandinavischen Sprachen ins Deutsche übersetzt. Für seine Untestützung sage ich an dieser Stelle herzlichen Dank.

Zurück zu AutoHotkey. Ich habe mir gedacht, dass hier nicht nur Grundlagen der Programmierung behandelt werden, sondern auch fertige Lösungen entstehen, die jeder von euch bei seiner täglichen Arbeit nutzen kann.

Normalerweise sind die in den meisten Fachbüchern präsentierten ersten Programme ziemlich banal. Sie liefern als Ergebnis eine Meldung wie „Hallo Welt” oder „Mein erstes Skript”, d.h. sie machen eigentlich gar nichts. Dagegen kann unser erstes Programm schon ein Erfolgsschlager sein.

Hier schon einmal ein Beispiel:

Problem: Wenn ich in meiner Muttersprache schreibe, also die polnische Tastatur benutze, habe ich teilweise eine andere Tastenbelegung, und einige Tasten befinden sich gar nicht auf der Tastatur, z.B die eckigen Klammern.

Lösung: Abhilfe schafft hier ein einziger Befehl, genauer gesagt ein Zeichen. Gebe ich im AHK-Editor den Befehl ::((::[ ein, dann brauche ich später beim Schreiben eines Textes nur 2 mal  tippen, um eine eckige Klammer zu generieren. Ich ersetze also die Zeichenkette (( durch [. Entsprechend kann ich bei sämtlichen fehlenden Zeichen verfahren, und schon ist die Welt, genauer gesagt die Tastatur, in Ordnung, und ich kann wieder tippen, ohne hinzusehen.

Alternative: Ich programmiere die polnischen bzw. andere gewünschte Buchstaben an den entsprechenden Stellen der deutschen Tastatur ein, z.B. mit den Befehlen: ä::ą, Ä::ę, #::ó +::ś, *::ć  usw. Jetzt habe ich die einzelnen Tasten gewissermaßen durch andere ersetzt und die Taste bleibt an ihrem Platz.

Zuvor muss ich aber natürlich das Programm AHK installiert haben. Das ist sehr schnell erledigt, und eine ausführliche Anleitung findet sich auf der Seite:

https://ahkde.github.io/docs/Tutorial.htm

Hier noch der Link zu einem YouTube-Video mit ähnlichem Inhalt:

Falls das erste AHK-Skript so erstellt wurde wie unter https://ahkde.github.io/docs/Tutorial.htm beschrieben, sind die ersten Zeilen in der neuen AHK-Datei wahrscheinlich schon mit Text gefüllt, etwa so:

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.

Ich lasse diesen Text einfach stehen und fülle die weiteren Zeilen mit neuen Befehlen aus, etwa:

ä::ą

#::ó ;(weil der Buchstabe „ó” sich auf der polnischen Tastatur eben an dieser Stelle befindet) usw.

Nach dem Abspeichern der AHK-Datei (die Dateiendung muss „.ahk” lauten) kann ich mein erstes Programm starten. Dafür muss ich diese AHK-Datei im Windows-Explorer per Doppelklick aufrufen. Auf der Bildschirmleiste ist nun ein grünes Icon mit dem Buchstaben  zu sehen.

Dieses Icon bedeutet, dass mein Skript aktiv ist. Möchte ich die alte Tastenbelegung wieder zurückhaben, dann positioniere ich die Maus über dieses Icon, klicke mit der rechten Maustaste und wähle dann „Exit”.

Tipp: Wenn ich dieses Werkzeug für mehrere verschiedene Sprachen benötige, dann erstelle ich für jede Sprache ein eigenes Skript, z.B. „Tastatur_SP.ahk” für Spanisch, „Tastatur_FR.ahk” für Französisch usw.

Fortsetzung folgt

Wenn Euch dieser Beitrag gefällt, könnt Ihr ihn gerne mit dem Button „Gefällt mir“ kommentieren.