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

Beiträge von limette

  • Keys aus einer ini auslesen und vergleichen

    • limette
    • 30. August 2008 um 17:47
    Zitat von laku

    gibt es nun eine möglichkeit gleiche zahlen zu finden und auszugeben?


    Also für mich heißt das nicht, dass er doppelte Einträge löschen, sondern wissen wil,
    welche Keys (1,2,3,4,...) denselben Wert haben.
    _Array2DDblDel hört sich nach löschen an, ich kenn die Funktion allerdings nicht und kann
    daher nicht beurteilen, wie sie funktioniert und was sie ausgibt.
    Daher nochmal mein eigener Code dazu ;)

    Dieser Code:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $ret = _IniGetMultiOcc( 'n.ini', 'temp' )
    _ArrayDisplay( $ret )

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

    ; Name...........: _IniGetMultiOcc
    ; Description ...: Überprüft die Sektion einer Ini auf mehrere Vorkommen desselben Wertes
    ; Syntax.........: _IniGetMultiOcc( $ini_path, $ini_section )
    ; Parameters ....: $ini_path = Pfad zur Ini
    ; $ini_section = Zu lesende Sektion
    ; Return values .: Success - Gibt eine Zweidimensionale Array zurück:
    ; $array[x][0] = Wert
    ; $array[x][1] = Keys der Ini mit diesem Wert, getrennt durch ','
    ; Failure - 0, sets @error to 1
    ; Author ........: limette

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

    ; Note: Endlich hab ich auch mal einen Grund eine Beschreibung anzufügen xD
    ; Irgendwie. Sinnlos. - kannste löschen ;)
    Func _IniGetMultiOcc( $ini_path, $ini_section )
    Local $ini = IniReadSection( $ini_path, $ini_section )
    If @error Then Return SetError( 1, 0, 0 )
    Local $com[1][2]
    Local $a = 0, $p, $pi, $i, $j, $c, $found

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

    For $i = 1 To $ini[0][0]
    $p = False
    For $pi = 0 To UBound( $com ) -1
    If $com[$pi][0] = $ini[$i][1] Then ;Eintrag bereits in $com enthalten
    $p = True
    ExitLoop
    EndIf
    Next
    If Not $p Then ;Wenn Eintrag noch nicht enthalten:
    For $j = 1 To $ini[0][0] ;Gehe alle Werte durch
    If $ini[$i][1] = $ini[$j][1] And $ini[$i][1] <> '' And $i <> $j Then ;Wenn der Wert gleich ist, aber nicht dasselbe Element
    For $c = 0 To UBound( $com ) -1
    If $com[$c][0] = $ini[$i][1] Then ;Check, ob inzwischen ein Eintrag angelegt wurde
    If Not StringInStr( $com[$c][1], $i ) Then $com[$c][1] &= ',' & $i ;adden, wenn nicht enthalten
    If Not StringInStr( $com[$c][1], $j ) Then $com[$c][1] &= ',' & $j ; - " -
    $p = True ;Merke: es existiert bereits ein Eintrag
    ExitLoop
    EndIf
    Next
    If Not $p Then ;Wenn keiner existiert:
    $com[$a][0] = $ini[$i][1]
    $com[$a][1] = $i & ',' & $j ;lege einen an.
    $a += 1
    ReDim $com[$a+1][2]
    $p = True
    EndIf
    EndIf
    Next
    If Not $p Then ;Wenn nach allen Durchgängen für das eine $i immernoch kein Eintrag existiert, gibt es $i nur 1x und wird hier hinzugefügt
    $com[$a][0] = $ini[$i][1]
    $com[$a][1] = $i
    $a += 1
    ReDim $com[$a+1][2]
    EndIf
    EndIf
    Next
    ReDim $com[UBound( $com )-1][2]
    Return $com
    EndFunc ;==> _IniGetMultiOcc

    [/autoit]


    Gibt bei dieser Ini

    Spoiler anzeigen
    Zitat von ini


    [temp]
    1=3120528
    2=3120528
    3=2932864
    4=1252784
    5=3120528
    6=2932864
    7=1252784
    8=3120528
    9=1252784
    10=1252784
    11=4465783
    12=3120528

    Alles anzeigen


    das hier aus

    Spoiler anzeigen
    Zitat von Ausgabe


    [0] | 3120528 | 1,2,5,8,12
    [1] | 2932864 | 3,6
    [2] | 1252784 | 4,7,9,10
    [3] | 4465783 | 11

    Ich denke das sind Wertem mit denen man arbeiten kann.
    Hoffe geholen zu haben ;)

    mfg limette

    Edit: Streich den Monstercode da oben. Geht viiieeel einfacher x)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $arr = _IniGetMultiOcc( 'n.ini', 'temp' )
    _ArrayDisplay( $arr )

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

    Func _IniGetMultiOcc( $sini, $isection )
    FileDelete( @TempDir & '\temp.ini' )
    $ini = IniReadSection( $sini, $isection )
    If @error Then Return SetError( -1, 0, 0 )
    For $i = 1 To $ini[0][0]
    $wr = IniRead( @TempDir & '\temp.ini', 'temp', $ini[$i][1], '' )
    If $wr <> '' Then $wr &= ','
    $wr &= $ini[$i][0]
    IniWrite( @TempDir & '\temp.ini', 'temp', $ini[$i][1], $wr )
    Next
    Return IniReadSection( @TempDir & '\temp.ini', 'temp' )
    EndFunc

    [/autoit]
  • Habe ein Problem mit dem Befehl InetGet

    • limette
    • 30. August 2008 um 16:23

    Makros fragst du genau so ab wie Variablen.

    [autoit]

    MsgBox( 0, 'Uhrzeit', @HOUR & ':' & @MIN & ':' & @SEC )

    [/autoit]


    Das zB gibt dir die aktuelle Uhrzeit.
    Wobei der Wert von @SEC eben jede Sekunde wechselt, usw... ;)

    Bezogen auf InetGet:
    @InetGetBytesRead:

    Zitat von AutoIt Hilfe

    Während eines InetGet-Downloads gibt das die Zahl der gelesenen Bytes an. Es ist -1, wenn ein Fehler beim Download aufgetreten ist.

    mfg limette

  • Habe ein Problem mit dem Befehl InetGet

    • limette
    • 30. August 2008 um 14:26

    Vielleicht solltest du deinem Scipt auch sagen, wohin er das laden soll ?

    [autoit]

    InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe", @ScriptDir & '\autoit-v3-setup.exe')

    [/autoit]


    Außerdem kannst du dir noch die Rückgabe von InetGet ansehen & evtl mal
    @InetGetBytesRead überprüfen.

    mfg limette

  • Treeview unter c:\

    • limette
    • 30. August 2008 um 02:07

    Hm. Du könntest den Inhalt eines Startordners, zB C:\, in ein TreeView packen.
    Den einzelnen Items gibst du Dummy-SubItems.
    Auf den Klick auf ein Item setzt du dann eine Funktion, die den gewählten Ordner
    durchsucht, den Dummy löscht und die gefundenen Dateien als SubItems anzeigt &
    ihnen ebenfalls Dummy-SubItems gibt.
    Ist vll etwas kompliziert, aber möglich wärs doch ?

    Ansonsten hab ich noch eine stark vereinfachte Version anzubieten, allerdings mit
    ListView statt TreeView.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>

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

    Opt( 'GUIOnEventMode', 1 )
    Global $globe_folder = ''
    Global $list_items
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("OrdnerStrukturen", 703, 376, 193, 115)
    GUISetOnEvent( $GUI_EVENT_CLOSE, '_exit' )
    $list = GUICtrlCreateListView( '', 8, 40, 677, 313, BitOR($LVS_LIST,$LVS_SINGLESEL,$LVS_SHOWSELALWAYS))
    $Input1 = GUICtrlCreateInput(@ScriptDir & '\', 8, 8, 500, 21)

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

    $Menu = GUICtrlCreateContextMenu( $list )
    $MenuItemOpen = GUICtrlCreateMenuItem( 'Open', $list )
    GUICtrlSetOnEvent( -1, '_menu_open' )

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

    $Button1 = GUICtrlCreateButton("up", 608, 8, 78, 25, 0)
    GUICtrlSetOnEvent( -1, '_aufwaerts' )
    $button2 = GUICtrlCreateButton('ok', 520, 8, 78, 25, 0 )
    GUICtrlSetOnEvent( -1, '_reList' )
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _reList()

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

    While 1
    Sleep( 100 )
    WEnd

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

    Func _aufwaerts()
    If StringInStr( $globe_folder, '\', 0, 1 ) = StringInStr( $globe_folder, '\', 0, -1 ) Then Return
    $globe_folder = StringTrimRight( $globe_folder, StringLen( $globe_folder ) - StringInStr( $globe_folder,'\', 0, -2 ) )
    GUICtrlSetData( $Input1, $globe_folder )
    _reList()
    EndFunc

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

    Func _menu_open()
    $sel = _GUICtrlListView_GetSelectedIndices( $list )
    If $sel = '' Then Return
    $cur_sel = GUICtrlRead( $list_items[$sel] )
    If FileOpen( $globe_folder & $cur_sel, 0 ) <> -1 Then Return
    If (Not FileExists( $globe_folder & $cur_sel )) Then Return
    If StringRight( $cur_sel, 1 ) <> '\' Then $cur_sel &= '\'
    GUICtrlSetData( $Input1, $globe_folder & $cur_sel )
    _reList()
    EndFunc

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

    Func _reList()
    $folder = GUICtrlRead( $Input1 )
    If StringRight( $folder, 1 ) <> '\' Then $folder &= '\'
    If (FileOpen( $folder, 0 ) = -1) And (Not FileExists( $folder ) ) Then Return
    If FileOpen( $folder, 0 ) <> -1 Then Return
    GUICtrlSetData( $Input1, $folder )
    $globe_folder = $folder
    If StringRight( $globe_folder, 1 ) <> '\' Then
    Global $globe_folder = $globe_folder & '\'
    EndIf
    _GUICtrlListView_DeleteAllItems( $list )
    $dir = __files( $folder )
    Dim $list_items[UBound( $dir )-1]

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

    For $i = 0 To UBound( $dir ) -2
    $list_items[$i] = GUICtrlCreateListViewItem( $dir[$i+1], $list )

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

    $ch_open = FileOpen( $globe_folder & $dir[$i+1], 0 )
    If $ch_open <> -1 Then
    FileClose( $ch_open )
    Switch StringRight( $dir[$i+1], 4 )
    Case '.zip','.rar'
    If GUICtrlSetImage( $list_items[$i], @ProgramFilesDir & '\WinRar\Winrar.exe', 1 ) = 0 Then GUICtrlSetImage( $list_items[$i], 'shell32.dll', 1 )
    Case '.lnk'
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 30 )
    Case '.ini'
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 151 )
    Case '.htm', 'html', '.php'
    GUICtrlSetImage( $list_items[$i], @ProgramFilesDir & '\Internet Explorer\iexplore.exe', 1 )
    Case '.bat'
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 153 )
    Case '.wma', '.mp3', '.mp2', '.mov'
    GUICtrlSetImage( $list_items[$i], 'wmploc.dll', 732 )
    Case '.wmv', '.wma', '.mpg'
    GUICtrlSetImage( $list_items[$i], 'wmploc.dll', 736 )
    Case '.txt', '.log'
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 152 )
    Case '.exe','.ico'
    $ico = GUICtrlSetImage( $list_items[$i], $globe_folder & $dir[$i+1], 0 )
    If $ico = 0 Then
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 278 )
    EndIf
    Case '.dll'
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 154 )
    Case '.jpg','jpeg','.gif','.bmp'
    GUICtrlSetImage( $list_items[$i], 'shimgvw.dll', 3 )
    Case Else
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 1 );Unbekannter Typ
    EndSwitch
    Else
    GUICtrlSetImage( $list_items[$i], 'shell32.dll', 4 )
    EndIf
    Next
    EndFunc

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

    Func __files( $folder )
    FileChangeDir( $folder )
    Local $aret[1], $_i = 1
    $aret[0] = FileFindFirstFile( '*.*' )

    While 1
    $zw = FileFindNextFile( $aret[0] )
    If @error Then ExitLoop
    $_i += 1
    ReDim $aret[$_i]
    $aret[$_i-1] = $zw
    WEnd
    Return $aret
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]


    Vll kannst du damit ja etwas anfangen,
    wenn ich daran denke versuch ich mich vll mal am TreeView ^^

    mfg limette

  • IE Auf "link" klicken, der keinen Namen ud keine ID hat?

    • limette
    • 30. August 2008 um 01:27

    Ach, das ist so'n Ajax-Reloding-Krams :P
    Du willst also diese Liste angezeigt bekommen ?
    Setze einfach ans Ende von dem Code, den ich geposted habe,
    noch ein:

    [autoit]

    _IENavigate( $ie, 'javascript:getList();', 0 )

    [/autoit]


    Das ist der Aufruf der Funktion, die die Liste anzeigen lässt. Auch halt
    wieder via Javascript ;)

    limette

    Edit: Getestet & funktioniert ;)

    Edit2: Evtl musst du doch den Parameter '1' nehmen, also dass der zuende laden soll.
    Sonst arbeitet dein Script vll zu schnell weiter - wenn der deshalb wieder hängt kannst
    du es mit _IELoadWait versuchen oder manuell in einer Schleife abfragen, welchen Status
    der IE gerade hat ;) Wobei das eig auch die Funktionsweise von _IELoadWait ist, wenn ich
    nicht völlig falsch liege ^^

  • IE Auf "link" klicken, der keinen Namen ud keine ID hat?

    • limette
    • 29. August 2008 um 14:41

    Erstmal solltest du beim _IENavigate auf den js-Befehl den 'Wait'-Parameter auf 0 setzen ;)
    Und _IEFormElementGetObjByName ist immer so ne Sache, kp, das verwirrt mich immer ^^
    Habs etwas verändert, getestet, so funktionierts:

    [autoit]

    #include <ie.au3>
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk' )
    _IENavigate( $ie, "javascript:toggle_box('so_0');", 0 )
    Sleep( 2000 )
    ;sleep(5000)
    ;$oForm = _IEFormGetCollection ($IE);Holt die Bereiche -- limette: brauchste garnicht ^^
    ;sleep(1000)
    $oQuery = _IEGetObjById($ie, "nname") ;limette: holt dir das Element direkt über die ID. Übrigens auch 'nname' ;)
    _IEFormElementSetValue ($oQuery, 'AcerRoyal');fügt text2 ein

    [/autoit]


    limette

  • µit - August

    • limette
    • 29. August 2008 um 14:17
    Zitat

    Gewinner im Juli ist:
    Oscar


    Juli ? ;)

    Erstmal Herzlichen Glückwunsch, Oscar ! =)

    limette

    Note: Persönliches Ziel erreicht - einziges Prog ohne Bugs. *yes!*

  • Keys aus einer ini auslesen und vergleichen

    • limette
    • 28. August 2008 um 16:26

    Wahrscheinlich ist das jetzt viel zu kompliziert,
    aber ich habs mal versucht ^^
    Also in $com[$x][0] steht die Zahl, in [$x][1] die Ini-Keys, die diese Zahl als Wert haben.
    Hoffe das funzt ;)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $ini = IniReadSection( 'n.ini', 'temp' )
    If @error Then Exit
    Dim $com[1][2]
    $a = 0
    For $i = 1 To $ini[0][0]
    For $j = 1 To $ini[0][0]
    If $ini[$i][1] = $ini[$j][1] And $ini[$i][1] <> '' And $i <> $j Then
    $found = False
    For $c = 1 To UBound( $com ) -1
    If $com[$c][0] = $ini[$i][1] Then
    If Not StringInStr( $com[$c][1], $i ) Then $com[$c][1] &= ',' & $i
    If Not StringInStr( $com[$c][1], $j ) Then $com[$c][1] &= ',' & $j
    $found = True
    EndIf
    Next
    If Not $found Then
    $com[$a][0] = $ini[$i][1]
    $com[$a][1] = $i & ',' & $j
    $a += 1
    ReDim $com[$a+1][2]
    EndIf
    EndIf
    Next
    Next
    _ArrayDisplay( $com )

    [/autoit]


    mfg limette

  • IE Auf "link" klicken, der keinen Namen ud keine ID hat?

    • limette
    • 28. August 2008 um 15:17
    [autoit]


    #include <IE.au3>
    $ie = _IECreate( 'http://www.dreamlevel.de/suche.dl#sbk' )
    _IENavigate( $ie, "javascript:toggle_box('so_0');" )

    [/autoit]

    ;)
    limette

  • IE Auf "link" klicken, der keinen Namen ud keine ID hat?

    • limette
    • 26. August 2008 um 18:25

    Also bei mir funktioniert der direkte Aufruf,
    via:
    javascript:toggle_box('so_0');

    limette ;)

  • Gui im "Windows-Explorer-Syle" erstellen

    • limette
    • 26. August 2008 um 18:22

    Achso oO
    Sah für mich so nach 'nem normalen Menu aus ^^
    Gut gut, wieder was gelernt =)

  • Gui im "Windows-Explorer-Syle" erstellen

    • limette
    • 26. August 2008 um 15:22

    Hö ? Warum denn Rebar, Toolbar & Statusbar ? ;)

    Zitat

    die Gui soll am oberen Rand eine Zeile mit Datei,Berarbeiten,...,Hilfe haben.


    Hört sich für mich nach nem GuiCtrlCreateMenu an ;)

    limette

  • µit - August

    • limette
    • 25. August 2008 um 14:53

    Du kannst das ja so in der Art machen:
    (Pseudo-Code)

    For $i = 1 To 3
    $titel = _GetTitel()
    If IsArray( $titel ) Then ExitLoop
    Next
    If Not IsArray( $titel ) Then $titel = 'unbekannt'

    o.ä. ;)

    limette

  • µit - August

    • limette
    • 24. August 2008 um 20:24

    Du kannst ja auch bequem sein und einfach prüfen,

    If Not IsArray( .. ) Then $titel = 'unbekannt'

    o.ä., bin grad nicht in deinem Script ;)

    mfg limette

  • µit - August

    • limette
    • 24. August 2008 um 16:24

    Was ?! "graphisch noch verbesserbar" ?!
    Das ist Top ! :cursing:
    ...
    </ironie>

    Nee, graphisch ist da wie gesagt garnix ^^
    Und die Bedienung - hm. Iwie bin ich nicht auf die Idee
    gekommen, für die Dateien ein Menu zu machen oO
    Das hätte alles vereinfacht... x)

    Aber mein Primärziel habe ich erreicht:

    Zitat

    keine Bugs, ... :)


    ;)

    mfg limette

  • µit - August

    • limette
    • 23. August 2008 um 20:27

    Also wenn ich das Script in nem
    Pfad ohne Leerzeichen habe läufts...
    :|
    Ach, aber die Musik stoppt schon nach ca. 10 Sekunden, muss das so ?
    Außerdem fehlen mir persönlich hier die Schwierigkeitsgerade ;)

    limette

    @fabs: Hast du die Dll in den 'dll'-Ordner gepackt ?

  • µit - August

    • limette
    • 23. August 2008 um 20:15

    Naja sowas ist doch Mist ^^
    Dann fällt ja der ganze Desktop flach - denn:
    "Dokumente und Einstellungen" ... :P
    Was hat das mit den Leerzeichen eigentlich auf sich ?
    Die sollte man in Ordner & Dateinamen verbieten ^^

  • Barcode scanner & hotkkeyset

    • limette
    • 23. August 2008 um 17:18

    Das meinte ich ja ;)

    Zum MultiThreading:
    Steht auf der "Not on the ToDo list", und ich hab auch nur was
    von nem 'Pseudo-Multithreading' gehört .. ;)
    Und das mit dem CallBackRegister-Krams und der Kernel32.dll...
    hm, naja. ^^ Ist ja nur halb AutoIt, - DllCall halt ^^

    limette

    Edit Spider: Jo, es ist mit AutoIt möglich eine externe Funktion aufzurufen. also ist es mit AutoIt möglich :D

    Edit limette: Ne externe Funktion aufrufen kann ja jeder x) Naja gut, dann ist es halt mit AutoIt möglich, aber
    nicht in AutoIt ... ;)

  • µit - August

    • limette
    • 23. August 2008 um 17:12

    Hmm.
    Also Oscar, mit deinem Script kann ich echt nicht viel anfangen. ;)
    Es geht gleich damit los, dass das Objekt erst garnicht erstellt
    werden kann....
    Die Überprüfung habe ich dann umgangen, um zumindest das
    Design zu sehen. Das ist dir allerdings echt gut gelungen ! :D
    Bloß die Hotkeys .. hmm.. oO
    War nebenbei mit nem Kumpel am Chatten als ich das Prog
    getestet habe.
    Du kannst dir vorstellen, was da für ein Kauderwelsch angekommen ist,
    da Leertaste, S, D und F schon belegt waren .. ;)

    Meine Meinung:
    Grafik 4/5
    Funktionalität ----

    Zu fabs:
    =)
    2 Mankos gefunden, einmal dieses "Subscript used with Non-Array variable",
    wie du schon sagtest, und:
    In der Suche nach Musik-Dateien werden keine Unterordner mit einbezogen.
    Schade. =)
    Ansonsten gefällt mir das echt super :D
    Grafisch nicht zu übertrieben, und das Konzept, dass man sich während dem
    Hören entscheiden muss... Klasse Idee =)

    Meine Meinung:
    Grafik: 5/5
    Funktionalität: 2.5/5
    ;)

    Aber ich darrf ja nicht entscheiden x)
    Sollte nur mal n kleines Feedback sein =)

    Btw: Haben nur wir 3 mitgemacht ? oO

    mfg limette

  • Barcode scanner & hotkkeyset

    • limette
    • 23. August 2008 um 15:52

    Vielleicht ist es schneller,
    wenn du eine kleine GUI schon vorab erstellst
    und diese nurnoch anzeigen lassen und den Focus
    setzen musst.. ?

    funkey
    zu deiner Signatur sag ich nur:
    Multi-Threading ;)

    limette

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™