Barre de Progression Téléchargment

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Antho
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Barre de Progression Téléchargment

#1

Message par Antho »

Bonjour à toutes et à tous,

Cela fais quelques jours que je me creuse le crane sur un système de barre de progression pour mes téléchargements.

J'ai beau essayer les différents codes trouvés sur le forum ou sur le guide Autioit, rien n'y fais, ma barre va jusqu'à la fin sans prendre en compte l'avancée du réel téléchargement..

J'ai tout essayé, je sèche...

Merci à ceux qui pourront m'aider

Voici mon code:

Code : Tout sélectionner

Func DL_VCDS()
	   Global $Url = $vcdsmanager_url & $nom_fichier_vcds
	   Global $Fichier = $vcdsmanager_dir & $nom_fichier_vcds

	 $FileSize = InetGetSize ($vcdsmanager_url & $nom_fichier_vcds)
	  MsgBox(64, $vcdsmanager_dir, $FileSize, $vcdsmanager_dir)
	  InetGet ( $Url , $Fichier , 1 , 1 )

	  ProgressOn ( " test " , " " , " " )
	  While @InetGetActive
		 $Prog = Int ((50000 * 100 ) / $FileSize )
		 ProgressSet ( $Prog , @InetGetBytesRead & " / " & $FileSize & " bytes " , " Téléchargement du fichier hosts " )
		 Sleep ( 100 )
	  WEnd

	  ProgressSet ( 100 , " Terminé " , " Complete " )
	  Sleep ( 5000 )
	  ProgressOff ( )
 EndFunc
J'ai aussi essayé celui là, il ne donne absolument rien:

Code : Tout sélectionner

Func DL_VCDS()
	  $FileSize = InetGetSize($vcdsmanager_url & $nom_fichier_vcds)
	  MsgBox(64, $vcdsmanager_dir, $FileSize, $vcdsmanager_dir)
	  InetGet($vcdsmanager_url & $nom_fichier_vcds, $vcdsmanager_dir & $nom_fichier_vcds, 1, 1)

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

	  ProgressOn("Téléchargement de "&$nom_fichier_vcds, "", "0%")
	  While @InetGetActive
		 $Prog = Int((100 * @InetGetBytesRead) / $FileSize)
		 ProgressSet($prog, @InetGetBytesRead & "/" & $FileSize & " bytes", "Downloading "&$nom_fichier_vcds)
		 Sleep(250)
	  WEnd
 EndFunc
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Barre de Progression Téléchargment

#2

Message par mikell »

ça fait une paye que je n'utilise plus Inet... tu connais Curl ? c'est plus fiable
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Antho
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mer. 20 mai 2020 12:26
Status : Hors ligne

Re: Barre de Progression Téléchargment

#3

Message par Antho »

Je l'utilise en PHP, j'ai jamais regardé sur AutoIt, tu penses que j'aurais mieux?

Car selon mes test la taille du fichier est bien récupérée, ce serait @InetGetBytesRead qui ne lit pas correctement
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Barre de Progression Téléchargment

#4

Message par mikell »

C'est à dire que Curl offre beaucoup de possibilités tout en restant très maniable
Essaie ça pour voir
Le ConsoleWrite te montre exactement comment ça marche, après mettre ça dans un code devient hyper simple Image

#include <AutoItConstants.au3>

$source = "https://www.autoitscript.com/autoit3/files/archive/autoit/autoit-v3.3.14.5.zip"
$file = StringRegExpReplace($source, '.*/([^/]+)$', "$1")

$cmd = 'curl -L -k ' & $source & ' -o "' & @scriptdir & '\' & $file & '"'
Local $iPID = Run($cmd, "", @SW_HIDE, $STDERR_CHILD)

ProgressOn($file, "")
While 1
   $stderr = StderrRead($iPID)
   If @error Then Exitloop
   If $stderr <> "" and StringRegExp($stderr, '(?i)[kmg]') Then
      ; Consolewrite($stderr) ; display the progress data
      $pc = StringRegExp($stderr, '(\d+)', 1)
      If not @error Then ProgressSet($pc[0], $pc[0] & " %")
   EndIf
Wend
ProgressOff()
Msgbox(0,"", $file & " : done")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 103
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: Barre de Progression Téléchargment

#5

Message par Nine »

Meh, tu as une version antédiluvienne de AutoIt ! Serait peut-être temps de mettre à jour...
AntoineFavre54
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mar. 09 janv. 2024 08:23
Status : Hors ligne

Re: Barre de Progression Téléchargment

#6

Message par AntoineFavre54 »

Salut Antho,

Je crois que j'ai la solution à ton problème. Il faut que tu utilises la fonction InetGetInfo pour obtenir le nombre de bytes téléchargés et le comparer au nombre total de bytes du fichier. Ensuite, tu peux calculer le pourcentage de progression et le mettre à jour dans ta barre. Voici un exemple de code qui marche pour moi :

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>

; Créer une interface graphique avec une barre de progression
GUICreate("Téléchargement", 300, 100)
$progress = GUICtrlCreateProgress(10, 10, 280, 20, $PBS_SMOOTH)
GUICtrlSetColor(-1, 0x00FF00) ; Couleur verte
$label = GUICtrlCreateLabel("0 %", 140, 40, 50, 20)
GUISetState(@SW_SHOW)

; Lancer le téléchargement du fichier
$url = "https://www.autoitscript.com/autoit3/fi ... -setup.exe"
$dest = @TempDir & "\autoit-setup.exe"
$dl = InetGet($url, $dest, 1, 1)

; Boucle tant que le téléchargement n'est pas terminé
While @error = 0
; Obtenir le nombre de bytes téléchargés et le nombre total de bytes
$bytes = InetGetInfo($dl, 0)
$size = InetGetInfo($dl, 1)
; Calculer le pourcentage de progression
$percent = Round($bytes / $size * 100, 0)
; Mettre à jour la barre de progression et le label
GUICtrlSetData($progress, $percent)
GUICtrlSetData($label, $percent & " %")
; Vérifier si l'utilisateur ferme l'interface graphique
If GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
; Attendre 100 ms
Sleep(100)
WEnd

; Fermer le handle du téléchargement
InetClose($dl)
; Fermer l'interface graphique
GUIDelete()

J'espère que ça t'aide !
Répondre