Page 1 sur 2
[..] Barre de progression
Posté : lun. 29 août 2011 11:09
par Shade
Bonjour à tous,
Voila je viens de réaliser un script qui me permet de télécharger des fichiers de mon ftp en revanche, j'aimerai avoir une barre de progression car en ce moment je ne vois pas du tout l'avancement.
Pouvez-vous m'aider svp?
Voici mon script :
► Afficher le texte
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
;Déclaration des variables
$Gestion = GUICreate("Masters VirtualBox", 250, 180, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
$telecharger_1 = GUICtrlCreateButton("Télécharger", 160, 52, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"telecharge")
$quitter_1 = GUICtrlCreateButton("Quitter", 160, 90, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"quitter")
$Group1 = GUICtrlCreateGroup("Choix des masters", 8, 10, 129, 135)
$fichier3 = GUICtrlCreateCheckbox("fichier3", 24, 34, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
$fichier2 = GUICtrlCreateCheckbox("fichier2", 24, 74, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
$fichier1 = GUICtrlCreateCheckbox("fichier1", 24, 114, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Options = GUICtrlCreateMenu("&Options")
$Telecharger = GUICtrlCreateMenuItem("Télécharger", $Options)
GUICtrlSetOnEvent( -1,"telecharge")
$Quitter = GUICtrlCreateMenuItem("Quitter", $Options)
GUICtrlSetOnEvent( -1,"quitter")
GuiSetState ( )
;Fin des déclarations
;Choix des Masters à télécharger
Func checkbox()
Switch @GUI_CtrlId
Case $fichier3
If _Ischecked($fichier3) then
$a_telecharge[1][0] = "1"
Else
$a_telecharge[1][0] = "0"
EndIf
Case $fichier2
If _Ischecked($fichier2) then
$a_telecharge[2][0] = "1"
Else
$a_telecharge[2][0] = "0"
EndIf
Case $fichier1
If _Ischecked($fichier1) then
$a_telecharge[3][0] = "1"
Else
$a_telecharge[3][0] = "0"
EndIf
EndSwitch
EndFunc
Func telecharge()
$Statut_Checkbox1 = GUICtrlRead($fichier3)
$Statut_Checkbox2 = GUICtrlRead($fichier2)
$Statut_Checkbox3 = GUICtrlRead($fichier1)
If $Statut_Checkbox1 = "1" then
InetGet("ftp://192.168.***.***/fichier/fichier3", "C:\Temp" & "\fichier3", 1, 1)
EndIf
If $Statut_Checkbox2 = "1" then
InetGet("ftp://192.168.***.***/fichier/fichier2", "C:\Temp" & "\fichier2", 1, 1)
EndIf
If $Statut_Checkbox3 = "1" then
InetGet("ftp://192.168.***.***/fichier/fichier1", "C:\Temp" & "\fichier1", 1, 1)
EndIf
MsgBox(64, "téléchargement fichier", "Fin du téléchargement")
ProcessClose("Install_auto.exe")
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func quitter()
Exit
EndFunc
Func _Ischecked($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc
;Fin du script
Merci d'avance.
Cordialement.
Re: [..]Barre de progression
Posté : lun. 29 août 2011 12:00
par PandiPanda
Avec InetGetSize ( "URL" [, options ] )qui retourne la taille du fichier
Avec InetGetInfo( [ handle [, index ]] ) index à 1 pour vérifier la taille du fichier en cours de téléchargement
Avec GUICtrlCreateProgress ( left, top [, width [, height [, style [, exStyle]]]] )
et GUICtrlSetData ( controlID, data [, default] )
Vous devriez être capable de créer une barre de progression non?
Re: [..]Barre de progression
Posté : lun. 29 août 2011 13:30
par Shade
Oui mais ou est ce qu'il faut que je place les fonctions?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 13:43
par PandiPanda
Ceci ?
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
;Déclaration des variables
$Gestion = GUICreate("Masters VirtualBox", 250, 180, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
$telecharger_1 = GUICtrlCreateButton("Télécharger", 160, 52, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"telecharge")
$quitter_1 = GUICtrlCreateButton("Quitter", 160, 90, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"quitter")
$Group1 = GUICtrlCreateGroup("Choix des masters", 8, 10, 129, 135)
$fichier3 = GUICtrlCreateCheckbox("fichier3", 24, 34, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
$fichier2 = GUICtrlCreateCheckbox("fichier2", 24, 74, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
$fichier1 = GUICtrlCreateCheckbox("fichier1", 24, 114, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Options = GUICtrlCreateMenu("&Options")
$Telecharger = GUICtrlCreateMenuItem("Télécharger", $Options)
GUICtrlSetOnEvent( -1,"telecharge")
$Quitter = GUICtrlCreateMenuItem("Quitter", $Options)
GUICtrlSetOnEvent( -1,"quitter")
GuiSetState ( )
;Fin des déclarations
;Choix des Masters à télécharger
Func checkbox()
Switch @GUI_CtrlId
Case $fichier3
If _Ischecked($fichier3) then
$a_telecharge[1][0] = "1"
Else
$a_telecharge[1][0] = "0"
EndIf
Case $fichier2
If _Ischecked($fichier2) then
$a_telecharge[2][0] = "1"
Else
$a_telecharge[2][0] = "0"
EndIf
Case $fichier1
If _Ischecked($fichier1) then
$a_telecharge[3][0] = "1"
Else
$a_telecharge[3][0] = "0"
EndIf
EndSwitch
EndFunc
Func telechargeProgress($ctrlId)
Local $hDownload,$SizeFile
$Statut_Checkbox1 = GUICtrlRead($fichier3)
$Statut_Checkbox2 = GUICtrlRead($fichier2)
$Statut_Checkbox3 = GUICtrlRead($fichier1)
If $Statut_Checkbox1 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier3")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier3", "C:\Temp" & "\fichier3", 1, 1)
EndIf
If $Statut_Checkbox2 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier2")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier2", "C:\Temp" & "\fichier2", 1, 1)
EndIf
If $Statut_Checkbox3 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier1")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier1", "C:\Temp" & "\fichier1", 1, 1)
EndIf
Do
Sleep(250)
$info=InetGetInfo($hDownload)
_SetProgress($ctrlId,$SizeFile,$info[1])
Until $info[2]
MsgBox(64, "téléchargement fichier", "Fin du téléchargement")
ProcessClose("Install_auto.exe")
EndFunc
Func _SetProgress($ctrlId,$SizeFile,$sizeDownload)
GUICtrlSetData($ctrlId,Int(($sizeDownload/$SizeFile)*100))
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func quitter()
Exit
EndFunc
Func _Ischecked($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc
;Fin du script
Pour telechargeProgress($ctrlId); le ctrlID est celui de la progress Barre
Pour _SetProgress($ctrlId,$SizeFile,$SizeDownload); le ctrlId est celui de la progress Barre,$SizeFile est la taille totale du fichier et $SizeDownload est la taille du fichier en cours de telechargement.
Il ne vous reste qu'a créer une gui pour la barre de progression, et d'y induire le ctrlID.
j'ai fait ceci sans tester, il y'a peut être une erreur, à vérifier, tester ^^
Re: [..] Barre de progression
Posté : lun. 29 août 2011 14:26
par Shade
Et la GUI je la crée à la suite du code de la barre de progression?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 14:42
par PandiPanda
vous créer la gui, avant le "
guiState()" ^.^
► Afficher le texte
je remarque cependant un problème majeur dans votre script ...
cette variable ci
"$a_telecharge[x][0]" vous ne la declarer nulle part, ca risque fortement de poser problème ...
je vous inviterai a declarer en
Dim $a_telecharge[4][0] en debut de script, sauf si vous n'avez poster qu'une partie de votre code

Re: [..] Barre de progression
Posté : lun. 29 août 2011 14:49
par Shade
Auriez-vous un exemple de Gui pour une barre de progression svp?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 14:51
par PandiPanda
le fichier d'aide aurai pu vous mettre sur la voie ...
GUICtrlCreateProgress()
Re: [..] Barre de progression
Posté : lun. 29 août 2011 14:58
par Shade
Code : Tout sélectionner
$progressbar = GUICtrlCreateProgress(10, 40, 200, 20, $$ctrlId)
GuiSetState ( )
C'est bon comme ça?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 15:11
par PandiPanda
ceci vous convient?
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
;Déclaration des variables
Dim $a_telecharge[4][1]
#Region ### START Koda GUI section ### Form=
Global $Gestion = GUICreate("Masters VirtualBox", 251, 188, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
Global $Options = GUICtrlCreateMenu("&Options")
Global $Telecharger = GUICtrlCreateMenuItem("Télécharger", $Options)
GUICtrlSetOnEvent( -1,"telechargeProgress")
Global $Quitter = GUICtrlCreateMenuItem("Quitter", $Options)
GUICtrlSetOnEvent( -1,"quitter")
Global $telecharger_1 = GUICtrlCreateButton("Télécharger", 160, 52, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"telechargeProgress")
Global $quitter_1 = GUICtrlCreateButton("Quitter", 160, 90, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent( -1,"quitter")
Global $Group1 = GUICtrlCreateGroup("Choix des masters", 8, 10, 129, 135)
Global $fichier3 = GUICtrlCreateCheckbox("fichier3", 24, 34, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
Global $fichier2 = GUICtrlCreateCheckbox("fichier2", 24, 74, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
Global $fichier1 = GUICtrlCreateCheckbox("fichier1", 24, 114, 97, 17)
GUICtrlSetOnEvent( -1,"checkbox")
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $progressbar = GUICtrlCreateProgress(10, 144, 232, 20)
Global $Gestion_AccelTable[1][2] = [["^!+{5 (PAVE NUM.)}", $Quitter]]
GUISetAccelerators($Gestion_AccelTable)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;Fin des déclarations
;Choix des Masters à télécharger
Func checkbox()
Switch @GUI_CtrlId
Case $fichier3
If _Ischecked($fichier3) then
$a_telecharge[1][0] = "1"
Else
$a_telecharge[1][0] = "0"
EndIf
Case $fichier2
If _Ischecked($fichier2) then
$a_telecharge[2][0] = "1"
Else
$a_telecharge[2][0] = "0"
EndIf
Case $fichier1
If _Ischecked($fichier1) then
$a_telecharge[3][0] = "1"
Else
$a_telecharge[3][0] = "0"
EndIf
EndSwitch
EndFunc
Func telechargeProgress()
Local $hDownload,$SizeFile
$Statut_Checkbox1 = GUICtrlRead($fichier3)
$Statut_Checkbox2 = GUICtrlRead($fichier2)
$Statut_Checkbox3 = GUICtrlRead($fichier1)
If $Statut_Checkbox1 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier3")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier3", "C:\Temp" & "\fichier3", 1, 1)
EndIf
If $Statut_Checkbox2 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier2")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier2", "C:\Temp" & "\fichier2", 1, 1)
EndIf
If $Statut_Checkbox3 = "1" then
$SizeFile=InetGetSize("ftp://192.168.***.***/fichier/fichier1")
$hDownload=InetGet("ftp://192.168.***.***/fichier/fichier1", "C:\Temp" & "\fichier1", 1, 1)
EndIf
Do
Sleep(250)
$info=InetGetInfo($hDownload)
_SetProgress($progressbar,$SizeFile,$info[1])
Until $info[2]
MsgBox(64, "téléchargement fichier", "Fin du téléchargement")
ProcessClose("Install_auto.exe")
EndFunc
Func _SetProgress($ctrlId,$SizeFile,$SizeDownload)
GUICtrlSetData($ctrlId,Int(($sizeDownload/$SizeFile)*100))
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func quitter()
Exit
EndFunc
Func _Ischecked($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc
;Fin du script
Re: [..] Barre de progression
Posté : lun. 29 août 2011 15:27
par Shade
Le code fonctionne mais la barre de progression devient complète en 1 sec alors que le téléchargement est à 40 Mo sur 2Go???
Re: [..] Barre de progression
Posté : lun. 29 août 2011 15:30
par PandiPanda
étrange avec le script que j'ai poster plus haut, je n'ai pas cette erreur la ...
Re: [..] Barre de progression
Posté : lun. 29 août 2011 15:35
par Shade
Le fichier sur lequel vous testez votre script il ne fait peut être pas 2Go ou 11Go ?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 15:43
par PandiPanda
en effet loin de la haha ^^
vous pouvez mettre une
msgbox(0,"",$sizeFile)
comme ceci;
Code : Tout sélectionner
...
msgbox(0,"",$sizeFile)
Do
Sleep(250)
$info=InetGetInfo($hDownload)
_SetProgress($progressbar,$SizeFile,$info[1])
Until $info[2]
...
et quelle est la valeur renvoyé par la msgBox() ? ^^
il se peux que la taille totale renvoyée soit éronnée ...
Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:02
par Shade
Je viens d'inserer le MsgBox il me renvoi exactement la taille de mon fichier "11388669952"
Je ne comprends plus ?

Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:12
par PandiPanda
La progresse barre ne fait qu'indiquer ce que nous lui disons, donc il y'a sans doute une erreur quelque part je cherche
Code : Tout sélectionner
Func _SetProgress($ctrlId,$SizeFile,$SizeDownload)
GUICtrlSetData($ctrlId,Int(($sizeDownload/$SizeFile)*100))
EndFunc
la fonction est bonne ...
hmmm vous pouvez remplacer la msgbox() par un _arraydisplay(InetGetInfo($hDownload)) et ajouter l'include correspondant en haut du script? ^^
et me dire les valeurs ressortie ...
Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:16
par Shade
arraydisplay c'est fait mais je rajoute quel include?
Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:21
par PandiPanda
#Include <Array.au3>
necessaire pour _ArrayDisplay()
Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:23
par Shade
Voici les valeurs qu'ils me renvoient:
Re: [..] Barre de progression
Posté : lun. 29 août 2011 16:28
par PandiPanda
Bien donc deja les valeurs concernée sont "correcte" notamment le fait qu"il dise qu'il a pas encore débuter le télechargement et que forcemment il n'a pas fini de télécharger
maintenant vous pouvez enlever le _arrayDisplay()
et mettre ceci a la place de votre boucle do .. until?
Code : Tout sélectionner
Local $T0=TimerInit()
Do
Sleep(250)
$info=InetGetInfo($hDownload)
If TimerDiff($T0)> 7000 Then _ArrayDisplay($info)
_SetProgress($progressbar,$SizeFile,$info[1])
Until $info[2]
elle me permettra de connaitre les infos après 7 secondes ... ^.^