Hallo Zusammen,
Ich möchte eine große Datei kopieren und dabei eine Fortschrittsbalken angezeigt bekommen.
Ich habe es bereits mit der _WinAPI_CopyFileEx versucht, jedoch zeigt die GUI nur kurz die Progressbar richtig an.
Nach ca 10 Sekunden graut das Fenster aus, und die Progressbar wird nicht mehr weiter gefüllt. Der Kopiervorgang läuft jedoch noch im Hintergrund weiter.
Habt Ihr vielleicht eine Idee wie ich das Problem umgehen kann?
Vielen Dank im Voraus
Spoiler anzeigen
AutoIt
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <APIFilesConstants.au3>
#include <Misc.au3>
#include <WinAPIDiag.au3>
#include <WinAPIFiles.au3>
Opt('TrayAutoPause', 0)
Local $hProgressProc = DllCallbackRegister('_ProgressProc', 'bool', 'uint64;uint64;uint64;uint64;dword;dword;handle;handle;ptr')
Local $sFile = "C:\Users\Testuser\Testdir1\Test.File"
Local $dFile = "C:\Users\Testuser\Testdir2\Test.File"
ProgressOn('_WinAPI_CopyFileEx()', 'Copying...', '0%')
If Not _WinAPI_CopyFileEx($sFile, $dFile, 0, DllCallbackGetPtr($hProgressProc)) Then
_WinAPI_ShowLastError('Error copying ' & $sFile)
EndIf
DllCallbackFree($hProgressProc)
ProgressOff()
FileDelete(@TempDir & '\Test*.tmp')
Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData)
#forceref $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $pData
Local $iPercent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)
If $iPercent = 100 Then
ProgressSet($iPercent, '', 'Complete')
Else
ProgressSet($iPercent, $iPercent & '%')
EndIf
EndFunc
Alles anzeigen