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. horphi

Beiträge von horphi

  • Firefox 57.0.4 - FF.au3 noch funktionsfähig?

    • horphi
    • 26. Januar 2018 um 16:04

    Hey super, vielen Dank für die Infos. :)

    Den WebDriver schau ich mir mal näher an.

    Viele Grüße,

    horphi

  • Firefox 57.0.4 - FF.au3 noch funktionsfähig?

    • horphi
    • 26. Januar 2018 um 08:15

    Hallo zusammen,

    kann mir jemand sagen, ob die FF.au3 noch funktioniert?


    Man kann das FF Addon MozRepl nicht mehr installieren und somit hat man auch keine Schnittstelle mehr.

    Bzw. weiß ich nicht, ob es einen anderen Weg gibt im FF den HTML Code einer Seite auszulesen und Texteingaben in Feldern zu machen.

    DAnke und Gruß,

    horphi

  • Problem Datenbank und JSON

    • horphi
    • 18. Oktober 2017 um 13:53

    Danke BugFix und AspirinJunkie ,

    das probiere ich morgen gleich mal aus. :)


    VG

    horphi

  • Problem Datenbank und JSON

    • horphi
    • 18. Oktober 2017 um 08:30

    Hallo AspirinJunkie,

    danke für dein Feedback.

    Das Paket habe ich in meinem vorherigen Post eingefügt.

    SO kommen die Pakete aus dem Netzwerk.

    Meinst du, ich sollte das Paket einfach per Regex lesen, die ID herausfiltern und den Rest roh in die DB einfügen?

    VG

    horphi

  • Problem Datenbank und JSON

    • horphi
    • 16. Oktober 2017 um 20:44
    Zitat von AspirinJunkie

    Schon klar das es ein Timestamp ist.

    Die Frage ist nur was das mit der JSON-UDF zu tun hat.

    Anhand der Infos ist mir nicht klar was als Eingabedaten rein kommt, was raus kommt und wie es stattdessen aussehen soll.

    Edit horphi: habe mal versucht nachzuvollziehen was gemeint ist und bin dabei auf eine Rundungsproblematik durch StringFormat gestoßen.

    Hierbei wird aus 1430140978241 eine 1.43014e+12 gemacht.

    Habe daher nun die JSON_Generate-Funktion entsprechend angepasst.

    Um zu ergründen was es mit der von Dir erwähnten 1.50809e+12 auf sich hat benötige ich mehr Input.

    Alles anzeigen

    Hallo AspirinJunkie,

    vielen Dank für deine Anpassung. Klappt super. :)

    der 2. erwähnte Wert war ein Fehler von mir.

    Ich habe 2 Werte genannt Input und Output. Beide waren von unterschiedlichen Zeitpunkten. Es sind nicht die selben Werte.

    Mit der Anpassung klappt es sehr gut .

    Das kommt in meiner DB jetzt an.

    Code
    {
        "acceleration": null,
        "accelerationTS": 1508179014752,
        "batteryAlarm": null,
        "batteryAlarmTS": 1508179014752,
        "batteryVoltage": null,
        "batteryVoltageTS": 1508179014752,
        "buttonState": "notPushed",
        "buttonStateTS": 1508179014617,
        "color": "#FF0000",
        "configStatus": "NotStarted",
        "configStatusTS": null,
        "coordinateSystemId": null,
        "coordinateSystemName": null,
        "deviceType": "General",
        "group": "Named Tags",
        "id": "0000200103e3",
        "ioStates": [
            "low",
            "low",
            "low",
            "low"
        ],
        "ioStatesTS": 1508179014617,
        "lastAreaId": null,
        "lastAreaName": null,
        "lastAreaTS": 1508179014752,
        "lastButton2PressTS": null,
        "lastButtonPressTS": null,
        "lastPacketTS": 1508179014621,
        "name": "Named Tags_0292",
        "rssi": 4,
        "rssiCoordinateSystemId": "CoordSys001",
        "rssiCoordinateSystemName": null,
        "rssiLocator": "000000000007",
        "rssiLocatorCoords": [
            78.99,
            17.11,
            12
        ],
        "rssiTS": 1508178892165,
        "tagState": "default",
        "tagStateTS": 1508179014617,
        "tagStateTransitionStatus": "normal",
        "tagStateTransitionStatusTS": 1508179014617,
        "triggerCount": null,
        "triggerCountTS": 1508179014752,
        "txPower": -6,
        "txPowerTS": 1508179014617,
        "txRate": 1,
        "txRateTS": 1508179014617,
        "zones": null
    }
    Alles anzeigen

    Eine generelle Frage hätte ich noch.

    Wieviel Pakete dieser Art kann ich in einer Sekunde verarbeiten?

    HIntergrund: ich bekomme via UDP Datenpakete aus dem Netz und speichere diese in meiner DB.

    Stichwort IoT : es sind Bewegunsdaten von Sensoren.

    Dazu möchte ich gerne verstehen, wieviele Pakete pro Sekunde maximal ,ohne verluste, empfangen, aus Json umwandeln und in meiner MariaDB speichern kann, während mein UDPRecv den Port abhört.

    AutoIt
    While 1
            ; We are waiting for the string
            $sReceived = UDPRecv($iSocket, 9999)
    
            If $sReceived <> "" Then
                $o_Object = _JSON_Parse($sReceived)
                $s_Type = $o_Object.Item("id")
                $query2 = 'INSERT INTO `test`.`test` (`ID`, `JSONSTRING`) VALUES ('''& $s_Type & ''', ''' & _JSON_Generate($o_Object) & ''');'
                _MySQL_Real_Query($MysqlConn, $query2)
            EndIf
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idBtnStop
    
            EndSwitch
        WEnd
    Alles anzeigen

    Vielen Dank und Gruß,

    horphi

  • Problem Datenbank und JSON

    • horphi
    • 15. Oktober 2017 um 21:10

    Hallo @asprinjunkie,

    danke für deine tolle Arbeit.

    Solche UDF´s sind GOLD wert. :rock:

    EIne Frage habe ich dazu.

    Ich bekomme via UDP ein JSON Protokoll geliefert, fomatiere das und speichere es gleich als komplettes Paket in die SQL DB.

    Dabei ist mir der TimeStamp aufgefallen. Der wird anscheinend nicht richtig konvertiert...


    so sieht er in der SQL DB aus "positionTS": 1.50809e+12

    So sollte er aussehen: "positionTS": 1430140978241,

    Mach ich mit der JSON UDF was falsch?

    AutoIt
    While 1
            ; We are waiting for the string
            $sReceived = UDPRecv($iSocket, 9999)
            If $sReceived <> "" Then
                $o_Object = _JSON_Parse($sReceived)
                $s_Type = $o_Object.Item("id")
    ;~             ConsoleWrite("ID: " & $s_Type & @CRLF)
                $query2 = 'INSERT INTO `test`.`test` (`ID`, `JSONSTRING`) VALUES ('''& $s_Type & ''', ''' & _JSON_Generate($o_Object) & ''');'
                _MySQL_Real_Query($MysqlConn, $query2)
    ;~             ConsoleWrite(_JSON_Generate($o_Object) & @CRLF & @CRLF)
            EndIf
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idBtnStop
    
            EndSwitch
        WEnd
    Alles anzeigen

    VG

    horphi

  • Excel _Excel_RangeRead eine Zeile zu viel

    • horphi
    • 13. Oktober 2017 um 20:26

    Danke euch beiden.

    Das werde ich Montag genauer untersuchen. Im Prinzip habe ich mir schon gedacht, das die letzte Zeile benutzt sein muss.

    Ich dachte nur, dass ich eventuell bei dem setzen der Parameter was übersehen habe.

    VG

    horphi

  • Excel _Excel_RangeRead eine Zeile zu viel

    • horphi
    • 13. Oktober 2017 um 16:06

    Hallo zusammen,

    ich habe eine Frage zu _Excel_RangeRead.

    Ich exportiere Daten nach Excel, bearbeite sie und importiere wieder zurück, um die Daten anschließen in einer Textdatei zu ersetzen.

    Beim Import aus Excel ist am Ende immer eine leere Zeile drin, welche stört, da der Array mit Semikolon zu Text gewandelt wird.

    Die Leere Zeile auch drin, wenn ich einfach Export und gleich wieder import drücke, ohne die Exceldatei bearbeitet zu haben.

    Weiß jemand warum?


    AutoIt
    Func _ExcelImport()
        Global $aWorkBooks = _Excel_BookList()
        If $aWorkBooks[0][1] = '' Then
            MsgBox(1, 'Error', 'No Excel open')
            Return
        EndIf
        MsgBox(1, 'Excelimport', 'Do you want to import the current excelsheet and overwrite the CN file?' & @CRLF & $aWorkBooks[0][2] & '\' & $aWorkBooks[0][1])
        Local $aExcelImport
        $oExcel = _Excel_Open()
        $oWorkbook = _Excel_BookAttach($aWorkBooks[0][2] & '\' & $aWorkBooks[0][1])
        $aExcelImport = _Excel_RangeRead($oWorkbook, $oWorkbook.Activesheet, Default, 1);<<<<<<<<<<<<<<<<<<<<<<<<<
        $sExcelImport = $aExcelImport[1][0]
        _SearchString($sExcelImport)
        $aExtract = $aExcelImport
        _ArrayDisplay($aExtract)
        $aExtractOld = _ArrayExtract($ar, $extendAnfang, $extend - 1)
    ;~     _ArrayDisplay($aExtractOld)
        Local $sNewOp = _ArrayToString($aExtract, ';', 1)
        Local $sOldOp = _ArrayToString($aExtractOld, @CRLF, 1)
    ;~     _Replace($sOldOp, $sNewOp)
        MsgBox(0, 'Import complete', 'Data has been updated.')
    EndFunc   ;==>_ExcelImport
    Alles anzeigen

    VG

    horphi

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • horphi
    • 20. August 2017 um 19:43

    Hi,

    ich würde dann mit deiner Methode Dynamische Wertzuweisung die Property so lange anpassen, bis sie auf Null ist richtig? (Zeile 71)

    C
    #include <AutoItObject.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Global $__avButton[1] = [0]
    
    
    ;~ OnAutoItExitRegister('__Button_Exit')
    
    
    _AutoItObject_Startup()
    
    
    _GDIPlus_Startup()
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    $hGUI = GUICreate('', 600, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)
    
    
    GUICtrlSetResizing($hGUI, $GUI_DOCKLEFT + $GUI_DOCKTOP)
    
    
    $oButton = __Class_Button().Object
    $oButton.handle = $hGUI
    $oButton.text = 'Test'
    $oButton.left = 10
    $oButton.top = 10
    $oButton.width = 200
    $oButton.height = 50
    
    
    GUISetState()
    
    
    
    
    While GUIGetMsg() <> -3
    	$oButton.draw()
    	GetPosMouse()
    WEnd
    
    
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    $oButton = Null
    _GDIPlus_Shutdown()
    _AutoItObject_Shutdown()
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    Func __Class_Button()
    	Local $oClass = _AutoItObject_Class()
    	; PUBLIC
    	$oClass.AddProperty('handle')
    	$oClass.AddProperty('text')
    	$oClass.AddProperty('left')
    	$oClass.AddProperty('top')
    	$oClass.AddProperty('width')
    	$oClass.AddProperty('height')
    	$oClass.AddProperty('func')
    	$oClass.AddMethod('draw', '__Button_Draw')
    	$oClass.AddDestructor('__Button_Destructor')
    	; PRIVATE
    	$oClass.AddProperty('_call_', $ELSCOPE_PRIVATE) ; Für den ersten Aufruf der .draw() Methode
    	$oClass.AddProperty('_graphic_', $ELSCOPE_PRIVATE) ; Handle zu dem Grafik Objekt von einem Fenster Handle
    	$oClass.AddProperty('_bitmap_', $ELSCOPE_PRIVATE) ; Handle zu dem Bitmap in welches der Button gezeichnet wird
    	$oClass.AddProperty('_image_', $ELSCOPE_PRIVATE) ; Grafikkontext des Bitmaps um in dieser zu zeichnen
    	Return $oClass
    EndFunc   ;==>__Class_Button
    Func __Button_Draw($oSelf)
    	If Not $oSelf._call_ Then
    		$oSelf._call_ = True
    		$oSelf._graphic_ = _GDIPlus_GraphicsCreateFromHWND($oSelf.handle)
    		$oSelf._bitmap_ = _GDIPlus_BitmapCreateFromScan0($oSelf.width, $oSelf.height)
    		$oSelf._image_ = _GDIPlus_ImageGetGraphicsContext($oSelf._bitmap_)
    	EndIf
    	If $oButton.left > 0 Then
    		ConsoleWrite($oButton.left & @CRLF)
    ;~ 		$oClass.AddEnum('__Next__', '__Reset__')
    	EndIf
    	_GDIPlus_GraphicsClear($oSelf._image_, 0xFFFFFFFF) ; Clears a Graphics object to a specified color --> Farbe vom Object
    	_GDIPlus_GraphicsDrawRect($oSelf._image_, 0, 0, $oSelf.width - 1, $oSelf.height - 1) ; Draw a rectangle --> Umrandung vom Object
    	_GDIPlus_GraphicsDrawString($oSelf._image_, $oSelf.text, 20, 20) ; Draw a string --> schreibt den Text
    	_GDIPlus_GraphicsDrawImage($oSelf._graphic_, $oSelf._bitmap_, $oSelf.left, $oSelf.top) ;Draw an Image object --> Das Object wird erstellt
    EndFunc   ;==>__Button_Draw
    Func __Button_Destructor($oSelf)
    	_GDIPlus_GraphicsDispose($oSelf._image_)
    	_GDIPlus_BitmapDispose($oSelf._bitmap_)
    	_GDIPlus_GraphicsDispose($oSelf._graphic_)
    EndFunc   ;==>__Button_Destructor
    
    
    Func __Next__(ByRef $self, ByRef $count)
    	Local $asProperty[] = ['left', 'top']
    	Local $i, $oTmp
    
    
    	If $count = UBound($asProperty) Then
    		For $i = 0 To UBound($asProperty) - 1
    			$oTmp = Execute('$self.' & $asProperty[$i])
    			_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, $oTmp())
    		Next
    
    
    		Return SetError(1)
    	EndIf
    
    
    	$count += 1
    
    
    	Return Execute('$self.' & $asProperty[$count - 1])
    EndFunc   ;==>__Next__
    
    
    Func __Reset__(ByRef $self, $count)
    	Local $asProperty[] = ['left', 'top']
    	Local $i
    
    
    	For $i = 0 To UBound($asProperty) - 1
    		_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, _Enum_Object(Execute('$self.' & $asProperty[$i])))
    	Next
    EndFunc   ;==>__Reset__
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    Func _Enum_Object($value)
    	Local $oObject = __Class_Enum().Object
    	_AutoItObject_AddProperty($oObject, '__value__', $ELSCOPE_PRIVATE, $value)
    	Return $oObject
    EndFunc   ;==>_Enum_Object
    
    
    Func __Class_Enum()
    	Local $oClass = _AutoItObject_Class()
    	$oClass.AddMethod('__default__', '__Enum_Default__')
    	Return $oClass
    EndFunc   ;==>__Class_Enum
    
    
    Func __Enum_Default__($self, $value = Default)
    	$self.__value__ = ($value <> Default ? $value : $self.__value__)
    	Return $self.__value__
    EndFunc   ;==>__Enum_Default__
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    Func GetPosMouse()
    	Local $a = GUIGetCursorInfo()
    	If $a[0] < $oButton.width = 200 and $oButton.height = 50 Then
    		ConsoleWrite("> " & $a[0] & @CRLF)
    		ConsoleWrite("> " & $a[1] & @CRLF)
    	EndIf
    	Sleep(500)
    EndFunc   ;==>GetPosMouse
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    Alles anzeigen

    Gruß

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • horphi
    • 19. August 2017 um 18:54

    Hallo @Yjug,

    danke für dein Tutorial, macht OOP sehr verständlich. :)

    Allerdings fehlt mir noch ein gedanklicher Schritt, um die Box zu bewegen.
    Frage ich permanent die Position der Box ab und ändere die property, oder hat die Box keinen x/Y Wert und liegt auf einem 2. Layer auf ?

    Wie soll sich die Box bewegen:

    1. durch drag & drop mit der Maus
    2. wenn ich die Box loslasse, soll sie sich alleine in die obere linke Ecke bewegen

    Danke und Gruß,

    horphi

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • horphi
    • 8. August 2017 um 15:54

    Hallo,

    diese OOP Syntax ist ja echt Wahnsinn. :)

    Kann man im Autoit it auch eine Gui erstellen, in der der bewegliche Objekte sind?

    Sprich ein Quadrat liegt auf dem "Boden" der GUI und ich kann es mit der Maus nach oben ziehen. Wenn ich die Maus loslasse, würde es wieder auf den Boden fallen.

    VG

    horphi

  • Excel Formatierung auslesen

    • horphi
    • 28. Juli 2017 um 09:09

    ^^ ja ja....es kann so einfach sein...

    DANKE :klatschen:

  • Excel Formatierung auslesen

    • horphi
    • 28. Juli 2017 um 08:48

    Hallo Water,

    danke für die Antwort. Damit bekomme ich das Format.

    Wie kann ich das Format vorgeben? Ich möchte statt Standardformat --> Textformat in einem Range setzen.

    AutoIt
    $oExcel.Activesheet.Range("J:K").Select
    $sGetFormat = $oExcel.ActiveSheet.Range("J:K").NumberFormat = "@"


    VG

    horphi

  • Excel Formatierung auslesen

    • horphi
    • 27. Juli 2017 um 15:58

    Hi,

    in dem Thema wurde die Excelformatierung besprochen. Leider finde ich diese Funktion heute nicht mehr....

    Excel Formatierung auslesen

    Ist die umbenannt worden?

    Danke und Gruß,

    horphi

  • GUI Delete Column error

    • horphi
    • 24. Juli 2017 um 15:30

    Vielen Dank euch beiden.

    Funktioniert wunderbar. :)

  • GUI Delete Column error

    • horphi
    • 24. Juli 2017 um 10:33

    Hallo zusammen,

    wenn ich alle Spalten mit der For Schleife löschen möchte, bleibt immer eine übrig.

    Weiß jemand wieso? Von 0 bis letzter Spalte müsste doch alle löschen.... :?:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <MsgBoxConstants.au3>
    
    
    Example()
    
    
    Func Example()
        Local $idListview
    
    
        GUICreate("ListView Delete Column", 400, 300)
    
    
        $idListview = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
        GUICtrlCreateListViewItem("line1|data1|more1", $idListview)
        GUICtrlCreateListViewItem("line2|data2|more2", $idListview)
        GUICtrlCreateListViewItem("line3|data3|more3", $idListview)
        GUICtrlCreateListViewItem("line4|data4|more4", $idListview)
        GUICtrlCreateListViewItem("line5|data5|more5", $idListview)
        GUISetState(@SW_SHOW)
    
    
        MsgBox($MB_SYSTEMMODAL, "Information", "Delete Column")
        _GUICtrlListView_DeleteColumn($idListview, 1)
    
    
    	For $i = 0 To _GUICtrlListView_GetColumnCount($idListview)
    		_GUICtrlListView_DeleteColumn($idListview, $i)
    	Next
    
    
        ; Loop until the user exits.
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
    EndFunc   ;==>Example
    Alles anzeigen

    Danke und Gruß,

    horphi

  • 1D Array in 2D Array splitten

    • horphi
    • 22. Juli 2017 um 20:28

    326 ms für den gleichen Input. Vielen DANK!

  • 1D Array in 2D Array splitten

    • horphi
    • 22. Juli 2017 um 20:05

    Sach mal, da bin ich ein paar Stunden auf der Fähre und ihr fangt an hier sowas zu zaubern... WOW. :)

    Vielen Dank. :thumbup:

    Die probier ich gleich mal aus.

    Viele Grüße,

    horphi

  • 1D Array in 2D Array splitten

    • horphi
    • 22. Juli 2017 um 09:53

    Hallo Oscar,

    also brauche ich gar kein ReDim?

    VG

  • 1D Array in 2D Array splitten

    • horphi
    • 21. Juli 2017 um 21:40

    Hallo,

    ich benutzte diese Funktion zum Arraysplit.

    Allerdings benötigt sie sehr viel Zeit. Für 3000 Zeilen (aus einem 1D Array werden ~55 Reihen 2D Array erstellt) ca. 2,5 Minuten...

    Kann man den Split noch beschleunigen?

    @@ Debug(618) : _StringSplit2D Start!: / Zeit:21:33:08
    @@ Debug(644) : _StringSplit2D END!: / Zeit:21:35:29

    AutoIt
    Func _StringSplit2D(ByRef $sString, $sDelim = "|", $sDelim2 = ";") ; splittet auch ARRAYS
    	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _StringSplit2D Start!:  ' & ' / Zeit:' & _NowTime() & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    	If IsString($sString) Then
    		$aTmp = StringSplit($sString, $sDelim, 2)
    	ElseIf IsArray($sString) Then
    		If UBound($sString, 0) > 1 Then Return SetError(1)
    		$aTmp = $sString
    	Else
    		Return SetError(1)
    	EndIf
    	Local $iStart = 0
    	If $aTmp[0] = UBound($aTmp) - 1 Then $iStart = 1
    	Local $aRet[1][1]
    	For $i = $iStart To UBound($aTmp) - 1
    		$aSplit = StringSplit($aTmp[$i], $sDelim2, 2)
    		If $i = UBound($aRet) - 1 Then
    			ReDim $aRet[UBound($aTmp) + 1][UBound($aRet, 2)]
    		EndIf
    		For $x = 0 To UBound($aSplit) - 1
    			If $x = UBound($aRet, 2) - 1 Then
    				ReDim $aRet[UBound($aRet)][UBound($aSplit)]
    			EndIf
    			$aRet[$i + 1][$x] = $aSplit[$x]
    		Next
    	Next
    ;~ 	$aRet[0][0] = UBound($aRet) - 1
    ;~ 	$aRet[0][1] = UBound($aRet, 2)
    	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _StringSplit2D END!:  ' & ' / Zeit:' & _NowTime() & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    	Return $aRet
    EndFunc   ;==>_StringSplit2D
    Alles anzeigen

    Danke und Gruß,

    Horphi

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™