1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Moombas

Beiträge von Moombas

  • regex in JS

    • Moombas
    • 6. März 2023 um 09:28

    Edit: AspirinJunkie war schneller ;) (und ggf. besser)

  • externe Exe im Hintergrund

    • Moombas
    • 3. März 2023 um 14:55

    Ganz ehrlich: Wenn die Quelle schon so verhunzt ist, kannst du nur noch manuell jede einzelne Zeile durchgehen und korrigieren (nach export in CSV) und gleich nebenbei, nachdem die Korrekturen die erforderlichen Felder zu Tage gebracht haben, das wiederum in ein (selbst geschriebenes) Programm einarbeiten, mit dem die Mitarbeiter dann Arbeiten können.

    Das Programm scheint nicht an die Bedürfnisse der Mitarbeiter angepasst zu sein, dann ist es kein Wunder, das diese sich ihre Wege suchen das so hin zu bekommen wie sie es brauchen (z.B. ganz simpel das Fehlen von EINEM (unbeschränktem) Kommentarfeld).

  • AutoIt Cheat Sheet

    • Moombas
    • 23. Februar 2023 um 15:19

    Nurmal eine Sache die ich auf die Schnelle gesehen habe die fehlt ist: Const

    Und ich würde die Arrays dort aktuell noch vermissen, da diese ja durchaus essentiell sind.

  • Firmware Update mit AutoIT

    • Moombas
    • 22. Februar 2023 um 08:34

    Ich könnte mir vorstellen, das die Ausführung als "System" den Defender auf den Plan ruft. Hast du es mal mit einem Adminaccount versucht?

  • Probleme beim Empfangen von Modbus-Daten

    • Moombas
    • 20. Februar 2023 um 08:10
    Zitat von autoit_dau

    Hallo Moombas,

    danke für die Hilfe. Allerdings läuft das skript "unbeaufsichtigt", d.h. Es soll solange "schleifen" bis wieder einer den Stecker steckt - und weiter gehts.

    Danke!

    Dann würde ich das dennoch trennen:

    1. Prüfen ob eine Verbindung aufgebaut werden kann (Endlosschleife mit Ping), dennoch Empfehlung einen Shortcut zum Abbruch einbauen

    2. Wenn erfolgreich: Code ausführen (der obige Code).

    3. Prüfen ob die Verbindung (Endlosschleife mit Ping) wieder getrennt wurde und erst dann wieder bei "1." einsetzen um eine Mehrfachausführung zu vermeiden.

    Q&D:

    AutoIt
    Global $bTerminate = False
    HotKeySet("{ESC}", "Terminate")
    
    
    Func WaitForDevice($S_IP, $s_port, $s_uID, $FC, $Start_regJanitza, $RegAnzahl) ; Auch hier müssen die POarameter rein, da du diese ja an die "finale Funktion" weiter geben musst.
        While 1
            If $bTerminate then 
                $bTerminate = False
                Exitloop
            Endif
            If Ping($S_IP, 1000) > 0 Then ;Warten bis das Gerät sich an der IP meldet, Timeout bitte ggf. anpassen
                If _example_nativ($S_IP, $s_port, $s_uID, $FC, $Start_regJanitza, $RegAnzahl) Then ;Code ausführen, falls erfolgreich warten bis die Verbindung getrennt wurde
                    While Ping($S_IP, 1000) ;Warten bis das Gerät sich an der IP nicht mehr meldet, Timeout bitte ggf. anpassen
                        sleep(100)
                        If $bTerminate then 
                            $bTerminate = False
                            Exitloop
                        Endif
                    WEnd
                EndIf
            EndIf
        WEnd
    EndFunc
    
    Func _example_nativ($S_IP, $s_port, $s_uID, $FC, $Start_regJanitza, $RegAnzahl)
    Local $iSock, $aJani, $iTry = 10
    Local Const $_native_ModbusTCP_Debug_Send = 1
    Local Const $_native_ModbusTCP_Debug_Recv = 1
    
        ;MsgBox(0, "_example_native()", "Example modbusTCP only via Autoit")
        TCPStartup()
    
        For $Connect = 1 to $iTry
            $iSock = TCPConnect($S_IP, $s_port)
            sleep(1000)
    
            If $iSock = -1 Then
                ConsoleWrite("Fehler Verbindungsaufbau" & @LF)
                ConsoleWrite("Conn = IP: " & $S_IP &" Port:  " & $s_port & " uId: " & $s_uID & " FC: " & $FC &  " RegStart: " & $Start_regJanitza & " RegAnz: " & $RegAnzahl &  @CRLF)
                If $Connect = $iTry Then
                    Consolewrite('Fehler: Kein Verbindungsaufbau möglich.')
                    Return False
                Else
                    Consolewrite('Verbindungsaufbau (' & $Connect & ') fehlgeschlagen. Erneuter Versuch.' & @CRLF)
                EndIf
            Else
                ExitLoop
            EndIf
        Next
    
        $aJani = _native_ModbusTCP_ReadImputRegister($iSock, $Start_regJanitza, $RegAnzahl, "float") ;Functioncode 4, Register 1, Länge 4 Resiter lesen, als float zurückgeben
        ConsoleWrite("Conn = IP: " & $S_IP &" Port:  " & $s_port & " uId: " & $s_uID & " FC: " & $FC &  " RegStart: " & $Start_regJanitza & " RegAnz: " & $RegAnzahl &  @CRLF)
        ConsoleWrite("$iSock = " & $iSock & @CRLF)
        ;ConsoleWrite("float = " & $aJani[0] & @CRLF)
    
        ;_ArrayDisplay($aJani)
    
        TCPShutdown()
    
        Return True
    EndFunc   ;==>_example_nativ
    
    Func Terminate()
        $bTerminate = True
    EndFunc
    Alles anzeigen
  • Window Mover für Loupedeck

    • Moombas
    • 17. Februar 2023 um 15:58

    Naja, bei meinem Monitor von MSI (UWQHD) war ein entsprechendes Tool dabei und funktioniert ganz gut (MSI wird die Nutzung aber wohl auf ihre Monitore beschränken, habs jedoch noch nicht auf anderen probiert).

    Das Einzige was ich dort vermisse, ist die Möglichkeit die von dir angesprochenen Teilbereiche zu definieren, wo du Fenster direkt "snappen" kannst, ohne ein anderes Programm aufzurufen mit dem du diesem den Teilbereich zuweist.

    Und bei breiten Monitoren ist es auch im Privaten Bereich durchaus nützliches soetwas zu haben.

  • Probleme beim Empfangen von Modbus-Daten

    • Moombas
    • 15. Februar 2023 um 14:06

    Ich rate davon ab, aus mehreren Gründen:

    1. Schaffst du somit im worst case eine riesige Kaskade

    2. Sobald der 2. bzw. Xte Aufruf der Funktion abgefrühstückt ist, springt er wieder an den Punkt wo sie aufgerufen wurde. Bedeutet, das alles was danach kommt Xmal ausgeführt wird.

    Versuch den Verbindungsaufbau zu machen, pack das aber mit einem Timer sleep(X) (den hast du ja bereits) und in eine Schleife mit einem maximum von z.B. 10 Versuchen. Wenn die 10 Versuche fehlschlagen, Abbruch per z.B. Return 'keine Verbindung'.

    Wenn die Verbindung erfolgreich ist mit ExitLoop raus aus der Funktion und dann kommt dein Code den du ausführen willst.

    Edit: Hier mal, wie ich das quick & dirty Umsetzen würde in deinem Code. Ich habe dabei auch gleich die falschen/fehlenden Deklarationen korrigiert und erwarte (das würde ich wirklich empfehlen), das du die Werte, die in der () der Funktion stehen, der Funktion übergibst und nicht alle Global definierst. Letzteres wird dir sonst irgendwann auf die Füße fallen.

    AutoIt
    Func _example_nativ($S_IP, $s_port, $s_uID, $FC, $Start_regJanitza, $RegAnzahl)
    Local $iSock, $iTry = 10
    Local Const $_native_ModbusTCP_Debug_Send = 1
    Local Const $_native_ModbusTCP_Debug_Recv = 1
    
        ;MsgBox(0, "_example_native()", "Example modbusTCP only via Autoit")
        
        TCPStartup()
        
        For $Connect = 1 to $iTry
            $iSock = TCPConnect($S_IP, $s_port)
            sleep(1000)
            
            If $iSock = -1 Then
                ConsoleWrite("Fehler Verbindungsaufbau" & @LF)
                ConsoleWrite("Conn = IP: " & $S_IP &" Port:  " & $s_port & " uId: " & $s_uID & " FC: " & $FC &  " RegStart: " & $Start_regJanitza & " RegAnz: " & $RegAnzahl &  @CRLF)
                If $Connect = $iTry Then
                    Return 'Fehler: Kein Verbindungsaufbau möglich.'
                Else
                    Consolewrite('Verbindungsaufbau (' & $Connect & ') fehlgeschlagen. Erneuter Versuch.' & @CRLF)
                EndIf
            Else
                ExitLoop
            EndIf
        Next
    
        $aJani = _native_ModbusTCP_ReadImputRegister($iSock, $Start_regJanitza, $RegAnzahl, "float") ;Functioncode 4, Register 1, Länge 4 Resiter lesen, als float zurückgeben
        ConsoleWrite("Conn = IP: " & $S_IP &" Port:  " & $s_port & " uId: " & $s_uID & " FC: " & $FC &  " RegStart: " & $Start_regJanitza & " RegAnz: " & $RegAnzahl &  @CRLF)
        ConsoleWrite("$iSock = " & $iSock & @CRLF)
        ;ConsoleWrite("float = " & $aJani[0] & @CRLF)
    
        ;_ArrayDisplay($aJani)
    
        TCPShutdown()
    EndFunc   ;==>_example_nativ
    Alles anzeigen
  • Probleme beim Empfangen von Modbus-Daten

    • Moombas
    • 15. Februar 2023 um 11:48

    Ja, hab ich gesehen.

    Helfe auch gerne was die Strucktur angeht ( autoit_dau ), die finale Strucktur ist ja so oder so Benutzerspezifisch leicht variabel, sollte aber lesbar sein.

    Ich denke einige Zeilenumbrüche kommen ggf. auch beim kopieren aus dem Editor hier auf die Webseite. Aber auch da sollte man vor dem Posten nochmal nachsteuern damit man damit was anfangen kann ohne den kompletten Code erstmal formatieren zu müssen wenn man helfen möchte.

  • Probleme beim Empfangen von Modbus-Daten

    • Moombas
    • 15. Februar 2023 um 08:29

    Es ist ja nicht nur die Strucktur, sondern leider auch GLobale Variablen, die Lokal in einer funktion deklariert werden usw. (macht man nicht).

    Wobei ich auch, sowohl weil ich von der ModBus-Ansteuerung zu wenig Kenntnis habe, als auch bei diesem Horror von Strucktur/Formatierung das Thema auch gleich mal verworfen habe.

  • Datensätze als Array of struct speichern

    • Moombas
    • 13. Februar 2023 um 13:08

    Hi AspirinJunkie : Ich glaube ich war doch etwas ungenau. Ich wollte die '3' bei deiner Zeile 24 eben nicht, da ich diese "nicht weiß", sondern über die ID ermitteln und dann den zugehörigen tag .name ausgeben.

    Ich habe/hatte die Hoffnung das es dafür etwas gibt, ohne das man eine Schleife durchlaufen muss und es relativ simpel abfragbar ist und ich es nur nicht weiß wie.

    Habe es nun aber erst mal über eine Schleife gelöst.

  • Datensätze als Array of struct speichern

    • Moombas
    • 13. Februar 2023 um 09:52

    Blöde (schnelle) Frage.

    Weiß jemand ob ich auch direkt auf etwas zugreifen kann ohne das Array of Struct zu durchlaufen?

    Evtl. ist etwas sample-Code besser um zu verstehen was ich meine:

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <Array.au3>
    
    Global Const $tagVariables = 'struct;char id[36];char Name[999];endstruct'
    Global $Networks[1], $Count = 5
    
    ReDim $Networks[$Count + 1]
    $Networks[0] = $Count
    For $i = 1 To $Networks[0]
        $Networks[$i] = DllStructCreate($tagVariables)
    Next
    
    For $Row = 1 to $Count
        $Networks[$Row].id = $Row
        $Networks[$Row].name = $Row & '_name'
        ConsoleWrite($Networks[$Row].id & ': ')
        ConsoleWrite($Networks[$Row].name & @CRLF)
    Next
    $Networks[0] = UBound($Networks) - 1
    
    For $Row = 1 to $Networks[0]
        If $Networks[$Row].id = 3 then ConsoleWrite($Networks[$Row].name & @CRLF) ;funktioniert
    Next
    
    Global $A = DllStructGetData($Networks, '3', 'id') ;funktioniert nicht (Struct not a valid struct returned by DllStructCreate())
    ConsoleWrite(@error & @CRLF)
    Consolewrite($A & @CRLF)
    Alles anzeigen
  • Poweshellscript fenster unsichtbar einbinden

    • Moombas
    • 13. Februar 2023 um 08:05

    casi4712 , das mit dem 0x2 habe ich in keinem meiner Codes verwendet, das kommt von BugFix und wenn du dir die Hilfe anschauen würdest, dann wüsstest du das dies $STDOUT_CHILD ist im opt_flag des run Befehls...

    Die Powershellzeilen habe ich 1:1 von dir hier übernommen (Beitrag 13) und natürlich nicht geprüft, da ich zum einen nicht PS affin bin und zum anderen du dies schon vorher selber prüfen musst. Das Einzige, was ich geändert habe ist die Zeile bzgl. der ' und " in diesem Block (vergleich mal deinen Block aus #13 und meinen Block aus #16).

  • Bereich von Bild in neuer Datei speichern

    • Moombas
    • 8. Februar 2023 um 11:53

    Schau mal hier: https://www.autoitscript.com/forum/topic/20…kground-screen/

  • CMD Aurfuf haut nicht hin

    • Moombas
    • 6. Februar 2023 um 11:59

    Ouch... dann schau bitte nochmal. (Siehe unten)

    Hier mal eine Variante mit korrekten Einzügen und Lokal/Global deklarationen (deinen Fehler habe ich auch mal behoben).

    Da ivch einiges abändern musste und das Einlesen des Zertifikats nich testen kann, bitte diesen Teil prüfen.

    AutoIt
    Opt('MustDeclareVars', 1)
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    
    #include <GuiConstants.au3>
    #include <FileConstants.au3>
    #include <ProcessConstants.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>
    #include <WinAPISys.au3>
    #include <WinAPIProc.au3>
    #include <WinAPISys.au3>
    #include <File.au3>
    
    Global Const $iWidth = 530, $iHeight = 120, $iBorder = 10
    
    ;GUI
    Global $hMainGui = GUICreate('Zert Dropper', $iWidth, $iHeight, @DesktopWidth/2-$iWidth/2, @DesktopHeight/2-$iHeight/2, _
                                 Default, BitOR($WS_EX_ACCEPTFILES,$WS_EX_TOPMOST))
    Global $iInfoLabel = GUICtrlCreateLabel('Bitte ziehen Sie mit der Maus die erhaltene PFX-Datei in dieses Fenster ' & _
                                            'und lassen es hier fallen, danach geben Sie Ihr Passwort ein, welches ' & _
                                            'Sie per Mail erhalten haben, den Rest erledige ich für Sie.', _
                                            $iBorder, $iBorder, $iWidth-2*$iBorder, $iHeight-2*$iBorder)
    GUICtrlSetFont($iInfoLabel, 16, 0, 'Arial')
    GUICtrlSetBkColor($iInfoLabel, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetState($iInfoLabel, $GUI_DROPACCEPTED)
    GUISetState(@SW_SHOW, $hMainGui)
    
    _mainLoop()
    
    Func _mainLoop()
    Local $iTry = 0
    Local Const $iMaxTries = 3
        While $iTry < $iMaxTries
            _GUILoop()
            $iTry += 1
            If $iTry = $iMaxTries Then
                MsgBox(16, 'Fehler', 'Zu viele Versuche. Der Vorgang wird abgebrochen.', Default, $hMainGui)
                Exit
            Else
                MsgBox(16, 'Fehler', 'Leider hat das nicht geklappt. Der Vorgang wurde abgebrochen. Bitte ziehen Sie erneut die PFX Datei in das Fenster!', Default, $hMainGui)
            EndIf
        WEnd
    EndFunc
    
    
    Func _GUILoop()
    Local $sFile, $szDrive, $SzDir, $szFname, $szExt, $iMsg
        While Sleep(10)
            $iMsg = GUIGetMsg()
            Switch $iMsg
                case $GUI_EVENT_CLOSE
                    GUIDelete($hMainGui)
                    Exit
                case $GUI_EVENT_DROPPED
                    If @GUI_DropId = $iInfoLabel Then
                        $sFile = @GUI_DragFile
                        _PathSplit($sFile, $szDrive, $szDir, $szFName, $szExt)
    ;~                     Consolewrite($szExt & @CRLF)
                        if Not _checkTyp($szExt) Then
                            MsgBox(16, 'Fehler', 'Falscher Dateityp (' & $szExt & ').' & _
                                         @CRLF & 'Fehler Info: ' & @extended, @extended, $hMainGui)
                            Return
    ;~                     Else
    ;~                         MsgBox(1, 'Erfolg', 'Richtiger Dateityp.', @extended, $hMainGui)
                        EndIf
    
                        If Not _handleFile($sFile) Then
                            Switch @error
                                case 4
                                    MsgBox(16, 'Fehler', 'Falsche Datei.' & _
                                                 @CRLF & 'Fehler Info: ' & @extended, @extended, $hMainGui)
                                case 1
                                    MsgBox(16, 'Fehler', 'Sie haben keine Datei gedropped, oder die Datei existiert nicht.' & _
                                                 @CRLF & 'Fehler Info: ' & @extended, Default, $hMainGui)
                                case 2
                                    MsgBox(16, 'Fehler', 'Das Passwort konnte nicht erfolgreich abgefragt werden.' & _
                                                 @CRLF & 'Fehler Info: ' & @extended, Default, $hMainGui)
                                case 3
                                    MsgBox(16, 'Fehler', 'Das Passwort war falsch, bitte noch mal versuchen ', Default, $hMainGui)
                                EndSwitch
                        Else
                            GUIDelete()
                            SplashTextOn('Herzlichen Glückwunsch', 'VPN Zertifikat wurde installiert, war doch einfach oder?', 300, 60, -1, -1, $DLG_NOTITLE)
                            Sleep(7000)
                            SplashOff()
                            ExitLoop
                        EndIf
                    EndIf
            EndSwitch
        WEnd
    EndFunc
    
    
    Func _checkTyp($sPath)
        If $sPath = '.pfx' Then
            Return True
        Else
            Return False
        EndIf
    EndFunc
    
    
    Func _handleFile($sFile)
    Local Const $sPassword = _getPassword()
        If Not FileExists($sFile) Then return SetError(1, 0, False) ;keine Datei gedroppt
        If @error Then return SetError(2, @extended, False)
        _makeCert($sFile, $sPassword)
        If @error Then return SetError(3, @error, False)
        return True
    EndFunc
    
    
    
    Func _getPassword()
    ;$inp = InputBox('Bitte geben Sie Ihr Passwort ein:', '', '', '*')
           Local $sPassword = InputBox('Sicherheit', 'Geben Sie das Passwort für das Zertifikat ein.', '', ' M20', Default, Default, Default, Default, Default, $hMainGui)
    
        If @error Then return SetError(1, @error, '')
        return $sPassword
    EndFunc
    
    
    
    Func _makeCert($sFile, $sPassword)
    Local $hProcess, $iError
    Local Const $sCmd = 'certutil -f -p ' & $sPassword & ' -user -importpfx "' & $sFile & '"'
    Local Const $iPID = Run(@ComSpec & ' /c ' & $sCmd, '', @SW_HIDE) ; use /k instead of /c to see commandline result
    
        If @error Then SetError(1, @error, False)
        $hProcess = _WinAPI_OpenProcess($PROCESS_QUERY_LIMITED_INFORMATION, 0, $iPID)
        If @error Then SetError(2, @error, False)
    
        While ProcessExists($iPID)
            Sleep(10)
        WEnd
    
        $iError = _WinAPI_GetExitCodeProcess($hProcess)
        _WinAPI_CloseHandle($hProcess)
        If $iError <> 0 Then SetError(3, $iError, False)
        return True
    EndFunc
    Alles anzeigen
  • CMD Aurfuf haut nicht hin

    • Moombas
    • 6. Februar 2023 um 10:27

    Meine Tipps werden wohl ignoriert... Zeile 34, Zeile 45,... weiter habe ich dann nicht mehr geschaut.

    Diese Stellen müssten auf Grund von Zeile 2 eigentlich auch schon Fehler auswerfen...

    Und casi4712 generell wird hier niemand als zu blöd abgestempelt aber ich frage mich nur manchmal ob jemand "beratungsresistent" ist.

  • CMD Aurfuf haut nicht hin

    • Moombas
    • 6. Februar 2023 um 08:54
    Zitat von Peter S. Taler

    Weil für alle Beteiligten, oftmals die verschachtelten Anführungszeichen in AutoIt ein Problem sind. Das sieht man hier im Forum an verschiedensten Beiträgen. Fehler immer an den Anführungszeichen. CMD Befehl in die Batch kopieren, und mal sehen ob er da läuft? Dauert ein paar Sekunden, und die Überraschung ist oftmals groß.

    Also empfiehlst du lieber den (aus meiner Sicht) unsinnigen Weg jemanden bei zu bringen, wie man das auslagert und wieder einließt anstatt ihm zu zeigen/beizubringen wie man es sicher richtig macht?

    Das man einen Befehl, einen Aufruf etc. immer erst mal (wenn möglich) außerhalb vom skript verifiziert (aller spätestens bei der Fehlersuche), setze ich voraus.

    Wichtiger ist denke ich, das man lernt, wie man solche Sachen sich "mal eben" in der Console oder einer msgbox/arraydisplay anzeigen kann, damit man die verwendeten Daten prüfen kann.

  • "​Super Bowl 2023​"

    • Moombas
    • 3. Februar 2023 um 14:52
    Zitat von Alina

    Wieso ist bei Euch nichts, was dich reizen würde und bezahlbar ist? Die Natur ist doch überall und spazieren gehen soll ja auch schon Sport sein.

    Weil mich das nicht reizen würde.

    Gleiches gilt für Radfahren (wenn es nur ums (stumpfe "im Kreis") Fahren geht; anders ist es für Erledigungen etc. von A nach B zu fahren)

    Baseball wäre was, passt aber leider von den Zeiten kaum, da ich nur jedes 2. Wochenende teilnehmen könnte.

    Bowling oder Kart z.B. (ob man das nun als Sport ansehen will überlasse ich jedem selber) ist auf dauer zu teuer. Mal nen Abend ja, aber nicht um das sinnvoll regelmäßig zu machen (mind. 1mal die Woche).

    Nur mal 2 Beispiele.

  • CMD Aurfuf haut nicht hin

    • Moombas
    • 3. Februar 2023 um 11:02

    Warum sollte man das machen?

    Das Einzige was aus meiner Sicht Sinniger wäre, wäre ein Runwait anstatt des Run.

    Das Runwait liefert den Exitcode des Aufrufs zurück und sollte damit verarbeitbar sein.

  • "​Super Bowl 2023​"

    • Moombas
    • 3. Februar 2023 um 09:46

    Football + Arbeitsschutz = Bubble Football :D

    Withigerweise gibt es nur Bubble Rugby aber kein Bubble American Football ^^

  • "​Super Bowl 2023​"

    • Moombas
    • 3. Februar 2023 um 09:15

    Sport schauen: Nein Danke. Einzige Ausnahme: Wenn es der eigene Nachwuchs ist.

    Dann lieber selber Sport treiben. Und bevoir jemand fragt: Nein dazu bin ich zu faul :rofl: bzw. hier ist nichts was mich persönlich reizen würde oder bezahlbar wäre || .

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™