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

Beiträge von ytwinky

  • GUICtrlCreateEdit

    • ytwinky
    • 8. Mai 2006 um 11:31

    Ich weiß nicht, ob ich dich richtig verstanden habe, aber wie wäre es, wenn
    du das gerade Aktuelle am Anfang einfügst und nur bei Bedarf zu den anderen
    Einträgen scrollst?
    Gruß
    ytwinky

  • Kudaz 1901

    • ytwinky
    • 7. Mai 2006 um 10:12
    Zitat

    Original von geRRus
    leider kann er kein Autoit
    Hier mal die vollständige liste was er alles kann.


    [list=1]
    C/C++ , CA-Clipper, Cascading Style Sheet , COAS Product Manager Report, COBOL , CORBA IDL , Fortran, Foxpro, Gembase, GW-TEL , HP48, HTML, INI File , Inno Setup Script, Java , JavaScript, Modula 3, MS VBScript , MS-DOS Batch , Object Pascal, Perl, PHP , Python, SQL, Standard ML , Structured Text, Tcl/Tk, TeX, Visual Basic , x86 Assembly , XML , Modelica, Semanta Data Dictionary, Galaxy, Cache Object Script, KiXtart, Haskell, Unreal, Progress, UNIX Shell Script, C#, 68HC11, Assembler, AWK, Baan 4GL, Borland Forms, URI, ADSP21xx, Ruby, Resource Script, SynGen Msg, LEGO LDraw, DOT Graph Drawing Description language, Eiffel .
    [/list=1]

    Zwei Sachen haben mich bewogen, das Teil wieder zu entfernen:
    -es ist auf Englisch(Sprachdateien habe ich nicht gefunden)
    -fehlt die Anbindung an die AutoIt-Hilfe
    (ist aber kein Wunder, da er, wie geRRus gesagt hat, eh kein AutoIt kann)
    Bevor ich mich durch die ganze englische Geschichte wühle, um für andere Sprachen eine Sprachdatei anzulegen, bleibts eben..
    Fazit: Kein Argument gegen SciTE 1.68 :D
    Gruß
    ytwinky

  • Wer darf hier wessen Beiträge bearbeiten?

    • ytwinky
    • 6. Mai 2006 um 13:28

    Ist ja gut, ist ja gut..
    Es ist nur blöd, wenn ich versuche 'Schreibfehler' in meinen Skripten zu berichtigen und da steht auf einmal jemand außer mir als letzter Bearbeiter.
    Da muß ich dann doch erst mal schauen, was denn da passiert ist.
    Gerade jetzt, wo die ForenSoftware nicht 100%ig läuft ist das sehr wichtig.
    Denn wenn ein Skript, das läuft, durch die ForenSoftware verfälscht wird,
    heißt es hinterher der Autor hötte was falsch gemacht..
    Gruß
    ytwinky

  • Richtungswinkel und Entfernung

    • ytwinky
    • 6. Mai 2006 um 13:19
    Zitat
    Code
    Func IIF($Cond, $TrueVal, $FalseVal)
    	Local $NoYes[2]=[$FalseVal, $TrueVal]
    	Return $NoYes[$Cond]
    EndFunc

    Der Aufruf von [$Cond] liefert 0(also False) bzw. Not 0(also True) und ist damit korrekter Index für das Array $NoYes.
    Dieser Wert wird dann zurückgeliefert. Das Besondere ist halt, daß mein IIF ohne IF's auskommt..
    Gruß
    ytwinky

  • Wer darf hier wessen Beiträge bearbeiten?

    • ytwinky
    • 5. Mai 2006 um 16:50

    Wieso darf gunfood meine Beiträge bearbeiten?
    Wieso hält er es nicht für nötig, kenntlichzumachen, das er was/nix geändert hat?
    Gruß
    ytwinky

  • Scriptomatic.au3

    • ytwinky
    • 4. Mai 2006 um 20:46

    Ja, ich..
    Lade dir das Skript nochmal runter und probiers aus..
    Alternativ kannste auch den fehlenden '\' selbst ergänzen.
    Frage mich jetzt bitte nicht, wieso der '\' auf einmal fehlt..
    Das Skript lief bei mir auch nicht, aber das Original natürlich..
    Deshalb gings auch so schnell ;)
    [Edit]
    Ooops, das ist ja gar nicht so einfach
    $objWMIService=ObjGet("winmgmts:\\" &$strComputer &"\root\CIMV2")
    Alarm:Da ist ein Fehler im Highlighter!
    Ich habe jetzt ZWEIMAL das fehlende '\' in der $objWMIService..-Zeile
    berichtigt, aber jedesmal Streicht die Zensur eines weg. Ich denke, das sollte schnell berichtigt werden!!!!!
    Gruß
    ytwinky

  • Erste Hilfe

    • ytwinky
    • 3. Mai 2006 um 20:43

    In der WinFaq von Frank Ullrich(Registry Wizard) sind auch alle Befehle aufgelistet, aber
    -alle auf einer Seite
    -in übersichtlicher Tabellenform
    Das ist besser, da auch OffLine zu gebrauchen..
    http://www.winfaq.de/faq_html/tip0564.htm
    Gruß
    ytwinky

  • Script-o-matic erweitern

    • ytwinky
    • 2. Mai 2006 um 21:36
    Zitat

    Original von gtaspider
    Aber was bring dir das? Da es doch sowieso in AutoIt geschrieben wird und der Source sowieso kleiner ist als die exe.

    Genau, Scriptomatic ist kein Programmstarter, sondern erledigt lediglich die notwendigen Tipparbeiten für
    das Erstellen eines WMI-Aufrufs. Da ich auch ein wenig mit Scriptomatic zu tun
    habe, sei mir diese Bemerkung gestattet :D
    Gruß
    ytwinky

  • Postrekord

    • ytwinky
    • 2. Mai 2006 um 20:56

    Hmmmm,
    wenn ich ehrlich sein soll gefällt mir die Statistik von GunFood besser :lol:
    Gruß
    ytwinky

  • Bildschirmschoner

    • ytwinky
    • 1. Mai 2006 um 17:41

    Diese Version ist nicht nur 'schöner' sondern auch 'richtiger'.
    Die Anmerkung von geRRus ist noch nicht berücksichtigt..
    ..und SciTe meckert nicht..
    Gruß
    ytwinky

    Code
    Opt("TrayIconHide", 1)
    If $CmdLine[0]=0 Then Exit
    Switch StringLower(StringLeft($CmdLine[1], 2))
    	Case "/p"
      	Exit
    	Case "/c"
        Msgbox(0,"Einstellungen","Hier kann man ein paar Sachen einstellen")
      ; Hier kommt rein was man einstelln können soll
        Exit
    	Case "/s"
      	MsgBox(0, "Start", "Hier wird das Programm gestartet für den Bildschirmschoner")
      	;Hier muss der Aufruf für den Bildschirmschoner rein
    	Case Else
      	MsgBox(0, "Ooops", "Diese Option wird noch nicht ausgewertet:" &$CmdLine(1))
    		Exit
    EndSwitch
    
    
    HotKeySet ("{esc}", "MyExita")
    $maus = MouseGetPos() ;wo ist die Maus
    While 1
      Sleep(500)
      $maus2=MouseGetPos()
      If $maus[0]<>$maus2[0] Then
        MyExita()
      EndIf
      If $maus[1]<>$maus2[1] Then
        MyExita()
      EndIf
      Select
        Case _IsPressed('08')
          MyExit("BACKSPACE")
        Case _IsPressed('10')
          MyExit("SHIFT")
        Case _IsPressed('11')
          MyExit("CTRL")
        Case _IsPressed('12')
          MyExit("ALT")
        Case _IsPressed('20')
        	MyExit("SPACE")
        Case _IsPressed('21')
        	MyExit("PGUP")
        Case _IsPressed('22')
        	MyExit("PGDOWN")
        Case _IsPressed('23')
        	MyExit("END")
        Case _IsPressed('24')
        	MyExit("HOME")
        Case _IsPressed('25')
        	MyExit("LEFT ARROW")
        Case _IsPressed('26')
        	MyExit("UP ARROW")
        Case _IsPressed('27')
        	MyExit("RIGHT ARROW")
        Case _IsPressed('28')
        	MyExit("DOWN ARROW")
        Case _IsPressed('2c')
        	MyExit("PRNTSCRN")
        Case _IsPressed('2d')
        	MyExit("INSERT")
        Case _IsPressed('2e')
        	MyExit("DEL")
        Case _IsPressed('30')
        	MyExit("0")
        Case _IsPressed('31')
        	MyExit("1")
        Case _IsPressed('32')
        	MyExit("2")
        Case _IsPressed('33')
        	MyExit("3")
        Case _IsPressed('34')
        	MyExit("4")
        Case _IsPressed('35')
        	MyExit("5")
        Case _IsPressed('36')
        	MyExit("6")
        Case _IsPressed('37')
        	MyExit("7")
        Case _IsPressed('38')
        	MyExit("8")
      	Case _IsPressed('39')
        	MyExit("9")
    		Case _IsPressed('41')
        	MyExit("a")
        Case _IsPressed('42')
        	MyExit("b")
    	  Case _IsPressed('43')
    	  	MyExit("c")
    	  Case _IsPressed('44')
    	  	MyExit("d")
    	  Case _IsPressed('45')
    	  	MyExit("e")
    	  Case _IsPressed('46')
    	    MyExit("f")
    	  Case _IsPressed('47')
    	    MyExit("g")
    	  Case _IsPressed('48')
    	    MyExit("h")
    	  Case _IsPressed('49')
    	    MyExit("i")
    	  Case _IsPressed('4a')
    	    MyExit("j")
    	  Case _IsPressed('4b')
    	    MyExit("k")
    	  Case _IsPressed('4c')
    	    MyExit("l")
    	  Case _IsPressed('4d')
    	    MyExit("m")
    	  Case _IsPressed('4e')
    	    MyExit("n")
    	  Case _IsPressed('4f')
    	    MyExit("o")
    	  Case _IsPressed('50')
    	    MyExit("p")
    	  Case _IsPressed('51')
        	MyExit("q")
    	  Case _IsPressed('52')
    	    MyExit("r")
    	  Case _IsPressed('53')
    	    MyExit("s")
    	  Case _IsPressed('54')
    	    MyExit("t")
    	  Case _IsPressed('55')
    	    MyExit("u")
    	  Case _IsPressed('56')
    	    MyExit("v")
    	  Case _IsPressed('57')
    	    MyExit("w")
    	  Case _IsPressed('58')
    	    MyExit("x")
    	  Case _IsPressed('59')
    	    MyExit("y")
    	  Case _IsPressed('5a')
    	    MyExit("z")
    	 EndSelect
    Wend
    
    
    Func _IsPressed($hexKey)
      Local $aR
      $hexKey = '0x' & $hexKey
      $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey)
      Return Abs($aR[0]<>0)
    EndFunc
    
    
    Func MyExit($datenfuerdietonne)
    	MyExita()
    EndFunc
    
    
    Func MyExita()
    	;hier muss das Programm geändert werden
    	Exit
    EndFunc
    Alles anzeigen
  • Art2Bmp - IrfanView kanns nicht..

    • ytwinky
    • 1. Mai 2006 um 10:10
    Zitat

    Original von peethebee
    Hallo,

    habe mal kurz in den Code geschaut:

    Code
    EnvGet("Tmp")

    Ich glaube, dass es besser wäre, das so zu machen (AutoIt-Makro) :

    Code
    @TempDir

    Ich kenne es nämlich von der Path-Variablen, dass da evtl. mehrere Pfad drin stehen. Dann würde das SChreiben dahin natürlich nicht funktionieren. Bei dem Makro kümmert sich AutoIt darum, den passenden Pfad herauszufinden.peethebee


    Witzbold! Dreimal darfst du raten, wo der Unterschied ist..
    EnvGet("Tmp") liest die Umgebungsvariable "Tmp" aus. Möglicherweise zeigt die auf ein anderes Verzeichnis als @TempDir, das sollte aber eigentlich egal sein..
    Btw: In %Tmp% kann immer nur EIN Pfad stehen!!
    Gruß
    Ytwinky

  • Art2Bmp - IrfanView kanns nicht..

    • ytwinky
    • 1. Mai 2006 um 10:05

    Es gibt auch größere Bilder als Test.Art und (machen wir uns nix vor) .Bmp ist nicht gerade das platzsparendste Format. Deshalb wird das umgeformte Bild
    angezeigt, damit der Benutzer es abspeichern kann, wie er möchte und wo er möchte..
    Danach soll der Benutzer die Möglchkeit haben, das nicht mehr benötigte Bild ggfs. zu löschen.
    Bei 'Abbrechen' bleibt das Bild erhalten..
    Bei 'Nein' gibts eine kleine 'Nag'-Schleife(bei 3mal ist Schluß)
    Bei 'Ja' wird das Bild gelöscht.
    Bei mir funktionierts, irgendetwas bei dir stimmt nicht :lol:
    Gruß
    ytwinky

  • Art2Bmp - IrfanView kanns nicht..

    • ytwinky
    • 30. April 2006 um 23:48

    Was hastn du für ne Windows-Version?
    Es gibt keinen Tmp-Ordner?
    Ich habe extra den genommen, weil da die wenigsten Schwierigkeiten mit
    Zugriffsbeschränkungen zu erwarten sind..
    Gruß
    ytwinky

  • SciTE und GUI

    • ytwinky
    • 30. April 2006 um 23:35

    Kurze Antwort: Nein
    Mein erstes GUI
    Bevor ich aber in Koda die ganzen Sachen zuammengeklickt habe, bin ich,
    zumindest was kleinere Sachen angeht, so schneller..
    Irgendwo habe ich auch ein Skript gepostet, wo ich geschrieben habe, was
    die manuelle Überarbeitung eines Koda-Skriptes bringt, aber ich finds grad nicht..
    Gruß
    ytwinky

  • Art2Bmp - IrfanView kanns nicht..

    • ytwinky
    • 30. April 2006 um 23:26

    Hi,
    diesmal habe ich mich um ein eigentlich altes Problem gekümmert.
    Aus der Zeit, in der ich noch AOL-Mitglied war, sind noch etliche
    Downloads vorhanden. Da sind natürlich auch Bilder dabei..
    Diese kann IrfanView leider nicht anzeigen, wenn sie im .Art-Format
    sind. Sie sind's aber(teilweise..) ;(
    Irfan rät: "Try with Internet Explorer"
    ytwinky rät: "Try with Art2Bmp.au3!"
    Zwar sollte das Skript auch mehrere Dateien umformen, das wird
    aber sehr schnell nervig. Bin mal gespannt auf Verbesserungs-
    vorschläge, so denn jemand welche haben sollte :rofl:
    Natürlich geht das Ganze auch manuell, aber wofür habe ich eine
    Skripting-Sprache, die für Automatisierungen perfekt ist?
    In der Zip-Datei ist:
    -Eine Art-Datei Test.Art 1696 Byte
    Gruß
    ytwinky

    Spoiler anzeigen
    C
    ;<AutoItScript>
    #NoTrayIcon  ;Ohne Icon im Tray, hängende Prozesse im ProcessViewer beenden
    Opt("MustDeclareVars", 1)  ;0=ohne, 1=erfordert Variablen-Deklaration
    #include <Constants.au3>
    #include <File.au3>
    ;+----------------------------------------------------------------------------+
    ;|    Header: Bestimmen der Übergabeparameter                                 |
    ;|    ( Alles Strings(!!!), bis auf ArgC )                                    |
    ;|    FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins         |
    Const $Autor="Art2Bmp.au3 ©2006 by ytwinky, MD";                              |
    ;|   	EMail: PIII1kSystem-AutoIt3Forum@yahoo.de                               |
    ;|    AutoIt3-Version: 3.1.1.121(beta)                                        |
    ;|    Editor: SciTE 1.68, feste Schriftart                                    |
    ;|    Zweck : Schablone für den Anfang, nach Bedarf anpassen                  |
    ;|    Tab auf 2 setzen wg. Lesbarkeit                                         |
    ;+----------------------------------------------------------------------------+
    Global $ArgC=$CmdLine[0], $Erw=".Bmp"
    Dim $i, $j, $s, $Bild, $ArgV[$ArgC+2]
    
    
    If $ArgC=0 Then ;funzt
    	$s="Das Script ist so geschrieben, das eine Bild-Datei per Drag&Drop übergeben werden kann.." &@CrLf
    	$s&="Natürlich lassen sich auch Parameter beim Aufruf übergeben" &@CrLf
    	$s&="(Alle im IE darstellbaren Bildformate AUCH *.ART werden umgewandelt und Irfan kann das nicht!!)" &@CrLf
    	$s&="Ist ja auch egal, jetzt kann manuell gesucht/eingetragen werden, oder auch nicht ;-))"
    	If MsgBox(4100, "Ooops..", $s, 7)=$IDNO Then Exit
    	$ArgV[1]=FileOpenDialog("Datei umwandeln", "DeskTopf", "Alle(*.*)", 1+2+4, "Test.art")
    	If $ArgV[1]="" Then Exit
    	$ArgC=1
    Else
    	For $i=1 To $ArgC
    		$ArgV[$i]=$CmdLine[$i]
    	Next
    EndIf
    ;jetzt umwandeln..
    For $i=1 To $ArgC
    	Art2Bmp($ArgV[$i])
    Next
    ;Unterprogramme
    
    
    Func Art2Bmp($Bild)
    	Dim $Neu, $arrNeu, $Stored, $dd, $dp, $dn, $de
    	If FileExists($Bild) Then
    		Run("explorer.exe " &$Bild)
    		WinWaitActive($Bild)
    		$arrNeu=_PathSplit($Bild, $dd, $dp, $dn, $de)
    		$Neu=EnvGet("Tmp") &"\" &$dn &$de &$Erw
    		Send("!DU" &$Neu &"{TAB}b!SJ!{F4}") ;Hier anpassen für andere Sprachen
    		RunWait("explorer.exe " &$Neu) ;Hier anpassen für andere Bearbeitungsprogramme
    		$dp=0
    		Do
    			$Stored=MsgBox(4099, "Datei löschen" , "Soll die Datei" &@Lf &$Neu &@Lf  &"gelöscht werden?")
    			Switch $Stored
    				Case $IDYES
    					FileDelete($Neu)
    					$Stored=True
    				Case $IDNO
    					$dp+=1
    					$Stored=$dp=3
    				Case $IDCANCEL
    					$Stored=True
    				Case Else
    					MsgBox(4096, "Oh, Saruman..", "Wie konnte das denn passieren???")
    					$Stored=False
    			EndSwitch
    		Until $Stored
    	Else
    		MsgBox(4096, "Ooops..", $Bild &" nicht gefunden..", 3)
    	EndIf
    EndFunc
    
    
    ;</AutoItScript>
    Alles anzeigen
  • SciTE und GUI

    • ytwinky
    • 30. April 2006 um 23:16
    Zitat

    Original von peethebee
    Mein Tipp: SChreib die GUI mit deiner Vorstellungskraft und deinen Fingern :tongue:

    Genau, die Zeit, die du benötigst, um das generierte Skript zu 'berichtigen', kannste gleich dazu benutzen, das Ding gleich selbst zu schreiben..
    Naja, eines sollteste dir schon machen, um eine Vorlage zu haben oder den
    Aufbau nachvollziehen zu können
    Gruß
    ytwinky

  • Löschen ohne Papierkorb

    • ytwinky
    • 29. April 2006 um 12:45

    Keine Ahnung, wäre aber prima, denn ein deutsches Interface wäre schon schick..
    Appbar gibt es zwar in irgendeiner Form auch auf deutsch, das funktioniert aber nicht so gut, wie die englische Version.
    Bei AppBar wären Änderungen ja auch angebracht, da hier noch keine Menüs
    unterstützt werden..
    ..und auch keine Icons(aber damit kann ich GUT leben :rofl: ).
    Anyway, wennste magst: nur zu..
    Mir reichen die Beiden so wie sie sind.
    Happy porting to AutoIt
    ytwinky

  • Löschen ohne Papierkorb

    • ytwinky
    • 29. April 2006 um 10:52

    Die obere Leiste ist Appbar und rechts überm Systray das ist RunIt
    Geh mal auf:
    http://ytwinky.freebasic.de/
    Auf der Seite 'Links' sind die Adressen..
    Gruß
    ytwinky

    PS: Ich vergaß: Die Programme sind selbstverständlich FreeWare ;-))

  • Löschen ohne Papierkorb

    • ytwinky
    • 28. April 2006 um 12:38

    1. Das VBSkript war zugegebenermaßen reine Spielerei und gewinnt eigentlich nur durch die Porzellanschüssel als Icon
    2. Wenn ich in der linken Hand die Zigarette halte und rechts die Maus bediene,
    ist es mir zu umständlich, dann auch noch eine Taste zu drücken:
    http://fileanchor.com/22236-r.jpg
    nur, um mal zu zeigen, wovon ich rede..
    Gruß
    ytwinky

  • Löschen ohne Papierkorb

    • ytwinky
    • 27. April 2006 um 21:14

    Hi,
    da ich momentan alle meine VBSkripte durch AutoIt-Skripte ersetze, war auch WC
    mal 'dran. WC ist bei mir eine Desktop-Verknüpfung, die alles löscht, was darauf
    gezogen wird. So kann der Papierkorb immer noch zum sicheren Löschen verwendet
    werden. Wer möchte, besorgt sich ein entsprechendes Icon ;-))
    Eine Idee zum Spielen, wäre die Einbindung einer passenden Wav-Datei, um den Vorgang
    auch akustisch zu dokumentieren. Da ich jedoch die Sounds sowieso ausgeschaltet habe,
    bleibt diese Aufgabe für einen Benutzer, der es haben möchte..
    Gruß
    ytwinky

    Spoiler anzeigen
    Code
    ;<AutoItScript>
    Opt("MustDeclareVars", 1)  ;0=ohne, 1=erfordert Variablen-Deklaration
    #NoTrayIcon  ;Ohne Icon im Tray, hängende Prozesse im ProcessViewer beenden
    ;+----------------------------------------------------------------------------+
    ;|    Header: Bestimmen der Übergabeparameter                                 |
    ;|    ( Alles Strings(!!!), bis auf ArgC )                                    |
    ;|    FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins         |
    Const $Autor="WC.au3 ©2006 by ytwinky, MD";                                   |
    ;|    EMail: PIII1kSystem-AutoIt3Forum#yahoo.de                               |
    ;|    AutoIt3-Version: 3.1.1.120(beta)                                        |
    ;|    Editor: SciTE 1.68, feste Schriftart                                    |
    ;|    Zweck : Dateien und Ordner sofort löschen, ohne Papierkorb..            |
    ;|    Tab auf 2 setzen wg. Lesbarkeit                                         |
    ;+----------------------------------------------------------------------------+
    Dim $ArgC=$CmdLine[0], $s
    If $ArgC=0 Then
    	$s="WC.xxx funktioniert nur mit Drag&Drop bzw. Kommandozeilenparameter.."
    	MsgBox(64, "Ooops..", "WC.xxx funktioniert nur mit Drag&Drop bzw. Befehlszeilenparametern..", 3)
    Else
    	For $i=1 To $ArgC
    		$s&=DeleteIt($CmdLine[$i])
    	Next
    	If $s<>"" Then MsgBox(4096, "Da war was..", $s)
    EndIf
    Exit 255 ; Schummelmodus per ExitCode dokumentieren ;-))
    
    
    ;Unterprogramme
    
    
    Func DeleteIt($Name)
    	If FileExists($Name) Then
    		If StringInstr(FileGetAttrib($Name), "D") Then
    			If DirRemove($Name, 1) Then Return "" ; mit ,1 klappts jetzt..
    			Return $Name &", Ordner nicht gelöscht.."
    		Else
    			If FileDelete($Name) Then Return ""
    			Return $Name &", Datei nicht gelöscht.."
    		EndIf
    	EndIf
    EndFunc
    ;</AutoItScript>
    Alles anzeigen

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™