OrganizeIncludes

  • Hi Xeno,
    danke für die neue Version :)

    leider funktionieren die Sachen von meinem Post vom Samstag, 8. Dezember 2007, 18:50 nicht.

    Die Sachen die du für Martin eingebaut hast, verstehe ich nicht.
    Wenn du es mir auf deutsch :thumbup: erklärst, kann ichs für dich testen

    • Offizieller Beitrag

    Hi,

    danke danke, brauchst eigentlich nichts testen im Moment. Ich muss noch eine Erweiterung einbauen damit auch solche Funktionen gefunden werden
    GUIRegisterMsg($WM_VSCROLL, "MY_WM_VSCROLL")

    Wenn du immer noch den Fehler mit dem illegal Character bekommst, dann sprich mich mal in ICQ an. Danke!

    So long,

    Mega

  • Hi Xeno,
    mit einem Wort perfekt 8o:thumbup:8o:thumbup::thumbup::thumbup::thumbup:
    funktioniert aber auch alles, Danke Danke Danke

    Dinge die nun funktionieren:

    Zitat

    Ich klicke auf "Organize includes" und dann auf "Exit" und dann erscheint das include. Sollte es nicht vor dem "Exit" schon erscheinen


    jetzt klickt man auf "Organize includes" und die includes werden eingefügt :)


    Zitat

    Wenn ich jedoch den silent Modus nehme, wird das include manchmal eingefügt und manchmal nicht


    jetzt klappts immer :)


    Zitat

    Wenn ich ein include deaktiviert habe, sagt mir dein Script, dass es bereits integriert ist. Dies ist aber falsch


    nun werden alle includes eingefügt, egal ob man manche includes mit ; deaktiviert hat :)


    Zitat

    Fehlermeldung "illegal character"


    kommt nicht mehr :)


    einfach perfekt. :thumbup:

    Habe momentan leider keine Verbesserungsvorschläge mehr :D

  • Tweaky: Einmal seine Begeisterung kundzutun und auf die Verbesserungen hizuweißen genügt meiner meinung auch :D

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • ups, hoppla :S
    war keine Absicht ;) (auch wenn er es verdinet hätte :D )
    hatte vorhin eine Fehlermeldung vom Forum.
    Er hat den Post wohl doch genommen :rofl:

  • Hi,
    hab doch noch einen Fehler entdeckt.

    Wenn ich OI ausführe, werden alle Tabs gelöscht.

    Somit beginnnen alle Zeilen wieder ganz links und es sieht unübersichtlich aus. ;(

    • Offizieller Beitrag

    Hi,

    neue Version zu Vorabtest:

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.2.11.1
    ; Author: Thorsten Meger
    ;
    ; Script Function:
    ; Organize Includes Version 3.7
    ;
    ; ----------------------------------------------------------------------------
    ;Opt('TrayIconDebug', 1)
    Opt('MustDeclareVars', 1)
    Opt('WinSearchChildren', 1)
    ;[Includes]
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StaticConstants.au3>
    #include<WindowsConstants.au3>
    #include<Array.au3>
    #include<File.au3>
    #include<GuiListView.au3>
    #include<GuiStatusBar.au3>
    #include<String.au3>

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

    Global $start_T = TimerInit()

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

    #cs Test
    #ce

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

    ; ScriptVersion
    Global $scriptVersion = 'Version 3.7', $date = 'February 10, 2008\n'
    ; StableVersion
    Global $InstallPath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir')
    Global $InstallVersion = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt', 'Version')
    ; BetaVersion
    Global $betaInstallPath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt', 'betaInstallDir')
    Global $betaInstallVersion = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt', 'betaVersion')

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

    ; Variables
    Dim $includesPathes_A[1]
    If $InstallPath <> '' Then _ArrayAdd($includesPathes_A, $InstallPath & '\Include\')
    If $betaInstallPath <> '' Then _ArrayAdd($includesPathes_A, $betaInstallPath & '\Include\')
    Global $includesIni = @ScriptDir & '\includes.ini'
    Global $source = '', $sourceAnalyse = '', $exit_B = 0, $organize_B = 0, $openIni_B = 0, $autoitVersion_I = 0, $betaVersion_I = 0, $filename_I = 0
    Global $includes_LV = 0, $FileName = '', $GUI = 0, $status_SB = 0, $checkIncludes_B = 0, $ToBeIncluded[1], $B_DESCENDING = 0
    Global $deleteIncludes_CB = 0, $copyToClipBoard_CB = 0, $delAll_R = 0, $delUnneeded_R = 0, $delNothing_R = 0, $keyword_I = 0
    Global $placeAfterKeyWord_R = 0, $placeAtTop_R = 0, $green_A[1], $yellow_A[1], $red_A[1], $LV = 0, $count = 0, $silentMode_CB = 0
    Global $parts_SB[3] = [80, 526, -1], $silentMode = True, $renewIni_B = 0, $addIncludePath_B = 0, $delIncludePath_B = 0, $restart_B = 0
    Global $SciTECmd = 0, $My_Dec_Hwnd = 0, $Scite_hwnd = 0
    Global $autoRestart_CB = 0, $udf_LV = 0, $FilePath = 0, $h_file = 0
    Global $fileCount_A = 0
    Global $text_SB[3] = [@TAB & $scriptVersion, @TAB & 'Organize Includes', '']
    Global $status_A[3] = ['correctly included', 'needed include', 'not needed']
    Global $showProgress = 1
    ; Read the seetings from the ini file
    Global $neededAndIncluded = IniRead($includesIni, 'Options', 'Green', '0x80FF80')
    Global $neededNotIncluded = IniRead($includesIni, 'Options', 'Yellow', '0xFFFF80')
    Global $notNeededButIncluded = IniRead($includesIni, 'Options', 'Red', '0xEF3D4A')
    Global $keyword = IniRead($includesIni, 'Options', 'Keyword', ';[Includes]')

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

    ; MustDeclareVars
    Global $nMsg

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

    ; **************************************************************
    ; Add HERE your own pathes for udfs
    ; **************************************************************
    _ArrayAdd($includesPathes_A, $InstallPath & '\include\UDF\')
    ; _ArrayAdd($includesPathes_A, 'C:\downloads\')
    ; _ArrayAdd($includesPathes_A, 'C:\downloads\')
    ; _ArrayAdd($includesPathes_A, 'C:\downloads\')
    ; **************************************************************

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

    Func _saveIncludePathesToIni()
    For $i = 1 To UBound($includesPathes_A) - 1
    $fileCount_A = _FileListToArray($includesPathes_A[$i], '*.au3', 1)
    ; Wenn keine der Pfad nicht existiert
    If @error = 1 Then
    MsgBox(16, 'Error', 'Invalid path for include location : ' & $includesPathes_A[$i], 10)
    Exit (0)
    EndIf
    ; Wenn keine au3 Datei gefunden wird - Wert auf 0 setzen
    If @error = 4 Then IniWrite($includesIni, 'IncludePathes', $includesPathes_A[$i], '')
    IniWrite($includesIni, 'IncludePathes', $includesPathes_A[$i], StringReplace(_ArrayToString($fileCount_A, ';', 1), '.au3', ''))
    Next
    EndFunc ;==>_saveIncludePathesToIni

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

    Func _checkIncludePathes()
    Local $pathes_A = IniReadSection($includesIni, 'IncludePathes')
    If @error Then Return -1
    ; Wenn einer der Pfade aus dem Code nicht drin in der ini ist, dann neu machen
    For $i = 1 To UBound($includesPathes_A) - 1
    If _ArraySearch($pathes_A, $includesPathes_A[$i], 1, 0, 0, 0, 1, 0) = -1 Then Return 3
    Next

    For $i = 1 To UBound($includesPathes_A) - 1
    $fileCount_A = _FileListToArray($includesPathes_A[$i], '*.au3', 1)
    ; Wenn keine der Pfad nicht existiert
    If @error Then Return 1
    If IniRead($includesIni, 'IncludePathes', $includesPathes_A[$i], '') <> StringReplace(_ArrayToString($fileCount_A, ';', 1), '.au3', '') Then Return 1
    Next
    Return 0
    EndFunc ;==>_checkIncludePathes

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

    If $showProgress Then ProgressOn('Organize Includes', 'Investigating includes ...', '0 %', @DesktopWidth / 2 - 150, 200, 1)

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

    ; Operating sequence
    _createGUI()

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

    ; Get SciTE DirectorHandle
    $Scite_hwnd = WinGetHandle('DirectorExtension')
    GUIRegisterMsg($WM_COPYDATA, 'MY_WM_COPYDATA')
    $My_Dec_Hwnd = Dec(StringTrimLeft($GUI, 2))

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

    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:+> OrganizeIncludes AutoIt3 ' & $scriptVersion & ' Copyright ' & chr(169) & ' Th.Meger ' & $date)

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

    _start()

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

    GUICtrlSetData($autoitVersion_I, $InstallVersion)
    GUICtrlSetData($betaVersion_I, $betaInstallVersion)

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

    ; Setting silent off when 1 parameter = silentOff
    ; Silent mode = no GUI and organize includes automatically with settings from ini file
    If $cmdLine[0] > 0 And $cmdLine[1] = 'silentOff' Then $silentMode = False
    If GUICtrlRead($silentMode_CB) = $GUI_UNCHECKED Or $silentMode = False Then
    If $showProgress Then ProgressSet(100, 'Done', 'Complete')
    If $showProgress Then Sleep(350)
    If $showProgress Then ProgressOff()
    GUISetState(@SW_SHOW)
    Else
    _organize()
    If $showProgress Then ProgressSet(100, 'Done', 'Complete')
    If $showProgress Then Sleep(350)
    If $showProgress Then ProgressOff()
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:104')
    Exit (0)
    EndIf

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

    _GUICtrlStatusBar_SetText($status_SB, @TAB & StringFormat('%06.4f', Round(TimerDiff($start_T) / 1000, 4)) & ' sec', 2)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    FileClose($h_file)
    Exit (0)
    Case $exit_B
    _exit()
    Exit (0)
    Case $organize_B
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Script started ... organizing includes ... ', 1)
    _exit()
    _organize()
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:104')
    If GUICtrlRead($autoRestart_CB) = $GUI_CHECKED Then _restart()
    Case $openIni_B
    If FileExists($includesIni) Then
    ShellExecute($includesIni)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'includes.ini opened', 1)
    Else
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'No ini file found', 1)
    Sleep(1000)
    Local $re = MsgBox(36, 'Create new ini file', 'Do you want to create a new ini file?', 15)
    If $re = -1 Or $re = 7 Then
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'No ini file available', 1)
    ElseIf $re = 6 Then
    _prepareOrganizeIncludes()
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'New ini file created', 1)
    Sleep(2000)
    If FileExists($includesIni) Then ShellExecute($includesIni)
    EndIf

    EndIf
    Case $renewIni_B
    _renewIni()
    Case $placeAfterKeyWord_R
    GUICtrlSetState($keyword_I, $GUI_SHOW)
    GUICtrlSetState($keyword_I, $GUI_FOCUS)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Enter your keyword ...', 1)
    Case $placeAtTop_R
    GUICtrlSetState($keyword_I, $GUI_HIDE)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Includes will be placed at top of your script', 1)
    Case $copyToClipBoard_CB
    If GUICtrlRead($copyToClipBoard_CB) = $GUI_CHECKED Then
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Copying includes to clipboard activated', 1)
    Else
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Copying includes to clipboard deactivated', 1)
    EndIf
    Case $includes_LV
    _sortLV()
    Case $delAll_R
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'All includes will be removed', 1)
    Case $delUnneeded_R
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Only the not needed includes will be removed', 1)
    Case $delNothing_R
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'No includes will be removed', 1)
    Case $restart_B
    _exit()
    _restart()
    Case $silentMode_CB
    If GUICtrlRead($silentMode_CB) = $GUI_CHECKED Then
    GUICtrlSetState($autoRestart_CB, $GUI_DISABLE)
    GUICtrlSetState($autoRestart_CB, $GUI_UNCHECKED)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Silent Mode activated', 1)
    Else
    GUICtrlSetState($autoRestart_CB, $GUI_ENABLE)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Silent Mode deactivated', 1)
    EndIf
    EndSwitch
    WEnd

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

    ; Start func gets the source and calls all other needed funcs.
    Func _start()
    If Not ProcessExists('SciTE.exe') Then Exit (0)
    Local $opt = Opt('WinTitleMatchMode', 4)
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'askfilename:')
    $SciTECmd = StringReplace($SciTECmd, '\\', '\')
    ; ConsoleWrite($SciTECmd & @CRLF) ; Ausgabe kompletter Rückgabewert von askfilename:
    $FilePath = StringTrimLeft($SciTECmd, StringInStr($SciTECmd, ':', Default, 3))
    ;MsgBox(0, '', $FilePath) ; Ausgabe Dateipfad
    $FileName = StringSplit($SciTECmd, '\\')
    ;SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:' & $FileName) ; Ausgabe des Dateinamens in die Console
    GUICtrlSetData($filename_I, $FileName[UBound($FileName) - 1])
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:106')
    Opt('WinTitleMatchMode', $opt)
    ; Open File
    Local $h_file = FileOpen($FilePath, 0)
    If $h_file = -1 Then
    MsgBox(16, 'Error', 'Could not open file : ' & $FilePath, 5)
    Exit (0)
    EndIf
    ; Read file
    $source = FileRead($h_file)
    If @error > 0 Then
    MsgBox(16, 'Error', 'Could not read file : ' & $FilePath, 5)
    Exit (0)
    EndIf
    FileClose($h_file)
    ; MsgBox(0, $FilePath, $source) ; Ausgabe des Quellcodes
    If Not FileExists($includesIni) Then
    _prepareOrganizeIncludes()
    _setOptions()
    EndIf
    $ToBeIncluded = getIncludes()
    _ArraySort($ToBeIncluded)
    Local $re = setIncludes($ToBeIncluded)
    If $re = -2 Then _GUICtrlStatusBar_SetText($status_SB, @TAB & 'No includes needed!', 1)
    _setUDFs()
    EndFunc ;==>_start

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

    ; Starting action (delete and/or insert)
    Func _organize()
    Local $sourceLine_A = StringSplit($source, @CR)
    For $i = 1 To $sourceLine_A[0]
    $sourceLine_A[$i] = StringReplace($sourceLine_A[$i], @LF, '')
    Next
    ;_ArrayDisplay($sourceLine_A, 'vorher')
    $sourceLine_A = _deleteIncludes($sourceLine_A)
    $sourceLine_A = _insertIncludes($sourceLine_A)
    ;_ArrayDisplay($sourceLine_A, 'nachher')
    ; Änderungen in die Datei schreiben
    Local $filehandle = FileOpen($FilePath, 2)
    ; Check if file opened for reading OK
    If $filehandle = -1 Then
    MsgBox(0, 'Error', 'Unable to open file: ' & $FileName & ' in write mode', 5)
    Exit
    EndIf
    If FileWrite($filehandle, _ArrayToString($sourceLine_A, @CRLF, 1)) <> 1 Then
    MsgBox(16, 'Error', 'Source has not been changed!', 5)
    EndIf
    FileClose($filehandle)
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Includes inserted', 1)
    EndFunc ;==>_organize

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

    ; Insert includes into array of code lines
    Func _insertIncludes($sourceLine_A)
    Local $includes = ''
    If GUICtrlRead($delAll_R) = $GUI_CHECKED Then $includes = _ArrayToString($green_A, @CRLF, 1)
    $includes &= @CRLF & _ArrayToString($yellow_A, @CRLF, 1)
    $includes = StringStripWS($includes, 3)

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

    If GUICtrlRead($placeAfterKeyWord_R) = $GUI_CHECKED Then
    Local $keyword = GUICtrlRead($keyword_I)
    For $i = 0 To UBound($sourceLine_A) - 1
    If StringInStr($sourceLine_A[$i], $keyword, 2) Then
    _ArrayInsert($sourceLine_A, $i + 1, $includes)
    ExitLoop
    EndIf
    Next
    Else
    If StringLen($includes) > 0 Then _ArrayInsert($sourceLine_A, 1, $includes)
    EndIf
    If GUICtrlRead($copyToClipBoard_CB) = $GUI_CHECKED Then
    ClipPut('')
    ClipPut($includes)
    EndIf
    Return $sourceLine_A
    EndFunc ;==>_insertIncludes

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

    ; Delete includes from array of code lines
    Func _deleteIncludes($sourceLine_A)
    If GUICtrlRead($delAll_R) = $GUI_CHECKED Then
    For $i = UBound($sourceLine_A) - 1 To 1 Step -1
    ; Wenn ';' include dann lasse die Zeile aus
    If StringRegExp($sourceLine_A[$i], '(?i)#include[ ]*[<"' & "'][ ]*(.*?\.au3)(?=[ ]*[>'" & '"])', 0) = 1 And _
    StringRegExp($sourceLine_A[$i], '(?i);.*[ ]*#include[ ]*[<"' & "']", 0) = 0 Then
    _ArrayDelete($sourceLine_A, $i)
    EndIf
    Next
    ElseIf GUICtrlRead($delUnneeded_R) = $GUI_CHECKED Then
    For $ii = 1 To UBound($red_A) - 1
    For $i = UBound($sourceLine_A) - 1 To 1 Step -1
    If StringRegExp($sourceLine_A[$i], '(?i)#include[ ]*[<"' & "'][ ]*(.*?" & $red_A[$ii] & ')[ ]*[>"' & "']", 0) = 1 And _
    StringRegExp($sourceLine_A[$i], '(?i);.*[ ]*#include[ ]*[<"' & "']", 0) = 0 Then
    _ArrayDelete($sourceLine_A, $i)
    EndIf
    Next
    Next
    EndIf
    Return $sourceLine_A
    EndFunc ;==>_deleteIncludes

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

    Func setIncludes($ToBeIncluded)
    If Not IsArray($ToBeIncluded) Then Return -1
    Local $pattern = '(?i)(?<=\n|\s|\A)#include[ ]*[<"' & "'][ ]*(.*?\.au3)(?=[ ]*[>'" & '"])'
    _GUICtrlListView_SetItemCount($includes_LV, UBound($ToBeIncluded))
    Dim $LV[150]
    ; Create a row for every include and set bk to green
    For $i = 1 To UBound($ToBeIncluded) - 1
    $LV[$count] = GUICtrlCreateListViewItem('#include<' & $ToBeIncluded[$i] & '>' & '|' & $status_A[0], $includes_LV)
    GUICtrlSetBkColor(-1, $neededAndIncluded)
    $count += 1
    ; Is the needed include not in source code then change bk to yellow and delete entry from green array
    If StringRegExp($source, '(?i)#include[ ]*[<"' & "'][ ]*" & $ToBeIncluded[$i] & '[ ]*' & "[>'" & '"]', 0) = 0 Or _
    StringRegExp($source, '(?i);[ ]*(?i)#include[ ]*[<"' & "'][ ]*" & $ToBeIncluded[$i] & '[ ]*' & "[>'" & '"]', 0) = 1 Then
    _GUICtrlListView_SetItemText($includes_LV, $i - 1, $status_A[1], 1)
    GUICtrlSetBkColor(-1, $neededNotIncluded)
    _ArrayAdd($yellow_A, $ToBeIncluded[$i])
    _ArrayDelete($green_A, _ArraySearch($green_A, $ToBeIncluded[$i]))
    EndIf
    Next
    ; Find all includes in source code. Bk to red if they are not needed
    Local $alreadyIncluded = StringRegExp($source, $pattern, 3)
    ;If IsArray($alreadyIncluded) Then _ArrayDisplay($alreadyIncluded, 'Already')
    If Not @error Then
    For $i = 0 To UBound($alreadyIncluded) - 1
    If _ArraySearch($ToBeIncluded, $alreadyIncluded[$i]) = -1 Then
    $LV[$count] = GUICtrlCreateListViewItem('#include<' & $alreadyIncluded[$i] & '>' & '|' & $status_A[2], $includes_LV)
    GUICtrlSetBkColor(-1, $notNeededButIncluded)
    $count += 1
    _ArrayAdd($red_A, $alreadyIncluded[$i])
    EndIf
    Next
    EndIf
    For $i = 1 To UBound($green_A) - 1
    $green_A[$i] = '#include<' & $green_A[$i] & '>'
    Next
    For $i = 1 To UBound($yellow_A) - 1
    $yellow_A[$i] = '#include<' & $yellow_A[$i] & '>'
    Next
    ; Testausgabe für bereits includierte Includes
    ; _ArrayDisplay($alreadyIncluded, 'Bereits drin')
    If UBound($ToBeIncluded) = 1 Then Return -2
    EndFunc ;==>setIncludes

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

    ; If version number (Stable and beta) changed or ini file doesn't exist then create a new one with _prepareOrganizeIncludes()
    ; Search for needed includes
    Func getIncludes()
    ; Für alle IncludeFolder checken ob sich die Anzahl der au3 Dateien geändert hat. Wenn ja, dann
    ; soll _prepareOrganizeIncludes() aufgerufen werden
    If FileExists($includesIni) = 0 Or _
    (IniRead($includesIni, 'Version', 'Beta', 'Error') <> $betaInstallVersion) Or _
    (IniRead($includesIni, 'Version', 'Stable', 'Error') <> $InstallVersion) Or _
    _checkIncludePathes() Then
    _prepareOrganizeIncludes()
    EndIf
    ;ConsoleWrite('returnCode : ' & _checkIncludePathes() & @CRLF)

    Local $lines_A, $re
    If Not _FileReadToArray($includesIni, $lines_A) Then
    MsgBox(4096, '', 'Error occurred, probably no ini file.')
    Exit
    EndIf

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

    Local $iniContent[1][2]
    Local $count = 1
    For $i = 1 To $lines_A[0] - 1
    If StringInStr($lines_A[$i], '.au3') Then
    $re = StringSplit($lines_A[$i], '=')
    ReDim $iniContent[$count + 1][2]
    $iniContent[$count][0] = $re[1]
    $iniContent[$count][1] = $re[2]
    $count += 1
    EndIf
    Next
    $iniContent[0][0] = UBound($iniContent) - 1

    Local $checkGUIRegisterMsg = 0

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

    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:!> ' & _StringRepeat('-', 100) & '\n')

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

    If StringRegExp($source, '(?i)GUIRegisterMsg[ ]*\(') Then $checkGUIRegisterMsg = 1

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

    For $i = 1 To $iniContent[0][0]
    If $showProgress Then ProgressSet(Round(($i * 100 / $iniContent[0][0])), StringFormat('%05.2f', Round(($i * 100 / $iniContent[0][0]), 2)) & ' %')
    Local $functionsInAU3 = StringSplit($iniContent[$i][1], ';')
    If @error Then
    If StringRegExp($source, '(?i)' & $iniContent[$i][0] & '([ ]+|\()', 0) = 1 Then
    _ArrayAdd($ToBeIncluded, $iniContent[$i][0])
    ExitLoop
    EndIf
    EndIf
    If $checkGUIRegisterMsg Then
    For $ii = 1 To UBound($functionsInAU3) - 1
    If StringRegExp($source, '(?i)\b' & $functionsInAU3[$ii] & '\b([ ]*)\(', 0) = 1 Or _
    StringRegExp($source, '(?i)GUIRegisterMsg[ ]*\([ ]*.*(["' & "']+\b" & $functionsInAU3[$ii] & "\b['" & '"]+[ ]*)') = 1 Or _
    StringRegExp($source, '(?i)\' & $functionsInAU3[$ii] & '(?=\W)', 0) = 1 Then
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:+> ' & $functionsInAU3[$ii] & _StringRepeat(' ', 50 - StringLen($functionsInAU3[$ii])) & '--> ' & $iniContent[$i][0] & '\n')
    _ArrayAdd($ToBeIncluded, $iniContent[$i][0])
    ExitLoop
    EndIf
    Next
    Else
    For $ii = 1 To UBound($functionsInAU3) - 1
    If StringRegExp($source, '(?i)\b' & $functionsInAU3[$ii] & '\b([ ]*)\(', 0) = 1 Or _
    StringRegExp($source, '(?i)\' & $functionsInAU3[$ii] & '(?=\W)', 0) = 1 Then
    ;StringRegExp($source, '(?i)(?<= )\' & $functionsInAU3[$ii] & '(?= )', 0) = 1 Then
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:+> ' & $functionsInAU3[$ii] & _StringRepeat(' ', 50 - StringLen($functionsInAU3[$ii])) & '--> ' & $iniContent[$i][0] & '\n')
    _ArrayAdd($ToBeIncluded, $iniContent[$i][0])
    ExitLoop
    EndIf
    Next
    EndIf
    Next
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:!> ' & _StringRepeat('-', 100) & '\n')
    ;_ArrayDisplay($ToBeIncluded)
    $green_A = $ToBeIncluded
    Return $ToBeIncluded
    EndFunc ;==>getIncludes

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

    Func _setOptions()
    ; Version info
    IniWrite($includesIni, 'Version', 'Beta', $betaInstallVersion)
    IniWrite($includesIni, 'Version', 'Stable', $InstallVersion)
    ; Options
    IniWrite($includesIni, 'Options', 'Green', '0x80FF80')
    IniWrite($includesIni, 'Options', 'Yellow', '0xFFFF80')
    IniWrite($includesIni, 'Options', 'Red', '0xEF3D4A')
    IniWrite($includesIni, 'Options', 'Keyword', ';[Includes]')
    IniWrite($includesIni, 'Options', 'CopyToCliP', 0)
    IniWrite($includesIni, 'Options', 'Del', 0)
    IniWrite($includesIni, 'Options', 'Place', 0)
    IniWrite($includesIni, 'Options', 'SilentMode', 0)
    IniWrite($includesIni, 'Options', 'AutoRestart', 1)
    IniWrite($includesIni, 'Options', 'Created', @YEAR & '/' & @MON & '/' & @MDAY & ' - ' & @HOUR & ':' & @MIN & ':' & @SEC)
    EndFunc ;==>_setOptions

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

    ; Create new includes.ini with funcs and seetings/options
    Func _prepareOrganizeIncludes()
    ; ConsoleWrite('_prepareOrganizeIncludes ' & @CRLF)
    ; Includes
    Local $functions, $FileList
    For $ii = 0 To UBound($includesPathes_A) - 1
    $FileList = _FileListToArray($includesPathes_A[$ii], '*.au3', 1)
    If @error = 1 Then ContinueLoop

    For $i = 1 To UBound($FileList) - 1
    If StringInStr($FileList[$i], 'Constants') = 0 Then
    ; Untersuchung der Funktionen
    ;ConsoleWrite($i & ' : ' & $includesPathes_A[$ii] & $FileList[$i] & @CRLF)
    $functions = StringRegExp(FileRead(FileOpen($includesPathes_A[$ii] & $FileList[$i], 0)), '(?i)(?<=Func )[0-9a-zA-Z_]+[ ]{0,}(?=\()', 3)
    If IsArray($functions) And UBound($functions) > 1 Then
    IniWrite($includesIni, 'Functions', $FileList[$i], _ArrayToString($functions, ';'))
    ElseIf IsArray($functions) Then
    IniWrite($includesIni, 'Functions', $FileList[$i], $functions[0])
    EndIf
    Else
    ; Untersuchung der Konstanten
    ;ConsoleWrite($i & ' x: ' & $includesPathes_A[$ii] & $FileList[$i] & @CRLF)
    $functions = StringRegExp(FileRead(FileOpen($includesPathes_A[$ii] & $FileList[$i], 0)), '(?i)(?<=Global Const )\$\w*', 3)
    If IsArray($functions) And UBound($functions) > 1 Then
    IniWrite($includesIni, 'Constants', $FileList[$i], _ArrayToString($functions, ';'))
    ElseIf IsArray($functions) Then
    IniWrite($includesIni, 'Constants', $FileList[$i], $functions[0])
    EndIf
    EndIf
    Next
    Next
    IniWrite($includesIni, 'Options', 'Created', @YEAR & '/' & @MON & '/' & @MDAY & ' - ' & @HOUR & ':' & @MIN & ':' & @SEC)
    _saveIncludePathesToIni()
    EndFunc ;==>_prepareOrganizeIncludes

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

    ; Create the GUI
    Func _createGUI()
    $GUI = GUICreate('Organize Includes for AutoIt by Xenobiologist', 606, 546, 196, 50, $WS_SYSMENU)
    GUICtrlCreateGroup('', 8, 88, 585, 368)
    $includes_LV = GUICtrlCreateListView('Includes|Status', 24, 112, 553, 321)
    GUICtrlSendMsg($includes_LV, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($includes_LV, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($includes_LV)]
    GUICtrlSetFont($includes_LV, 10, 600, '', 'Trebuchet MS')
    _GUICtrlListView_SetColumnWidth($includes_LV, 0, 400)
    _GUICtrlListView_SetColumnWidth($includes_LV, 1, $LVSCW_AUTOSIZE_USEHEADER)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateLabel('Autoit', 8, 16, 100, 21, $SS_SUNKEN)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 700)
    GUICtrlCreateLabel('Autoit Beta', 8, 40, 100, 21, $SS_SUNKEN)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 700)
    GUICtrlCreateLabel('Filename', 8, 64, 100, 21, $SS_SUNKEN)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 700)
    $filename_I = GUICtrlCreateInput('', 112, 64, 481, 21)
    $betaVersion_I = GUICtrlCreateInput('', 112, 40, 81, 21)
    $autoitVersion_I = GUICtrlCreateInput('', 112, 16, 81, 21)
    $organize_B = GUICtrlCreateButton('Organize includes', 8, 462, 187, 25, 0)
    GUICtrlSetTip(-1, 'Start organize includes', 'Start script', 1, 1)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 600)

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

    $openIni_B = GUICtrlCreateButton('Open ini', 200, 462, 100, 25, 0)
    GUICtrlSetTip(-1, 'Options and settings for the "Organize Includes" script', 'Open ini file', 1, 1)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 600)

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

    $renewIni_B = GUICtrlCreateButton('Renew ini', 303, 462, 100, 25, 0)
    GUICtrlSetTip(-1, 'New scan for funcs in include folders', 'Renew ini file', 1, 1)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 600)

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

    $exit_B = GUICtrlCreateButton('Exit', 408, 462, 187, 25, 0)
    GUICtrlSetTip(-1, 'Exit' & @TAB & @TAB & @TAB & '- settings will be saved' & @CRLF & _
    'Exit without saving' & @TAB & '- by leaving with the cross', 'Exit script', 1, 1)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 11, 600)
    $status_SB = _GUICtrlStatusBar_Create($GUI, $parts_SB, $text_SB)
    GUIStartGroup()
    $delAll_R = GUICtrlCreateRadio('Remove all', 210, 16, 120, 15)
    GUICtrlSetTip(-1, 'Remove all' & @TAB & @TAB & ' - remove all includes of your script' & @CRLF & _
    'Remove unneeded ' & @TAB & ' - remove all not needed includes of your script' & @CRLF & _
    'Remove nothing ' & @TAB & ' - do not remove includes of your script', 'Remove includes', 1, 1)
    $delUnneeded_R = GUICtrlCreateRadio('Remove unneeded', 210, 32, 120, 15)
    $delNothing_R = GUICtrlCreateRadio('Remove nothing', 210, 48, 120, 15)
    GUIStartGroup()

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

    Switch IniRead($includesIni, 'Options', 'Del', '0')
    Case 0
    GUICtrlSetState($delAll_R, $GUI_CHECKED)
    Case 1
    GUICtrlSetState($delUnneeded_R, $GUI_CHECKED)
    Case 2
    GUICtrlSetState($delNothing_R, $GUI_CHECKED)
    EndSwitch

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

    GUIStartGroup()
    $placeAfterKeyWord_R = GUICtrlCreateRadio('Place after keyword', 355, 16, 120, 15)
    GUICtrlSetTip(-1, 'Insert the inculdes at top of your script or' & @CRLF & _
    'place the includes after a special keyword.', 'Insert includes', 1, 1)
    $placeAtTop_R = GUICtrlCreateRadio('Place at top', 355, 32, 120, 15)
    GUIStartGroup()

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

    $keyword_I = GUICtrlCreateInput(IniRead($includesIni, 'Options', 'Keyword', ';[includes]'), 480, 10, 113, 21)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetFont(-1, 9.5, 800)
    GUICtrlSetTip(-1, 'Keyword to search for. Includes are placed after this line.', 'Keyword', 1, 1)
    If IniRead($includesIni, 'Options', 'Place', '0') = 1 Then
    GUICtrlSetState($placeAtTop_R, $GUI_CHECKED)
    GUICtrlSetState($keyword_I, $GUI_HIDE)
    Else
    GUICtrlSetState($placeAfterKeyWord_R, $GUI_CHECKED)
    GUICtrlSetState($keyword_I, $GUI_SHOW)
    EndIf

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

    $copyToClipBoard_CB = GUICtrlCreateCheckbox('Copy to clipboard', 355, 48, 120, 15)
    GUICtrlSetTip(-1, 'Copy the includes to clipboard.', 'Copy to clipboard', 1, 1)
    If IniRead($includesIni, 'Options', 'CopyToClip', '0') = 1 Then GUICtrlSetState($copyToClipBoard_CB, $GUI_CHECKED)

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

    $autoRestart_CB = GUICtrlCreateCheckbox('AutoRestart', 480, 32, 120, 15)
    GUICtrlSetTip(-1, 'AutoRestart ' & @TAB & '- Automatically restarts script after pressing organize includes button', 'AutoRestart', 1, 1)
    If IniRead($includesIni, 'Options', 'AutoRestart', '0') = 1 Then GUICtrlSetState($autoRestart_CB, $GUI_CHECKED)

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

    $silentMode_CB = GUICtrlCreateCheckbox('Silent Mode', 480, 48, 120, 15)
    GUICtrlSetTip(-1, 'Checked ' & @TAB & '- Next start will do an oragnize includes without GUI.' & @CRLF & _
    'Once checked and restarted you can only deacitvate silent mode by changend value in the ini to SilentMode=0 or ' & @CRLF & _
    'by starting the script with parameter silentOff.', 'Silent Mode', 1, 1)
    If IniRead($includesIni, 'Options', 'SilentMode', '0') = 1 Then GUICtrlSetState($silentMode_CB, $GUI_CHECKED)
    $restart_B = GUICtrlCreateButton('Restart/Refresh', 200, 435, 203, 19)
    GUICtrlSetTip(-1, 'Restarts "organize includes". Behaves like a refresh.', 'Restart/Refresh', 1, 1)
    EndFunc ;==>_createGUI

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

    ; Save seetings before exit
    Func _exit()
    If GUICtrlRead($placeAfterKeyWord_R) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'Keyword', GUICtrlRead($keyword_I))
    EndIf
    If GUICtrlRead($copyToClipBoard_CB) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'CopyToClip', 1)
    Else
    IniWrite($includesIni, 'Options', 'CopyToClip', 0)
    EndIf

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

    If GUICtrlRead($delAll_R) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'Del', 0)
    ElseIf GUICtrlRead($delUnneeded_R) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'Del', 1)
    ElseIf GUICtrlRead($delNothing_R) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'Del', 2)
    EndIf

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

    If GUICtrlRead($placeAfterKeyWord_R) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'Place', 0)
    Else
    IniWrite($includesIni, 'Options', 'Place', 1)
    EndIf

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

    If GUICtrlRead($silentMode_CB) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'SilentMode', 1)
    Else
    IniWrite($includesIni, 'Options', 'SilentMode', 0)
    EndIf

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

    If GUICtrlRead($autoRestart_CB) = $GUI_CHECKED Then
    IniWrite($includesIni, 'Options', 'AutoRestart', 1)
    Else
    IniWrite($includesIni, 'Options', 'AutoRestart', 0)
    EndIf

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

    If $InstallVersion <> IniWrite($includesIni, 'Version', 'Stable', $InstallVersion) Then
    IniWrite($includesIni, 'Version', 'Stable', $InstallVersion)
    EndIf

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

    If $betaInstallVersion = IniWrite($includesIni, 'Version', 'Beta', $betaInstallVersion) Then
    IniWrite($includesIni, 'Version', 'Beta', $betaInstallVersion)
    EndIf
    EndFunc ;==>_exit

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

    ; Sort the listview items
    Func _sortLV()
    Local $iCol[2] = [0]
    _GUICtrlListView_SimpleSort($includes_LV, $B_DESCENDING, $iCol)
    For $i = 0 To $count - 1
    Switch _GUICtrlListView_GetItemText($includes_LV, $i, 1)
    Case $status_A[0]
    GUICtrlSetBkColor($LV[$i], $neededAndIncluded)
    Case $status_A[1]
    GUICtrlSetBkColor($LV[$i], $neededNotIncluded)
    Case $status_A[2]
    GUICtrlSetBkColor($LV[$i], $notNeededButIncluded)
    EndSwitch
    Next
    EndFunc ;==>_sortLV

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

    Func _restart()
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'menucommand:420')
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Script is restarting ...', 1)
    Run('"' & @AutoItExe & '" ' & '/AutoIt3ExecuteScript "' & @ScriptFullPath & '" ' & @AutoItPID, '', @SW_HIDE)
    Exit (0)
    EndFunc ;==>_restart

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

    Func _renewIni()
    If IniDelete($includesIni, 'Functions') Then
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'Funcs in includes.ini deleted', 1)
    Local $includePathSection = IniReadSection($includesIni, 'IncludePath')
    If Not @error Then
    For $i = 1 To $includePathSection[0][0]
    If _ArraySearch($includesPathes_A, $includePathSection[$i][0] & '\') = -1 Then
    _ArrayInsert($includesPathes_A, 0, $includePathSection[$i][0] & '\')
    EndIf
    Next
    EndIf
    _prepareOrganizeIncludes()
    Else
    _GUICtrlStatusBar_SetText($status_SB, @TAB & 'includes.ini could not be renewed', 1)
    EndIf
    EndFunc ;==>_renewIni

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

    Func _setUDFs()
    For $i = 1 To UBound($includesPathes_A) - 1
    GUICtrlCreateListViewItem($includesPathes_A[$i], $udf_LV)
    Next
    EndFunc ;==>_setUDFs

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

    ; Send command to SciTE
    Func SendSciTE_Command($My_Hwnd, $Scite_hwnd, $sCmd)
    $sCmd = ':' & $My_Dec_Hwnd & ':' & $sCmd
    ;ConsoleWrite('-->' & $sCmd & @LF)
    Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
    DllStructSetData($CmdStruct, 1, $sCmd)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
    DllStructSetData($COPYDATA, 1, 1)
    DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
    DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
    DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
    'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
    'Ptr', DllStructGetPtr($COPYDATA))
    EndFunc ;==>SendSciTE_Command

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

    ; Received Data from SciTE
    Func MY_WM_COPYDATA($hWnd, $msg, $wParam, $lParam)
    Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr', $lParam)
    Local $SciTECmdLen = DllStructGetData($COPYDATA, 2)
    Local $CmdStruct = DllStructCreate('Char[255]', DllStructGetData($COPYDATA, 3))
    $SciTECmd = StringLeft(DllStructGetData($CmdStruct, 1), $SciTECmdLen)
    EndFunc ;==>MY_WM_COPYDATA

    [/autoit]

    Feature : Die Version bemerkt automatisch wenn eine neue au3 Datei in einen der angegebenen Ordner kopiert wurde, sodass diese automatisch mit gecannt wird.

    Danke!

    Mega

    • Offizieller Beitrag

    Hallo

    Hübsches Feature ;)
    Aber ich frage mich warum du das mit dem Output so kompliziert machst ;) Reicht doch einfach ConsoleWrite?!

    Also statt
    SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, 'output:+> OrganizeIncludes AutoIt3 ' & $scriptVersion & ' Copyright ' & chr(169) & ' Th.Meger ' & $date)
    Einfach
    ConsoleWrite("+> OrganizeIncludes AutoIt3 ' & $scriptVersion & ' Copyright ' & chr(169) & ' Th.Meger ' & $date)

    Mfg Spider

  • Hi,
    hab von Version 3.3 auf 3.6 geupdatet mit der aktuellen Final 3.2.10.0

    Nun bekomme ich bei fast allen Scripts deutlich mehr includes angezeigt.

    So z. B.

    = $GUI_EVENT_CLOSE -- GUIConstantsEx.au3
    = $SS_CENTERIMAGE -- StaticConstants.au3
    = $tagNMHDR -- StructureConstants.au3
    = $WS_BORDER -- WindowsConstants.au3

    diese sind doch unnötig oder???

    • Offizieller Beitrag

    Hi,

    das kommt auf dein Skript drauf an. Die Frage ist, ob die Includes bereits in anderen includes enthalten sind. OI macht keine Prüfung, ob im include ein include ist. Dies kann natürlich dazu führen, dass zu viele includes angezeigt werden. Das sollte aber nichts stören, wenn du einfach vorm compile den Obfuscator mit entsprechenden Parametern startest.

    Mega

  • Hm verstehe ich jetzt nicht so ganz

    $GUI_EVENT_CLOSE ist doch keine Func wie _ichbineinefunc().
    Also dürfte es doch gar nicht berücksichtigt werden, oder irre ich mich da ?(