MessageBoxen in AutoIT

Mit den folgenden Zeilen möchte ich euch ein kurzes Beispielscript zur Verwendung von Messageboxen zeigen, welches einem die Sprache AutoIT näher bringen soll – nicht im Theoretischen, sondern im Gefühl, wie man Funktionen und Makros anwendet, und wie man Parameter escaped (unterbricht) um Inhalte von Variablen oder Makros mit einfließen zu lassen.

Uhrzeit in Message-Box ausgeben

Folgendes Script soll die aktuelle Uhrzeit ausgeben. Die Messagebox soll zwei Buttons haben, „Yes“ und „No“ – bei einem Klick auf Yes soll sich die MsgBox schließen, und eine zweite mit dem aktuellen Datum aufpoppen.

Zuerst betrachtet man die AutoIT-Manual um eine Beschreibung für die Funktion „MsgBox()“ zu erhalten. Dort erfahren wir den Syntax der Funktion:

MsgBox ( flag, "title", "text" [, timeout] )

Wenn man weiter ließt, wird man feststellen, dass das Flag für die angezeigte Grafik (bspw. Stop-Schild, Info-Symbol, usw.) und die genutzten Buttons verantwortlich ist. In der Manual gibt es eine Tabelle, die diesen einzelnen Elementen Zahlen der Form 2^n zuordnet.

MessageBox-Flags (AutoIT-Manual)

MessageBox-Flags (AutoIT-Manual)

Möchte man also ein Info-Symbol, dazu ein Yes- und No-Button, addiert man die einzelnen Werte und gibt das Ergebnis als Flag an:

4 + 32 = 36.

Um die aktuelle Uhrzeit auszugeben, sucht man in der Manual nach der Makro-Liste. Makro’s sind allgemein bezeichnet Umgebungsvariablen, die man anhand des führenden „@“ erkennt. Mit Ihnen kann man bspw. die Uhrzeit, das Datum, den aktuellen Benutzernamen oder das Betriebssystem auslesen.

Um die Uhrzeit mit Sekunden anzugeben, benötigen wir die Makros @HOUR, @MIN und @SEC.

Los gehts:

MsgBox(36, "Es ist jetzt...", _
@HOUR & ":" & @MIN & ":" & @SEC & " Uhr.")

Das Ergebnis:

MsgBox-Beispiel

MsgBox-Beispiel

Nun wollen wir noch die Funktion hinzufügen, dass sich beim Klick auf „Yes“ eine zweite Messagebox öffnet – mit dem aktuellen Datum. Dazu muss man wissen: Wenn mit einem Controlelement eines Fensters interagiert wird (Auf einen Button geklickt, einen Haken gesetzt, usw.), liefert das angewählte Element einen Rückgabewert. Welcher das ist, beschreibt wiederrum die Manual.

MessageBox Rückgabewerte (AutoIT Manual)

MessageBox Rückgabewerte (AutoIT Manual)

Im Falle von „Yes“ wäre dies die 6, im Falle „No“ die 7.

Wir erweitern das Script:

$uhrzeit = MsgBox(36, "Es ist jetzt...", _
@HOUR & ":" & @MIN & ":" & @SEC & " Uhr. " _
& @LF & "Möchten Sie das aktuelle Datum anzeigen lassen?")

IF $uhrzeit = 6 Then
MsgBox(0, "Aktuelles Datum", @MDAY & "." & @MON & "." & @YEAR)
EndIf

Kurze Erklärung: Um Funktionen, Makros oder Variablen zwischen Textelementen (… Uhr) einzubetten, muss die aktuelle Eingabe unterbrochen (Escaped) werden. Würde man „@HOUR:@MIN:@SEC“ als 3. Parameter für die Funktion MsgBox() angeben, würde diese nur den Text @HOUR:@MIN:@SEC ausgeben. Aus diesem Grund wird die aktuelle Eingabe durch unterbrochen. Um etwas an das vorherige Element zu hängen, wird der Operator & verwendet. Er verbindet Elemente (bspw. auch Zahlen, Zeichen und Texte).

@LF steht für „line feed“, was normalerweise für Zeilenumbrüche genutzt wird (Alternative zu n).

Wir packen in unserem Script die MsgBox in eine Variable. Danach schnüren wir eine IF-Anweisung, die den Inhalt der Variable $uhrzeit ausführt, und den Rückgabewert mit der Zahl 6 vergleicht. JEDE Funktion hat einen Rückgabewert (meist ob Erfolgreich oder Fehlgeschlagen), sodass man auch auf die erfolgreiche Ausführung eines Befehls prüfen kann.

Ist der Rückgabewert 6 (= auf YES geklickt), öffnet sich eine neue Messagebox mit dem aktuellen Datum.

Bastian

Seit 2006 bin ich täglich im IT-Umfeld unterwegs und interessiere mich für technische Lösungen im Hard- und Softwarebereich, die einem den Alltag erleichtern. Zu meinen Hobbies zählt ein 3D-Drucker, das auch (handwerkliche) Tüfteln, Scripten sowie der unqualifizierte Umgang mit dem Lötkolben.

Das könnte Dich auch interessieren …

9 Antworten

  1. Jan Martin sagt:

    Sehr gut!
    Hat mir sehr viel weitergeholfen!
    Super, wie ich mich freu :D
    LG, Jan Martin.

  2. Gute Zusammenfassung, über Google gefunden. Danke, das habe ich gesucht :)

  3. Luki Far sagt:

    Vielen Dank, das war extrem hilfreich. :-)

  4. Tori Lokisson sagt:

    Extrem hilfreich, stimmt!
    Habe genau das gefunden, was ich gesucht habe. ;)

  5. Damit sagt:

    Das Datum Nich Die Zeit Man -.-

  6. Damit sagt:

    Problem Gelöst alle =
    @YEAR
    @YDAY
    @MON

  7. ibo sagt:

    ich komme nicht weiter kann mir jemand helfen bitte?

    #include
    GUICreate(‚meins‘,400,400,100,250)
    $1= GUICtrlCreateButton(‚1‘,10,10,50,50)
    $2= GUICtrlCreateButton(‚2‘,100,10,50,50)
    $3= GUICtrlCreateButton(‚3‘,190,10,50,50)
    $4= GUICtrlCreateButton(‚4‘,10,100,50,50)
    $5= GUICtrlCreateButton(‚5‘,100,100,50,50)
    $6= GUICtrlCreateButton(‚6‘,190,100,50,50)
    $7= GUICtrlCreateButton(‚7‘,10,190,50,50)
    $8= GUICtrlCreateButton(‚8‘,100,190,50,50)
    $9= GUICtrlCreateButton(‚9‘,190,190,50,50)
    $0= GUICtrlCreateButton(‚0‘,10,280,50,50)
    $feld = GUICtrlCreateInput(“,100,280,150,50)
    $plus = GUICtrlCreateButton(‚+‘,280,10,50,50)
    $minus =GUICtrlCreateButton(‚-‚,280,100,50,50)
    $mal = GUICtrlCreateButton(‚*‘,280,190,50,50)
    $geteilt = GUICtrlCreateButton(‚/‘,280,280,50,50)
    $ergebnis = GUICtrlCreateButton(‚=‘,10,360,100,20)
    GUISetState()

    While 1
    $msg = GUIGetMsg ()
    Select
    Case $msg = -3
    Exit
    Case $1 = $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 1)
    Case $2= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 2)
    Case $3= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 3)
    Case $4= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 4)
    Case $5= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 5)
    case $6= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 6)
    Case $7= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 7)
    Case $8= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 8)
    Case $9= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 9)
    Case $0= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& 0)
    Case $geteilt= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚/‘)
    Case $mal= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚*‘)
    Case $minus= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚-‚)
    Case $plus= $msg
    GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚+‘)
    Case $ergebnis= $msg

    EndSelect
    WEnd

    • ibo sagt:

      #include
      GUICreate(‚meins‘,400,400,100,250)
      $1= GUICtrlCreateButton(‚1‘,10,10,50,50)
      $2= GUICtrlCreateButton(‚2‘,100,10,50,50)
      $3= GUICtrlCreateButton(‚3‘,190,10,50,50)
      $4= GUICtrlCreateButton(‚4‘,10,100,50,50)
      $5= GUICtrlCreateButton(‚5‘,100,100,50,50)
      $6= GUICtrlCreateButton(‚6‘,190,100,50,50)
      $7= GUICtrlCreateButton(‚7‘,10,190,50,50)
      $8= GUICtrlCreateButton(‚8‘,100,190,50,50)
      $9= GUICtrlCreateButton(‚9‘,190,190,50,50)
      $0= GUICtrlCreateButton(‚0‘,10,280,50,50)
      $feld = GUICtrlCreateInput(“,100,280,150,50)
      $plus = GUICtrlCreateButton(‚+‘,280,10,50,50)
      $minus =GUICtrlCreateButton(‚-‚,280,100,50,50)
      $mal = GUICtrlCreateButton(‚*‘,280,190,50,50)
      $geteilt = GUICtrlCreateButton(‚/‘,280,280,50,50)
      $ergebnis = GUICtrlCreateButton(‚=‘,10,360,100,20)
      GUISetState()

      While 1
      $msg = GUIGetMsg ()
      Select
      Case $msg = -3
      Exit
      Case $1 = $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 1)
      Case $2= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 2)
      Case $3= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 3)
      Case $4= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 4)
      Case $5= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 5)
      case $6= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 6)
      Case $7= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 7)
      Case $8= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 8)
      Case $9= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 9)
      Case $0= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& 0)
      Case $geteilt= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚/‘)
      Case $mal= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚*‘)
      Case $minus= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚-‚)
      Case $plus= $msg
      GUICtrlSetData ($feld,GUICtrlRead($feld)& ‚+‘)
      Case $ergebnis= $msg

      EndSelect
      WEnd

  1. 26. Mai 2010

    […] Source-Code: cursed-treasure-hotkeys.au3 Danke an awesomeIT für die gute MsgBox Zusammenfassung. […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.