forked from autohotkey-docs-translation/v1-de
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScripts.htm
365 lines (353 loc) · 42.8 KB
/
Scripts.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
<!DOCTYPE HTML>
<html lang="de">
<head>
<title>Scripts - Definition & Verwendung | AutoHotkey</title>
<meta name="description" content="Erfahren Sie mehr über Skripte im Allgemeinen, das Aufteilen langer Zeilen, das Kompilieren eines Skripts, das Übergeben von Befehlszeilenparametern, den Zeichensatz und das Debuggen." />
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="static/theme.css" rel="stylesheet" type="text/css" />
<script src="static/content.js" type="text/javascript"></script>
<script src="static/ga.js" type="text/javascript"></script>
</head>
<body>
<h1>Skripte</h1>
<p>Verwandte Themen:</p>
<ul>
<li><a href="Program.htm">Verwendung des Programms</a>: Wie man AutoHotkey grundsätzlich nutzt.</li>
<li><a href="Concepts.htm">Konzepte und Konventionen</a>: Allgemeine Erklärung zu verschiedenen Konzepten, auf die AutoHotkey basiert.</li>
<li><a href="Language.htm">Skriptsprache</a>: Spezifische Details zur Syntax (wie man Skripte schreibt).</li>
</ul>
<h2>Inhaltsverzeichnis</h2>
<ul>
<li><a href="#intro">Einführung</a></li>
<li><a href="#auto">Der oberste Bereich des Skripts (automatischer Ausführungsbereich)</a>: Dieser Bereich wird beim Starten des Skripts automatisch ausgeführt.</li>
<li><a href="#continuation">Eine lange Zeile in mehreren kurzen Zeilen aufteilen</a>: Zur Erhöhung der Übersichtlichkeit und Wartbarkeit des Skripts.</li>
<li><a href="#ahk2exe">Ein Skript in eine EXE-Datei umwandeln (Ahk2Exe)</a>: Ein .ahk-Skript in eine .exe-Datei umwandeln, die auf jedem PC ausgeführt werden kann.</li>
<li><a href="#cmd">Befehlszeilenparameter an einem Skript übergeben</a>: Die Variablen %1%, %2% usw. enthalten die eingehenden Parameter.</li>
<li><a href="#cp">Zeichensatz einer Skript-Datei</a>: ASCII-fremde Zeichen sicher in Skripten verwenden.</li>
<li><a href="#debug">Ein Skript debuggen</a>: Wie die Fehler eines Skripts, das sich falsch verhält, gefunden werden können.</li>
</ul>
<h2 id="intro">Einführung</h2>
<p>Jedes Skript ist eine reine Textdatei mit mehreren Zeilen, die das Programm (AutoHotkey.exe) ausführen soll. Solche Skripte können <a href="Hotkeys.htm">Hotkeys</a> und <a href="Hotstrings.htm">Hotstrings</a> enthalten oder sogar nur aus diesen bestehen. Falls keine Hotkeys und Hotstrings vorhanden sind, wird ein Skript, sobald es gestartet wird, seine Befehle von oben nach unten und der Reihe nach ausführen.</p>
<p>Das Programm lädt das Skript zeilenweise in den Speicher. Jede Zeile kann bis zu 16383 Zeichen lang sein. Während des Ladevorgangs wird das Skript <a href="misc/Performance.htm">optimiert</a> und überprüft, ob es gültig ist. Wenn das Programm auf einen Syntaxfehler stößt, wird er angezeigt. Solche Fehler müssen korrigiert werden, bevor das Skript ausgeführt werden kann.</p>
<h2 id="auto">Der oberste Bereich des Skripts (automatischer Ausführungsbereich)</h2>
<p>Das Skript startet, sofern es erfolgreich geladen wurde, bei der ersten Zeile und endet, wenn es entweder ein <a href="commands/Return.htm">Return</a>, <a href="commands/Exit.htm">Exit</a>, <a href="Hotkeys.htm">Hotkey-/Hotstring-Label</a> oder das physische Ende des Skripts erreicht hat (je nachdem was zuerst kommt). Dieser oberste Bereich des Skripts wird auch als <em>automatischer Ausführungsbereich</em> bezeichnet.</p>
<p class="warning"><strong>Hinweis:</strong> Während das <em>erste</em> Hotkey/Hotstring-Label im Skript die gleiche Wirkung wie <a href="commands/Return.htm">Return</a> hat, haben andere Hotkeys und Label dies nicht.</p>
<p>Ein Skript, das weder <a href="commands/_Persistent.htm">persistent</a> noch <a href="Hotkeys.htm">Hotkeys</a>, <a href="Hotstrings.htm">Hotstrings</a>, <a href="commands/OnMessage.htm">OnMessage()</a> und <a href="commands/Gui.htm">GUI</a> enthält, wird beendet, sobald es den automatischen Ausführungsbereich durchgeführt hat. Ansonsten läuft das Skript im Leerlauf weiter, wo es nur noch auf Ereignisse wie Hotkeys, Hotstrings, <a href="commands/Gui.htm#label">GUI-Ereignisse</a>, <a href="commands/Menu.htm">benutzerdefinierte Menüpunkte</a> und <a href="commands/SetTimer.htm">Timer</a> reagieren kann.</p>
<p>Jeder neu gestartete <a href="misc/Threads.htm">Thread</a> via <a href="Hotkeys.htm">Hotkey</a>, <a href="Hotstrings.htm">Hotstring</a>, <a href="commands/Menu.htm">Menüpunkt</a>, <a href="commands/Gui.htm#label">GUI-Ereignis</a> oder <a href="commands/SetTimer.htm">Timer</a> verwendet zu Beginn die Standardwerte von folgenden Einstellungen, die im automatischen Ausführungsbereich festgelegt werden können. Wenn diese nicht festgelegt sind, werden die vordefinierten Standardwerte verwendet (welche das sind, finden Sie auf den folgenden Seiten): <a href="commands/AutoTrim.htm">AutoTrim</a>, <a href="commands/CoordMode.htm">CoordMode</a>, <a href="commands/Critical.htm">Critical</a>, <a href="commands/DetectHiddenText.htm">DetectHiddenText</a>, <a href="commands/DetectHiddenWindows.htm">DetectHiddenWindows</a>, <a href="commands/FileEncoding.htm">FileEncoding</a>, <a href="commands/ListLines.htm">ListLines</a>, <a href="commands/SendLevel.htm">SendLevel</a>, <a href="commands/SendMode.htm">SendMode</a>, <a href="commands/SetBatchLines.htm">SetBatchLines</a>, <a href="commands/SetControlDelay.htm">SetControlDelay</a>, <a href="commands/SetDefaultMouseSpeed.htm">SetDefaultMouseSpeed</a>, <a href="commands/SetFormat.htm">SetFormat</a>, <a href="commands/SetKeyDelay.htm">SetKeyDelay</a>, <a href="commands/SetMouseDelay.htm">SetMouseDelay</a>, <a href="commands/SetRegView.htm">SetRegView</a>, <a href="commands/SetStoreCapslockMode.htm">SetStoreCapsLockMode</a>, <a href="commands/SetTitleMatchMode.htm">SetTitleMatchMode</a>, <a href="commands/SetWinDelay.htm">SetWinDelay</a>, <a href="commands/StringCaseSense.htm">StringCaseSense</a>, und <a href="commands/Thread.htm">Thread</a>.</p>
<p>Falls der automatische Ausführungsbereich zu lange dauert (oder nie das Ende erreicht), werden die Standardwerte der oben genannten Einstellungen automatisch nach 100 Millisekunden wirksam. Wenn der automatische Ausführungsbereich schließlich das Ende erreicht hat (wenn überhaupt), werden die Standardwerte mit den benutzerdefinierten Standardwerten aus dem automatischen Ausführungsbereich überschrieben. In der Regel ist es am besten, die Standardwerte von <a href="Hotkeys.htm">Hotkeys</a>, <a href="Hotstrings.htm">Hotstrings</a>, <a href="commands/SetTimer.htm">Timern</a> oder <a href="commands/Menu.htm">benutzerdefinierten Menüpunkten</a> im oberen Bereich des Skripts zu ändern. Beachten Sie außerdem, dass jedem <a href="misc/Threads.htm">Thread</a> eine eigene Sammlung von den oben genannten Einstellungen zugewiesen ist. Das heißt, dass Einstellungen, die in einem <a href="misc/Threads.htm">Thread</a> geändert werden, die Einstellungen von anderen Threads nicht beeinflussen können.</p>
<h2 id="continuation">Eine lange Zeile in mehreren kurzen Zeilen aufteilen</h2>
<p>Lange Zeilen können in mehreren kurzen Zeilen aufgeteilt werden, um die Übersichtlichkeit und Wartbarkeit des Skripts zu erhöhen. Die Ausführungsgeschwindigkeit des Skripts wird dabei nicht reduziert, weil solche Zeilen bereits beim Starten des Skripts im Speicher zusammengeführt werden.</p>
<p id="continuation-line"><strong>Methode #1</strong>: Eine Zeile, die mit "and", "or", ||, &&, einem Komma oder einem <a href="Variables.htm#concat">Punkt</a> beginnt, wird automatisch mit der oberen Zeile zusammengeführt (in v1.0.46+ gilt das auch für alle anderen <a href="Variables.htm#Operators">Ausdrucksoperatoren</a>, außer ++ und --). Im folgenden Beispiel wird die zweite Zeile an die erste Zeile angefügt, weil sie mit einem Komma beginnt:</p>
<pre>FileAppend, Das ist der Text, der angefügt wird.`n <em>; Kommentar hier möglich.</em>
, %A_ProgramFiles%\BeliebigeAnwendung\Log-Datei.txt <em>; Kommentar.</em></pre>
<p>Die Zeilen im nächsten Beispiel werden zu einer einzelnen Zeile zusammengeführt, weil die letzten beiden Zeilen mit "and" oder "or" beginnen:</p>
<pre>if (Farbe = "Rot" or Farbe = "Grün" or Farbe = "Blau" <em>; Kommentar.</em>
<strong>or</strong> Farbe = "Schwarz" or Farbe = "Grau" or Farbe = "Weiß") <em>; Kommentar.</em>
<strong>and</strong> ProduktIstInFarbeVerfügbar(Produkt, Farbe) <em>; Kommentar.</em></pre>
<p>Der <a href="Variables.htm#ternary">ternäre Operator</a> ist auch ein guter Kandidat:</p>
<pre>ProduktIstVerfügbar := (Farbe = "Rot")
<strong>?</strong> false <em>; Rote Produkte sind nicht verfügbar, daher ist der folgende Funktionsaufruf irrelevant.</em>
<strong>:</strong> ProduktIstInFarbeVerfügbar(Produkt, Farbe)</pre>
<p>Obwohl die Einrückungen in den oberen Beispielen optional sind, machen sie eventuell deutlich, welche Zeilen zusammengehören. Außerdem müssen keine Leerzeichen bei Zeilen eingefügt werden, die mit den Wörtern "AND" und "OR" beginnen; das Programm macht das automatisch. In den Beispielen oben können leere Zeilen oder <a href="Language.htm#comments">Kommentare</a> zwischen oder am Ende jeder Zeile eingefügt werden.</p>
<p id="continuation-section"><strong>Methode #2</strong>: Diese Methode sollte verwendet werden, wenn sehr viele Zeilen zusammengeführt werden müssen oder wenn die Zeilen nicht für Methode #1 geeignet sind. Diese Methode kann sowohl bei <a href="Hotstrings.htm">automatisch-ersetzenden Hotstrings</a> als auch bei Befehlen oder <a href="Variables.htm#Expressions">Ausdrücken</a> angewendet werden. Zum Beispiel:</p>
<pre><em>; BEISPIEL #1:</em>
Var =
(
Zeile 1 vom Text.
Zeile 2 vom Text. Standardmäßig befindet sich ein Zeilenumbruchszeichen (`n) zwischen den Zeilen.
)
<em>; BEISPIEL #2:</em>
FileAppend, <em>; Das Komma ist in diesem Fall erforderlich.</em>
(
Eine Textzeile.
<i>Standardmäßig</i> wird das CR-Zeichen (Enter) zwischen der vorherigen und dieser Zeile als LF-Zeichen (`n) in die Datei geschrieben.
<i>Standardmäßig</i> wird der Tabulator auf der linken Seite dieser Zeile auch in die Datei geschrieben (das gleiche gilt auch für Leerzeichen).
<i>Standardmäßig</i> werden Variablenreferenzen wie %Var% mit dem Inhalt der Variable ersetzt.
), C:\Meine Datei.txt</pre>
<p>In den oberen Beispielen sieht man oben und unten runde Klammern, die mehrere Zeilen eingrenzen. Auch <em>Fortsetzungsbereich</em> genannt. Beachten Sie, dass in der untersten Zeile nach der runden Endklammer der letzte Parameter von <a href="commands/FileAppend.htm">FileAppend</a> enthalten ist. Diese Anwendungsart ist optional; das wird in solchen Fällen getan, um das Komma nicht als direkt geschriebenes Komma, sondern als Parametertrennung zu behandeln.</p>
<p>Das Standardverhalten eines Fortsetzungsbereichs kann überschrieben werden, indem man eine oder mehrere der folgenden Optionen auf der rechten Seite der runden Startklammer einfügt. Mehrere Optionen müssen mit Leerzeichen voneinander getrennt werden. Zum Beispiel: <code>( LTrim Join| %</code>.</p>
<p id="Join"><strong>Join</strong>: Gibt an, wie die Zeilen verbunden werden sollen. Lässt man diese Option weg, wird jeder Zeile, außer die letzte, mit einem Zeilenumbruchszeichen (`n) enden. Wenn nur das Wort <em>Join</em> angegeben ist, werden die Zeilen ohne Zeichen miteinander verbunden. Ansonsten können unmittelbar nach dem Wort <em>Join</em> bis zu 15 Zeichen erfolgen. Zum Beispiel würde <code>Join`s</code> bewirken, dass nach jeder Zeile, außer der letzten, ein Leerzeichen erfolgt ("`s" kennzeichnet ein direkt geschriebenes Leerzeichen - eine spezielle Escapesequenz, die nur von <em>Join</em> erkannt wird). <code>Join`r`n</code> würde hingegen CR+LF zwischen den Zeilen einfügen, während <code>Join|</code> einen Vertikalstrich zwischen den Zeilen einfügen würde. Damit die letzte Zeile auch mit einem Trennungszeichen endet, ist es erforderlich, direkt über der runden Endklammer des Bereichs eine leere Zeile einzufügen.</p>
<p>Bekannte Einschränkung: Eine Join-Zeichenkette, die mit einem Doppelpunkt endet, darf nicht als letzte Option auf dieser Zeile angegeben werden. Dies würde dazu führen, dass <code>(Join:</code> beispielsweise als Label "(Join" behandelt oder dass <code>(LTrim Join:</code> nicht unterstützt wird, während <code>(Join: C</code> vollkommen in Ordnung wäre.</p>
<p id="LTrim"><strong>LTrim</strong>: Entfernt Leer- und Tabulatorzeichen am Anfang jeder Zeile. Diese Option erlaubt es, den Fortsetzungsbereich eingerückt zu lassen. Geben Sie <code>#LTrim</code> ohne Parameter an, um diese Option für mehrere Fortsetzungsbereiche einzuschalten. <code>#LTrim</code> ist von der Position abhängig; diese Direktive beeinflusst nur Fortsetzungsbereiche, die sich physisch darunter befinden. Die Einstellung kann via <code>#LTrim Off</code> wieder ausgeschaltet werden.</p>
<p><strong>RTrim0</strong> (RTrim gefolgt von einer 0): Verhindert, dass Leer- und Tabulatorzeichen am Ende jeder Zeile automatisch entfernt werden.</p>
<p id="CommentOption"><strong>Comments</strong> (oder <strong>Comment</strong> oder <strong>Com</strong> oder <strong>C</strong>) <span class="ver">[v1.0.45.03+]</span>: Ermöglicht <a href="Language.htm#comments">Semikolon-Kommentare</a> innerhalb des Fortsetzungsbereichs (aber nicht <code>/*..*/</code>). Solche Kommentare (sowie alle links vorkommenden Leer- und Tabulatorzeichen) werden im Endergebnis entfernt, anstatt als direkt geschriebener Text behandelt zu werden. Jeder Kommentar kann auf der rechten Seite einer Zeile oder auf einer neuen Zeile vorkommen.</p>
<p><strong>%</strong> (Prozentzeichen): Behandelt Prozentzeichen nicht als Variablenreferenzen, sondern als direkt geschriebene Zeichen. Dadurch wird verhindert, dass jedes einzelne Prozentzeichen mit einem <a href="commands/_EscapeChar.htm">Escapezeichen</a> versehen werden muss. Diese Option kann weggelassen werden, wenn der Fortsetzungsbereich an Stellen z. B. <a href="Hotstrings.htm">automatisch-ersetzende Hotstrings</a> verwendet wird, wo Prozentzeichen bereits als direkt geschriebener Text behandelt werden.</p>
<p><strong>,</strong> (Komma): Behandelt Kommas nicht als direkt geschriebener Text, sondern als Trennzeichen. Diese selten verwendete Option ist nur für die Kommas zwischen den Befehlsparametern notwendig, weil in <a href="Functions.htm">Funktionsaufrufen</a> der Typ des Kommas keine Rolle spielt. Zudem transformiert diese Option nur Kommas, die tatsächlich Parameter trennen. Das heißt, sobald der letzte Parameter des Befehls erreicht wird (oder wenn keine Parameter vorhanden sind), werden nachfolgende Kommas unabhängig von dieser Option als direkt geschriebener Text behandelt.</p>
<p id="accent"><strong>`</strong> (umgekehrtes Häkchen): Behandelt umgekehrte Häkchen nicht als <a href="commands/_EscapeChar.htm">Escapezeichen</a>, sondern als direkt geschriebene Zeichen. Dies hat auch den Effekt, dass Kommas und Prozentzeichen nicht direkt und individuell mit einem Escapezeichen versehen werden können, oder dass explizit angegebene Escapesequenzen wie `r und `t nicht umgewandelt werden.</p>
<p id="non-continuation"><strong>)</strong> <span class="ver">[v1.1.01+]</span>: Eine runde Endklammer in den Optionen des Fortsetzungsbereichs (außer als Parameter der <a href="#Join">Join</a>-Option) bewirkt, dass die Zeile nicht als Beginn eines Fortsetzungsbereichs, sondern als Ausdruck interpretiert wird. Auf diese Weise können Ausdrücke wie <code>(x.y)[z]()</code> funktionsfähig gemacht werden, ohne die runde Startklammer mit einem Escapezeichen versehen zu müssen.</p>
<p><u>Bemerkungen</u></p>
<p><a href="commands/_EscapeChar.htm">Escapesequenzen</a> wie `n (Zeilenumbruch) und `t (Tabulator) werden innerhalb des Fortsetzungsbereichs unterstützt, solange die <a href="#accent">Akzent-Option (`)</a> nicht vorhanden ist.</p>
<p>Wenn die <a href="#CommentOption">Comment-Option</a> fehlt, werden Semikolon- und /*..*/-Kommentare innerhalb eines Fortsetzungsbereichs als direkt geschriebener Text angesehen. Allerdings können Kommentare am untersten oder obersten Ende des Bereichs eingefügt werden. Zum Beispiel:</p>
<pre>FileAppend, <em>; Kommentar.
; Kommentar.</em>
( LTrim Join <em>; Kommentar.</em>
; Das ist <strong>kein</strong> Kommentar; es ist direkt geschrieben. Fügen Sie das Wort <i>Comments</i> in die Zeile darüber ein, um es zu einem Kommentar zu machen.
), C:\Datei.txt <em>; Kommentar.</em></pre>
<p>Der oben genannte Punkt ist der Grund, warum Semikolons innerhalb eines Fortsetzungsbereichs nie mit einem <a href="commands/_EscapeChar.htm">Escapezeichen</a> versehen werden müssen.</p>
<p>Ein Fortsetzungsbereich kann keine Zeile erzeugen, deren Länge 16383 Zeichen überschreitet (das Programm warnt Sie bei dem Versuch, sobald es gestartet wird). Diese Einschränkung kann zum Beispiel mit mehreren Verkettungen umgangen werden. Zum Beispiel:</p>
<pre>Var =
(
...
)
Var = %Var%`n <em>; Füge mithilfe eines weiteren Fortsetzungsbereichs mehr Text hinzu.</em>
(
...
)
FileAppend, %Var%, C:\Meine Datei.txt</pre>
<p>Aufgrund der Tatsache, dass eine runde Endklammer das Ende eines Fortsetzungsbereichs kennzeichnet, muss eine direkt geschriebene runde Endklammer mit einem Escapezeichen (Akzent/umgekehrtes Häkchen) versehen werden: <code>`)</code>.</p>
<p>Unmittelbar nach einem Fortsetzungsbereich kann eine Zeile angegeben werden, die die runde Startklammer eines weiteren Fortsetzungsbereichs enthält. Auf diese Weise können unterschiedliche Optionen beim Konstruieren einer einzelnen Zeile angewendet werden.</p>
<p>Die stückweise Konstruktion eines Fortsetzungsbereichs via <a href="commands/_Include.htm">#Include</a> wird nicht unterstützt.</p>
<h2 id="ahk2exe">Ein Skript in eine EXE-Datei umwandeln (Ahk2Exe)</h2>
<p>Es ist ein Skript-Compiler im Lieferumfang des Programms enthalten (von fincs bereitgestellt und von TAC109 um Features erweitert).</p>
<p>Ein kompiliertes Skript ist eine eigenständige ausführbare Datei; das heißt, dass das Skript ohne AutoHotkey.exe gestartet werden kann. Der Kompilierungsvorgang bestückt die ausführbare Datei mit folgenden Dingen: der AutoHotkey-Interpreter, das Skript, via <a href="commands/_Include.htm">#Include</a> definierte Dateien und via <a href="commands/FileInstall.htm">FileInstall</a> definierte Dateien. <span class="ver">[v1.1.33+]:</span> Zusätzliche Dateien können mittels <a href="misc/Ahk2ExeDirectives.htm">Compiler-Direktiven</a> eingebunden werden.</p>
<p>Ahk2Exe kann auf folgenden Arten verwendet werden:</p>
<ul>
<li>
<p><strong>GUI-Schnittstelle</strong>: Starten Sie die Verknüpfung "Convert .ahk to .exe" im Startmenü.</p>
</li>
<li>
<p><strong>Rechtsklick</strong>: Klicken Sie mit der rechten Maustaste auf eine .ahk-Datei und wählen Sie "Compile Script" aus (nur verfügbar, wenn die Option "Script Compiler" in der Installation von AutoHotkey ausgewählt wurde). Nach einer kurzen Zeit wird im Verzeichnis des Skripts eine gleichnamige EXE-Datei erstellt. Hinweis: Das Erstellen der EXE-Datei erfolgt mit den Einstellungen (Symbol, .bin-Datei, <a href="#mpress">Komprimierung</a>), die Sie zuletzt für Methode #1 benutzt hatten.</p>
</li>
<li id="ahk2exeCmd">
<p><strong>Befehlszeile</strong>: Der Compiler kann von der Befehlszeile aus mit den unten gezeigten Parametern gestartet werden. Jeder Befehlszeilenparameter, außer <code class="no-highlight">/gui</code>, führt dazu, dass das Skript sofort kompiliert wird.</p>
<style>
#param_pairs td:not(:last-child) {
white-space: nowrap;
}
</style>
<table class="info" id="param_pairs">
<tr>
<th>Parameterpaar</th>
<th>Bedeutung</th>
</tr>
<tr id="SlashIn">
<td>/in <i>Skriptname</i></td>
<td>Der Pfad und Name des Skripts, das kompiliert werden soll. Dies muss angegeben werden, sobald mindestens einer der anderen Parameter verwendet wird, es sei denn, es wird <code class="no-highlight">/gui</code> verwendet.</td>
</tr>
<tr id="SlashOut">
<td>/out <i>EXE_Name</i></td>
<td>Der Pfad\Name der EXE-Datei, die erstellt werden soll. Standardmäßig wird das Verzeichnis und der Basisname der Eingabedatei verwendet, plus ".exe" als Dateiendung.</td>
</tr>
<tr id="slashIcon">
<td>/icon <i>Symbolname</i></td>
<td>Die zu verwendende Symboldatei. Standardmäßig wird das zuletzt in der GUI-Oberfläche verwendete Symbol verwendet.</td>
</tr>
<tr id="SlashBin">
<td>/bin <i>Dateiname</i></td>
<td>Die zu verwendende BIN-Datei. Standardmäßig wird der zuletzt in der GUI-Oberfläche verwendete BIN-Dateiname verwendet.</td>
</tr>
<tr id="SlashCp">
<td>/cp <i>Zeichensatz</i></td>
<td><span class="ver">[v1.1.23.01+]:</span> Überschreibt den Standard-Zeichensatz, mit dem die Skript-Dateien gelesen werden. Eine Liste möglicher Werte finden Sie unter <a href="https://docs.microsoft.com/de-de/windows/win32/intl/code-page-identifiers">Code Page Identifiers</a>. Beachten Sie, dass Unicode-Skripte mit einer Byte-Order-Markierung (BOM) beginnen sollten, was die Verwendung dieses Parameters überflüssig macht.</td>
</tr>
<tr id="SlashCompress">
<td>/compress <i>n</i></td>
<td><span class="ver">[v1.1.33+]:</span> Soll die EXE-Datei <a href="#mpress">komprimiert</a> werden? 0 = nein, 1 = MPRESS verwenden (falls vorhanden), 2 = UPX verwenden (falls vorhanden). Standardmäßig wird die zuletzt in der GUI-Oberfläche verwendete Einstellung verwendet.</td>
</tr>
<tr id="SlashAhk">
<td>/ahk <i>Dateiname</i></td>
<td><span class="ver">[v1.1.33+]:</span> Der Pfad\Name der AutoHotkey.exe-Datei, die zum Kompilieren des Skripts verwendet werden soll. Standardmäßig wird AutoHotkey.exe im Verzeichnis verwendet, das unmittelbar eine Navigationsebene höher ist als das Verzeichnis, das den Compiler enthält. Wenn sie dort nicht zu finden ist, wird die installierte Autohotkey.exe verwendet, sofern vorhanden. <span class="ver">[v1.1.33.01+]:</span> Ansonsten wird AutoHotkeyU32.exe im Verzeichnis verwendet, das unmittelbar eine Navigationsebene höher ist als das Verzeichnis, das den Compiler enthält.</td>
</tr>
<tr id="SlashGui">
<td>/gui</td>
<td><span class="ver">[v1.1.33+]:</span> Zeigt die GUI, anstatt sofort zu kompilieren. Die anderen Parameter können verwendet werden, um die zuletzt in der GUI verwendeten Einstellungen zu überschreiben. <code>/in</code> ist in diesem Fall optional.</td>
</tr>
<tr id="SlashMpress">
<td class="warning"><strong>Veraltet:</strong><br>/mpress <i>0oder1</i></td>
<td class="warning">Soll die EXE-Datei mit MPRESS <a href="#mpress">komprimiert</a> werden? 0 = nein, 1 = ja. Standardmäßig wird die zuletzt in der GUI-Oberfläche verwendete Einstellung verwendet.</td>
</tr>
</table>
<p>Zum Beispiel:</p>
<pre class="no-highlight">Ahk2exe.exe /in "Skript.ahk" /icon "Symbol.ico"</pre>
</li>
</ul>
<p>Hinweise:</p>
<ul>
<li>Parameter, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden.</li>
<li>Die Leistung des Skripts kann in der Regel nicht durch das Kompilieren verbessert werden.</li>
<li>Der Passwortschutz und /NoDecompile wird seit v1.1.01 nicht mehr unterstützt.</li>
<li>Die Befehle <a href="commands/_NoTrayIcon.htm">#NoTrayIcon</a> und "<a href="commands/Menu.htm#MainWindow">Menu, Tray, MainWindow</a>" beeinflussen das Verhalten von kompilierten Skripts.</li>
<li>Die interne Variable <a href="Variables.htm#IsCompiled">A_IsCompiled</a> enthält eine 1, wenn das Skript in kompilierter Form ausgeführt wird. Ansonsten ist sie leer.</li>
<li><span class="ver">[v1.0.43+]:</span> Wenn Parameter an Ahk2Exe übergeben werden, wird eine Meldung über den Erfolg oder Misserfolg des Kompilierungsvorgangs in die Standardausgabe (stdout) geschrieben. Obwohl die Meldung nicht in der Eingabeaufforderung angezeigt wird, kann sie mit Mitteln wie z. B. durch Weiterleiten der Ausgabe an eine Datei "abgefangen" werden. </li>
<li> <span class="ver">[v1.1.22.03+]:</span> Im Fall eines Fehlers kann Ahk2Exe eine Vielzahl von Exitcodes zurückgeben, die den Typ des Fehlers kennzeichnen. Solche Fehlercodes finden Sie auf <a href="https://github.com/AutoHotkey/Ahk2Exe/blob/master/ErrorCodes.md">GitHub (ErrorCodes.md)</a>.</li>
</ul>
<p>Den Quellcode sowie neuere Versionen des Compilers finden Sie auf <a href="https://github.com/AutoHotkey/Ahk2Exe">GitHub</a>.</p>
<h3 id="CompilerDirectives">Skript-Compiler-Direktiven</h3>
<p><span class="ver">[v1.1.33+]:</span> Skript-Compiler-Direktiven ermöglichen es dem Benutzer, genaue Angaben darüber zu machen, wie ein Skript kompiliert werden soll. Einige der Features sind:</p>
<ul>
<li>Möglichkeiten zum Ändern der Versionsinformationen (z. B. Name, Beschreibung, Version...).</li>
<li>Möglichkeiten, um Ressourcen zum kompilierten Skript hinzuzufügen.</li>
<li>Möglichkeiten, an verschiedenen Aspekten der Kompilierung zu feilen.</li>
<li>Möglichkeiten, um Codeabschnitte aus dem kompilierten Skript zu entfernen, und umgekehrt.</li>
</ul>
<p>Weitere Informationen finden Sie unter <a href="misc/Ahk2ExeDirectives.htm">Skript-Compiler-Direktiven</a>.</p>
<h3 id="mpress">Komprimieren von kompilierten Skripten</h3>
<p>Ahk2Exe kann optional MPRESS- oder in <span class="ver">[v1.1.33+]</span> UPX-Freeware verwenden, um kompilierte Skripte zu komprimieren. Wenn <strong>MPRESS.exe</strong> und/oder <strong>UPX.exe</strong> in den Compiler-Unterordner von AutoHotkey kopiert wurde, kann die EXE-Datei via <code>/compress</code>-Parameter oder GUI-Einstellung komprimiert werden. </p>
<p><strong>MPRESS</strong>'s offizielle Webseite (Downloads und Information): <a href="http://www.matcode.com/mpress.htm">http://www.matcode.com/mpress.htm</a><br>MPRESS Mirror: <a href="https://www.autohotkey.com/mpress/">https://www.autohotkey.com/mpress/</a></p>
<p><strong>UPX</strong>'s offizielle Webseite (Downloads und Information): <a href="https://upx.github.io/">https://upx.github.io/</a></p>
<p><strong>Hinweis:</strong> Eine auf diese Weise komprimierte EXE-Datei unterbindet eine einfache Einsicht in den Quellcode des Skripts mithilfe eines Texteditors wie z. B. Notepad oder PE-Resource-Editor. Allerdings kann es nicht verhindern, dass der Quellcode mit Tools extrahiert werden kann, die speziell dafür entwickelt worden sind.</p>
<h2 id="cmd">Befehlszeilenparameter an einem Skript übergeben</h2>
<p>Skripte unterstützen Befehlszeilenparameter. Das Format ist:</p>
<pre>AutoHotkey.exe [<i>Optionen</i>] [<i>Skript-Dateiname</i>] [<i>Skript-Parameter</i>]</pre>
<p>Bei kompilierten Skripten ist das Format:</p>
<pre>KompiliertesSkript.exe [<i>Optionen</i>] [<i>Skript-Parameter</i>]</pre>
<p><strong>Optionen:</strong> Folgende können angegeben werden:</p>
<table class="info">
<tr><th>Option</th><th>Bedeutung</th><th>Kompiliert?</th></tr>
<tr id="SlashF">
<td>/f oder /force</td>
<td>Skript bedingungslos starten und Warndialogfenster überspringen. Diese Option hat den gleichen Effekt wie <a href="commands/_SingleInstance.htm">#SingleInstance Off</a>.</td>
<td>Ja</td>
</tr>
<tr id="SlashR">
<td>/r oder /restart</td>
<td>Gibt an, dass das Skript neu gestartet werden soll (das auch intern vom <a href="commands/Reload.htm">Reload</a>-Befehl verwendet wird).</td>
<td>Ja</td>
</tr>
<tr id="ErrorStdOut">
<td>/ErrorStdOut<br><br>/ErrorStdOut=<em>Codierung</em></td>
<td>
<p>Sendet alle Syntaxfehler, die den Start eines Skripts verhindern, zur Standardfehlerausgabe (stderr), anstatt ein Dialogfenster anzuzeigen. Siehe <a href="commands/_ErrorStdOut.htm">#ErrorStdOut</a> für weitere Details. Diese Option kann mit /iLib kombiniert werden, um die Gültigkeit des Skripts zu überprüfen, ohne es auszuführen.</p>
<p><span class="ver">[v1.1.33+]:</span> Es kann optional eine <a href="commands/FileEncoding.htm">Codierung</a> angegeben werden. <code>/ErrorStdOut=UTF-8</code> beispielsweise kodiert Meldungen als UTF-8, bevor sie in die Standardfehlerausgabe geschrieben werden.</p>
</td>
<td>Ja</td>
</tr>
<tr id="SlashDebug">
<td>/Debug</td>
<td><span class="ver">[AHK_L 11+]:</span> Stellt eine Verbindung zu einem Debugger-Client her. Weitere Informationen finden Sie unter <a href="#idebug">Interaktives Debuggen</a>.</td>
<td>Nein</td>
</tr>
<tr id="CPn">
<td>/CP<i>n</i></td>
<td>
<p><span class="ver">[AHK_L 51+]:</span> Überschreibt den Standard-Zeichensatz, mit dem die Skript-Dateien gelesen werden. Weitere Informationen finden Sie unter <a href="#cp">Zeichensatz einer Skript-Datei</a>.</p>
<p><span class="ver">[v1.1.33+]:</span> Wenn "Default to UTF-8" im Installer aktiviert ist, wird der Dateityp ".ahk" mit einer Befehlszeile registriert, die <code>/CP65001</code> enthält. Dies führt dazu, dass alle Skripte, die über die Shell (Explorer) gestartet werden, standardmäßig UTF-8 verwenden, wenn keine UTF-16-Byte-Order-Markierung vorhanden ist. Skripte, die direkt über AutoHotkey.exe gestartet werden, verwenden weiterhin standardmäßig <code>CP0</code>, da der Parameter <code>/CP65001</code> nicht vorhanden ist.</p>
</td>
<td>Nein</td>
</tr>
<tr>
<td>/iLib <em>"AusgabeDatei"</em></td>
<td>
<p><span class="ver">[v1.0.47+]:</span> AutoHotkey lädt das Skript, ohne es auszuführen. Für jedes Skript, das mithilfe des <a href="Functions.htm#lib">Bibliotheksmechanismus</a> automatisch eingebunden wurde, werden zwei Zeilen in die <em>AusgabeDatei</em> geschrieben. Diese Zeilen werden im folgenden Format geschrieben - dabei ist <em>BiblVerz</em> der vollständige Pfad des Bibliotheksordners und <em>BiblDatei</em> der Dateiname der Bibliothek:</p>
<pre>#Include BiblVerz\
#IncludeAgain BiblVerz\BiblDatei.ahk</pre>
<p>Wenn die Ausgabedatei bereits existiert, wird sie überschrieben. <em>AusgabeDatei</em> kann <code>*</code> sein, um die Ausgabe in die Standardausgabe (stdout) zu schreiben.</p>
<p>Enthält das Skript Syntaxfehler, wird die Ausgabedatei eventuell leer sein. Der Exitcode des Prozesses kann verwendet werden, um diesen Zustand zu erkennen; bei einem Syntaxfehler ist der Exitcode eine 2. Mit der /ErrorStdOut-Option kann die Fehlermeldung unterdrückt oder abgefangen werden.</p>
</td>
<td>Nein</td>
</tr>
</table>
<p id="defaultfile"><strong>Skript-Dateiname</strong>: Dieser Parameter kann weggelassen werden, falls keine <em>Skript-Parameter</em> vorhanden sind. Wenn dieser Parameter nicht verwendet wird (z. B. wenn man AutoHotkey direkt über das Startmenü startet), wird das Programm in dieser Reihenfolge nach einer Skriptdatei namens <code><i>AutoHotkey</i>.ahk</code> an folgenden Standorten suchen:</p>
<ul>
<li>Das Verzeichnis, das die <a href="Variables.htm#AhkPath">ausführbare AutoHotkey-Datei</a> enthält.</li>
<li>Der Ordner "<a href="Variables.htm#MyDocuments">Dokumente</a>" des aktuellen Benutzers.</li>
</ul>
<p>Der Dateiname <code><i>AutoHotkey</i>.ahk</code> ist abhängig vom Namen der ausführbaren Datei, mit der das Skript gestartet wurde. Wenn Sie beispielsweise AutoHotkey.exe in MeinSkript.exe umbenennen, versucht das Programm <code>MeinSkript.ahk</code> zu finden. Starten Sie AutoHotkeyU32.exe ohne Parameter, sucht das Programm nach AutoHotkeyU32.ahk.</p>
<p>Hinweis: In den Versionen vor <a href="AHKL_ChangeLog.htm#L51">Revision 51</a> wurde AutoHotkey.ini im Arbeitsverzeichnis oder AutoHotkey.ahk in "Eigene Dokumente" gesucht.</p>
<p><span class="ver">[v1.1.17+]:</span> Geben Sie als Dateiname ein Sternchen (*) an, um den Skript-Text aus der Standardeingabe (stdin) zu lesen. Ein Beispiel dazu finden Sie unter <a href="commands/Run.htm#ExecScript">ExecScript()</a>.</p>
<p id="cmd_args"><strong>Skript-Parameter</strong>: Eine oder mehrere durch Leerzeichen getrennte Zeichenketten, die an das Skript übergeben werden sollen. Jeder Parameter, der Leerzeichen enthält, muss in Anführungszeichen gesetzt werden. Um ein direkt geschriebenes Anführungszeichen zu übergeben, muss ein umgekehrter Schrägstrich davor gesetzt werden (\"). Daraus folgt, dass jeder nachfolgende Schrägstrich innerhalb eines in Anführungszeichen gesetzten Parameters (z. B. "C:\Meine Dokumente<span class="red">\"</span>) als direkt geschriebenes Anführungszeichen behandelt wird (das heißt, dass das Skript die Zeichenkette C:\Meine Dokumente<span class="red">"</span> als Parameter erkennt). Mit <code><a href="commands/StringReplace.htm">StringReplace</a>, 1, 1, <span class="red">"</span>,, All</code> können solche Anführungszeichen entfernt werden.</p>
<p><span class="ver">[v1.1.27+]:</span> Eingehende Parameter, sofern vorhanden, werden als Array in die interne Variable <strong>A_Args</strong> gespeichert, und können mithilfe der <a href="Objects.htm#Usage_Simple_Arrays">Array-Syntax</a> abgerufen werden. <code>A_Args[1]</code> enthält den ersten Parameter. Das folgende Beispiel zeigt, wie das Skript beendet werden kann, wenn zu wenig Parameter übergeben wurden:</p>
<pre>if A_Args.Length() < 3
{
MsgBox % "Das Skript benötigt mindestens 3 eingehende Parameter, aber es sind nur " A_Args.Length() " angekommen."
ExitApp
}</pre>
<p>Wenn die Anzahl der Parameter variiert, die an das Skript übergeben werden sollen (z. B. wenn der Benutzer mit dem Mauszeiger mehrere Dateien auf ein Skript zieht und ablegt), kann das folgende Beispiel verwendet werden, um sie einzeln zu extrahieren:</p>
<pre>for n, param in A_Args <em>; Für jeden Parameter:</em>
{
MsgBox Parameter Nr. %n% ist %param%.
}
</pre>
<p>Wenn die Parameter Dateinamen sind, kann das folgende Beispiel verwendet werden, um sie in lange Namen mit korrekter Groß-/Kleinschreibung (wie im Dateisystem gespeichert) und vollständigem/absolutem Pfad umzuwandeln:</p>
<pre>for n, EingabePfad in A_Args <em>; Für jeden Parameter (oder für jede auf ein Skript gezogene Datei):</em>
{
Loop Files, %EingabePfad%, FD <em>; Dateien und Verzeichnisse einbeziehen.</em>
LangerPfad := A_LoopFileFullPath
MsgBox Der lange Pfadname mit korrekter Groß-/Kleinschreibung der Datei`n%EingabePfad%`nist:`n%LangerPfad%
}</pre>
<p><strong>Bekannte Einschränkung:</strong> Das Ziehen und Ablegen von Dateien auf eine .ahk-Datei kann fehlschlagen, wenn 8.3-Namen (Kurznamen) in einem NTFS-Dateisystem deaktiviert worden sind. Eine Möglichkeit zur Umgehung des Problems ist es, das Skript zu <a href="#ahk2exe">kompilieren</a> und die Dateien dann auf die resultierende EXE-Datei zu ziehen.</p>
<p id="cmd_args_old"><strong>Altmodisch:</strong> Die Befehlszeilenparameter sind auch in den <a href="Variables.htm">Variablen</a> %1%, %2% und so weiter enthalten, wie in den Versionen vor <span class="ver">[v1.1.27]</span>. Darüber hinaus enthält %0% die Anzahl der Parameter, die übergeben worden sind (0, wenn keine). Allerdings können diese Variablen nicht direkt in einem Ausdruck verwiesen werden, weil sie dort als Zahlen statt als Variablen interpretiert werden. Das folgende Beispiel zeigt, wie das Skript beendet werden kann, wenn zu wenig Parameter übergeben wurden:</p>
<pre>if 0 < 3 <em>; Die linke Seite einer <a href="commands/IfEqual.htm">if-Anweisung ohne Ausdruck</a> ist immer der Name einer Variable.</em>
{
MsgBox Das Skript benötigt mindestens 3 eingehende Parameter`, aber es sind nur %0% angekommen.
ExitApp
}</pre>
<p>Wenn die Anzahl der Parameter variiert, die an das Skript übergeben werden sollen (z. B. wenn der Benutzer mit dem Mauszeiger mehrere Dateien auf ein Skript zieht und ablegt), kann das folgende Beispiel verwendet werden, um sie einzeln zu extrahieren:</p>
<pre>Loop, %0% <em>; Für jeden Parameter:</em>
{
param := %A_Index% <em>; Ruft den Inhalt der Variable ab, deren Name in A_Index enthalten ist.</em>
MsgBox, 4,, Parameternummer %A_Index% ist %param%. Weiter?
IfMsgBox, No
break
}</pre>
<p>Wenn die Parameter Dateinamen sind, kann das folgende Beispiel verwendet werden, um sie in lange Namen mit korrekter Groß-/Kleinschreibung (wie im Dateisystem gespeichert) und vollständigem/absolutem Pfad umzuwandeln:</p>
<pre>Loop %0% <em>; Für jeden Parameter (oder für jede auf ein Skript gezogene Datei):</em>
{
EingabePfad := %A_Index% <em>; Ruft den Inhalt der Variable ab, deren Name in A_Index enthalten ist.</em>
Loop %EingabePfad%, 1
LangerPfad := A_LoopFileLongPath
MsgBox Der lange Pfadname mit korrekter Groß-/Kleinschreibung der Datei`n%EingabePfad%`nist:`n%LangerPfad%
}</pre>
<h2 id="cp">Zeichensatz einer Skript-Datei <span class="ver">[AHK_L 51+]</span></h2>
<p>Damit ASCII-fremde Zeichen korrekt aus der Datei gelesen werden können, muss die Codierung, die beim Speichern der Datei verwendet wurde (meistens via Texteditor), mit der Codierung übereinstimmen, die AutoHotkey beim Lesen der Datei verwendet. Wenn sie nicht übereinstimmen, werden Zeichen falsch dekodiert. AutoHotkey entscheidet anhand folgender Regeln, welche Codierung verwendet werden soll:</p>
<ul>
<li>Beginnt die Datei mit einer UTF-8- oder UTF-16-Byte-Order-Markierung (BOM), wird der entsprechende Zeichensatz verwendet und die <a href="#CPn">/CP<i>n</i></a>-Option ignoriert.</li>
<li>Wenn die <a href="#CPn">/CP<i>n</i></a>-Option via Befehlszeile übergeben wurde, wird der Zeichensatz <i>n</i> verwendet. Eine Liste möglicher Werte finden Sie unter <a href="https://docs.microsoft.com/de-de/windows/win32/intl/code-page-identifiers">Code Page Identifiers</a>.
<p class="note"><strong>Hinweis:</strong> Die Option "Default to UTF-8" im Installer von AutoHotkey <span class="ver">[v1.1.33+]</span> fügt <code>/CP65001</code> zu den Befehlszeilen aller Skripte hinzu, die über die Shell (Explorer) gestartet werden.</p></li>
<li>In allen anderen Fällen wird der Standard-ANSI-Zeichensatz des Betriebssystems verwendet.</li>
</ul>
<p>Beachten Sie, dass die oben genannten Punkte nur für Skript-Dateien gelten, die AutoHotkey geladen hat, nicht für die Dateibearbeitung im Skript selbst. <a href="commands/FileEncoding.htm">FileEncoding</a> steuert die Standardcodierung von Dateien, die das Skript liest oder schreibt, während <a href="commands/IniRead.htm">IniRead</a> und <a href="commands/IniWrite.htm">IniWrite</a> immer auf Basis von UTF-16 oder ANSI arbeiten.</p>
<p>Da der gesamte Text (wo nötig) in das <a href="Compat.htm#Format">native Zeichenkettenformat</a> konvertiert wird, werden Zeichen, die im nativen Zeichensatz ungültig oder nicht vorhanden sind, durch einen Platzhalter ersetzt: ANSI '?' oder Unicode '�'. In Unicode-Builds passiert das nur, wenn in der Skript-Datei Codierungsfehler auftreten oder wenn der Zeichensatz, der zum Speichern oder Laden der Datei verwendet wird, nicht übereinstimmt.</p>
<p><a href="commands/RegWrite.htm">RegWrite</a> kann verwendet werden, um die Standardcodierung für Skripte festzulegen, die vom Explorer aus gestartet werden (z. B. per Doppelklick einer Datei):</p>
<pre><em>; Heben Sie die Kommentierung der entsprechenden Zeile auf oder lassen Sie sie alle kommentiert,
; um den Standard des aktuellen Builds wiederherzustellen. Je nach Bedarf anpassen:
; Zeichensatz := 0 ; Standard-ANSI-Zeichensatz des Systems
; Zeichensatz := 65001 ; UTF-8
; Zeichensatz := 1200 ; UTF-16
; Zeichensatz := 1252 ; ANSI-Latin-1; Westeuropäisch (Windows)</em>
if (Zeichensatz != "")
Zeichensatz := " /CP" . Zeichensatz
Befehl="%A_AhkPath%"%Zeichensatz% "`%1" `%*
Key=AutoHotkeyScript\Shell\Open\Command
if A_IsAdmin <em>; Für alle Benutzer setzen.</em>
RegWrite, REG_SZ, HKCR, %Key%,, %Befehl%
else <em>; Nur für den aktuellen Benutzer setzen.</em>
RegWrite, REG_SZ, HKCU, Software\Classes\%Key%,, %Befehl%</pre>
<p>Das setzt natürlich voraus, dass AutoHotkey bereits installiert ist. Ansonsten wäre das Ergebnis alles andere als zufriedenstellend.</p>
<h2 id="debug">Ein Skript debuggen</h2>
<p>Befehle wie <a href="commands/ListVars.htm">ListVars</a> und <a href="commands/Pause.htm">Pause</a> können Ihnen dabei helfen, ein Skript zu debuggen (Fehler zu finden und zu beseitigen). Wenn Sie zum Beispiel die folgenden beiden Zeilen an sorgfältig ausgewählten Positionen einfügen, können im Skript sogenannte "Haltepunkte" erstellt werden:</p>
<pre>ListVars
Pause</pre>
<p>Sobald das Skript diese zwei Zeilen erreicht, zeigt es den aktuellen Inhalt aller Variablen an, die überprüft werden sollen. Wenn Sie bereit sind fortzufahren, kann die Pause via Datei- oder Tray-Menü aufgehoben werden. Das Skript wird dann bis zum nächsten "Haltepunkt" (falls vorhanden) fortgesetzt.</p>
<p>Generell empfiehlt es sich, diese "Haltepunkte" an Stellen einzufügen, wo das aktive Fenster für das Skript irrelevant ist, wie z. B. unmittelbar vor einem WinActivate-Befehl. Auf diese Weise kann das Skript wieder ordnungsgemäß fortgesetzt werden, sobald die Pause aufgehoben wird.</p>
<p>Die folgenden Befehle sind auch für das Debuggen geeignet: <a href="commands/ListLines.htm">ListLines</a>, <a href="commands/KeyHistory.htm">KeyHistory</a> und <a href="commands/OutputDebug.htm">OutputDebug</a>.</p>
<p>Häufig auftretende Fehler wie Tippfehler und fehlende "globale" Deklarationen können durch das <a href="commands/_Warn.htm">Einschalten von Warnungen</a> erkannt werden.</p>
<h3 id="idebug">Interaktives Debuggen <span class="ver">[AHK_L 11+]</span></h3>
<p>Interaktives Debuggen ist mit einem unterstützten <a href="AHKL_DBGPClients.htm">DBGp-Client</a> möglich. Üblicherweise sind folgende Aktionen möglich:</p>
<ul>
<li>Haltepunkte auf Zeilen setzen oder entfernen - die Ausführung pausieren, wenn ein <a href="https://de.wikipedia.org/wiki/Haltepunkt_(Programmierung)">Haltepunkt</a> erreicht ist.</li>
<li>Den Code zeilenweise durchgehen - Funktionen und Subroutinen betreten, überspringen oder verlassen.</li>
<li>Alle oder eine bestimmte Variable überwachen.</li>
<li>Den Stapel von laufenden Subroutinen und Funktionen anzeigen.</li>
</ul>
<p>Beachten Sie, dass diese Funktionalität für kompilierte Skripte deaktiviert ist.</p>
<p>Um interaktives Debuggen zu aktivieren, starten Sie zunächst einen unterstützten Debugger-Client und starten Sie danach das Skript mit der <b>/Debug</b>-Befehlszeilenoption.</p>
<pre class="Syntax">AutoHotkey.exe /Debug<span class="optional">=<i>SERVER</i>:<i>PORT</i></span> ...</pre>
<p><i>SERVER</i> und <i>PORT</i> können weggelassen werden. Zum Beispiel sind die folgenden Zeilen funktionsgemäß identisch:</p>
<pre class="no-highlight">AutoHotkey /Debug "MeinSkript.ahk"
AutoHotkey /Debug=localhost:9000 "MeinSkript.ahk"</pre>
<p id="debug_attach"><span class="ver">[AHK_L 59+]:</span> Um den Debugger nachträglich mit einem Skript zu verbinden, senden Sie ihm wie folgt eine Meldung:</p>
<pre>Skriptpfad := "" <em>; SETZEN SIE HIER DEN VOLLSTÄNDIGEN PFAD DES SKRIPTS EIN</em>
DetectHiddenWindows On
if WinExist(Skriptpfad " ahk_class AutoHotkey")
<em>; Optionale Parameter:
; wParam = IPv4-Adresse des Debugger-Clients als 32-Bit-Integer.
; lParam = Port, der vom Debugger-Client abgehört werden soll.</em>
PostMessage DllCall("RegisterWindowMessage", "str", "AHK_ATTACH_DEBUGGER")
</pre>
<p>Sobald eine Verbindung zum Debugger-Client aufgebaut ist, kann sie durch das Senden des DBGp-Befehls "detach" getrennt werden, ohne das Skript zu beenden.</p>
<h2>Skript-Beispiele</h2>
<p>Auf <a href="scripts/">dieser Seite</a> kann man einige nützliche Skripte finden.</p>
</body>
</html>