Page 1 sur 1

[R] Barre de progression.

Posté : ven. 10 août 2007 12:59
par eln
Bonjour

Je souhaiterai créer une barre de progression pour l'installation de mes logiciels qui se termine à la fin du script avec un avancement déterminé au cours du script.

Merci de votre aide et de vos conseils.

Posté : ven. 10 août 2007 18:12
par Tlem
Voici un exemple de barre de progression pour le téléchargement d'un fichier.
Adapter le à votre besoin :

Code : Tout sélectionner

$FileUrl = "http://www.autoitscript.com/autoit3/files/beta/autoit/autoit-v3.2.5.2-beta-setup.exe"
$FileSize = InetGetSize($FileUrl)
;$FileName = StringSplit($FileUrl, "/")
;$FileName = $FileName[$FileName[0]]
$FileName = StringRegExpReplace($FileUrl, "^.*/", "")

InetGet($FileUrl,@scriptdir & "\" & $FileName, 1, 1)

HotKeySet("{ESC}", "_InetGetAbort")

ProgressOn("Download progress for "&$FileName, "", "0%")
While @InetGetActive
    $Prog = Int((100 * @InetGetBytesRead) / $FileSize)
    ProgressSet($prog, @InetGetBytesRead & "/" & $FileSize & " bytes", "Downloading "&$FileName)
    Sleep(250)
WEnd

Func _InetGetAbort()
    InetGet("abort")
EndFunc ;==> _InetGetAbort()

Posté : ven. 10 août 2007 18:17
par Tlem
J'ai trouvé ca aussi :

Code : Tout sélectionner

;use ProgressCopy(Source,Destination, 1 to use multi colour ,"Attributes", 1 for Overwrite files)
#include <GUIConstants.au3>
ProgressCopy("C:\Rep1", "D:\Rep2\",1)

Func ProgressCopy($current, $destination, $UseMultiColour=0, $attrib = "-R", $overwrite = 1 ,$Run1 = 0 )

;FirstTimeRun Get original DirSize and set up Gui
If $Run1 = 0 Then
Global $OverallQty, $Overall, $source, $overallpercent, $Progress0Text, $progressbar1, $Progress1Text, $progressbar2, $Progress2Text, $LocalPercent
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
If not FileExists ($Destination) then DirCreate ($Destination); This is why it was failing, the dir did not exist
$source = $current
If StringRight($current, 1) = '\' Then $current = StringTrimRight($current, 1)
If StringRight($destination, 1) <> '\' Then $destination = $destination & "\"
$tosearch = $current
$Overall = DirGetSize($tosearch, 1)
$OverallQty = $Overall[1]
Global Const $PrCopyGui = GUICreate("Copie des Fichiers", 420, 100, -1, -1, -1, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
$Progress0Text = GUICtrlCreateLabel("Veuillez patienter", 10, 5, 400, 20, $SS_LEFTNOWORDWRAP)
$progressbar1 = GUICtrlCreateProgress(10, 20, 400, 20)
GUICtrlSetColor(-1, 32250)
$Progress1Text = GUICtrlCreateLabel("", 10, 44, 400, 20, $SS_LEFTNOWORDWRAP)
$progressbar2 = GUICtrlCreateProgress(10, 60, 400, 20, $PBS_SMOOTH)
$Progress2Text = GUICtrlCreateLabel("", 10, 82, 400, 20, $SS_LEFTNOWORDWRAP)
GUISetFont(10, 600)
;$Progress2Text2 = GUICtrlCreateLabel("", 150, 62, 400, 20)
GUICtrlSetColor(-1, 32250); not working with Windows XP Style if not using windows classic style or dllcall above
GUISetState(@SW_SHOW)
GUICtrlSetData($Progress1Text, "Répertoire de travail " & $tosearch)
$Run1 = 1
EndIf

$Size = DirGetSize($current, 3)
$Qty = $Size[1]
Local $search = FileFindFirstFile($current & "\*.*")
While 1
Dim $file = FileFindNextFile($search)
If @error Or StringLen($file) < 1 Then ExitLoop
If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
$Qty -= 1
$LocalPercent = 100 - (($Qty / $Size[1]) * 100)
$OverallQty -= 1
$overallpercent = 100 - (($OverallQty / $Overall[1]) * 100)
GUICtrlSetData($Progress0Text, "Progression Totale " & Int($overallpercent) & "% Completer")
GUICtrlSetData($progressbar1, $overallpercent)
GUICtrlSetData($progressbar2, $LocalPercent)
GUICtrlSetData($Progress2Text, "Copie du Fichier " & $file)

If $useMultiColour then
GUICtrlSetColor($Progressbar2, _ChangeColour($LocalPercent))
GUICtrlSetColor($Progressbar1, _ChangeColour($OverallPercent))
EndIf

FileCopy($current & "\" & $file, $destination & StringTrimLeft($current, StringLen($source)) & "\" & $file,$overwrite)
FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
EndIf
If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
DirCreate($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file)
FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
GUICtrlSetData($Progress1Text, $current & "\" & $file)
ProgressCopy($current & "\" & $file, $destination, $UseMultiColour, $attrib, $overwrite,1)
EndIf
WEnd
FileClose($search)
;when overall percent = 100 set end gui text, delete gui and reset run1 to 0
If $overallpercent = 100 Then
GUICtrlSetData($Progress0Text, "Progression Totale complètée à 100%")
GUICtrlSetData($progressbar1, 100)
GUICtrlSetData($progressbar2, 100)
GUICtrlSetData($Progress2Text, "Terminer !")
Sleep(2000)
GUIDelete($PRCopyGui)
$Run1 = 0
EndIf
EndFunc ;==>ProgressCopy

Func _ChangeColour($start)

$Redness = Int(255 - ($start / 100 * 512))
If $Redness < 0 Then $Redness = 0

$Greeness = Int(($start / 100 * 512) - 257)
If $Greeness < 0 Then $Greeness = 0

$Blueness = Int(255 - ($Redness + $Greeness))

Return ($Redness * 256 * 256) + ($Greeness * 256) + $Blueness

EndFunc

Posté : sam. 11 août 2007 19:51
par eln
Bonjour

Merci pour ces indices. Le premier j'ai à peu près compris mais le deuxième est trop compliqué pour moi. J'ai changé un peu d'optique et souhaiterai une barre de défilement qui s'arrêterai à la fin de l'installation.

Je suis parti sur la dessus :

Code : Tout sélectionner

$s = 0
$w = 0

While 1
ProgressOn("Veuillez patienter", "Installation en cours", "")
For $i = $s to 100 step 1
    sleep(20)
    ProgressSet($i)
Next
    If $i = 100 then
        $s = 0
    EndIf
    If $w = 1 Then
        ProgressOff()
    EndIf
WEnd

run ("notepad.exe")

Sleep (50000)

$w = 1
J'ai ma barre de défilement mais comme je ne sors pas de ma boucle !!

Posté : sam. 11 août 2007 20:08
par Tlem
A quoi ressemble votre script d'installation !

Pouvez vous nous en mettre un bout ...

Posté : sam. 11 août 2007 20:32
par eln
Il n'y a pas de script en particulier. Je souhaiterai juste une barre de défilement pendant l'installation du logiciel. C'est du gadget et c'est pour occuper les yeux. Elle commence au début et s'arrête à la fin.

Sinon compiler un script "Barre de défilement" en executable. Le lancer au début et le tuer à la fin. Mais il y a peut-être une autre solution ?

Posté : dim. 12 août 2007 01:24
par Tlem
eln a écrit :Je souhaiterai juste une barre de défilement pendant l'installation du logiciel. C'est du gadget et c'est pour occuper les yeux. Elle commence au début et s'arrête à la fin.
Normalement, c'est l'installateur du logiciel, qui doit gérer cela, et non vous !
D'ailleurs, sur quoi voulez-vous vous baser pour le temps d'installation, une simple temporisation n'est pas suffisante, car d'une machine à l'autre ca ne mettra pas la même durée !!!

Posté : dim. 12 août 2007 19:26
par eln
Normalement, c'est l'installateur du logiciel, qui doit gérer cela, et non vous !
Oui je sais mais comme je disais avant, c'est du gadget. C'est juste pour occuper les yeux et m'entrainer. J'ai fait un script entre autre pour l'installation d'office 2003 par le CD. C'est assez long et il n'y a pas de barre d'avancement tout le temps.

Maintenant je n'ai pas besoin de temporisation, je voudrai juste qu'une fois l'installation terminée ma barre de progression disparaisse avec pourquoi pas un message comme quoi l'installation est terminée et donc que tout c'est bien passé. Ce serait une barre de progression en continu qui tourne en boucle.

Posté : dim. 12 août 2007 22:54
par Tlem
Voici un autre exemple tirer du forum Anglais, adapter à votre besoin (Remplacer MsPaint.exe par votre installation de prog) :

Code : Tout sélectionner

#include <GUIConstants.au3>
HotKeySet("{ESC}", "endscript")

; On récupère le PID du programme.
$PID = Run("MsPaint.exe","")

$Ca = GUICreate ( "" , 250 , 46 , -1 , -1 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel ("    Installation en cours ...",  23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)
_SliderRight()

Func _getmsg()
        $Msg = GUIGetMsg()
    If $Msg = $GUI_EVENT_CLOSE Then Exit
   
    ; Test du process. Si inexistant, on sort.
    If ProcessExists($PID)=0 Then endscript()
    
EndFunc

Func _SliderRight()
        Local $newcolor,$color = 0x050000
    For $m = 0 To 245 Step 5
        $newcolor += $color 
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $newcolor)
        Sleep(50)
    Next
    _getmsg()
    _SliderLeft()
EndFunc

Func _SliderLeft()
    Local $backcolor,$color = 0x050000
    For $m = 245 To 0 Step -5
        $backcolor += $color   
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $backcolor)
        Sleep(50)
    Next
    _getmsg()
    _SliderRight()
EndFunc

Func endscript()
    Exit
EndFunc

Posté : mer. 15 août 2007 09:20
par eln
Merci pour cette recherche et solution. Sujet résolu.

Posté : mer. 15 août 2007 21:38
par Tlem
eln a écrit :Merci pour cette recherche et solution. Sujet résolu.
Dans ce cas rajouter le tag [R] dans le titre de votre 1er message .

Re: [R] Barre de progression.

Posté : jeu. 24 mai 2012 23:59
par ELGAMALI
Bonsoir Tlem
Les scripts que vous proposez exemple:
► Afficher le texte
ne marche pas ?

Re: [R] Barre de progression.

Posté : ven. 25 mai 2012 01:21
par Tlem
Bonsoir,
Pour commencer, je répondrais à votre dernière phrase en vous dirigeant simplement vers la deuxième ligne de ma signature !!!

Ensuite, regardez la date à laquelle ces scripts ont été proposés. :shock:
Vous imaginez bien que cinq ans en arrière, la version d'AutoIt n'était pas celle d'aujourd'hui. Donc pour un script de cette époque qui ne fonctionne pas aujourd'hui, vous devez bien évidement l'adapter en conséquence.

Pour finir, je rajouterais que vous oubliez un peu trop souvant d'utiliser les balises de code (ce qui est déplaisant, car je doit les rajouter à chaque fois).

Re: [R] Barre de progression.

Posté : ven. 25 mai 2012 13:51
par ELGAMALI
Bonjour

Alors c’est la raison pour la quelle la plus part des scripts ne marchent pas !! Merci pour cette information! Que dieu te garde…
______________________________________________________________________________
Quelle est la différence entre un(e) copain(ine), une ami(e) et une très bonne ami(e) ... ???