Fortschrittsanzeige für Scriptinterne Funktionen

  • Hallo, ich möchte gerne ein progressfenster für einen bestimmten abschnitt im script schreiben. Er sollte auch verbleibende Zeit bzw. den Kopiervorgang mit anzeigen.

    Ich hab hier schon ein Script das den Kopiervorgang anzeigt.

    Danke für die Hilfe

    Gruß,
    Lasse


    [autoit]

    $sourcefile = "C:\test.exe"
    $destinationfile = @ScriptDir & "\test.exe"

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

    ProgressOn ( "Copy....", "Copying file " & StringRegExpReplace ( $sourcefile, ".*\\(.*)\Z", "$1" ))

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

    $callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
    $ptr = DllCallbackGetPtr ( $callback )

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

    DllCall("kernel32.dll", "int", "CopyFileExA", "str" , $sourcefile , "str", $destinationfile, "ptr", $ptr , "ptr", 0, "int", 0, "int", 0)
    ProgressOff ()

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

    Func Progress($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    ;~ ConsoleWrite ( $TotalBytesTransferred & @lf )

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

    ProgressSet (round($TotalBytesTransferred/$TotalFileSize * 100, 0) , round($TotalBytesTransferred/$TotalFileSize * 100, 0) & "%")

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

    EndFunc

    [/autoit]
  • Ich glaube du hast mich falsch verstanden. Ich meinte einen Progress für zum _stringencrypt im gleichen script :P

    Gruß,
    Lasse

    • Offizieller Beitrag
    Zitat

    Fortschrittsanzeige für Scriptinterne Funktionen


    Das geht einfach prinzipbedingt nicht. AutoIt liefert keine Informationen dazu, wie weit eine interne Funktion mit der Bearbeitung ist. Das würde sich auf die Geschwindigkeit äußerst negativ auswerten. Du könntest den String vorher splitten und dann einzeln an die Funktion übergeben. Auch das ist langsam, aber du kannst ausrechnen wie viele Prozentpunkte bereits verschlüsselt sind.

    peethebee

    • Offizieller Beitrag

    Du könntest auch die Funktion _StringEncrypt aus der UDF (String.au3) rauskopieren und in Deinem eigenen Script verwenden. Dann kannst Du dort eine Progressfunktion einbauen. Allerdings wird StringEncrypt dann noch langsamer.
    Das gilt genauso für alle anderen Funktionen der UDFs. Bei den internen Funktionen sehe ich da allerdings keine Möglichkeit.

  • Selbst wenn du StringEncrypt mit einer Progressfunktion kombinierst, wird der Balken zu schnell durchlaufen und das sieht auch nix aus. Progressfunktionen verwende ich wenn ich daraufwarte bis ein Prozess beendet wird. Aber selbst dann muß ich dem Balken eine humane Geschwindigkeit geben und wenn das Script fertig ist, der Balken aber nochnet am anderen Ende, dann wartet das Script auf den Balken. :cursing:
    Also wenn nutze ich es nur um dem User zu zeigen das das Skript noch arbeitet aber net wie lange es noch läuft.

    MfG
    Der_Doc

  • Ich habe ja eine eigene Verschlüsselung, aber das funktioniert nicht:

    While 1
    guiCtrlSetData("$progress","_crypt")
    wend

    danke für die Hilfe

    Gruß,
    Lasse