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

Beiträge von dieselwiesel

  • Button mit transp. Icon und Farbänderung

    • dieselwiesel
    • 26. Mai 2013 um 23:55

    Hi, möchte gern einen Button mit einem transp. Icon versehen. Der Button soll sich je nach Zustand einfärben, z.B. wenn ein Dienst aktiv ist soll er grün sein - ist er inaktiv dann rot. Hab schon einiges gefunden, aber irgendwie krieg ich es nicht so recht hin.

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form1", 414, 306, 302, 218)
    $Button1 = GUICtrlCreateButton("", 6, 122, 400, 60)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -14, 190, 136, 32, 32)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]


    z.B. das Icon, es bringt die Farbe der GUI anstatt des Buttons 8| Hat einer von euch nen Tip für mich? Danke schonmal im Voraus.

  • Progressbar für FileCopy

    • dieselwiesel
    • 2. Mai 2013 um 10:14

    Hallo, muss den Thread nochmal hoch holen weil eine neue Option rein soll, ich aber nicht weis ob und wie es geht...

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $check = GUICtrlCreateCheckbox("Verschieben statt kopieren", 30, 10, 145, 17)
    $Combo1 = GUICtrlCreateCombo("", 190, 10, 60, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "1|2|3|4|5", "5")
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    $Label1 = GUICtrlCreateLabel("%", 221, 130, 35, 17, $SS_CENTERIMAGE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $data[4]
    $data[0] = @ScriptDir & '\dateiA*.zip' ;Die Updatedateien sind fortlaufend numeriert, also dateiA001...002...003 usw. darum eine Wildcard wenn mehrere vorhanden sind.
    $data[1] = @ScriptDir & '\dateiB*.zip' ;Sie sollen auch nur Dateien kopiert werden, die in der ScriptDir sind.
    $data[2] = @ScriptDir & '\dateiC*.zip'
    $data[3] = @ScriptDir & '\dateiD*.zip'
    $alle = @ScriptDir & '\datei*.zip'
    Global $dir[4][2]
    $dir[0][0] = '\meinprogramm\1\update\'
    $dir[1][0] = '\meinprogramm\2\update\'
    $dir[2][0] = '\meinprogramm\3\update\'
    $dir[3][0] = '\meinprogramm\4\update\'

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

    Func _SplitPath($sPath)
    ;splittet in DateiPfad und Datei (-filter)
    ;Autor autoBert
    Local $aLocalPath = StringSplit($sPath, "\")
    Local $aRet[2]
    If $aLocalPath[0] > 1 Then
    Local $sTmp = $aLocalPath[1] & "\"
    For $i = 2 To $aLocalPath[0] - 1
    $sTmp &= $aLocalPath[$i]
    $sTmp &= "\"
    Next
    $aRet[1] = $aLocalPath[$aLocalPath[0]]
    $aRet[0] = $sTmp
    EndIf
    Return $aRet
    EndFunc ;==>_SplitPath

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

    Func _prog($sLW)
    Local $aToCopy[1]
    For $i = 0 To UBound($dir) - 1
    $dir[$i][1] = 0
    Next
    If Not FileExists($alle) Then
    MsgBox(64, "Info", "Keine Dateien gefunden in " & @ScriptDir)
    ElseIf FileExists($sLW & "\meinprogramm\meine.exe") Then
    For $i = 0 To UBound($data) - 1
    $aPath = _SplitPath($data[$i])
    $aTmp = _FileListToArray($aPath[0], $aPath[1])
    _ArrayConcatenate($aToCopy, $aTmp, 1)
    Next
    $aToCopy[0] = UBound($aToCopy) - 1
    _ArrayDisplay($aToCopy)
    For $i = 1 To $aToCopy[0]
    For $j = 0 To UBound($data) - 1
    If @ScriptDir & "\" & StringLeft($aToCopy[$i], 6) & "*.zip" = $data[$j] Then
    ConsoleWrite(@ScriptDir & "\" & $aToCopy[$i] & " ==> " & $sLW & $dir[$j][0] & $aToCopy[$i] & @TAB)
    If FileCopy(@ScriptDir & "\" & $aToCopy[$i], $sLW & $dir[$j][0] & $aToCopy[$i], 1) Then
    ConsoleWrite("OK" & @CRLF)
    $dir[$j][1] += 1
    Else
    ConsoleWrite("FAILED" & @CRLF)
    EndIf
    EndIf
    Next
    $iPercent = Int($i / $aToCopy[0] * 100)
    GUICtrlSetData($Progress1, $iPercent)
    GUICtrlSetData($Label1,$iPercent & '%')
    Sleep(150)
    Next
    ;_ArrayDisplay($dir)
    Else
    MsgBox(64, "Fehler", "Meinprog.exe nicht gefunden")
    EndIf
    EndFunc ;==>_prog

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $check
    If BitAND(GUICtrlRead($check), $GUI_CHECKED) = $GUI_CHECKED Then
    GUICtrlSetState($Combo1, $GUI_ENABLE)
    Else
    GUICtrlSetState($Combo1, $GUI_DISABLE)
    EndIf
    Case $cprog
    _prog("c:")
    Case $dprog
    _prog("d:")
    Case $eprog
    _prog("e:")
    Case $fprog
    _prog("f:")
    EndSwitch
    WEnd

    [/autoit]


    Es sollen nach aktivieren von "Verschieben statt kopieren" 1 bis 5 Dateisätze (dateiA-D.zip) verschoben (FileMove) werden.

    Also wenn es z.B. dateiA123.zip bis dateiA132.zip gibt sollen max. von dateiA123.zip bis dateiA127.zip verschoben werden (passend dazu auch die Sätze dateiB bis D.zip) - geht das? Wenn ja, über die _prog($sLW) Funktion oder muss es eine Funktion neue werden?

  • GUI blockieren?

    • dieselwiesel
    • 28. April 2013 um 11:20

    Thx :thumbup:

  • GUI blockieren?

    • dieselwiesel
    • 28. April 2013 um 11:00

    Hallo, wollte mal wissen, wie ich die GUI disablen kann wenn eine Msgbox geöffnet ist? Über Suche und Hilfe habe ich z.B. GUI- und WINsetstate gefunden. Habe es mal mit GUISetState(@sw_disable) vor und GUISetState(@sw_enable) hinter der Msgbox probiert, klappt aber nicht so recht - sie bleibt disabled 8|

  • Prozesse aus INI in einer MsgBox auflisten

    • dieselwiesel
    • 23. Februar 2013 um 21:11

    Schöne, das Lüppt... :thumbup: Hatte es auch schon mit ner While Schleife probiert, die war etwas kürzer und funktionierte nicht :rofl:

    [autoit]


    ...
    For $i = 1 To $aProcesses[0] ; Blockende Prozesse schließen.
    While ProcessExists($aProcesses[$i])
    ProcessClose($aProcesses[$i])
    WEnd
    Next
    ...

    [/autoit]
  • Prozesse aus INI in einer MsgBox auflisten

    • dieselwiesel
    • 21. Februar 2013 um 23:27

    Hab im Internet mal gesucht wie man mit AutoIT noch alle Prozesse schliessen kann und bin auf den Taskkill gestossen. Funktionieren tut es, aber was meint Ihr dazu ?( Haben ältere und neuere BS als Win7 auch die Taskkill-Funktion?

    Spoiler anzeigen
    [autoit]


    ...
    For $i = 1 To $aProcesses[0] ; Blockende Prozesse schließen.
    RunWait(@ComSpec & " /c taskkill /f /im " & $aProcesses[$i], @SystemDir, @SW_HIDE)
    Next
    ...

    [/autoit]


    Wie dieme Namen anstatt namen.exe angezeigt werden hab ich auch noch nicht so recht rausbekommen :(

  • Prozesse aus INI in einer MsgBox auflisten

    • dieselwiesel
    • 18. Februar 2013 um 09:47

    Sry, hatte es geändert, damit es Notepad und nicht notepad.exe anzeigt...

    Spoiler anzeigen
    [autoit]


    ...
    $aProcesses[$aProcesses[0]] = $aToCheck[$i][1] ; Name des aktuell getesteten Prozesses hinzufügen
    ;^ hatte ich von 0 auf 1 gesetzt
    ...

    [/autoit]


    Was es nicht macht, alle Prozesse mit dem gleiche Namen zu schliessen - z.B. wenn notepad.exe 3x am laufen ist, wird es nur 1x geschlossen.

  • Prozesse aus INI in einer MsgBox auflisten

    • dieselwiesel
    • 17. Februar 2013 um 22:41

    Joriktos
    Vielen dank, funkt einwandfrei - hätt ich selbst in 100 kalten Wintern nicht hinbekommen! Allerdings macht es nix wenn ich bei der MsgBox auf OK drücke (also beendet die Prozesse nicht - wenn sie laufen).

  • Prozesse aus INI in einer MsgBox auflisten

    • dieselwiesel
    • 17. Februar 2013 um 01:44

    Hallo,

    ich möchte verhindern das mein Script startet wenn Prozesse laufen die in einer INI hinterlegt wurden.

    z.B. INI

    Spoiler anzeigen
    Code
    [prozesse]
    notepad.exe=Notepad
    calc.exe=Rechner
    mspaint.exe=Paint
    ;können auch mehr als 3 sein

    Wie kann ich es überreden, dass er mir die laufenden Prozesse in einer MsgBox wiedergibt? Habe das hier bisher zusammen gebastelt...

    Spoiler anzeigen
    [autoit]


    Global $ini = @ScriptDir & "\prozesse.ini"
    Global $aToCheck = IniReadSection($ini,"prozesse")

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

    For $i = 1 to $aToCheck[0][0]
    if ProcessExists($aToCheck[$i][0]) Then
    $tmp = MsgBox(64+1,"Info","Folgende Eintraege verhindern den Programmstart " & @CRLF & @CRLF & $aToCheck[$i][1] & @CRLF & @CRLF & "Mit OK alle Prozesse schliessen und Programm starten" & @CRLF & "Mit ABBRECHEN spaeter erneut versuchen")
    Switch $tmp
    Case 1 ; OK
    ProcessClose($aToCheck[$i][0])
    Case 2 ; CANCEL
    Exit
    EndSwitch
    EndIf
    Next

    [/autoit]


    ...da wird aber für jeden Prozess eine MsgBox angezeigtund ggf. geschlossen. Denke mal MsgBox und Switch müssten dann raus aus der Schleife, aber wie kann man das Ergebnis der Schleife "zwischenspeichern" um es in der MsgBox wiederzugeben? Geht sowas überhaupt? Danke schonmal im Voraus!

  • Inputbox zu Text Datei

    • dieselwiesel
    • 30. Januar 2013 um 09:59
    Zitat

    1. Wert: z.B. ABCDEFGHIJKLMNOPQ

    3. Wert: da sollten 3 Zeichen (Stelle 7, 8 und 12) aus dem 1. Wert als Vorschlag erscheinen, die aber auch änderbar sein sollen


    Hab das _input3() für dieses Problem ^ ^ mal so gemacht...

    Spoiler anzeigen
    [autoit]


    Func _input3()
    $d = StringMid($x, 7, 2) & StringMid($x, 12, 1)
    If GUICtrlRead($Input3) = "" then GUICtrlSetData($Input3, $d)
    EndFunc

    [/autoit]


    ...da setzt es die Werte wenn nichts drin steht und lässt es wenn schon was eingetragen ist. Aber wie kann man es noch überreden dort nichts zu machen, wenn man die Box manuell leert?

    EDIT: oder einfacher, ist es möglich die Funktion^ ^ nur zu laufen zu lassen wenn $Input1 aktiv ist?

  • Inputbox zu Text Datei

    • dieselwiesel
    • 28. Januar 2013 um 12:39

    @autoBerti
    Steht im Spoiler unterm Script ;)

  • Inputbox zu Text Datei

    • dieselwiesel
    • 27. Januar 2013 um 23:53

    Hallo,

    versuche mal wieder was zusammen zu basteln :D aber an ein paar Sachen hängts halt...

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <Array.au3>
    #include <ProgressConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <GuiComboBox.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form2_1 = GUICreate("Oberflaeche", 274, 230, 348, 249)
    $Button1 = GUICtrlCreateButton("Erstelle txt", 54, 197, 80, 25)
    $Button2 = GUICtrlCreateButton("Beenden", 139, 197, 80, 25)
    $Label1 = GUICtrlCreateLabel("1. Wert", 8, 16, 40, 25)
    $Label2 = GUICtrlCreateLabel("2. Wert", 8, 46, 40, 25)
    $Label3 = GUICtrlCreateLabel("3. Wert", 8, 76, 40, 25)
    $Label4 = GUICtrlCreateLabel("4. Wert", 8, 106, 40, 25)
    $Label5 = GUICtrlCreateLabel("5. Wert", 8, 136, 40, 25)
    $Label6 = GUICtrlCreateLabel("6. Wert", 8, 166, 40, 25)
    $Input1 = GUICtrlCreateInput("", 56, 10, 200, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_UPPERCASE))
    GUICtrlSetLimit(-1, 17, 17)
    $Input2 = GUICtrlCreateCombo("", 106, 40, 150, 21, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    $Input3 = GUICtrlCreateInput("", 56, 70, 200, 21, $ES_UPPERCASE)
    GUICtrlSetLimit(-1, 6, 6)
    $Input4 = GUICtrlCreateInput("", 56, 100, 200, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_UPPERCASE))
    GUICtrlSetLimit(-1, 6, 6)
    $Input5 = GUICtrlCreateInput("", 56, 130, 200, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_UPPERCASE))
    GUICtrlSetLimit(-1, 6, 6)
    $Input6 = GUICtrlCreateInput("", 56, 160, 200, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_MULTILINE,$ES_UPPERCASE,$ES_AUTOVSCROLL,$ES_WANTRETURN))
    $Input7 = GUICtrlCreateInput("", 56, 40, 45, 21, BitOR($ES_READONLY, $SS_Center))
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetState ()

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

    Func _save()
    Global $Dir = @ScriptDir
    global $sIni = @ScriptDir & "\meine.ini"
    Global $data[6]
    $data[0] = GUICtrlRead($Input1)
    $data[1] = GUICtrlRead($Input2)
    $data[2] = GUICtrlRead($Input3)
    $data[3] = GUICtrlRead($Input4)
    $data[4] = GUICtrlRead($Input5)
    $data[5] = GUICtrlRead($Input6)

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

    global $wert[5]
    $wert[0] = StringMid($data[0], 7, 2)
    $wert[1] = StringMid($data[0], 10, 8)
    $wert[2] = StringLeft($data[0], 6)
    $wert[3] = StringMid($data[0], 9,1)
    $wert[4] = StringLeft($data[5], 3)

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

    Global $ausgabe[3]
    $ausgabe[0] = StringTrimLeft($data[5],3)
    $ausgabe[1] = StringRegExpReplace($ausgabe[0], '(.{3})', '$1X')
    $ausgabe[2] = StringTrimRight($ausgabe[1], 1)

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

    $save = FileSaveDialog("",$Dir ,"Textdatei (*.txt)",16 , $data[0])
    If $save Then $save &= ".txt"
    FileWrite($save, $wert[0] & $wert[1] & ";" & $wert[2] & $wert[3] & ";" & $data[1] & ";" & $data[2] & ";" & $wert[4] & "/;" & $data[3] & ";" & $data[4] & ";X" & $ausgabe[2])
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _save()
    Case $Button2
    Exit
    Case _input7()
    ;Case _input2()
    ;Case _input3()

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

    EndSwitch
    WEnd

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

    Func _input7()
    Global $x = GUICtrlRead($Input1)
    $y = StringMid($x, 10, 1)
    GUICtrlSetData($Input7, $y)
    EndFunc

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

    #cs
    Func _input2()
    Local $var = IniRead("meine.ini", "wert", $x, "")
    GUICtrlSetData($Input2, $var)
    EndFunc

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

    Func _input3()
    $d = StringMid($x, 7, 2) & StringMid($x, 12, 1)
    GUICtrlSetData($Input3, $d)
    EndFunc
    #ce

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

    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode, $nID
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $Input2 And $nNotifyCode = 5 Then _GUICtrlComboBox_SetEditText($Input2, StringRegExpReplace(StringLeft(GUICtrlRead($Input2), 4), '[^0-9]', ''))
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    1. Wert: z.B. ABCDEFGHIJKLMNOPQ (-> das soll dann auch der Dateiname werden)
    2. Wert: erscheint dann J ($Input7; aus dem 1. Wert) und in der ComboBox nebenan sollen dann die Vorschläge aus der INI kommen oder selbst eine Zahl eingetragen werden kann/soll.
    3. Wert: da sollten 3 Zeichen (Stelle 7, 8 und 12) aus dem 1. Wert als Vorschlag erscheinen, die aber auch änderbar sein sollen
    4. Wert: so wie er ist
    5. Wert: so wie er ist
    6. Wert: z.B. 123456789101112 die ersten 3 Stellen werden an anderer Stelle gespeichert, der Rest wird alle 3 Zeichen mit einem X versehen

    Die INI dazu soll so ausschauen:

    Spoiler anzeigen
    Code
    [wert]
    0=1271|1542|1912
    1=1174|1884|1994
    2=
    3=
    4=
    5=
    6=
    7=
    8=
    9=
    A=
    B=
    C=
    D=
    E=
    F=
    G=
    H=
    I=
    J=1756|1898|2001|
    K=
    L=
    M=
    N=
    O=
    P=
    Q=
    R=
    S=
    T=
    U=
    V=
    W=
    X=
    Y=
    Z=
    Alles anzeigen

    Am Ende soll die Datei so aussehen:

    Code
    GHJKLMNOPQ;ABCDEFI;1756;GHJ---;123/;XXXXXX;YYYYYY;X456X789X101X112

    Die Ansätze habe ich so beim durchsuchen des Boards gefunden. Funktionieren aber mehr schlecht als recht :(

    Ausserdem haut irgendwas beim Speichern nicht so recht hin. Beim ersten mal auf den Erstelle txt Button gehts eigentlich ganz normal. Wenn man noch einmal drauf drückt oder eine gleichnamige Datei existiert, dann wird alles nocheinmal angefügt bzw. eine Datei Namens Datei.txt.txt erstellt ?(


    Danke euch schonmal... :thumbup:

  • Werte in INI Datei ändern?

    • dieselwiesel
    • 27. Januar 2013 um 00:31

    i2c
    Die gleiche Funktion hats auf jeden Fall! Thx dafür!

    Speichere mir sonst auch sämtl. Scripte/Schnipsel ab, die ich bei der Suche finden konnte und mir irgendwann mal weiterhelfen können - ausser dieses... :(

  • Werte in INI Datei ändern?

    • dieselwiesel
    • 25. Januar 2013 um 23:48

    Es waren einige MsgBox in einer Funktion mir Variable, hab noch kein ähnl. Bsp. wieder gefunden.

    Bruchstücke die mir noch so im Kopf rumschwirren...

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    _message(1)
    _message(2)
    _message(3)

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

    Func _message($var)
    1 = MsgBox(64, "blabla")
    2 = MsgBox(0, "tralala")
    3 = MsgBox(64, "usw.")
    Endfunc

    [/autoit]


    Hatte es auch HIER drüber versucht, aber ohne Erfolg.

  • Werte in INI Datei ändern?

    • dieselwiesel
    • 23. Januar 2013 um 23:06

    Mist, hier gabs noch nen Beitrag vom User IPU - beides weg ?(

    @Mods/Admin(s)
    Lässt sich der Beitrag vllt. irgendwie wiederherstellen?

  • Progressbar für FileCopy

    • dieselwiesel
    • 21. Januar 2013 um 23:01

    autoBert
    Alles supi, jetzt lüppts wunderprächtig [Blockierte Grafik: http://www.greensmilies.com/smile/smiley_emoticons_anbeten01.gif]

    Hab jetzt noch ein bißchen dran rumgespielt und ne % Anzeige reingebastelt.

    Spoiler anzeigen
    [autoit]


    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    $Label1 = GUICtrlCreateLabel("%", 221, 130, 35, 17, $SS_CENTERIMAGE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $iPercent = $i / $aToCopy[0] * 100
    GUICtrlSetData($Progress1, $iPercent)
    GUICtrlSetData($Label1,$iPercent & '%')

    [/autoit]


    Das funktioniert auch soweit ganz gut. Das einzigste was nervt/stört ist, wenn es mehrere Dateien sind zeigt es hinter der Kommastelle an. Kann man das mit Step 5 oder 10 (oder whatever) regeln und wenn ja - wo kommt das hin 8| ?

    Hab es auch mal auf [gelöst] gestellt, da die eigentliche Problematik erledigt ist.

  • Progressbar für FileCopy

    • dieselwiesel
    • 21. Januar 2013 um 16:37

    autoBert
    Hab das jetzt so mit der MsgBox gelöst, hoffe das ist richtig? Funktionieren tut es auch wenn es vllt. umständlich gemacht ist...

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $data[4]
    $data[0] = @ScriptDir & '\dateiA*.zip' ;Die Updatedateien sind fortlaufend numeriert, also dateiA001...002...003 usw. darum eine Wildcard wenn mehrere vorhanden sind.
    $data[1] = @ScriptDir & '\dateiB*.zip' ;Sie sollen auch nur Dateien kopiert werden, die in der ScriptDir sind.
    $data[2] = @ScriptDir & '\dateiC*.zip'
    $data[3] = @ScriptDir & '\dateiD*.zip'
    $alle = @ScriptDir & '\datei*.zip'
    Global $dir[4][2]
    $dir[0][0] = '\meinprogramm\1\update\'
    $dir[1][0] = '\meinprogramm\2\update\'
    $dir[2][0] = '\meinprogramm\3\update\'
    $dir[3][0] = '\meinprogramm\4\update\'

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

    Func _SplitPath($sPath)
    ;splittet in DateiPfad und Datei (-filter)
    ;Autor autoBert
    Local $aLocalPath = StringSplit($sPath, "\")
    Local $aRet[2]
    If $aLocalPath[0] > 1 Then
    Local $sTmp = $aLocalPath[1] & "\"
    For $i = 2 To $aLocalPath[0] - 1
    $sTmp &= $aLocalPath[$i]
    $sTmp &= "\"
    Next
    $aRet[1] = $aLocalPath[$aLocalPath[0]]
    $aRet[0] = $sTmp
    EndIf
    Return $aRet
    EndFunc ;==>_SplitPath

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

    Func _prog($sLW)
    Local $aToCopy[1]
    If Not FileExists($alle) Then
    MsgBox(64, "Info", "Keine Dateien gefunden in " & @ScriptDir)
    ElseIf FileExists($sLW & "\meinprogramm\meine.exe") Then
    For $i = 0 To UBound($data) - 1
    $aPath = _SplitPath($data[$i])
    $aTmp = _FileListToArray($aPath[0], $aPath[1])
    _ArrayConcatenate($aToCopy, $aTmp, 1)
    Next
    $aToCopy[0] = UBound($aToCopy) - 1
    ;_ArrayDisplay($aToCopy)
    For $i = 1 To $aToCopy[0]
    For $j = 0 To UBound($data) - 1
    If @ScriptDir & "\" & StringLeft($aToCopy[$i], 6) & "*.zip" = $data[$j] Then
    ConsoleWrite(@ScriptDir & "\" & $aToCopy[$i] & " ==> " & $sLW & $dir[$j][0] & $aToCopy[$i] & @TAB)
    If FileCopy(@ScriptDir & "\" & $aToCopy[$i], $sLW & $dir[$j][0] & $aToCopy[$i], 1) Then
    ConsoleWrite("OK" & @CRLF)
    $dir[$j][1]+=1
    Else
    ConsoleWrite("FAILED" & @CRLF)
    EndIf
    EndIf
    Next
    $iPercent = $i / $aToCopy[0] * 100
    GUICtrlSetData($Progress1, $iPercent)
    Next
    ;_ArrayDisplay($dir)
    Switch MsgBox(64+4,"Info", $aToCopy[0] & " Dateien erfolgreich kopiert." & @CRLF & @CRLF & "(" & $dir[0][1] & ") nach " & $sLW & $dir[0][0] &@CRLF& "(" & $dir[1][1] & ") nach " & $sLW & $dir[1][0] &@CRLF& "(" & $dir[2][1] & ") nach " & $sLW & $dir[2][0] &@CRLF& "(" & $dir[3][1] & ") nach " & $sLW & $dir[3][0] & @CRLF & @CRLF & "Meine.exe jetzt starten?")
    Case 6
    ShellExecute($sLW & "\meinprogramm\meine.exe")
    EndSwitch
    Else
    MsgBox(64, "Fehler", "Meinprog.exe nicht gefunden")
    EndIf
    EndFunc ;==>_prog

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cprog
    _prog("c:")
    Case $dprog
    _prog("d:")
    Case $eprog
    _prog("e:")
    Case $fprog
    _prog("f:")
    EndSwitch
    WEnd

    [/autoit]


    Allerdings addiert es bei der Ausgabe dazu, wenn man erneut den LW Button drückt. Kann man da den "Zwischenspeicher" löschen ( _ArrayDelete() )?

  • Progressbar für FileCopy

    • dieselwiesel
    • 21. Januar 2013 um 12:26

    autoBert
    Excellent :thumbup:

    Versuche jetzt noch, ob in der MsgBox angezeigt werden kann wieviele Dateien wohin kopiert wurden. Wieviele insg. kopiert wurden hab ich schon rausbekommen :D

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $data[4]
    $data[0] = @ScriptDir & '\dateiA*.zip' ;Die Updatedateien sind fortlaufend numeriert, also dateiA001...002...003 usw. darum eine Wildcard wenn mehrere vorhanden sind.
    $data[1] = @ScriptDir & '\dateiB*.zip' ;Sie sollen auch nur Dateien kopiert werden, die in der ScriptDir sind.
    $data[2] = @ScriptDir & '\dateiC*.zip'
    $data[3] = @ScriptDir & '\dateiD*.zip'
    $alle = @ScriptDir & '\datei*.zip'
    Global $dir[4]
    $dir[0] = '\meinprogramm\1\update\'
    $dir[1] = '\meinprogramm\2\update\'
    $dir[2] = '\meinprogramm\3\update\'
    $dir[3] = '\meinprogramm\4\update\'

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

    Func _SplitPath($sPath)
    ;splittet in DateiPfad und Datei (-filter)
    ;Autor autoBert
    Local $aLocalPath = StringSplit($sPath, "\")
    Local $aRet[2]
    If $aLocalPath[0] > 1 Then
    Local $sTmp = $aLocalPath[1] & "\"
    For $i = 2 To $aLocalPath[0] - 1
    $sTmp &= $aLocalPath[$i]
    $sTmp &= "\"
    Next
    $aRet[1] = $aLocalPath[$aLocalPath[0]]
    $aRet[0] = $sTmp
    EndIf
    Return $aRet
    EndFunc ;==>_SplitPath

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

    Func _prog($sLW)
    Local $aToCopy[1]
    If Not FileExists($alle) Then
    MsgBox(64, "Info", "Keine Dateien gefunden in " & @ScriptDir)
    ElseIf FileExists($sLW & "\meinprogramm\meine.exe") Then
    For $i = 0 To UBound($data) - 1
    $aPath = _SplitPath($data[$i])
    $aTmp = _FileListToArray($aPath[0], $aPath[1])
    _ArrayConcatenate($aToCopy, $aTmp, 1)
    Next
    $aToCopy[0] = UBound($aToCopy) - 1
    ;_ArrayDisplay($aToCopy)
    For $i = 1 To $aToCopy[0]
    For $j = 0 To UBound($data) - 1
    If @ScriptDir & "\" & StringLeft($aToCopy[$i], 6) & "*.zip" = $data[$j] Then
    ConsoleWrite(@ScriptDir & "\" & $aToCopy[$i] & " ==> " & $sLW & $dir[$j] & $aToCopy[$i] & @TAB)
    If FileCopy(@ScriptDir & "\" & $aToCopy[$i], $sLW & $dir[$j] & $aToCopy[$i], 1) Then
    ConsoleWrite("OK" & @CRLF)
    Else
    ConsoleWrite("FAILED" & @CRLF)
    EndIf
    EndIf
    Next
    $iPercent = $i / $aToCopy[0] * 100
    GUICtrlSetData($Progress1, $iPercent)
    Sleep(150);damit es nicht ganz so zügig geht ;-P
    Next
    Switch MsgBox(64+4,"Info", $aToCopy[0] & " Dateien erfolgreich kopiert." & @CRLF & @CRLF & "(" & $aToCopy[1] & ") nach " & $sLW & $dir[0] & @CRLF & "(2) nach " & $sLW & $dir[1] & @CRLF & "(8) nach " & $sLW & $dir[2] & @CRLF & "(6) nach " & $sLW & $dir[3] & @CRLF & @CRLF & "Meine.exe jetzt starten?")
    ; das es $aToCopy[1] hier nicht ist weis ich schon, aber so in etwa wird es doch dann aussehen, oder?
    Case 6
    ShellExecute($sLW & "\meinprogramm\meine.exe")
    EndSwitch
    Else
    MsgBox(64, "Fehler", "Meinprog.exe nicht gefunden")
    EndIf
    EndFunc ;==>_prog

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cprog
    _prog("C:")
    Case $dprog
    _prog("D:")
    Case $eprog
    _prog("E:")
    Case $fprog
    _prog("F:")
    EndSwitch
    WEnd

    [/autoit]
  • Progressbar für FileCopy

    • dieselwiesel
    • 19. Januar 2013 um 22:34

    Hallo autoBert,

    bist ein ganz schöner Schlingel :D hab gefunden woran es lag - Zeile 61 Spalte 69, der Count von StringTrimRight für den Dateinamen (in dem Fall)... bin echt erstaunt was nicht alles für Blödsinn zu machen geht (wenn man Ahnung davon hat) :rofl: Könnte man das auch "abstellen" (nur interessehalber)?

    Hab mal die Zeile 58 gelöscht, damit das Array ListView nicht angezeigt wird. Das mit den Dir erstellen wenn sie nicht das sind ist leicht unvorteilhaft, interessanter wär es nicht zu kopieren wenn die Dir nicht exsistiert.

    Edit:
    Hab mal StringTrimRight gegen StringLeft getauscht, weil er sonst nicht mehr mitmacht wenn es z.B. von dateiA999 in 1000 übergeht. Dann wird zwar auch eine Datei namens dateiA123kevinjustinjason mitkopiert, aber damit kann "meine.exe" eh nix anfangen.

  • Progressbar für FileCopy

    • dieselwiesel
    • 19. Januar 2013 um 13:35

    Hallo...

    hab weiter probiert die Progressbar zu integrieren - hat leider immer noch nicht geklappt. Um das Bsp. von autoBert zum laufen zu kriegen fehlen mir einfach die Kentnisse. Hab bei yT auch ein Video gefunden in dem es schön beschrieben wurde, aber selbst damit will die Bar nicht anlaufen... :wacko: Aber durch das Bsp. von autoBert konnte ich das Script um einiges kürzen :thumbup:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $data1 = @ScriptDir & '\dateiA*.zip' ;Die Updatedateien sind fortlaufend numeriert, also dateiA001...002...003 usw. darum eine Wildcard wenn mehrere vorhanden sind.
    $data2 = @ScriptDir & '\dateiB*.zip' ;Sie sollen auch nur Dateien kopiert werden, die in der ScriptDir sind.
    $data3 = @ScriptDir & '\dateiC*.zip'
    $data4 = @ScriptDir & '\dateiD*.zip'
    $alle = @ScriptDir & '\datei*.zip'

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

    $dir1 = '\meinprogramm\1\update'
    $dir2 = '\meinprogramm\2\update'
    $dir3 = '\meinprogramm\3\update'
    $dir4 = '\meinprogramm\4\update'

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

    Func _copy($sLW)
    If Not FileExists($alle) Then
    MsgBox(64, "Info","Keine Dateien gefunden in " & @scriptdir & ".")
    ElseIf FileExists($sLW & "\meinprogramm\meine.exe") Then
    FileCopy($data1, $sLW & $dir1,1)
    FileCopy($data2, $sLW & $dir2,1)
    FileCopy($data3, $sLW & $dir3,1)
    FileCopy($data4, $sLW & $dir4,1)
    Switch MsgBox(64+4,"Info","Dateien kopiert nach " & $sLW & "\." & @CRLF & @CRLF & "MeinProg jetzt starten?")
    Case 6
    ShellExecute($sLW & "\meine.exe")
    EndSwitch
    Else
    MsgBox(64,"Fehler","Meinprog.exe nicht gefunden auf " & $sLW & "\.")
    EndIf
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cprog
    _copy("C:")
    Case $dprog
    _copy("D:")
    Case $eprog
    _copy("E:")
    Case $fprog
    _copy("F:")
    EndSwitch
    WEnd

    [/autoit]

    So sah es nach dem Video aus...

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MeinProgramm", 314, 196, 192, 114)
    $cprog = GUICtrlCreateButton("C:", 72, 45, 75, 25)
    $dprog = GUICtrlCreateButton("D:", 166, 45, 75, 25)
    $eprog = GUICtrlCreateButton("E:", 72, 77, 75, 25)
    $fprog = GUICtrlCreateButton("F:", 166, 77, 75, 25)
    $Progress1 = GUICtrlCreateProgress(82, 130, 150, 16)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $data1 = @ScriptDir & '\dateiA*.zip' ;Die Updatedateien sind fortlaufend numeriert, also dateiA001...002...003 usw. darum eine Wildcard wenn mehrere vorhanden sind.
    $data2 = @ScriptDir & '\dateiB*.zip' ;Sie sollen auch nur Dateien kopiert werden, die in der ScriptDir sind.
    $data3 = @ScriptDir & '\dateiC*.zip'
    $data4 = @ScriptDir & '\dateiD*.zip'
    $alle = @ScriptDir & '\datei*.zip'

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

    $dir1 = '\meinprogramm\1\update'
    $dir2 = '\meinprogramm\2\update'
    $dir3 = '\meinprogramm\3\update'
    $dir4 = '\meinprogramm\4\update'

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

    Local $fileanzahl, $zahl

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

    $fileListe = _FileListToArray(@ScriptDir & '\datei*.zip')
    $fileanzahl = UBound($fileListe) -1

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

    Func _copy($sLW)
    If Not FileExists($alle) Then
    MsgBox(64, "Info","Keine Dateien gefunden in " & @scriptdir & ".")
    ElseIf FileExists($sLW & "\meinprogramm\meine.exe") Then
    For $i = 1 To $fileAnzahl
    $zahl = 100 / $fileAnzahl * $i
    FileCopy($data1, $sLW & $dir1,1)
    FileCopy($data2, $sLW & $dir2,1)
    FileCopy($data3, $sLW & $dir3,1)
    FileCopy($data4, $sLW & $dir4,1)
    Switch MsgBox(64+4,"Info","Dateien kopiert nach " & $sLW & "\." & @CRLF & @CRLF & "MeinProg jetzt starten?")
    Case 6
    ShellExecute($sLW & "\meine.exe")
    EndSwitch
    GUICtrlSetData($Progress1,$zahl)
    Sleep(150)
    Next
    Else
    MsgBox(64,"Fehler","Meinprog.exe nicht gefunden auf " & $sLW & "\.")
    EndIf
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cprog
    _copy("C:")
    Case $dprog
    _copy("D:")
    Case $eprog
    _copy("E:")
    Case $fprog
    _copy("F:")
    EndSwitch
    WEnd

    [/autoit]


    Hoffe Ihr könnt mir weiterhelfen.

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™