
Encore une fois, je reviens après avoir changé de boulot :p
Mon problème du jour est le suivant : je suis en train de développer un outil de synchronisation de gros fichiers à distance, et j'aimerai pouvoir lancer plusieurs copies en simultanée. J'ai trouvé une méthode qui marche ici : https://www.autoitscript.com/forum/topi ... taneously/.
Le truc est que j'ai décidé d'utiliser _LargeFileCopy, qui outre le fait d'éviter de "freezer" l'interface lors de l'exécution d'une copie, permet de faire un contrôle intégré de la copie, et, cerise sur le gâteau, d'intégrer un script récupérant toutes les informations nécessaires (entre autres) à faire fonctionner une ProgressBar ...
Du coup, je suis bien embêté : ma ProgressBar est dans mon programme principal, et je ne sais pas comment récupérer l'information de mon programme "enfant".
Ci joint les codes, pour explication.
main.au3
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
GUICreate("File Copy Test", 250, 150)
GUICtrlCreateLabel("Try to interact with the GUI during file copy...", 20, 15)
Global $go = GUICtrlCreateButton("Copy Large File", 50, 50, 150, 50)
Global $Progress1 = GUICtrlCreateProgress(5, 125, 240, 20)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $go
$PID = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\DemoLoadValues.au3' & '"')
EndSwitch
WEnd
demoloadvalue.au3
Code : Tout sélectionner
#include <_LargeFileCopy.au3>
Local $msg, $timer, $ret
Local $src = "E:\GHO & ISO & VM\ISO\en_windows_7_professional_n_with_sp1_x64_dvd_u_677207.iso" ; <---- path to a really large file goes here, recommended 600MB+
Local $destpath = @DesktopDir & "\testdir" ; <---- destination path goes here
Do
; create destination path
DirCreate($destpath)
$timer = TimerInit()
$ret = _LargeFileCopy($src, $destpath, BitOR(1, 16), 2097152, $CALG_SHA1, "Test")
ConsoleWrite("return: " & $ret & @CRLF & "error: " & @error & @CRLF & "time: " & TimerDiff($timer) & " ms" & @CRLF)
If @error = 0 Then
$resultat = "ok"
Else
$resultat = "ko"
EndIf
Sleep(1000)
ConsoleWrite("return: " & $ret & @CRLF & "error: " & @error & @CRLF & "time: " & TimerDiff($timer) & " ms" & @CRLF)
ConsoleWrite("====================" & @CRLF)
Until $msg = -3
Func Test($1, $2, $3)
$3 = $3
If $1 * 100 / $2 <> 100 Then
$value = $1 * 100 / $2
Return $value
GUICtrlSetData($Progress1, $value)
EndIf
EndFunc ;==>Test
Merci d'avance pour le coup de main !