Page 1 sur 1

[R] Interaction ProgressBar + Download

Posté : ven. 26 oct. 2012 03:51
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)

Re: [..] Interaction ProgressBar + Download

Posté : ven. 26 oct. 2012 11:24
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.

Re: [..] Interaction ProgressBar + Download

Posté : ven. 26 oct. 2012 12:57
par 4sp4rt4m3
Donc on est bien d'accord, néanmoins mon script est toujours faux...

Re: [..] Interaction ProgressBar + Download

Posté : ven. 26 oct. 2012 13:19
par mikell

Re: [..] Interaction ProgressBar + Download

Posté : ven. 26 oct. 2012 13:27
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.

Re: [R] Interaction ProgressBar + Download

Posté : sam. 21 sept. 2013 13:38
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 ^^

Re: [R] Interaction ProgressBar + Download

Posté : lun. 26 oct. 2015 15:54
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

Re: [R] Interaction ProgressBar + Download

Posté : mar. 27 oct. 2015 15:36
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

Re: [R] Interaction ProgressBar + Download

Posté : mer. 28 oct. 2015 10:54
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...