Funktionen der Skripte im Includeverzeichnis anzeigen

  • Hallo,

    wegen dieser Frage ist mir eine Idee gekommen, was man damit anstellen könnte. Ich habe nicht danach gesucht, ob es sowas schon gibt, sollte es so sein, war es eben eine nette kleine Fingerübung:

    FunctionViewer
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <MenuConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global Const $GuiTitle = "Function Viewer"
    Global Const $SelectAll = "All"
    Global Const $ShowScript = " >>> Script <<<"
    Global Const $UserInclKey = "HKEY_CURRENT_USER\Software\AutoIt v3\AutoIt"
    Global Const $UserInclVal = "Include"
    Global Const $Delimiter = " > "
    Global Const $GuiW = 190 * 4
    Global Const $GuiH = 190 * 3
    Global Const $MinW = 600
    Global Const $MinH = 400
    Global Const $FSize = 10

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

    Global $aInclDirs[10] = [0]
    Global $StdDir
    Global $ScriptContent = ""
    Global $CurrentFolder = $SelectAll
    Global $aRet = DllCall("User32.dll", "Int", "GetSystemMetrics", "Int", 15) ; SM_CYMENU = 15
    Global $MH = $aRet[0]

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

    ; Standardincludeverzeichnis ermitteln
    ; Raupi -> http://www.autoit.de/index.php?page…2577#post212577
    If @OSArch = "x86" Then
    $StdDir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Include"
    Else
    $StdDir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir") & "\Include"
    EndIf
    If $StdDir And FileExists($StdDir) Then
    $aInclDirs[0] += 1
    $aInclDirs[$aInclDirs[0]] = $StdDir
    Else
    MsgBox(262144 + 48, $GuiTitle, "Das Standardincludeverzeichnis konnte nicht gefunden werden!")
    EndIf

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

    ; Ggf. in der Registry zusätzlich eingetragene Includeverzeichnisse auslesen
    Global $RegDirs = RegRead($UserInclKey, $UserInclVal)
    Global $aUserDirs[1] = [0]
    If Not @error Then
    $aUserDirs = StringSplit($RegDirs, ";")
    For $I = 1 To $aUserDirs[0]
    If FileExists($aUserDirs[$I]) Then
    $aInclDirs[0] += 1
    $aInclDirs[$aInclDirs[0]] = $aUserDirs[$I]
    EndIf
    Next
    EndIf

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

    Opt("GUIOnEventMode", 1)
    Global $hGUI = GUICreate($GuiTitle, $GuiW, $GuiH, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX, $WS_MAXIMIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $idFileMenu = GUICtrlCreateMenu("&File")
    GUICtrlCreateMenuItem("&Open", $idFileMenu)
    GUICtrlSetOnEvent(-1, "_Open")
    GUICtrlCreateMenuItem("", $idFileMenu)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUICtrlCreateMenuItem("&Exit", $idFileMenu)
    GUICtrlSetOnEvent(-1, "_Exit")
    Global $idDirMenu = GUICtrlCreateMenu("&Folder")
    GUICtrlCreateMenuItem($SelectAll, $idDirMenu, 0, 1)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetOnEvent(-1, "_Select_Folder")
    For $I = 1 To $aInclDirs[0]
    GUICtrlCreateMenuItem($I & " > " & $aInclDirs[$I], $idDirMenu, $I, 1)
    GUICtrlSetOnEvent(-1, "_Select_Folder")
    Next
    Global $idFuncMenu = GUICtrlCreateMenu("&Function")
    GUICtrlCreateMenuItem("&Copy to Clipboard", $idFuncMenu)
    GUICtrlSetOnEvent(-1, "_CopyToClip")
    Global $idScripts = GUICtrlCreateCombo("", 10, 10, ($MinW / 2) - 25, 20, BitOR($CBS_DROPDOWNLIST, $CBS_SORT, $WS_VSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, "_Script")
    Global $idFuncs = GUICtrlCreateCombo("", ($MinW / 2), 10, ($MinW / 2) - 25, 20, BitOR($CBS_DROPDOWNLIST, $CBS_SORT, $WS_VSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, "_Function")
    Global $idEdit = GUICtrlCreateEdit("", 10, 40, $GuiW - 20, $GuiH - 50 - $MH, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
    GUICtrlSetFont(-1, $FSize, -1, -1, "Courier New")
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    _SetTabs($idEdit)
    _Read_Folders()
    GUIRegisterMsg($WM_GETMINMAXINFO, "_MinInfo")
    GUISetState()

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

    While True
    Sleep(1000)
    WEnd
    ; ===============================================================================================================================
    Func _Exit()
    Exit
    EndFunc
    ; ===============================================================================================================================
    Func _Open()
    If Not ($aInclDirs[0] < 9) Then
    MsgBox(48, $GuiTitle, "Mehr als 9 Verzeichnisse können nicht eingelesen werden!", 0, $hGUI)
    Return
    EndIf
    Local $Folder = FileSelectFolder("Include-Verzeichnis öffnen", "", 2, "", $hGUI)
    If @error Then Return
    For $I = 1 To $aInclDirs[0]
    If $aInclDirs[$I] = $Folder Then
    MsgBox(48, $GuiTitle, "Das Verzeichnis " & $Folder & " ist bereits geöffnet!", 0, $hGUI)
    Return
    EndIf
    Next
    Local $Scripts = _Get_Scripts($Folder, $aInclDirs[0] + 1)
    If $Scripts Then
    $aInclDirs[0] += 1
    $aInclDirs[$aInclDirs[0]] = $Folder
    $CurrentFolder = $aInclDirs[0] & $Delimiter & $aInclDirs[$aInclDirs[0]]
    GUICtrlSetData($idScripts, "|" & $Scripts)
    GUICtrlCreateMenuItem($CurrentFolder, $idDirMenu, $aInclDirs[0], 1)
    GUICtrlSetOnEvent(-1, "_Select_Folder")
    DllCall("User32.dll", "BOOL", "CheckMenuRadioItem", _
    "HWND", GUICtrlGetHandle($idDirMenu), "UINT", 0, "UINT", $aInclDirs[0], "UINT", $aInclDirs[0], "UINT", $MF_BYPOSITION)
    GUICtrlSendMsg($idScripts, $CB_SETCURSEL, 0, 0)
    _Script()
    Else
    MsgBox(48, $GuiTitle, "Das Verzeichnis " & $Folder & " enthält keine AU3-Skripte!", 0, $hGUI)
    EndIf
    EndFunc
    ; ===============================================================================================================================
    Func _Read_Folders()
    Global $aInclDirs
    GUICtrlSetData($idEdit, "")
    GUICtrlSetData($idFuncs, "")
    GUICtrlSetData($idScripts, "")
    For $I = 1 To $aInclDirs[0]
    Local $Scripts = _Get_Scripts($aInclDirs[$I], $I)
    If $Scripts Then
    GUICtrlSetData($idScripts, $Scripts)
    EndIf
    Next
    GUICtrlSendMsg($idScripts, $CB_SETCURSEL, 0, 0)
    _Script()
    EndFunc
    ; ===============================================================================================================================
    Func _Select_Folder()
    Global $aInclDirs
    Local $Folder = GUICtrlRead(@GUI_CtrlId, 1)
    If $Folder = $CurrentFolder Then Return
    $CurrentFolder = $Folder
    If $Folder = $SelectAll Then
    _Read_Folders()
    Return
    EndIf
    GUICtrlSetData($idEdit, "")
    GUICtrlSetData($idFuncs, "")
    GUICtrlSetData($idScripts, "")
    Local $aSplit = StringSplit($Folder, $Delimiter, 1)
    Local $Scripts = _Get_Scripts($aSplit[2], $aSplit[1])
    GUICtrlSetData($idScripts, $Scripts)
    GUICtrlSendMsg($idScripts, $CB_SETCURSEL, 0, 0)
    _Script()
    Return
    EndFunc
    ; ===============================================================================================================================
    Func _CopyToClip()
    ClipPut(GUICtrlRead($idEdit))
    EndFunc
    ; ===============================================================================================================================
    Func _SetTabs($idCtrl, $nChars = 4)
    Local Const $BaseUnits = 4
    Local $TABS = DllStructCreate("UINT")
    Local $pTabs = DllStructGetPtr($TABS)
    DllStructSetData($TABS, 1, $BaseUnits * $nChars)
    GUICtrlSendMsg($idCtrl, $EM_SETTABSTOPS, 1, $pTabs)
    EndFunc
    ; ===============================================================================================================================
    Func _MinInfo($hWnd, $iMsg, $wParam, $lParam)
    Local $MINMAXINFO = DllStructCreate("LONG[10]", $lParam)
    DllStructSetData($MINMAXINFO, 1, $MinW, 7)
    DllStructSetData($MINMAXINFO, 1, $MinH, 8)
    Return $GUI_RUNDEFMSG
    EndFunc
    ; ===============================================================================================================================
    Func _Script()
    Global $ScriptContent
    Local $Script = GUICtrlRead($idScripts)
    Local $aSplit = StringSplit($Script, $Delimiter, 1)
    If @error Then Return False
    Local $File = $aInclDirs[$aSplit[1]] & "\" & $aSplit[2]
    $ScriptContent = FileRead($File)
    GUICtrlSetData($idFuncs, _Get_Functions())
    GUICtrlSendMsg($idFuncs, $CB_SETCURSEL, 0, 0)
    _Function()
    WinSetTitle($hGUI, "", $GuiTitle & " - " & $File)
    EndFunc
    ; ===============================================================================================================================
    Func _Function()
    Local $Function = GUICtrlRead($idFuncs)
    If $Function = $ShowScript Then
    GUICtrlSetData($idEdit, $ScriptContent)
    GUICtrlSetState($idFuncMenu, $GUI_DISABLE)
    Else
    GUICtrlSetData($idEdit, _Read_Function($Function))
    GUICtrlSetState($idFuncMenu, $GUI_ENABLE)
    EndIf
    GUICtrlSetState($idEdit, $GUI_FOCUS)
    EndFunc
    ; ===============================================================================================================================
    Func _Get_Scripts($Folder, $Index)
    Local $Scripts = ""
    Local $Sep = Opt("GUIDataSeparatorChar")
    Local $Handle = FileFindFirstFile($Folder & "\*.au3")
    If $Handle = -1 Then Return ""
    Local $File = FileFindNextFile($Handle)
    While Not @error
    $Scripts &= $Index & $Delimiter & $File & $Sep
    $File = FileFindNextFile($Handle)
    WEnd
    FileClose($Handle)
    Return StringTrimRight($Scripts, 1)
    EndFunc
    ; ===============================================================================================================================
    Func _Get_Functions()
    Global $ScriptContent
    Local $Functions = "|" & $ShowScript & "|"
    Local $Sep = Opt("GUIDataSeparatorChar")
    Local $aRX = StringRegExp($ScriptContent, "(?im)^\s*func\s+(\w+)\s*\(", 3)
    If @error Then Return SetError(1, 0, $Functions)
    For $I = 0 To UBound($aRX) - 1
    $Functions &= $aRX[$I] & $Sep
    Next
    Return StringTrimRight($Functions, 1)
    EndFunc
    ; ===============================================================================================================================
    Func _Read_Function($Function)
    Global $ScriptContent
    If @error > 0 Then Return SetError(1, 0, "")
    Local $aRX = StringRegExp($ScriptContent, "(?im)(^;.*\n)*\s*func\s+" & $Function & "(?s).*?endfunc.*?$", 2)
    If @error Then Return SetError(1, 0, "")
    Return StringStripWS($aRX[0], 1) & @LF
    EndFunc

    [/autoit]


    Das Skript ist auf meine Anforderungen zugeschnitten. Mehr Flexibilität und Funktionalität sind durchaus möglich. ;)

    Update am 12.03.2011:

    Weil es der/die Eine oder Andere brauchbar findet, habe ich das Skript überarbeitet.

    • Fabians Routine für die Ermittlung der Standardincludeverzeichnisses ist integriert (Danke, Fabian!)
    • Zusätzlich wird der unter #include dokumentierte Registrywert ausgelesen
    • Weitere Verzeichnisse können per per Menü->File->Open dazugelesen werden
    • Kleinere optische Korrekturen

    Ich hoffe, es gefällt auch in dieser Version! ;)

    Update am 13.03.2011:

    Für UEZ. Meinst Du das so? ;)

    Update am 14.03.2011:

    Wegen Raupi.

  • Nette Idee ;)
    Ich kenne nur bereits CallTips von SeuBo

    Ich habe deinen Code noch einwenig angepasst, damit das Installationsverzeichnis von Autoit automatisch ausgelesen wird.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $InclDir
    Global $ScriptContent = ""
    Global Const $GuiW = 190 * 4
    Global Const $GuiH = 190 * 3
    Global Const $MinW = 600
    Global Const $MinH = 400
    Global Const $FSize = 10

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

    If Not @Compiled Then
    If @OSArch = "x86" Then
    $InclDir = StringReplace(@AutoItExe, "autoit3.exe", "Include\")
    Else
    $InclDir = StringReplace(@AutoItExe, "autoit3_x64.exe", "Include\")
    EndIf
    Else
    If @OSArch = "x86" Then
    $InclDir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Include\"
    Else
    $InclDir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir") & "\Include\"
    EndIf
    EndIf

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

    Opt("GUIOnEventMode", 1)
    $hGUI = GUICreate("Function Viewer", $GuiW, $GuiH, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX, $WS_MAXIMIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $idScripts = GUICtrlCreateCombo("", 10, 10, ($MinW / 2) - 25, 20, BitOR($CBS_DROPDOWNLIST, $CBS_SORT, $WS_VSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, "_Script")
    $idFuncs = GUICtrlCreateCombo("", ($MinW / 2), 10, ($MinW / 2) - 25, 20, BitOR($CBS_DROPDOWNLIST, $CBS_SORT, $WS_VSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKALL)
    GUICtrlSetOnEvent(-1, "_Function")
    $idEdit = GUICtrlCreateEdit("", 10, 40, $GuiW - 20, $GuiH - 50, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
    GUICtrlSetFont(-1, $FSize, -1, -1, "Courier New")
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    _SetTabs($idEdit)
    GUICtrlSetData($idScripts, _Get_Scripts($InclDir))
    GUICtrlSendMsg($idScripts, $CB_SETCURSEL, 0, 0)
    _Script()
    GUIRegisterMsg($WM_GETMINMAXINFO, "_MinInfo")
    GUISetState()

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

    While True
    Sleep(1000)
    WEnd
    ; ===============================================================================================================================
    Func _Exit()
    Exit
    EndFunc
    ; ===============================================================================================================================
    Func _SetTabs($idCtrl, $nChars = 4)
    Local Const $BaseUnits = 4
    Local $TABS = DllStructCreate("UINT")
    Local $pTabs = DllStructGetPtr($TABS)
    DllStructSetData($TABS, 1, $BaseUnits * $nChars)
    GUICtrlSendMsg($idCtrl, $EM_SETTABSTOPS, 1, $pTabs)
    EndFunc
    ; ===============================================================================================================================
    Func _MinInfo($hWnd, $iMsg, $wParam, $lParam)
    Local $MINMAXINFO = DllStructCreate("LONG[10]", $lParam)
    DllStructSetData($MINMAXINFO, 1, $MinW, 7)
    DllStructSetData($MINMAXINFO, 1, $MinH, 8)
    Return $GUI_RUNDEFMSG
    EndFunc
    ; ===============================================================================================================================
    Func _Script()
    Global $InclDir, $ScriptContent
    $ScriptContent = FileRead($InclDir & GUICtrlRead($idScripts))
    GUICtrlSetData($idFuncs, _Get_Functions())
    GUICtrlSendMsg($idFuncs, $CB_SETCURSEL, 0, 0)
    _Function()
    EndFunc
    ; ===============================================================================================================================
    Func _Function()
    Local $Function = GUICtrlRead($idFuncs)
    GUICtrlSetData($idEdit, _Read_Function($Function))
    GUICtrlSetState($idEdit, $GUI_FOCUS)
    EndFunc
    ; ===============================================================================================================================
    Func _Get_Scripts($Dir)
    Local $Scripts = ""
    Local $Sep = Opt("GUIDataSeparatorChar")
    Local $Handle = FileFindFirstFile($Dir & "*.au3")
    If $Handle = -1 Then Return SetError(1, 0, $Scripts)
    Local $File = FileFindNextFile($Handle)
    While Not @error
    $Scripts &= $File & $Sep
    $File = FileFindNextFile($Handle)
    WEnd
    FileClose($Handle)
    If Not $Scripts Then Return SetError(1, 0, $Scripts)
    Return $Sep & StringTrimRight($Scripts, 1)
    EndFunc
    ; ===============================================================================================================================
    Func _Get_Functions()
    Global $ScriptContent
    Local $Functions = ""
    Local $Sep = Opt("GUIDataSeparatorChar")
    Local $aRX = StringRegExp($ScriptContent, "(?im)^\s*func\s+(\w+)\s*\(", 3)
    If @error Then Return SetError(1, 0, $Functions)
    For $I = 0 To UBound($aRX) - 1
    $Functions &= $aRX[$I] & $Sep
    Next
    Return $Sep & StringTrimRight($Functions, 1)
    EndFunc
    ; ===============================================================================================================================
    Func _Read_Function($Function)
    Global $ScriptContent
    If @error > 0 Then Return SetError(1, 0, "")
    Local $aRX = StringRegExp($ScriptContent, "(?im)(^;.*\n)+\s*func\s+" & $Function & "(?s).*?endfunc.*?$", 2)
    If @error Then Return SetError(1, 0, "")
    Return $aRX[0]
    EndFunc

    [/autoit]
  • Der SeuBo ist nur ein nachmacher :P, meines war Monate vorher schon da lach.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    @Großvater.

    Ich finde dein kleines Script absolut praktisch. :thumbup:
    Wenn man mal eben schnell in einer UDF Funktion rumstöbern muß, spart man sich viel Zeit.
    Vorher mußte man erst das Include öffnen und dann noch nach der Funktion suchen.
    Dein Script hab ich als Tool in mein Scite eingebaut und wird bestimmt täglich gebraucht.

    • Offizieller Beitrag
    Zitat

    Oder man drückt einfach Strg + J, wenn der Cursor auf einem Funktionsaufruf liegt ;)

    Damit wird zur Funktion gesprungen, die Includedatei muß man trotzdem erst mal öffnen.
    Was eine Aktion, erst mit dem Cursor auf den Includeeintrag Alt+i dann zur gesuchten Funktion wechseln Strg + J, damit dann
    auf die gesuchte Func in der Include gesprungen wird.
    Das ist wie das Pferd von hinten aufzäumen. :thumbdown:

    • Offizieller Beitrag

    Wie hast du denn sein Tool in SciTE eingebunden?


    Öffne in SciTE die "SciTEUser.properties" (Optionen - Benutzereinstellungen).
    Dort kannst du dann einen Eintrag erstellen, wie hier im Bsp. für OrganizeInclude:

    Einfach die nächste freie Nummer verwenden (wenn noch nichts dasteht geht es mit 36 los) und Shortcut deiner Wahl eintragen. Der Skriptaufruf ist, denke ich, selbsterklärend. ;)

    • Offizieller Beitrag

    Ich hab es auch noch zusätzlich im Usercontext Menü. :thumbup:

    Code
    command.42.*="$(SciteDefaultHome)\Funktionsanzeige\Funktionsanzeige.exe"
    command.name.42.*=Funktionsanzeige
    command.save.before.42.*=1
    command.shortcut.42.*=Ctrl+Shift+Alt+F
    #UserContextmenü
    user.context.menu=||\
    Funktionsanzeige|1142|\
    Add as Snippet|1116|
    # Neuer Menüeintrag 1142 bezieht sich auf den Eintrag 42 im OptionenMenü
    #Add as Snippet|1116| übernommen aus der au3.properties, weil das Usermenü von dort überschrieben wird.
    • Offizieller Beitrag
    Zitat

    Also ich muss die Include-Datei nicht vorher öffnen, damit Strg+j funktioniert.

    Ich glaube bei mir ist irgendwas geschossen. Auf meinem Schleppi geht es nicht. ;(

    Auf meinen anderen Rechnern schon. :)

    Edit: Ich bin vielleicht ein Dödel, mit Strg+J funzt nur wenn das entsprechende Include auch im Script angegeben ist. ;(

    Zitat

    :D Und bei mir gibt es den Hotkey Strg+j gar nicht.

    Gibt`s bei dir unter Extras kein "Jump to Function Prod" ?

  • Hallo Fabian.

    Ich habe gerade Dein Script von oben getestet. Gefällt mir.

    Nur ich habe Includes auch unter "m:\autoit\include\" (Include die nicht beim installieren von AutoIt vorhanden sind).
    Zweiter Include-Ordner steht auch in der regedit unter: HKEY_CURRENT_USER - > Software -> AutoIt v3 -> AutoIt.
    (Name:OrInclude ; Typ: REG_SZ ; Wert: m:\autoit\include\).

    Aber Dein Script werde ich sicherlich nutzen. Haste gut gemacht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Alina.

    Ähm, das Script ist von Großvater.
    Nur mal so nebenbei.

  • Wie GROSSVATER ????? hääää ????

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Na das Script von Fabian ist nur von ihm angepaßt und wurde von Großvater geschrieben.

  • Wie GROSSVATER ????? hääää ????

    Ja das Script wurde von Grossvater geschrieben, und der Dank gehört ihm. ;)
    Ich habe nur das auslesen des Standardincludordners hinzugefügt.

    Lg, Fabian