Der Mülltonnen Thread

  • Hi. Ich habe gedacht ich eröffne mal den Mültonnen Thread.

    Hier könnte man vllt Projekte Post, die zwar schon funktions Fähig sind, aber halt noch nicht komplett. Oder wenn ihr fast fertig seit und einfach keine Zeit oderso habt.


    Ich fang gleich mal an:

    Ich wollte ein Script machen, das eine Setup.exe erstellt.

    Zuvor werden natürlich die Dateien usw. Hinzugefügt ....

    Aber ich komme nicht weiter und ich denke die Probleme (AutoIt Abstürze ab 1000 Dateien) usw können nur schwer oder warschienlich garnicht behoben werden.

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

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

    FileInstall("Installer Logo.jpg", @TempDir & "\Installer Logo.jpg")
    FileInstall("Installer.au3", @TempDir & "\Installer.au3")
    FileInstall("Installation GUI.au3", @TempDir & "\Installation GUI.au3")

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

    #Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\lenny\eigene dateien\wichtig install creater.kxf
    $Installation = GUICreate("Installation Script Creater.", 474, 372, 193, 134, -1, 0x00000018)
    GUISetBkColor(0xFFFFFF)
    $Label1 = GUICtrlCreateLabel("Fügen sie die Dateien über Drag and Drop hinzu, oder benutzen sie den *Hinzufügen* Button.", 8, 8, 445, 17, -1)
    $Edit1 = GUICtrlCreateEdit("", 8, 40, 329, 321, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $ES_READONLY, $WS_VSCROLL, $WS_HSCROLL))
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button1 = GUICtrlCreateButton("Datei Hizufügen", 352, 40, 107, 25, 0)
    $Button2 = GUICtrlCreateButton("Löschen", 352, 120, 107, 25, 0)
    $Button3 = GUICtrlCreateButton("Ordner Hizufügen", 352, 80, 107, 25, 0)
    $Button5 = GUICtrlCreateButton("Struktur Anzeigen", 352, 160, 107, 25, 0)
    $Button4 = GUICtrlCreateButton("Weiter", 352, 328, 105, 33, 0)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Func _gui2()
    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Lenny\Eigene Dateien\install creater _ Options.kxf
    Global $InstallationOpt = GUICreate("Installation Script Creater.", 474, 374, 193, 134)
    GUISetBkColor(0xFFFFFF)
    Global $Label1a = GUICtrlCreateLabel("Stellen sie die übrigen Optionen ein:", 16, 8, 217, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    Global $Button2a = GUICtrlCreateButton("Durchsuchen", 352, 272, 107, 25, 0)
    Global $Button4a = GUICtrlCreateButton("Installationsprogramm erstellen!", 16, 328, 441, 33, 0)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    Global $Label2a = GUICtrlCreateLabel("Titel des Installations Programms:", 16, 56, 160, 17)
    Global $Input3a = GUICtrlCreateInput("", 16, 80, 313, 21)
    Global $Label3a = GUICtrlCreateLabel("AGB des Installations Programms:", 16, 120, 162, 17)
    Global $Input2a = GUICtrlCreateInput("", 16, 144, 313, 21)
    Global $Label4a = GUICtrlCreateLabel("Hersteller:", 16, 184, 51, 17)
    Global $Input1a = GUICtrlCreateInput("", 16, 208, 313, 21)
    Global $Label5a = GUICtrlCreateLabel("[Icon]", 16, 272, 31, 17)
    Global $Input4a = GUICtrlCreateInput("", 72, 272, 257, 21)
    Global $Button1a = GUICtrlCreateButton("Durchsuchen", 352, 144, 107, 25, 0)
    GUISetState(@SW_SHOW)

    While 2
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1a
    $hAgb = FileOpenDialog("AGB", @WorkingDir, "TXT Dateien (*.txt)")
    GUICtrlSetData($Input2a, $hAgb)
    GUICtrlSetState($Input2a, $GUI_DISABLE)
    Case $Button2a
    $hIco = FileOpenDialog("ICONs 32x32", @WorkingDir, "Ico Dateien (*.ico)")
    GUICtrlSetData($Input4a, $hIco)
    GUICtrlSetState($Input4a, $GUI_DISABLE)
    Case $Button4a
    _FileWriteToLine(@TempDir & "\Installer.au3", 8, 'FileInstall("' & GUICtrlRead($Input2a) & '",@Tempdir & "\agb.txt")')
    $lInOp = FileOpen(@TempDir & "\Installer.au3", 1)
    $hInstaller = StringSplit($hFiles, @CRLF, 1)
    $2count = $hInstaller[0]

    For $i = 1 To $2count - 1
    If FileGetAttrib($hInstaller[$i]) = "D" Then
    $StartPfad = $hInstaller[$i]
    $FileTyp = '*'

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

    $aFiles = _GetFilesFolder_Rekursiv($StartPfad, $FileTyp, 0)
    $fileonserver = @UserName & '_' & @MIN & '.txt'

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

    For $i = 1 To $aFiles[0] - 1
    FileWriteLine($lInOp, 'FileInstall("' & $aFiles[$i] & '",$Input1 )')
    If @error Then ExitLoop
    Next
    EndIf
    FileWriteLine($lInOp, 'FileInstall("' & $hInstaller[$i] & '",$Input1 )')

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

    Next
    FileWriteLine($lInOp, 'Endif' & @CRLF & 'Endfunc')
    FileClose($lInOp)
    Sleep(1000)
    EndSwitch

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

    WEnd

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

    EndFunc ;==>_gui2

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $sText = GUICtrlRead($Edit1)
    $hFile = FileOpenDialog("Datei Hinzufügen", @WorkingDir, "All Files (*.*)", 4 + 8)
    GUICtrlSetData($Edit1, $sText & $hFile & @CRLF)
    Case $Button2
    GUICtrlSetData($Edit1, "")
    Case $Button3
    $sText = GUICtrlRead($Edit1)
    $hFolder = FileSelectFolder("Ordner Hinzufügen", @HomeDrive, "", @WorkingDir)
    $aSplit = StringSplit($hFolder, "\")
    $aCount = $aSplit[0]
    GUICtrlSetData($Edit1, $sText & $hFolder & @CRLF)
    Case $Button5
    If GUICtrlRead($Button5) = "Struktur Anzeigen" Then
    Global $Old = GUICtrlRead($Edit1)
    GUICtrlSetState($Edit1, $GUI_NODROPACCEPTED)
    GUICtrlSetData($Button5, "Pfad Anzeigen")
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button3, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    $sTexto = GUICtrlRead($Edit1)
    If $sTexto = "" Then
    Sleep(1000)
    GUICtrlSetData($Button5, "Struktur Anzeigen")
    Else
    GUICtrlSetData($Edit1, "")
    $hNew = StringSplit($Old, @CRLF, 1)
    For $i = 1 To $hNew[0] - 1
    $aNew = StringSplit($hNew[$i], "\")
    $count = $aNew[0]
    $iText = GUICtrlRead($Edit1)
    If FileGetAttrib($hNew[$i]) = "D" Then
    GUICtrlSetData($Edit1, $iText & "\" & $aNew[$count] & "\ Alle Dateien." & @CRLF)
    Else
    GUICtrlSetData($Edit1, $iText & "\" & $aNew[$count] & @CRLF)
    EndIf

    Next
    EndIf
    Else
    GUICtrlSetData($Edit1, $Old)
    GUICtrlSetState($Edit1, $GUI_DROPACCEPTED)
    GUICtrlSetData($Button5, "Struktur Anzeigen")
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    EndIf
    Case $Button4
    GUISetState(@SW_HIDE)
    Global $hFiles = GUICtrlRead($Edit1)
    _gui2()
    EndSwitch
    WEnd

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

    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, 1), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, 1)
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    Das ist das HauptScript. Es ist 100 % Funktionstüchtig und schreibt auch alle FileInstalls soweit korrekt in die Installer.au3.

    Ab 1000 Dateien aber kann man das script nicht mehr ausführen. Memory Fehler usw.

    Die Zusätzlichen dateien die Ihr bracuht findet ihr in dem Zip Archiv das ich rangehängt habe.

    Die Funktionen Titel und Icon sind noch nicht Funktionstüchtig.

    Außerdem habe ich an der Struktur nicht weiter gearbeitet (Jetzt Installiert er alle Dateien in den Selben Ordner.)

    Aber ich denke im Großen und ganzen ist das Script, bis auf die begrenzung der Dateien, für mich, als Anfänger, ganz okay.


    Und Vllt kann irgendjemand auf dieser kleien Welt noch etwas damit anfangen ;)

    Naja.

    Lg,

    Lenny

    Ps. Ich würde die Installation GUI.au3 und die Installer.au3 nicht verändern. Auszuführen ist denn natürlich die Install Maker.au3. Die anderen beiden werden erst Dynamisch geschrieben.

    Jaja, Moo does the Cow!