[R] Interaction ProgressBar + Download

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

[R] Interaction ProgressBar + Download

#1

Message par 4sp4rt4m3 »

Bonjour à tous,

Je cherche à faire un faire interagir le téléchargement d'un fichier avec une ProgressBar. J'ai bien vu quelques exemples comme ici ou sur le forum US (ils le propose avec ProgressOn, ce n'est pas ce que je veux) mais je bloque toujours... Je viens donc demander un peu d'aide ^^

Code de Silvere :
► Afficher le texte
Visiblement cela a marché pour lui, mais "$taille_telecharger / $taille_telecharger * 100" pour moi ça fera toujours 100 peu importe les valeurs de "$taille_telecharger"! Ou alors suis je à coté de la plaque?

Le mien :
► Afficher le texte
Jusqu'à présent le téléchargement fonctionne parfaitement mais la ProgressBar, elle , ne bouge pas d'un pli... ça fait 3h que je planche dessus et je n'ai plus trop l'esprit clair pour avancer ^^

Merci de vos aides (éventuelle)
Modifié en dernier par 4sp4rt4m3 le ven. 26 oct. 2012 16:12, modifié 1 fois.
Avatar du membre
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Interaction ProgressBar + Download

#2

Message par FireFox »

Bonjour,
4sp4rt4m3 a écrit : Visiblement cela a marché pour lui, mais "$taille_telecharger / $taille_telecharger * 100" pour moi ça fera toujours 100 peu importe les valeurs de "$taille_telecharger"! Ou alors suis je à coté de la plaque?
Alors là, c'est une question de logique; si tu divises un nombre par lui même, ça donnera forcément 1, donc si tu réfléchies, le calcul correct est :

Code : Tout sélectionner

$taille_telecharger / $taille_fichier * 100
 
Cdlt, FireFox.
Modifié en dernier par FireFox le sam. 21 sept. 2013 14:16, modifié 1 fois.
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [..] Interaction ProgressBar + Download

#3

Message par 4sp4rt4m3 »

Donc on est bien d'accord, néanmoins mon script est toujours faux...
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Interaction ProgressBar + Download

#4

Message par mikell »

" 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
FireFox
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 217
Enregistré le : dim. 14 oct. 2012 01:30
Localisation : Picardie/Île-de-France, France
Status : Hors ligne

Re: [..] Interaction ProgressBar + Download

#5

Message par FireFox »

4sp4rt4m3 a écrit :Donc on est bien d'accord, néanmoins mon script est toujours faux...
En effet, tu appelles la fonction InetGet en mode synchronous, donc le script ne continue pas tant que le téléchargement n'est pas fini, il faut donc mettre le 4ème paramètre à 1 pour que la fonction se mette en background (asynchronous) pour que tu puisse avoir les infos en direct.

A noter aussi que tu ne peux pas avoir la taille du fichier pour certains téléchargements tant que le téléchargement n'a pas commencé :
► Afficher le texte
Cdlt, FireFox.
Modifié en dernier par FireFox le sam. 21 sept. 2013 15:51, modifié 1 fois.
Avatar du membre
4sp4rt4m3
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 08 janv. 2012 20:55
Status : Hors ligne

Re: [R] Interaction ProgressBar + Download

#6

Message par 4sp4rt4m3 »

@FireFox Dans ton exemple la progressbar ne se rempli pas à 100% alors que le DL se fait entièrement mais du coup j'ai trouvé la ou j'ai foiré. J'ai déclaré la variable $TotalSize à l'intérieur de la boucle et la ça fonctionne parfaitement. C'était tout bête en fin de compte... Merci à toi du coup!

@mikell Dans ce style de codage, je ne m'y retrouve pas désolé, mais merci quand même ^^
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [R] Interaction ProgressBar + Download

#7

Message par davzell »

je fais remonter ce vieux post car le code est parfaitement ce qu'il me faut.

Dans mon cas j'aimerai depuis une GUI lancer un téléchargement (avec un simple bouton).
Ça lancera automatiquement le téléchargement avec la barre de progression dans une seconde GUI.

quand le téléchargement se termine je voudrais que la seconde GUI se ferme mais pas la première.

Or là, la seconde GUI reste à l’écran et si je la ferme tout le code se ferme.

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=..\..\BTtools.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("download", 527, 222, 982, 216)
;~ $Button1 = GUICtrlCreateButton("Ok", 245, 30, 49, 17)
$Button2 = GUICtrlCreateButton("Ok", 245, 50, 49, 17)



GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg

        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button2
;~              Call ("controlOS")
             Call ("keybt")


    EndSwitch
WEnd



Func keyBT()
GUICreate("MyGUI")
$Input1 = GUICtrlCreateEdit("http://shv.globetrotter.net/data/fichier_5mb_file.bin", 10, 10, 200, 20)
$Progress1 = GUICtrlCreateProgress(10, 30, 100, 20)
GUISetState()

Global $Dir = FileSaveDialog("Sauvegarder sous...", @DesktopDir, "Tout les fichiers (*.*)", 3, "fichier_5mb_file.bin")

Global $URL = GUICtrlRead($Input1)
Global $Download = InetGet($URL, $Dir, 1, 1) ;Telecharge

Global $TotalSize = 0

While Not InetGetInfo($Download, 2) ;Tant que le telechargement n'est pas complet
    Sleep(200)
    $KbRecu = InetGetInfo($Download, 0) ;Obtient les KiloOctet reçu

    If $KbRecu > 0 Then
        If $TotalSize = 0 Then
            $TotalSize = InetGetInfo($Download, 1) ;Obtient la taille du fichier
        EndIf

        $Pourcentage = $KbRecu / $TotalSize * 100 ;calcul le pourcentage
        GUICtrlSetData($Progress1, $Pourcentage) ;transfere le pourcentage a la valeur de la ProgressBar
    EndIf
WEnd
EndFunc
Oversid3
Niveau 3
Niveau 3
Messages : 45
Enregistré le : jeu. 29 janv. 2015 11:20
Status : Hors ligne

Re: [R] Interaction ProgressBar + Download

#8

Message par Oversid3 »

Voila :)

En gros, une fonction créer les GUI (toutes) et n'affichent que celles dont on a besoin.
Ensuite on affiche ou cache avec GUISetState(@SW_SHOW/HIDE, $gui) en fonction du besoin.

Aussi associé GUISetOnEvent($GUI_EVENT_CLOSE a des actions differentes (quit ou cacher).

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=..\..\BTtools.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Global $gui1
Global $gui2
Global $Button2
Global $Input1
Global $Progress1
Global $Pourcentage
Opt("GUIOnEventMode", 1)

CreerGUIs()

While(True)     ; Boucle infinie pour faire tourner le programme
    Sleep(10)   ; Permet de ne pas avoir 100% de CPU utilisé
WEnd


Func CreerGUIs()

$gui1 = GUICreate("download", 527, 222, 982, 216)
;~ $Button1 = GUICtrlCreateButton("Ok", 245, 30, 49, 17)
$Button2 = GUICtrlCreateButton("Ok", 245, 50, 49, 17)
GUICtrlSetOnEvent($Button2, "keybt")
GUISetOnEvent($GUI_EVENT_CLOSE, "quit", $gui1)
    GUISetState(@SW_SHOW, $gui1)

$gui2 = GUICreate("MyGUI")
GUISetOnEvent($GUI_EVENT_CLOSE, "FermerStatus", $gui2) ;On associe la fonction ALT F4 ou croix rouge a la fonction FermerStatus
$Input1 = GUICtrlCreateEdit("http://shv.globetrotter.net/data/fichier_5mb_file.bin", 10, 10, 200, 20)
$Progress1 = GUICtrlCreateProgress(10, 30, 100, 20)



    EndFunc



Func keyBT()
    GUISetState(@SW_SHOW, $gui2)
Global $Dir = FileSaveDialog("Sauvegarder sous...", @DesktopDir, "Tout les fichiers (*.*)", 3, "fichier_5mb_file.bin")

Global $URL = GUICtrlRead($Input1)
Global $Download = InetGet($URL, $Dir, 1, 1) ;Telecharge

Global $TotalSize = 0

While Not InetGetInfo($Download, 2) ;Tant que le telechargement n'est pas complet
    Sleep(200)
    $KbRecu = InetGetInfo($Download, 0) ;Obtient les KiloOctet reçu

    If $KbRecu > 0 Then
        If $TotalSize = 0 Then
            $TotalSize = InetGetInfo($Download, 1) ;Obtient la taille du fichier
        EndIf

        $Pourcentage = $KbRecu / $TotalSize * 100 ;calcul le pourcentage
        GUICtrlSetData($Progress1, $Pourcentage) ;transfere le pourcentage a la valeur de la ProgressBar
    EndIf
WEnd
EndFunc


Func FermerStatus() ;fonction qui permet de cacher la GUI2
    GUISetState(@SW_HIDE, $gui2)
EndFunc

Func quit()
    Exit
EndFunc
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [R] Interaction ProgressBar + Download

#9

Message par davzell »

effectivement ça marche nikel comme ça.

mais au final une fois l'outil terminé je me suis rendu compte d'un gros problème.
j'utilise la fonction inetget pour récupérer des fichiers sur un serveur ftp et pas sur du http.

en fonction de la ou je l'utilise la récupération des fichiers ne marche que si mon client ftp est en mode PASSIF, or inetget n'a pas l'air de le gérer....


Du coup il faut que j'arrive a faire la même chose qu'au dessus mais avec la fonction _FTP_Connect...
Répondre