AutoHotkey Anfänger-Tutorial von tidbit

Inhaltsverzeichnis

  1. Die Grundlagen
    1. AutoHotkey herunterladen
    2. Wie erstellt man ein Skript
    3. Befehle kann man nicht zusammenführen
    4. Sonstige grundlegende Informationen
  2. Hotkeys & Hotstrings
    1. Tasten und Symbole
    2. Fenster-spezifisch
    3. Mehrere Hotkeys pro Datei
    4. Beispiele
  3. Senden von Tastatureingaben
    1. Spiele
  4. Starten von Programmen & Webseiten
  5. Befehle vs. Funktionen()
    1. Code-Blöcke
  6. Variablen
    1. Wann und wo Prozentzeichen verwendet werden
    2. Abrufen von Benutzereingaben
    3. Weitere Beispiele
  7. Objekte
    1. Erstellen von Objekten
    2. Verwenden von Objekten
  8. Andere hilfreiche Goodies
    1. Die mysteriösen eckigen Klammern
    2. Herausfinden deiner AHK-Version
    3. Trial-and-Error-Prinzip
    4. Einrückung
    5. Um Hilfe bitten
    6. Andere Links

1 - Die Grundlagen

Bevor wir unsere Reise beginnen, solltest du folgendes beachten. Über das ganze Tutorial hinweg wirst du auf viel Text und Code treffen. Für das optimale Lernen ist es ratsam, den Text zu lesen, bevor du den Code ausprobierst. Analysiere danach den Code.
Die meisten Beispiele auf dieser Seite kannst du kopieren und einfügen.
Wenn du durcheinander kommst, kannst du versuchen, den Abschnitt nochmals durchzulesen.

a. AutoHotkey herunterladen und installieren

Bevor du AutoHotkey (AHK) kennenlernen kannst, musst du es herunterladen. Nach dem Herunterladen musst du AHK installieren. Aber das ist abhängig davon, welche Version du willst. In diesem Guide verwenden wir den Installer, da er am einfachsten einzurichten ist.

Anleitung:

  1. Öffne die Hauptseite von AutoHotkey. https://autohotkey.com/
  2. Klicke auf Download. https://autohotkey.com/download/ahk-install.exe
  3. Während der Installation von AutoHotkey wirst du gefragt, ob UNICODE oder ANSI installiert werden soll. Empfohlen ist UNICODE. Es unterstützt nicht-englische Buchstaben und Zahlen (Zeichen). Mache weiter, bis du den Install-Button siehst.
  4. Sobald das erledigt ist, großartig! Weiter geht's in Abschnitt b.

Video-Anleitung (englisch):
Frankie's "Install and Hello World"
http://www.autohotkey.com/forum/viewtopic.php?t=77674

b. Wie erstellt man ein Skript

Die folgende Anleitung zeigt, wie man AutoHotkey dazu bringen kann, etwas zu tun. AutoHotkey ist keine Zauberei - wir alle wünschten, es wäre so, ist es aber nicht. Also müssen wir AutoHotkey sagen, was zu tun ist. Diesen Vorgang nennt man "Scripting".

Anleitung:

  • 1. Mache einen Rechtsklick auf deinem Desktop.
  • 2. Finde "Neu" im Menü.
  • 3. Klicke auf "AutoHotkey Script" innerhalb des "Neu"-Menüs.
  • 4. Gebe dem Skript einen neuen Namen. Hinweis: Der Name muss mit .ahk enden. Zum Beispiel: MeinSkript.ahk
  • 5. Finde die neu erstellte Datei auf deinem Desktop und mache einen Rechtsklick darauf.
  • 6. Klicke auf "Edit Script".
  • 7. Es müsste ein Fenster erscheinen, wahrscheinlich der Texteditor. Wenn ja, ERFOLG!

    Nun, da du ein Skript erstellt hast, müssen wir also Dinge in die Datei einfügen. Eine Liste aller Built-in-Befehlen, -Funktionen und -Variablen findest du im Abschnitt 5.

    Hier ein sehr einfaches Skript, das Text mithilfe des Send-Befehls schreibt, sobald man den Hotkey drückt.

    ^j::
       Send, Mein erstes Skript
    Return
    

    Später werden wir tiefer in die Materie einsteigen. Bis dahin erkläre ich dir, was der obige Code macht.
    - Die erste Zeile. ^j:: ist der Hotkey. ^ bedeutet STRG, j ist die Taste j. Alles was sich auf der linken Seite von :: befindet, sind Tasten, die du drücken musst.
    - Die zweite Zeile. Send, Mein erstes Skript ist der Vorgang zum SENDEN von Tastatureingaben. SEND ist der Befehl. Alles nach dem Komma (,) wird geschrieben.
    - Die dritte Zeile. Return. Return wird dein bester Freund werden. Einfach gesagt, ein Return STOPPT dein Code an dieser Stelle, nachfolgende Zeilen werden schlichtweg ignoriert. Dadurch können viele Probleme in einem langen Skript verhindert werden.


  • 8. Speichere die Datei.
  • 9. Mache einen Doppelklick auf die Datei bzw. auf das Symbol im Desktop, um das Skript zu starten. Öffne den Texteditor (oder wo auch immer du etwas schreiben kannst) und drücke STRG und J.
  • 10. Hip Hip Hurra! Dein erstes Skript ist fertig. Hole dir ein paar Snacks als Belohnung und komme dann zurück, um den Rest dieses Tutorials zu lesen.

Video-Anleitung (englisch):
Frankie's "Install and Hello World"
http://www.autohotkey.com/forum/viewtopic.php?t=77674

c. Befehle kann man nicht zusammenführen

Beim Erstellen deines Codes hast du vielleicht schon den Drang gehabt, mehrere Befehle auf einer Zeile oder sogar ineinander zu setzen - lasse es. Im Abschnitt 5 reden wir darüber, warum das so nicht wie erwartet funktioniert und was man stattdessen tun könnte.

d. Sonstige grundlegende Informationen

So findest du die englische Hilfe-Datei auf deinem Computer:
Es gibt dafür mehrere Möglichkeiten, sofern AutoHotkey in den voreingestellten Standorten installiert wurde.

Methode 1:
  1. Finde das Startmenü oder Windows-Symbol auf deinem Bildschirm, üblicherweise unten links.
  2. Klicke auf Programme oder Alle Programme.
  3. Finde AutoHotkey in der Liste.
  4. Nun müsstest du AutoHotkey Help File sehen. Klicke darauf.
  5. Fertig!
Methode 2:
  1. Schaue auf deinem Desktop.
  2. Finde Arbeitsplatz oder Computer. Öffne es.
  3. Navigiere zu deiner Festplatte, die AutoHotkey enthält. Meistens das Laufwerk C:\.
  4. Suche in allen "Program Files"-Ordnern nach AutoHotkey.
  5. Suche nach AutoHotkey.chm oder einer Datei, die AutoHotkey heißt und ein gelbes Fragezeichen hat.
  6. Fertig!

Online-Links:
Dokumentation
Befehlsliste
Funktionen
Variablen

2 - Hotkeys & Hotstrings

Was ist ein Hotkey? Ein Hotkey ist eine Taste, die sich heiß anfühlt. ... kleiner Scherz. Ein Hotkey ist eine Taste oder Tastenkombination, die der Benutzer auf der Tastatur drücken kann, um einige Aktionen auszulösen.
Was ist ein Hotstring? Hotstrings werden hauptsächlich verwendet, um Abkürzungen bei Eingabe zu erweitern (Auto-Ersetzen); sie können auch verwendet werden, um eine geskriptete Aktion zu starten.

Hier ein Hotkey:

^j::
   Send, Mein erstes Skript
Return

Hier ein Hotstring:

::ftw::Free the whales

Der Unterschied zwischen den beiden Beispielen ist, dass der Hotkey ausgelöst wird, wenn du STRG+J drückst, während der Hotstring dein geschriebenes "ftw" in "Free the whales" umwandelt.

"Also, wie genau kann man einen Hotkey erstellen?" Gute Frage. Ein Hotkey erstellt man mithilfe von zwei Doppelpunkten. Die Taste oder Tastenkombination kommt auf die linke Seite von ::. Der Inhalt muss darunter stehen, gefolgt von einem Return.

Hinweis: Es gibt Ausnahmen, allerdings führen sie oft zu Verwechslungen. Daher werden sie erst einmal im Tutorial nicht erwähnt.

esc::
   MsgBox Escape!!!!
Return

Ein Hotstring hat auf jeder Seite des Textes, der ersetzt werden soll, jeweils zwei Doppelpunkte. Während der Text, der deinen geschriebenen Text ersetzen soll, auf der rechten Seite des zweiten Doppelpunktpaares erfolgt.

Hotstrings können, wie bereits erwähnt, auch geskriptete Aktionen starten. Eine ausgefallene Bezeichnung für "tue so ziemlich alles". Das gleiche gilt für Hotkeys.

::bzw::
MsgBox Du hast "bzw" eingegeben.
Return

Außerdem solltest du wissen, dass jeder Hotkey, Hotstring, Label und andere Dinge, über die wir noch nicht geredet haben, viele Codezeilen enthalten kann.

^j::
   MsgBox Wow!
   MsgBox Das sind
   Run, Notepad.exe
   winactivate, Unbenannt - Editor
   WinWaitActive, Unbenannt - Editor
   send, 7 Zeilen{!}{enter}
   sendinput, innerhalb des STRG{+}J-Hotkeys
Return

a. Tasten und ihre mysteriösen Symbole

Vielleicht hast du dich schon gefragt: "Woher zum Teufel soll ich wissen, dass das Zirkumflex (^) die STRG-Taste ist?!". Nun, gute Frage. Um dir beizubringen, was ^ und andere Symbole bedeuten, solltest du einen Blick auf diese Tabelle werfen:
SymbolBeschreibung
#WIN-Taste (Windows-Logo-Taste)
!ALT-Taste
^STRG-Taste
+UMSCHALT-Taste
& Ein Und-Zeichen kann zwischen zwei beliebigen Tasten oder Maustasten verwendet werden, um diese zu einem benutzerdefinierten Hotkey zu verbinden.

(Die vollständige Liste der Symbole findest du auf der Hotkey -Seite)

Desweiteren findest du hier eine Liste von allen / der meisten Hotkey-Namen, die auf der linken Seite des Doppelpunktpaares verwendet werden können:
KeyList.htm

Mithilfe von & kann eine benutzerdefinierte Kombination von zwei (und nur zwei) Tasten (außer Joystick-Tasten) definiert werden. Im folgenden Beispiel würde der Hotkey ausgelöst werden, wenn man Numpad0 gedrückt hält und danach die zweite Taste drückt:

Numpad0 & Numpad1::
   MsgBox, Sie haben Numpad1 gedrückt, während Numpad0 gedrückt wurde.
Return

Numpad0 & Numpad2::
	Run Notepad
Return

Aber du wirst dich bestimmt jetzt fragen, ob Hotstrings irgendwelche coolen Modifikatoren haben, so wie Hotkeys auch. Ja, das tun sie!
Hotstring-Modifikatoren werden in den ersten Satz von ::'s eingefügt. Zum Beispiel:

:*:ftw::Free the whales

Weitere Hotkey- und Hotstring-Modifikatoren, Informationen und Beispiele findest du auf:
Hotkeys
Hotstrings

b. Fenster-spezifische Hotkeys/Hotstrings

Manchmal könntest du wollen, dass ein Hotkey oder Hotstring nur in einem bestimmten Fenster funktioniert (oder deaktiviert ist). Dazu brauchst du einen dieser ausgefallenen Befehle, die ein #-Zeichen davor haben.

#IfWinActive
#IfWinExist

Diese speziellen Befehle (auch "Direktiven" genannt) erstellen kontextabhängige Hotkeys und Hotstrings. Gebe einfach einen Fenstertitel an. Aber in einigen Fällen möchtest du vielleicht ein HWND, eine Gruppe oder eine Klasse angeben. Solche erfordern fortgeschrittenes Wissen und werden hier ausführlicher behandelt: #IfWinActive.

#IfWinActive Unbenannt - Editor
#space::
   MsgBox Du hast WIN+LEERTASTE im Texteditor gedrückt.
Return
#IfWinActive

Um die Kontextabhängigkeit zu deaktivieren, muss eine #IfWin-Direktive ohne Parameter angegeben werden. Zum Beispiel:

; Texteditor
#IfWinActive unbenannt - Editor
!q::
   MsgBox, Du hast ALT+Q im Texteditor gedrückt.
Return
#IfWinActive

; Jedes andere Fenster, das nicht "Unbenannt - Editor" ist
!q::
   MsgBox, Du hast ALT+Q in einem beliebigen Fenster gedrückt.
Return

Wenn #IfWin-Befehle deaktiviert (oder nie in einem Skript verwendet) wurden, gelten Hotkeys und Hotstrings für alle Fenster.


Die #IfWin-Befehle sind von der Position abhängig: sie beeinflussen nur Hotkeys und Hotstrings, die sich im Skript physisch darunter befinden.

; Texteditor
#IfWinActive ahk_class Notepad
#space::
   MsgBox, Du hast WIN+LEERTASTE im Texteditor gedrückt.
Return
::msg::Du hast msg in den Texteditor geschrieben
#IfWinActive

; MSPaint
#IfWinActive unbenannt - Paint
#space::
   MsgBox, Du hast WIN+LEERTASTE in MSPaint gedrückt!
Return
::msg::Du hast msg in MSPaint eingegeben!
#IfWinActive

Auf der folgenden Seite findest du ausführlichere Informationen und weitere ähnliche Befehle:
#IfWinActive

c. Mehrere Hotkeys/Hotstrings pro Datei

Aus irgendeinem Grund bereitet dies bei einigen Leuten Kopfzerbrechen. Also werde ich es klarstellen: AutoHotkey bietet dir die Möglichkeit, so viele Hotkeys und Hotstrings in einer Datei zu haben, wie du willst. Ob es nun 1 oder 3253 sind (oder mehr).

#i::
   run, http://www.google.com/
Return

^p::
   run, notepad.exe
Return

~j::
   send, ack
Return

:*:acheiv::achiev
::achievment::achievement
::acquaintence::acquaintance
:*:adquir::acquir
::aquisition::acquisition
:*:agravat::aggravat
:*:allign::align
::ameria::America

Der obige Code ist durchaus akzeptabel. Mehrere Hotkeys, mehrere Hotstrings. Alle in einer großen glücklichen Skript-Datei.

d. Beispiele

::bzw::beziehungsweise                          ; Ersetzt "bzw" mit "beziehungsweise", sobald du ein Endungszeichen drückst.
:*:bzw::beziehungsweise                         ; Ersetzt "bzw" mit "beziehungsweise", ohne dass ein Endungszeichen notwendig ist.

^n::                                       ; STRG+N-Hotkey
   run, notepad.exe                        ; Startet das Programm notepad.exe, sobald du STRG+N drückst.
Return                                     ; Dies endet den Hotkey. Der Code darunter wird nicht ausgelöst.

^b::                                       ; STRG+B-Hotkey
   send, {ctrl down}c{ctrl up}             ; Kopiert den markierten Text. ^c könnte man auch verwenden, allerdings ist diese Methode sicherer.
   SendInput, [b]{ctrl down}v{ctrl up}[/b] ; Umschließt den markierten Text mit BBCode-Bold-Tags (Forum).
Return                                     ; Dies endet den Hotkey. Der Code darunter wird nicht ausgelöst.

3 - Senden von Tastatureingaben

Also hast du dich jetzt entschieden, Tasten an einem Programm zu senden (schreiben). Das können wir tun. Verwende den Send-Befehl. Dieser Befehl sendet Tastatureingaben, um das Schreiben oder Drücken von Tasten zu simulieren.

Bevor wir in die Materie einsteigen, solltest du wissen, dass einige Leute häufig auf die folgendenen Probleme stoßen:
So wie Hotkeys auch, hat Send spezielle Tasten. Sehr, sehr viele davon.
Hier die 4 bekanntesten Symbole:


!: Sendet die ALT-Taste. Zum Beispiel würde Send Das ist ein Text!a die Tasten "Das ist ein Text" senden und dann ALT+A drücken. Hinweis: !A hat in einigen Programmen einen anderen Effekt als !a. Das liegt daran, dass !A die Tastenkombination ALT+UMSCHALT+A und !a die Tastenkombination ALT+A drücken würde. Im Zweifelsfall sollte man immer Kleinbuchstaben verwenden.

+: Sendet die UMSCHALT-Taste. Zum Beispiel würde Send +abC den Text "AbC" senden, und Send !+a würde ALT+UMSCHALT+A drücken.

^: Sendet die STRG-Taste. Zum Beispiel würde Send ^!a die Tastenkombination STRG+ALT+A drücken, und Send ^{Home} würde STRG+POS1 senden. Hinweis: ^A hat in einigen Programmen einen anderen Effekt als ^a. Das liegt daran, dass ^A die Tastenkombination STRG+UMSCHALT+A und ^a die Tastenkombination STRG+A drücken würde. Im Zweifelsfall sollte man immer Kleinbuchstaben verwenden.

#: Sendet die WIN-Taste (die Taste mit dem Windows-Logo), demzufolge würde Send #e die WIN-Taste gedrückt halten und dann den Buchstaben "e" drücken.

Die nächsten Absätze beziehen sich auf die Tabelle der Send-Seite.

Hinweis:
Diese Tabelle gilt nicht für Hotkeys. Das heißt, dass du CTRL oder ENTER (oder jede andere Taste) nicht mit geschweiften Klammern umschließen sollst, während du ein Hotkey erstellst.


Das folgende Beispiel zeigt, wie ein Hotkey aussehen soll:
; Beim Erstellen eines Hotkeys...
; FALSCH
{LCtrl}::
   send, AutoHotkey
Return

; RICHTIG
LCtrl::
   send, AutoHotkey
Return

Die oben verlinkte gigantische Tabelle zeigt, welche speziellen Tasten in AHK integriert sind. Zum Beispiel: {enter} und {space}.
Viele Leute denken, dass die geschweiften Klammern auf den Dokumentations-Seiten nur zum Spaß gesetzt sind. Aber tatsächlich sind sie notwendig. Nur so kann AHK wissen, dass {!} ein "Ausrufezeichen" ist, und nicht "drücke die ALT-Taste". Wie gesagt, schau dir die Tabelle auf der Send-Seite an, um zu überprüfen, ob alle Klammern richtig gesetzt sind.

; Siehst du das Ausrufezeichen in den geschweiften Klammern? Wenn es nicht so wäre, würde AHK
; die ALT-Taste drücken.
send, Dieser Text wurde geschrieben{!}
; Das gleiche wie oben, aber mit der ENTER-Taste. AHK würde "enter" schreiben, wenn ...
; ... es nicht mit geschweiften Klammern umschlossen wäre.
send, Mehrere enter Zeilen wurden enter gesendet. ; FALSCH
send, Mehrere{enter}Zeilen wurden{enter}gesendet. ; RICHTIG
Viele Leute denken auch, dass jedes einzelne Zeichen in geschweiften Klammern gesetzt werden muss. Das ist FALSCH. Wenn das Zeichen in der Tabelle nicht vorkommt, muss es nicht in Klammern gesetzt werden. Normale Buchstaben, Zahlen oder sogar einige Symbole (wie z. B. der Punkt) müssen nicht mit geschweiften Klammern umschlossen werden.
Außerdem kannst du mit Send-Befehlen mehr als einen Buchstaben, eine Zahl oder ein Symbol senden. Massenhaft Send-Befehle mit jeweils nur einem Buchstaben sind daher nicht notwendig.
; Umschließe nur Wörter oder einzelne Buchstaben, die in der oben erwähnten Tabelle vorkommen.
send, {a}       ; FALSCH
send, {b}       ; FALSCH
send, {c}       ; FALSCH
send, {a}{b}{c} ; FALSCH
send, {abc}     ; FALSCH
send, abc       ; RICHTIG
Um eine Taste gedrückt zu halten oder loszulassen, muss der Tastenname mit Klammern umschlossen und dann das Wort UP oder DOWN verwendet werden.
; Hier wird gezeigt, wie du eine Taste gedrückt hältst und eine weitere Taste (oder mehrere) drückst.
; Sollte eine Methode nicht funktionieren, kannst du eine andere ausprobieren.
send, ^s                     ; Beide Zeilen senden STRG+S
send, {ctrl down}s{ctrl up}  ; Beide Zeilen senden STRG+S
Send, {ctrl down}c{ctrl up}
Send, {b down}{b up}
Send, {TAB down}{TAB up}
Send, {Up down}  ; Drückt die NACH-OBEN-Taste nach unten.
Sleep, 1000      ; Hält sie eine Sekunde lang gedrückt.
Send, {Up up}    ; Lässt die NACH-OBEN-Taste los.
Aber nun fragst du dich vielleicht "Wie kann ich meine wirklich langen Send-Befehle besser lesbar machen?". Einfach. Dazu gibt es den sogenannten Fortsetzungsbereich. Schreibe einfach auf einer neuen Zeile eine öffnende Klammer, dann deinen Inhalt, und zum Schluss eine schließende Klammer. Um mehr darüber zu erfahren, siehe Fortsetzungsbereiche.
send,
(
Zeile 1
Zeile 2
Äpfel sind Früchte.
)

Hinweis: Es gibt verschiedene Formen von Send. Jede hat ihre eigenen Besonderheiten. Wenn eine Form von Send nicht wie gewollt funktioniert, kannst du einen anderen Typ von Send ausprobieren. Ersetze einfach den Befehlsnamen "Send" mit "SendPlay" oder was auch immer du möchtest.
Hier die üblichen Wege zum Senden von Text:
Send
SendRaw
SendInput
SendPlay
SendEvent
Um mehr über die verschiedenen Methoden zu erfahren, siehe hier.

a. Spiele

Das ist wichtig!
Viele Spiele, vorallem die modernen, haben Software zur Abwehr von Cheats. Dinge wie GameGuard, Hackshield, PunkBuster und einige andere. Bei einigen Spielen mit Cheat-Abwehr wirst du feststellen, dass deine Hotkeys, Hotstrings und Send-Befehle nicht funktionieren werden.
Das Umgehen solcher Systeme verletzt die Richtlinien des Spiels und kann dazu führen, dass du gebannt wirst. Außerdem ist es ziemlich schwierig, solche Systeme zu umgehen. Es gibt Methoden, um die Erfolgschance in einigen Spielen zu erhöhen, aber es gibt keinen magischen "Funktioniere sofort!!!" Button. Probiere also JEDE Methode aus, bevor du aufgibst.

Es gibt auch bekannte Probleme mit DirectX. Wenn du bei einem DirectX-Spiel auf Probleme stößt, kannst du folgendes ausprobieren. Du solltest auch versuchen, dass Spiel im Fenstermodus auszuführen, sofern es möglich ist. Dies behebt einige DirectX-Probleme.
Weitere DirectX-Probleme können auftreten, wenn Pixel- oder Image-Befehle verwendet werden. Farben werden als schwarz (0x000000) erkannt, egal welche Farbe du versuchst abzurufen. Eine weitere heikle Sache, die man beheben muss. Versuche, das Spiel im Fenstermodus auszuführen, wenn du kannst.

Es gibt keine einheitliche Lösung, um AutoHotkey für alle Programme lauffähig zu machen. Wenn alle Versuche fehlschlagen, ist es sehr wahrscheinlich, dass AutoHotkey für deine Anforderung nicht geeignet ist.


Aus der FAQ-Seite:
Einige Spiele verwenden ausschließlich DirectInput. Der Nebeneffekt davon ist, dass sie möglicherweise alle künstlichen Tastatureingaben und Mausklicks ignorieren. Man könnte das umgehen, wenn man eine der folgenden Möglichkeiten (oder in Kombination) ausprobiert:
  • Verwende SendPlay via: 1) SendPlay-Befehl; 2) SendMode Play; und/oder 3) Hotstring-Option SP.
  • Erhöhe SetKeyDelay. Zum Beispiel:
  • SetKeyDelay, 0, 50
  • SetKeyDelay, 150, 150, Play
  • Versuche ControlSend, das dort funktionieren könnte, wo andere Sendemethoden versagen.

4 - Öffnen von Programmen & Webseiten

Um ein Programm wie Mspaint.exe, Calc.exe, script.ahk oder sogar einen Ordner zu starten, kannst du den Run-Befehl verwenden. Mit diesen Befehl kann man auch URLs wie https://autohotkey.com/ öffnen. Wenn dein Computer deinen gewünschten Typ eines Programms starten kann, ist das sehr einfach:
; Startet ein Programm. Hinweis: Die meisten Programme benötigen einen VOLLSTÄNDIGEN Dateipfad.
Run, %A_ProgramFiles%\Beliebiges_Programm\Programm.exe

; Öffnet eine Webseite
Run, https://autohotkey.com
Es gibt noch ein paar weitere Features, wie z. B. Befehlszeilenparameter und CLSID.
Wenn du mehr darüber erfahren willst, besuche die Run-Seite.
Hier ein paar weitere Beispiele:
; Einige Programme benötigen keinen vollständigen Pfad, wie z. B. die Standardprogramme von Windows.
Run, Notepad.exe
Run, MsPaint.exe

; Öffnet den Ordner "Eigene Dokumente" mithilfe der built-internen AHK-Variable
Run, %A_MyDocuments%

; Öffnet einige Webseiten
Run, https://autohotkey.com
Run, http://www.google.com

Auf der folgenden Seite findest du ausführlichere Informationen:
commands/Run.htm.

5 - Befehle vs. Funktionen()

AutoHotkey hat zwei Typen von Dingen, die der Scripter zum Erstellen des Codes verwenden kann:
Befehle und Funktionen()

Hilfreiche Links:
Eine Liste aller Befehle: commands/index.htm
Eine Liste aller Built-in-Funktionen: Functions.htm#BuiltIn

Befehle

Du kannst einen Befehl anhand seiner Syntax (Struktur) erkennen. Im Gegensatz zu Funktionen werden die Parameter von Befehlen nicht in Klammern gesetzt. Ein Befehl würde also wie folgt aussehen:
Befehl, Parameter1, Parameter2, Parameter3

Es ist nicht möglich, mehrere Befehle auf einer Zeile zu setzen (Ausnahme: ifEqual).
Du kannst keine Befehle in den Parametern anderer Befehle setzen.

Msgbox, Hello Run, Notepad.exe   ; Falsch
Msgbox, Hello, Run, Notepad.exe  ; Falsch

Msgbox, Hello      ; Richtig
Run, Notepad.exe
Der Unterschied zwischen Befehle und Funktionen ist, dass die Befehle die "traditionelle Syntax" verwenden. Das bedeutet: Wenn du eine Variable verwendest, MUSST du sie mit Prozentzeichen umschließen. %Variable%. Text und Zahlen müssen nicht in "Anführungszeichen" gesetzt werden. Das ist ein Text. Desweiteren kannst du, im Gegensatz zu Funktionen(), keine Berechnungen in den Parametern durchführen.

Allerdings gibt es die Möglichkeit, mit einem einzelnen % einen Ausdruck zu erzwingen, um trotzdem Berechnungen in Parametern durchführen zu können.

Funktionen

Wie bereits erwähnt, sind Funktionen etwas anders, weil sie Klammern verwenden. Eine typische Funktion sieht wie folgt aus:
Funktion(Parameter1, Parameter2, Parameter3)

Die Hauptunterschiede der Funktionen sind:
  1. Du kannst Berechnungen in ihnen durchführen.
    -- SubStr(37*12, 1, 2)
    -- SubStr(A_Hour-12, 2)
  2. Variablen müssen nicht in Prozentzeichen gesetzt werden.
    -- SubStr(A_Now, 7, 2)
  3. Funktionen können innerhalb von anderen Funktionen erfolgen.
    -- SubStr(A_AHKPath, inStr(A_AHKPath, "AutoHotkey"))
  4. Text muss in Anführungszeichen gesetzt werden.
    -- SubStr("Ich programmiere, genial!", 16)
Funktionen geben üblicherweise einen anderen Wert zurück, als es Befehle tun. Befehle benötigen den AusgabeVar-Parameter, Funktionen nicht. Die gängigste Methode, den Wert einer Funktion in eine Variable zu speichern, sieht wie folgt aus:
MeineVariable:=Funktion(Parameter)
MeineVariable:=SubStr("Ich programmiere, genial!", 16)

Dies ist nicht der einzige Weg, aber der häufigste. Man speichert den Wert der Funktion (in diesem Fall SubStr(...)) in MeineVariable, das auf der rechten Seite von := erfolgt.
Mehr zu Funktionen

Kurz gesagt:
; Das sind Befehle
Msgbox, Dies ist etwas Text.
StringReplace, Ausgabe, Eingabe, AutoHotKey, AutoHotkey, ALL
SendInput, Das ist genial{!}{!}{!}

; Das sind Funktionen
SubStr("Ich programmiere, genial!", 16)
FileExist(VariableMitPfad)
Output:=SubStr("Ich programmiere, genial!", 16)

a. Code-Blöcke

Code-Blöcke sind kleine geschweifte Klammern ({ und }), die einen Abschnitt des Codes zusammenfassen, damit AutoHotkey sie als eine große Familie sieht, die zusammenbleiben müssen. Sie stehen oft in Verbindung mit If und Loops. Lässt man die Klammern weg, wird nur die erste Zeile im Block aufgerufen.

Im folgenden Code werden die beiden Zeilen nur ausgeführt, wenn Var gleich 5 ist.
if (var=5)
{
   MsgBox, Var ist gleich %var%!!
   Exitapp
}

Im folgenden Code wird die Message Box nur angezeigt, wenn Var gleich 5 ist. Das Skript wird immer beendet, selbst wenn Var nicht 5 ist.
if (var=5)
   MsgBox, Var ist gleich %var%!!
   Exitapp

Diese Vorgehensweise ist völlig in Ordnung, da dem If nur eine Codezeile zugeordnet ist. Dieses Beispiel ist genau das gleiche wie oben, allerdings habe ich die zweite Zeile ausgerückt, um zu zeigen, dass sie vom if getrennt ist.
if (var=5)
   MsgBox, Var ist gleich %var%!!
MsgBox, Wir sind nun 'außerhalb' von if. Geschweifte Klammern waren nicht notwendig, weil sich nur eine Zeile darunter befindet.

6 - Variablen

Variablen sind wie die kleinen Klebezettel, die einige Informationen enthalten. Sie können zum Speichern von Text, Zahlen, Daten von Funktionen und Befehlen oder mathematischen Gleichungen verwendet werden. Ohne sie wäre das Programmieren & Scripting sehr viel anstrengender.


Es gibt mehrere Wege, wie Variablen gefüllt werden kann; wir befassen uns mit den bekanntesten Formen. Bitte achte auf das Gleichheitszeichen (=).
  1. variable=text
    Dies ist die einfachste Form für eine Variable - die traditionelle Zuweisung. Gebe einfach deinen Text ein und fertig.
  2. variable=%variable2%
    Das gleiche wie oben, aber der Wert einer Variable wird in eine andere Variable gespeichert.
  3. variable:="text"
    Dies ist eine Ausdruckszuweisung, wegen dem : vor dem =. Jeder Text muss in "Anführungszeichen" gesetzt werden.
  4. variable:=variable2
    Im Ausdrucksmodus brauchen Variablen keine Prozentzeichen.
  5. variable:=6+8/3*2-sqrt(9)
    Dank des Ausdrucks kannst du Berechnungen durchführen!
Nummer 1 & 2 können kombiniert werden. var=%var2% etwas Text %var3%.
3, 4 & 5 können auch kombiniert werden. var:="Das Ergebnis von 5+ " Variable " ist: " 5+Variable

Jedes Gleichheitszeichen (=) mit einem Symbol davor nennt man einen Zuweisungsoperator - sie sind immer ein Ausdruck. Das heißt also, dass := += -= .= usw. immer Ausdrücke verwenden.

a. Wann und wo Prozentzeichen verwendet werden

Häufig treten Probleme auf, wenn es um Variablen und Prozentzeichen (%) geht. Hoffentlich wird folgendes die Unklarheiten beseitigen.

Wann und wo %'s verwendet werden:
  1. Bei Befehlen (siehe oben).
    -- Außer wenn der Parameter AusgabeVar oder EingabeVar ist.
  2. Beim Speichern eines Wertes in eine Variable via traditionellem Modus (ein Gleichheitszeichen ohne Symbol davor).
Wann und wo %'s nicht verwendet werden:
  1. In Parametern, die Eingabe- oder Ausgabevariablen sind, zum Beispiel: StringLen, OutputVar, InputVar
  2. Auf der linken Seite einer Zuweisung: Var = 123abc
  3. Auf der linken Seite von traditionellen (Nicht-Ausdrucks-) if-Anweisungen: If Var1 < %Var2%
  4. Überall in Ausdrücken. Zum Beispiel:
    If (Var1 != Var2)
       Var1 := Var2 + 100
    

b. Abrufen von Benutzereingaben

Manchmal möchtest du den Benutzer den Wert von Etwas auswählen lassen. Dafür gibt es mehrere Möglichkeiten, die einfachste davon ist die InputBox. Hier ein einfaches Beispiel, wie man dem Benutzer ein paar Fragen stellen und die eingegebenen Dinge verarbeiten kann.
InputBox, AusgabeVar, Frage 1, Wie heißt du mit Vornamen?
if (AusgabeVar="Bill")
   MsgBox, Du hast einen tollen Namen, %AusgabeVar%.

InputBox, AusgabeVar2, Frage 2, Magst du AutoHotkey?
if (AusgabeVar2="ja")
   MsgBox, Danke`, dass du mit %AusgabeVar2% geantwortet hast`, %AusgabeVar%! Wir werden gute Freunde.
else
   MsgBox, %AusgabeVar%`, das macht mich traurig.

c. Weitere Beispiele

MsgBox, 4, , Möchtest du fortfahren?
IfMsgBox, No
    Return                ; Bei Nein wird der Code genau hier gestoppt.
MsgBox Du hast JA gedrückt.  ; Ansonsten hat der Benutzer Ja ausgewählt.
; Einige Beispiele, die zeigen, wo Prozentzeichen möglich sind und wo nicht
Variable=text                      ; Speichert etwas Text in eine Variable via traditioneller Zuweisung.
VariableZahl:=6                  ; Speichert eine Zahl in eine Variable via Ausdruckszuweisung.
Variable2=%Variable%               ; Speichert eine Variable in eine andere Variable via traditioneller Zuweisung.
Variable3:=Variable                ; Speichert eine Variable in eine andere Variable via Ausdruckszuweisung.
Variable4.=Variable                ; Fügt eine Variable an das Ende einer anderen Variable an, via Ausdruckszuweisung.
Variable5+=VariableZahl          ; Addiert den Wert einer Variable mit einer anderen Variable via Ausdruckszuweisung.
Variable5-=VariableZahl          ; Subtrahiert den Wert einer Variable mit einer anderen Variable via Ausdruckszuweisung.
Variable6:=SubStr(Variable, 2, 2)  ; Variable innerhalb einer Funktion. Dies ist immer ein Ausdruck.
Variable7=%Variable% Text          ; Speichert eine Variable plus etwas Text in eine andere Variable via traditioneller Zuweisung.
Variable8:=Variable " Text"        ; Speichert eine Variable plus etwas Text in eine andere Variable via Ausdruckszuweisung.
MsgBox, %Variable%                 ; Variable innerhalb eines Befehls. 
StringSplit, Variable, Variable, x ; Variable innerhalb eines Befehls, der EingabeVar und AusgabeVar verwendet.
if (VariableZahl=6)              ; Immer wenn ein IF Klammern hat, wird es ein Ausdruck sein. Also keine %'s.
If (Variable != VariableZahl)    ; Immer wenn ein IF Klammern hat, wird es ein Ausdruck sein. Also keine %'s.
if VariableZahl=6                ; Ohne Klammern ist das if traditionell. Allerdings benötigen nur die Variablen auf der 'rechten Seite' %'s. 
If Var1 < %Var2%                   ; Ohne Klammern ist das if traditionell. Allerdings benötigen nur die Variablen auf der 'rechten Seite' %'s. 

7 - Objekte

Objekte sind eine Möglichkeit, deine Daten auf eine effizientere Weise zu organisieren. Manchmal werden Objekte auch als Arrays bezeichnet, aber es ist wichtig zu wissen, dass alle Arrays eigentlich nur Objekte sind. Wir geben den Objekten unterschiedliche Namen, abhängig davon, wo sie verwendet werden, aber prinzipiell sind alle Objekte gleich.


Ein Objekt ist im Grunde eine Sammlung von Variablen. Die Variablennamen sind bekannt als "Keys" (Schlüssel), und die Inhalte der Variablen sind "Values" (Werte).

Wenn Leute ein Objekt als Array oder indexiertes Array bezeichnen, dann meinen sie damit, dass alle Keys fortlaufende Nummern sind, beginnend bei 1.
Wenn Leute ein Objekt als assoziatives Array bezeichnen, dann meinen sie damit, dass die Keys entweder Zeichenketten (Text) oder nicht-fortlaufende Nummern sind. Manchmal ist es eine Mischung aus beidem, auch fortlaufende Nummern!

Es gibt keine Einschränkungen, was ein Key oder Wert sein kann - sie können sogar andere Arrays sein!
Wenn die Werte auch Arrays sind, wird das Objekt als Mehrdimensionales Array bezeichnet, aber dazu später mehr.
Es gibt eine Reihe von Gründen, ein Objekt für etwas zu nutzen. Einige Beispiele:
  1. Du willst eine nummerierte Liste von Dingen, z. B. eine Einkaufsliste (dies würde man als indexiertes Array bezeichnen)
  2. Du möchtest etwas gitterförmig darstellen, z. B. für ein Brettspiel (dies würde mit mehrdimensionalen Objekten erfolgen)
  3. Du hast eine Liste von Dingen, in der jedes Ding eine Bezeichnung hat, wie z. B. die Merkmale einer Frucht (dies würde man als assoziatives Array bezeichnen)

a. Erstellen von Objekten

Es gibt mehrere Möglichkeiten, ein Objekt zu erstellen, die gängigsten davon sind unten aufgelistet
  1. MeinObjekt := ["eins", "zwei", "drei", 17]
    Syntax mit eckigen Klammern. Auch als "indexiertes Array" bekannt. Ein indexiertes Array ist ein Objekt, das eine Liste von Elementen repräsentiert, nummeriert mit 1 und höher. In diesem Beispiel wird der Wert "eins" in den Objekt-Key 1 gespeichert (aka Index 1), und der Wert 17 in den Objekt-Key 4 (aka Index 4).
  2. Banane := {"Form": "Länglich", "Farbe": "Gelb", "Geschmack": "Köstlich", "Preis": 3}
    Syntax mit geschweiften Klammern. Auch als "assoziatives Array" bekannt. Ein assoziatives Array ist eine Sammlung von Daten, wo jedes Element einen Namen hat. In diesem Beispiel wird der Wert "Gelb" in den Objekt-Key "Farbe" gespeichert. Außerdem wird der Wert 3 in den Objekt-Key "Preis" gespeichert.
  3. MeinObjekt := Array("eins", "zwei", "drei", 17)
    Die array-erstellende Funktion. Identisch zur Syntax mit eckigen Klammern, aber in einer Funktion verpackt.
  4. Banane := Object("Form", "Länglich", "Farbe", "Gelb", "Geschmack", "Köstlich", "Preis", 3)
    Die objekt-erstellende Funktion. Identisch zur Syntax mit geschweiften Klammern, aber in einer Funktion verpackt.
Vergiss nicht, dass all diese Definitionen das gleiche erstellen (Objekte), nur mit unterschiedlichen Keys.

b. Verwenden von Objekten

Es gibt viele Möglichkeiten, Objekte zu verwenden, wie das Abrufen von Werten, das Setzen von Werten, Hinzufügen von Werten, und mehr.

Setzen von Werten:
Das Setzen von Werten in ein Objekt ist genauso einfach wie das Setzen eines Wertes in eine Variable.
Alles was du tun musst ist, deine eckigen Klammern oder Punktschreibweise (wie im Abrufen-Abschnitt gezeigt) auf die linke Seite eines Ausdruckszuweisungssymbols := zu setzen.

Zum Beispiel:
Banane.Konsistenz := "Matschig"
Banane["Verfault"] := True ; Diese Banane ist verfault. Bäh.

Abrufen von Werten:
  1. Wert := Banane["Farbe"]
    Schreibweise mit eckigen Klammern. Mit dieser Schreibweise kann ein Ausdruck als Key verwendet werden, um an den Wert deines Objekts zu kommen. In diesem Fall habe ich den einfachen Ausdruck "Farbe" verwendet, das (wenig überraschend) der Key Farbe ist. Du wirst eine Message Box mit dem Wort "Gelb" erhalten, weil wir diesen Wert dem Key Farbe im vorherigen Abschnitt zugewiesen haben.
  2. Wert := Banane.Farbe
    Punktschreibweise. Diese Schreibweise lässt dich nur literale Zeichenketten als Keys verwenden. Variablen als Keys sind hier nicht möglich..

Hinzufügen neuer Keys und Werte:
  1. Direktes Hinzufügen von Werten
    Um einen Wert oder Key direkt hinzuzufügen, solltest du einfach einen Key anlegen, der noch nicht existiert. Zum Beispiel:
    MeinObjekt.NeuerKey := "Glänzend"
    MeinObjekt["NeuerKey"] := 3.1415
  2. Einfügen von Werten
    Keys und Werte können auch in ein Objekt eingefügt werden, wenn man folgende Methoden verwendet.

    MeinObjekt.InsertAt(Index, Wert1, Wert2, Wert3...)
    Index ist ein beliebiger Integer-Key. Diese Methode wird ALLE höheren Integer-Keys um die Anzahl der eingefügten Werte nach oben verschieben, selbst wenn Lücken vorhanden sind (fügst du beispielsweise zwischen den Keys 1 und 100 einen Wert in Key 50 ein, wird der Key 100 auf 101 verschoben).

    MeinObjekt.Push(Wert1, Wert2, Wert3...)
    Diese Methode bewirkt, dass die Werte an das Ende des Arrays MeinObjekt "angefügt" werden. Das heißt, dass die Werte bei dem höchsten Integer-Key plus eins eingefügt werden.

Entfernen von Keys und Werte:
  1. Leermachen des Wertes.
    Die einfachste Möglichkeit zum Entfernen eines Wertes ist es, ihn einfach leer zu machen. Dazu muss man "" setzen, auch bekannt als leere Zeichenkette. Zwar wird dadurch der Key nicht entfernt, aber es lässt den Wert so erscheinen, als wäre er ein ungesetzter Wert.
    Der Key wird weiterhin als vorhanden angezeigt, wenn man die HasKey-Methode verwendet, und taucht weiterhin in einer For-Schleife auf. (For-Schleifen werden später erklärt)
  2. Entfernen des Keys
    Es gibt mehrere Wege, wie der Key und gleichzeitig auch sein Wert entfernt werden kann. Da gibt es:
    1. EntfernterWert := MeinObjekt.Delete(BeliebigerKey)
      Der vorherige Wert von MeinObjekt[BeliebigerKey] wird in EntfernterWert gespeichert.
    2. AnzahlEntfernterKeys := MeinObjekt.Delete(ErsterKey, LetzterKey)
      Die auf diese Weise verwendete Delete-Methode erlaubt es dir, einen Bereich von Integer- (nummerierten) oder Zeichenketten-Keys zwischen ErsterKey und LetzterKey zu entfernen.

      Der zurückgegebene Wert ist die Anzahl der Keys, die entfernt wurden - er kann nützlich sein, wenn du eine Lücke zwischen deinen Keys hast (wenn du z. B. die Keys 1, 3 und 4 angegeben hast, wird AnzahlEntfernterKeys eine 3 sein, weil nur 3 Keys entfernt werden konnten)
    3. MeinObjekt.Pop()
      Entfernt den höchsten Integer-Key, und gibt den Wert zurück. Höhere Keys als diesen gibt es nicht.
    4. EntfernterWert := MeinObjekt.RemoveAt(Index)
      AnzahlEntfernterKeys := MeinObjekt.RemoveAt(Index, Länge)
      Diese Methode entfernt alle Keys von Index bis Index + Länge - 1. Wenn Länge fehlt, gilt standardmäßig 1. Nach dem Entfernen der Keys werden alle höheren Integer-Keys (nummerierten) nach unten verschoben, um die Lücke zu füllen, so dass der Wert bei Index + Länge, sofern vorhanden, nun bei Index sein wird. Dieser Sachverhalt entpricht der Funktionsweise der InsertAt-Methode mit mehreren angegebenen Werten.

8 - Andere hilfreiche Goodies

Wir haben das Ende unserer Reise erreicht, werter Freund. Ich hoffe, du hast etwas gelernt. Aber bevor wir gehen, solltest du dir noch ein paar wissenswerte Dinge anschauen. Viel Spaß!

a. Die mysteriösen eckigen Klammern

Auf nahezu jeder Seite in der Dokumentation wirst du auf diese beiden Symbole ([ und ]) treffen, die den Code in der gelben Syntax-Box umschließen. Alles, was sich innerhalb dieser eckigen Klammern befindet, ist OPTIONAL. Das bedeutet, dass das Zeug darin weggelassen werden kann, wenn du es nicht benötigst. Beim Schreiben deines Codes ist es sehr wichtig, NICHT die eckigen Klammern in deinem Code zu verwenden.

Auf der ControlGetText-Seite kannst du folgendes sehen (ohne Farben):
ControlGetText, AusgabeVar [, Steuerelement, Fenstertitel, Fenstertext, Titelausnahme, Textausnahme]

Also könntest du folgendes tun:
ControlGetText, AusgabeVar

Oder weitere Details einfügen:
ControlGetText, AusgabeVar, Steuerelement, Fenstertitel

Was ist, wenn du nur Titelausnahme verwenden willst, aber nicht Fenstertext oder Fenstertitel? Einfach!
ControlGetText, AusgabeVar, Steuerelement,,, Titelausnahme

Bitte beachte, dass du Parameter nicht IGNORIEREN aber leer lassen kannst.
Wenn du "Fenstertitel, Fenstertext" ignorierst, würde es wie folgt aussehen und Probleme verursachen:
ControlGetText, AusgabeVar, Steuerelement, Titelausnahme
Dies wäre gültig.
ControlGetText, AusgabeVar, Steuerelement,,, Titelausnahme

b. Herausfinden deiner AHK-Version

Führe den folgenden Code aus, um deine aktuelle AHK-Version anzeigen zu lassen:
MsgBox, %A_AHKVersion%
Oder suche nach "AutoHotkey Help File" oder "AutoHotkey.chm" im Startmenü oder Installationsverzeichnis.

c. Trial-and-Error-Prinzip

Trial-and-Error (Versuch und Irrtum) ist eine sehr häufige und effektive Möglichkeit des Lernens. Statt bei jeder Kleinigkeit nachzufragen, ist es sinnvoller, manchmal etwas Zeit alleine zu verbringen (manchmal Stunden oder Tage) und dabei etwas selbst auf die Reihe zu bekommen - dies wird dir helfen, schneller zu lernen.

Wenn du etwas ausprobierst und auf einen Fehler stößt, solltest du diesen Fehler analysieren. Versuche dann, deinen Code zu korrigieren. Führe ihn nochmals aus. Bekommst du immer noch einen Fehler, modifiziere deinen Code etwas mehr. Setze dieses Verfahren fort, bis dein Code funktioniert. Du erfährst viel auf diese Weise, während du die Dokumentation liest und kennenlernst, was funktioniert und was nicht. Versuch, Fehlschlag, Versuch, Fehlschlag, Versuch, Versuch, Versuch, Fehlschlag, Fehlschlag, Erfolg!

Dies ist der Weg, den viele "Profis" gegangen sind. Aber frage ruhig, wir beißen nicht. Der Lernprozess benötigt Zeit; Die "Profis" haben AutoHotkey auch nicht in einem Tag gemeistert.

"Wenn es beim ersten Mal nicht klappt, versuchen, versuchen Sie es erneut." - William E. Hickson

d. Einrückung

Dieses Einrücken ist sehr wichtig! Zwar läuft dein Code auch ohne ganz gut, allerdings könnte es dir und anderen beim Lesen Kopfschmerzen bereiten. Ein kleines Skript (25 Zeilen oder weniger) ohne Einrückung wird wahrscheinlich keine Probleme beim Lesen verursachen, aber man wird schnell nachlässig. Am besten versuchst du baldmöglichst zu lernen, wie man einrückt.
Einrückung hat keinen festgelegten Stil, aber es empfiehlt sich, alles konsistent zu halten.
"Was ist Einrückung?", fragst du dich? Man erschafft einfach Leerräume im Code, um sehen zu können, was zu was gehört. Die meisten Leute verwenden 3 oder 4 Leerzeichen oder ein Tabulatorzeichen pro "Stufe".

Ohne Einrückung:
if (Auto="alt")
{
msgbox, Das Auto ist wirklich alt.
if (Räder="platt")
{
msgbox, Das Auto ist nicht zum Fahren geeignet.
Return
}
else
{
msgbox, Sei vorsichtig! Dieses alte Auto ist zu gefährlich`, um es zu fahren.
}
}
else
{
msgbox, Meine Güte`, wie dein neues Fahrzeug glänzt.
}
Eingerückt:
if (Auto="alt")
{
   msgbox, Das Auto ist wirklich alt.
   if (Räder="platt")
   {
      msgbox, Das Auto ist nicht zum Fahren geeignet.
      Return
   }
   else
   {
      msgbox, Sei vorsichtig! Dieses alte Auto ist zu gefährlich`, um es zu fahren.
   }
}
else
{
   msgbox, Meine Güte`, wie dein neues Fahrzeug glänzt.
}
Wiki zeigt verschiedene Styles und Beispiele. Entscheide selber, wie du etwas einrücken willst, um es besser lesbar zu machen.
http://en.wikipedia.org/wiki/Indent_style

e. Um Hilfe bitten

Bevor du fragst, solltest du selbst versuchen Nachforschungen zu betreiben oder den Code zu testen. Wenn die Ergebnisse nicht zufriedenstellend sind, lies unten weiter.
  • Frage ruhig, selbst die intelligentesten Leute tun das.
  • Zeige deine Versuche, selbst wenn du denkst, dass sie blöd sind.
  • Poste all deine Versuche.
  • Setze einfach voraus, dass jeder außer du selbst ein Vollidiot ist und nichts weiß. Gebe so viele Informationen wie möglich an, um uns Vollidioten mitzuteilen, was du vorhast. Hilf uns, dir zu helfen.
  • Sei geduldig.
  • Sei höflich.
  • Sei offen.
  • Sei nett.
  • Viel Spaß
Wenn du nicht sofort eine Antwort bekommst, warte wenigstens 1 Tag (24 Stunden), bevor du weiter um Hilfe bittest. Wir helfen gerne, aber wir tun dies auch kostenlos und in unserer Zeit. Wir könnten gerade arbeiten, schlafen, spielen, mit der Familie zusammen sein, oder zu beschäftigt sein, um zu helfen.
Und während du auf Hilfe wartest, könntest du es auch weiter selbst versuchen. Es ist ein tolles Gefühl, etwas ohne Hilfe geschafft zu haben.

f. Andere Links

Häufig gestellte Fragen (FAQ)