Autenthifizierungsfenster abfangen und füllen

  • Für einen langanhaltenden Test ist es immer wieder notwendig, dass ich mein Passwort in ein Authentifizierungsfenster eintrage, da die SessionID nach einer Zeit abgelaufen ist.
    Da sich das Passwort, in Abängigkeit des Windowsbenutzers ändert, möchte ich durch ein einziges Script mit dem Scriptstart das Passwort in einer Textdatei speichern.
    Weiter soll das Script prüfen, ob das Authentifizierungsfenster vorhanden ist und falls dies der Fall, so soll das Passwort aus der zuvor angelegten Textdatei verwendet, also in das Passworteingabefeld eingetragen werden.
    Anschließend muss das Script wieder prüfen, ob das Authentifizieungsfenster wieder erscheint.
    Bislang sieht meine Script wie folgt aus:

    [autoit]

    ;Überprüft auf Anmeldefenster
    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($sFile, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)

    [/autoit][autoit][/autoit][autoit]

    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($hFile, $sText) ;// Text in Datei schreiben

    [/autoit][autoit][/autoit][autoit]

    ;nun soll das Script prüfen, ob das Fenster mit dem Totel "Authentifizierung" vorhanden ist
    WinWait("Authentifizierung","")
    If Not WinActive("Authentifizierung","") Then WinActivate("Authentifizierung","")
    WinWaitActive("Authentifizierung","")
    Sleep(100)
    ;...hier muss das Passwort aus der Datei Passwort.txt eingelegen und eingefügt werden
    Sleep(400)
    Send("{TAB}")
    Sleep(100)
    Send("{ENTER}")

    [/autoit]

    Leider komme ich nicht wirklich weiter. Kann mir jemand helfen, wie muss das Script aussehen?
    Vielen Dank für eure unterstützung

  • Geht soweit ich weiss nicht, sobald die Benutzerkontensteuerung dieses Fenster öffnet, werden AutoIt-Skripte Pausiert.
    Weiss aber nicht ob es vieleicht mittlerweile eine andere Lösung gibt, als diese einfach zu deaktivieren.

    Bild1: Ich beim debuggen

  • Das Script soll, nur nicht auch darauf kurz einzugehen, keinen Windows, sondern ein Programmlogin durchführen. Im Authentifizierungsfenster steht schon immer der Windows-Loginname drin. Dasheißt, also nur dass Passwort muss noch über AutoIT eingepflegt werden.

    Was funktioniert mit dem Script am Anfang des Threads:
    1. Es erscheint ein Fenster, welches nach dem Passwort fragt.
    2. Das Passwort kann eingegeben werden
    3. Das Passwort wird korrekt in der Datei "passwort.txt" hinterlegt

    Was funktioniert nicht:
    1. im Script Zeile 13 muss nun ja irgendwie der Eintrag aus der Datei "passwort.txt" ausgelesen und in das dafür vorgesehene Editfeld kopiert/eingetragen werden
    --> wie ist das zu programmieren?

    Wo bin ich mir nicht sicher:
    1. bekommt das Authentifizierungsfenster automatisch den Focus wenn es auftaucht?
    2. läuft das AutoIT-Script auch dann weiter, wenn das Passwort aus der Datei "passwort.txt" einmal eingetragen wurde um den Vorgang später erneut zu durchlaufen?

  • Zum auslesen benutzt du:

    [autoit]

    FileReadLine()

    [/autoit]


    Zum einfügen kannst du mit dem WinInfo Tool von AutoIt auslesen wie das InputFeld heist und dann dieses Ansprechen um den Inhalt zu setzen.
    Im Grunde genommen sollte es dann nicht mal eine Rolle spielen ob das Fenster zu diesem Zeitpunkt im Fokus steht...sollte, hab ich persönlich noch nie versucht.

    Bild1: Ich beim debuggen

  • Ich blicke es nicht ?(

    Nun sieht mein Script wie folgt aus:

    [autoit]

    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($sFile, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)

    [/autoit][autoit][/autoit][autoit]

    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($hFile, $sText) ;// Text in Datei schreiben

    [/autoit][autoit][/autoit][autoit]

    WinWait("Authentifizierung","")
    If Not WinActive("Authentifizierung","") Then WinActivate("Authentifizierung","")
    WinWaitActive("Authentifizierung","")
    Sleep(100)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Local $file = FileOpen("passwort.txt", 0)

    [/autoit][autoit][/autoit][autoit]

    ; Prüfen, ob Datei eingelesen wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; Zeilen des Textes einlesen bis EOF
    While 1
    Local $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    ;MsgBox(0, "Zeile gelesen:", $line)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    Sleep(400)
    Send("{TAB}")
    Sleep(100)
    Send("{ENTER}")

    [/autoit]

    Dort wo ;MsgBox(0, Zeile gelesen: steht wird, wenn ich die Zeile nicht auskommentiere ein Fenster angezeigt, welche mir auch das Passwort aus der Datei "Passwort.txt" anzeigt. Nur soll mir dass Passwort nicht angezeigt werden, sondern in mein Fesnter mit dem Titel "Authentifizierung" kopiert/eingetragen werden.
    Wo und wie??? Ich sehe den Wald vor lauter Bäumen nicht mehr ;(
    Vielen Dank für die Unterstützung!

  • nun sieht der Quellcode so aus

    [autoit]

    ...
    ; Zeilen des Textes einlesen bis EOF
    While 1
    Local $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    ;MsgBox(0, "Zeile gelesen:", $line)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    Sleep(400)
    Send("{TAB}")
    Sleep(100)
    Send($line)
    Send("{ENTER}")

    [/autoit]

    Also send($line) ist eingebaut.
    Dennoch wird nichts an das Autentifizierungsfenster übergeben. Schade!

  • Wieso ist da eine While schleife bitte?

    Du muss das doch nur einmal abfragen oder nicht?

    Dann einfach

    [autoit]


    Local $line = FileReadLine($file,1)

    [/autoit]


    Oder wie sieht die Datei aus??? Oder ist da nicht nur eine zeile laut deinem Script oben wird die ja nur einmal reingeschrieben.

    :thumbup:

  • Also rein aus dem Bauch hinaus würd ich jetzt sagen, dass die eingelesene Linie jedesmal wiede überschrieben wird...und da die letzte Linie natürlich leer ist, ist dann natürlich auch der Text den du send($line) übergibts leer

    Bild1: Ich beim debuggen

  • Aktuell sieht mein Script nun wie folgt aus:

    [autoit]

    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($sFile, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)

    [/autoit][autoit][/autoit][autoit]

    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($hFile, $sText) ;// Text in Datei schreiben

    [/autoit][autoit][/autoit][autoit]

    WinWait("Authentifizierung","")
    If Not WinActive("Authentifizierung","") Then WinActivate("Authentifizierung","")
    WinWaitActive("Authentifizierung","")
    Sleep(100)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Local $file = FileOpen("passwort.txt", 0)

    [/autoit][autoit][/autoit][autoit]

    ; Prüfen, ob Datei eingelesen wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; Zeilen des Textes einlesen bis EOF
    While 1
    Local $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    ;MsgBox(0, "Zeile gelesen:", $line)
    Send($line)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    Sleep(800)
    Send("{TAB}")
    Sleep(800)
    Send("{ENTER}")
    Run("AutFenster.exe", "","")

    [/autoit]

    An dieser Stelle sei gesagt, dass ein Durchlauf auch fast funktioniert.
    Ich starte das Script und werde zur Eingabe des Passwortes aufgefordert. Dieses Passwort z.B. Schiff#6 wir auch korrekt in der Datei "passwort.txt" gespeichert. Nun poppt irgendwann mein Authentifizierungsfenster auf und es wird vermeintlich dass Passwort aus der passwort.txt in das Fenster geschrieben. Leider stellt sich im Test heraus, dass das Passwort nicht korrekt im Authentifizierungsfenster ankommt. Ich vermute dass das # nicht übergeben wird. Lasse ich das Passwort über ;MsgBox(0, "Zeile gelesen:", $line) ausgeben, ist es nach Anzeige korrekt.
    Dann allerdings wird immer wieder die Passworteingabe angezeigt. Diese soll natürlich nur einmal eben ganz zu Anfang kommen.
    Ergo gilt es
    1. eine Schleife so zu bauen, dass eben die Passworteingabe nur einmal, beim Aufruf des kompilierten Script (der exe) kommt
    2. ein beliebiges Passwort korrekt aus der Datei passwort.txt in das Authentifizierungsfenster zu übergeben
    3. eine Schleife zu haben, die immer prüft, ob ggf. das Authentifizierungsfenster wieder da ist und dann eben wieder das Passwort aus der Datei passwort.txt entsprechend einfügt.

    FürHilfe, Anpassungen oder Ergänzungen am Script wäre ich sehr dankbar.

  • Das ist so murks. Anstatt send() solltest du eher controlsettext() verwenden. Damit das möglich ist verwendest du zunächst das Tool au3info im SciteEditor (Menü->Tools->au3info) um Details über das Passwortfeld des Authentifizierungsfensters zu erhalten.

    Hier ein Beispiel wie man au3info nutzen kann:
    https://www.youtube.com/watch?v=X2gYPw1itBg

    Du benötigst zum einen die Daten des PW Feldes, als auch die Daten des Login/ok Buttons. Sobald du die notwendigen Informationen hast kannst du die Befehle erstellen:

    z.B. so:

    [autoit]


    ControlSetText("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","meinPW")
    ;controlclick("Unbenannt - Editor","","[CLASS:Button; INSTANCE:1]") ; mein notepad Beispiel hat keinen Button, daher sinnlos das hier zu aktivieren

    [/autoit]

    Willst du nun, dass dein Programm unendlich lange läuft und immerwieder darauf wartet, dass das Fenster erscheint benötigst du eine Endlosschleife.

    [autoit]


    while 1
    if winexists("Unbenannt - Editor") then
    ControlSetText("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","meinPW")
    ;controlclick("Unbenannt - Editor","","[CLASS:Button; INSTANCE:1]") ; mein notepad Beispiel hat keinen Button, daher sinnlos das hier zu aktivieren
    endif
    sleep(100)
    wend

    [/autoit]

    Das Passwort speicherst du in einer Datei, das ist soweit ok, aber wenn du das schon machst, dann wäre es doch unsinnig bei jedem Programmstart erneut den Benutzer danach zu fragen. Stattdessen solltest du so vorgehen:

    [autoit]


    if not fileexists(@scriptdir & "\passwort.txt") then
    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite(@scriptdir & "\passwort.txt", $sText) ;// Text in Datei schreiben
    else
    $sText = fileread(@scriptdir & "\passwort.txt") ; oder meinetwegen auch filereadline, aber wenn die Datei eh nur eine Zeile hat funktioniert fileread genauso
    endif

    [/autoit]

    Da du von mehreren Benuzeraccounts mit verschiedenen Passwörtern sprachst bietet es sich an statt @scriptdir ein Verzeichnis des jeweiligen Windowsbenutzers zu verwenden, also z.B

    [autoit]


    @AppDataDir & "\deinprogrammname\password.txt"

    [/autoit]

    Das fertige Script sollte dann diesen Ablauf haben:

    [autoit]


    #cs
    1. Passwort aus Datei lesen oder wenn Datei nicht vorhanden vom Benutzer erfragen und dann speichern
    2. Endlos Schleife, welche prüft ob das fenster exisitert
    3. Sobald es existiert pw Feld ausfüllen und ok button drücken
    4. Endlosschleife läuft weiter bis Programm beendet wird, also spätestens beim abmelden des Windows Accounts
    #ce

    [/autoit]

    Kleine Bemerkung am Rande:

    Es ist keine Gute Idee Passwörter in Klartext Dateien zu speichern. Ich würde also entweder grundsätzlich den Benutzer beim Programmstart danach fragen und nie speichern, oder wenn schon speichern dann wenigstens verschlüsselt. Dazu solltest du dir mal die Hilfe bezüglich den crypt Funktionen anschauen.

    Einmal editiert, zuletzt von misterspeed (20. März 2013 um 20:35)

  • Hallo Misterspeed,

    ja genau so sollte es dann mal laufen... ich bekomm es trotz deiner Hilfe nicht hin. aktuell wird nicht einmal mehr dass Passwort eingelesen/gesetzt.

    [autoit]

    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($sFile, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)

    [/autoit][autoit][/autoit][autoit]

    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($hFile, $sText) ;// Text in Datei schreiben

    [/autoit][autoit][/autoit][autoit]

    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]","OK")
    controlclick("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]")
    endif
    sleep(100)
    wend

    [/autoit][autoit][/autoit][autoit]

    if not fileexists(@scriptdir & "\passwort.txt") then
    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite(@scriptdir & "\passwort.txt", $sText) ;// Text in Datei schreiben
    else
    $sText = fileread(@scriptdir & "\passwort.txt") ; oder meinetwegen auch filereadline, aber wenn die Datei eh nur eine Zeile hat funktioniert fileread genauso
    endif

    [/autoit][autoit][/autoit][autoit]

    Sleep(800)
    Send("{TAB}")
    Sleep(800)
    Send("{ENTER}")

    [/autoit]

    Könnt Ihr bitte weiter unterstützen?

  • Also ohne es jetzt getestet zu haben, würde ich es mal so versuchen:

    [autoit]

    $file = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    $hFile = FileOpen($file, 2) ;// Datei im Schreibmodus öffnen (falls sie nicht exstiert, wird sie erstellt)
    $checkpw = FileRead($hFile)
    if $checkpw = "" then
    $sText = InputBox("Passwort-Box", "Bitte geben Sie Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'")
    FileWrite($hFile, $sText) ;// Text in Datei schreiben
    endif

    [/autoit][autoit][/autoit][autoit]

    $sText = fileread($hFile)

    [/autoit][autoit][/autoit][autoit]

    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]",$sText)
    controlclick("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]")
    endif
    sleep(100)
    wend
    FileClose($hFile) ;Sollte immer vorhanden sein ;)
    Exit ;Das auch

    [/autoit]

    EDIT: Kleine ergänzung ;)
    EDIT2: Ich seh gerade, dass deine ausgelesenen werte nicht ganz stimmen, die vom Input Feld ist sicher anders als der OK Knopf.

    Einmal editiert, zuletzt von Neklor (25. März 2013 um 19:05)

  • ;( die Datei "passwort.txt" wird korrekt angelegt bzw. auch mit dem Eingabewert gefüllt.
    Das Authetifizierungsfenster steht im Vordergrund wird aber nicht gefüllt.
    Die Instance habe ich abgepasst:

    [autoit]

    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]",$sText)
    controlclick("Authentifizierung","","[CLASS:TkChild; INSTANCE:4]")
    endif
    sleep(100)
    wend

    [/autoit]


    Ich habe mir erlaubt zwei Screenshots zu dem Authetifizierungsfenster anzuhängen. Ich komme nicht weiter...

  • Deine Screenshots sind von ein und demselben Control. Auf gut Glück die Instance Nummer zu ändern bringt dich nicht weiter. Du musst wirklich mit au3info die einzelnen Elemente im Authentifizierungsfenster markieren. Wenn au3info nur ein großes Element erkennt ist das Fenster eventuell nicht aus Standardcontrols zusammengestellt. Im Anhang findest du nochmals 2 Screenshots wie das ganze ausschaun sollte.

    Wenn dich au3info hier nicht weiterbringen sollte wäre es vielleicht sinnvoll das Programm zu benennen, damit wir selbst testen können oder du versuchst die notwendigen Informationen hiermit zu ermitteln: https://autoit.de/index.php?page=Thread&threadID=32511

    Was deinen Quelltext anbelangt noch ein paar Anmerkungen:

    1. Wenn du eine Endlosschleife verwendest die niemals verlassen wird, dann wird nachfolgender Code, also alles nach "Wend" niemals ausgeführt. Meine Prüfung die ich dir oben gepostet habe gehört also an den Scriptanfang vor die Endlosschleife.
    2. die send() Befehle am Ende brauchst du nicht mehr wenn du mit den controlsettext und controlclick Funktionen arbeitest

    Hier mal ein bereinigtes Script:

    [autoit]


    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    if not fileexists($sFile) then
    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($sFile, $sText) ;// Text in Datei schreiben
    else
    $sText = fileread($sFile) ; oder meinetwegen auch filereadline, aber wenn die Datei eh nur eine Zeile hat funktioniert fileread genauso
    endif

    [/autoit][autoit][/autoit][autoit]

    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]",$sText) ; pw ins edit feld schreiben , infos zum edit falsch????
    controlclick("Authentifizierung","","[????????????????????????]") ; ok drücken , infos zum button fehlen !!!
    endif
    sleep(100)
    wend

    [/autoit]
  • Vielen Dank an Misterspeed :thumbup:

    Leider funktioniert es dennoch nicht.

    Aktuell sieht das Script wie folgt aus:

    [autoit]


    $sFile = @ScriptDir & "\passwort.txt" ;// Optional Pfad + Name anpassen
    if not fileexists($sFile) then
    $sText = InputBox("Passwort-Box", "Bitte gibt Ihr Passwort für ein und bestätigen Sie dieses mit 'OK'") ;// InputBox erstellen
    FileWrite($sFile, $sText) ;// Text in Datei schreiben
    else
    $sText = fileread($sFile) ; auslesen der Tesxtdatei
    endif
    while 1
    if winexists("Authentifizierung") then
    ControlSetText("Authentifizierung","","[CLASS:TkChild; INSTANCE:5]",$sText) ; pw ins edit feld schreiben , infos zum edit falsch????
    controlclick("Authentifizierung","","[CLASS:TkChild; INSTANCE:4]") ; ok drücken , infos zum button fehlen !!!
    endif
    sleep(100)
    wend

    [/autoit]

    Ein Screenshot des Fensters als Dateianhang. Der Benutzername ist der Windows-Benutzername und ist bereits, sobald das Fenster aufpoppt, eingetragen. Es gilt also nur das Feld "Passwort" zu füllen. Erst wenn im Feld Passwort ein Eintrag erfolgt, wird der Button "OK" klickbar geschaltet.

    Mit "AutoIt Window Info" habe ich folgende Infos zum Button (siehe Screenshots).

    Mit "AutoIt Window Info" habe ich folgende Infos zum Editfeld (siehe Screenshots).

  • Tjo scheinbar hast du in diesem Fall wirklich ein Problem. Tkchild windows können anscheinend nicht wie die meisten Fenster über die genannten Funktionen automatisiert werden, zumindestens findet man über google jedemenge Beiträge und gescheiterte Versuche dazu. Also sofern niemand eine Idee hat wie man es doch hinbekommt bleibt meiner Meinung nach dann nur noch die unzuverlässigere Variante mit send / click, so wie du es ursprünglich hattest.

    Zu deinem Sonderzeichenproblem solltest du dir die Hilfe des send() Befehls anschauen, dort ist dokumentiert, welche Zeichen maskiert werden müssen. Das gespeicherte PW muss also zunächst von dir geparsed und in einen kompatiblen String formatiert werden.

    So funktioniert es mit dem Sonderzeichen "#"

    [autoit]


    run("notepad.exe")
    Sleep(500)
    send("meinPWmitSonderzeichen{#}")

    [/autoit]

    Automatisiert könntest du den String so erzeugen:

    [autoit]


    $meinPW = "meinPWmitSonderzeichen#"
    $meinPW = StringReplace($meinPW,"#","{#}")
    ConsoleWrite($meinPW & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    run("notepad.exe")
    Sleep(500)
    send($meinPW)

    [/autoit]

    Da mehr als nur ein Zeichen davon betroffen ist solltest du das PW grundsätzlich durch eine Funktion zur Ersetzung aller problematischen Zeichen jagen.

    Beispiel:

    [autoit]


    $meinPW = "meinPWmitSonderzeichen#"
    ConsoleWrite($meinPW & @CRLF)
    $meinPW = replaceSendChars($meinPW)
    ConsoleWrite($meinPW & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    run("notepad.exe")
    Sleep(500)
    send($meinPW)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func replaceSendChars($string)
    ; unvollständig, siehe Hilfe von send()
    Local $aReplaceRules[3][2] = [ ["!","{!}"], _
    ["#","{#}"], _
    ["+","{+}"] _
    ]
    For $i=0 To UBound($aReplaceRules)-1
    $string = StringReplace($string,$aReplaceRules[$i][0],$aReplaceRules[$i][1])
    Next

    [/autoit][autoit][/autoit][autoit]

    Return $string
    EndFunc

    [/autoit]