TELECHARGER+INFOS+PROGRESSBAR (part2)
# 0000000613
ajouté le 11/06/2008 00:41:54 et modifié le 06/07/2008
consulté 9025 fois
Niveau
initié
Version(s) Foxpro : VFP 6.0
Description
-Suite et fin (?) de ma série sur les téléchargements (j'ai bien appris avec cela) :
ydownload4.prg est un programme de téléchargement avec visualisation des informations sur un form avec progressbar.
c'est une version modifiée de ydownload3.prg (mon article précédent)
-Télécharger une page web sans les objets,des zip,des images,des vidéos/audio....
-l'URL et le fichier de destination sont passés comme paramètres.
-Exécuter :do with yURL,lcdest
-ex:do ydownload3 with "http://www.awitness.org/software/download_zip_files/dlzip.exe","c:\ydownload.exe"
-Iexplore doit être installé sur la station même s'il n'est pas visible.Internet doit être connecté.
NB: A propos de concaténation de texte dans ce composant,il faut mettre des BR entre brackets comme retours de charriot !
25 juin 2008: rajouté la vitesse de transfert en ko/s dans le progressbar ,omise.
Code source :
*B.YOUSFI EL BAYADH -32000-Algérie-le 10 JUIN 2008 benameuryousfi1@gmail.com *Télécharger une page web sans les objets,des zip,des images,des vidéos/audio.... *l'URl et le fichier de destination sont passés comme paramètres *do <program> with yURL,lcdest *ex:do ydownload3 with "http://www.awitness.org/software/download_zip_files/dlzip.exe","c:\ydownload.exe" *Iexplore doit être installé sur la station même s'il n'est pas visible.Internet doit être connecté. *************************************************************************** lparameters yUrl,lcDest ifparameters() # 2 messagebox("Vous devez passer 2 paramètres ,yURl et fichier destinataire lcDest",0+16,"Erreur") return
endi
_screen.visible=.f. **********************
t0=seconds()
nsize=0
clea *Déclarations des Constantes pour API
#DEFINE INTERNET_OPEN_TYPE_PRECONFIG 0
#DEFINE INTERNET_FLAG_RELOAD 2147483648 *#DEFINE INTERNET_FLAG_RELOAD 0x80000000 &&idem
#define HTTP_QUERY_CONTENT_LENGTH 5 ******************* do yDECLARATIONS &&Charger en mémoire les déclarations des API *******************
yhRequest = 0
yHandle = InternetOpen("Visual Foxpro", INTERNET_OPEN_TYPE_PRECONFIG,0, 0, 0) If yHandle # 0
yhRequest = InternetOpenUrl(yHandle, yURL, '', 0, INTERNET_FLAG_RELOAD, 0 )
endI if yhRequest=0 &&Echec connection
=InternetCloseHandle(yHandle)
endi *******************************
cBuf = REPLICATE(' ',40)
nBufLen = 40
nVoid = 0
nQryRet = HttpQueryInfo(yhRequest, HTTP_QUERY_CONTENT_LENGTH, @cBuf, @nBufLen, @nVoid )
IF nQryRet=1
nSize = VAL(cBuf) ENDIF
=InternetCloseHandle(yHandle) &&fermer le handle ouvert
=InternetCloseHandle(yhRequest) ******************************** docase case nSize<=1023 &&octets
ysize=allt(str(nsize))+" Octets."
case nSize>=1024 and nsize<=1024*1024-1 && ko
ysize=allt(str(nsize/1024,12,3))+" Koctets."
case nSize>=1024*1024 and nsize<=1024*1024*1024-1 &&mo
ysize=allt(str(nsize/(1024*1024),12,3))+" Moctets."
IF lhInternetSession = 0 WAITWINDOW"La session Internet n'a pu être établie !"TIME 2 RETURN .null. ENDIF
lhUrlFile = InternetOpenUrl(lhInternetSession, yURl, '', 0, INTERNET_FLAG_RELOAD, 0 )
IF lhUrlFile = 0 * l'URL ne peut être ouverte messagebox(" URL ne peut être ouverte !") RETURN .null. ENDIF
ystring = ""
llOk = .t.
x=0
cr=chr(13)
deb=.t. DOWHILE llOK *Mettre en place un tampon assez grand de mémoire
lsReadBuffer = SPACE(32767)
lnBytesRead = 0 && initialiser le nbre de bytes à lire
lnOK = InternetReadFile( lhUrlFile, @lsReadBuffer, LEN(lsReadBuffer), @lnBytesRead)
x=x+lnbytesRead
pourc=allt( str(100*x/nsize,7,2))+" %"&&pourcentage des bytes obtenus ********************************* &&vitesse de transfert en ko/s
ww=(x/(seconds()-t0))/1024
vtr=allt(str(ww,8,2))+" ko/s " *********************************
tt=(seconds()-t0)*(nsize/x -1) &&temps restant estimé docase case tt<=59
TR=allt(str(tt) )+" sec." case tt>=60 and tt<3600
TR=allt( str(tt/60,5,2) )+" mn" case tt>=3600
TR=allt(str(tt/3600,5,2))+" h" endcase ************************************************************** &&progressbar if deb=.t.
yform=createobject("yprogressbar")
yform.show
deb=.f.
endi *********************************************************** _screen.activeform.label1.caption="URl="+allt(yUrl) _screen.activeform.label2.caption= "Taille= " + ysize _screen.activeform.label3.caption="Fichier destinataire ="+lcDest _screen.activeform.ylab.caption=pourc _screen.activeform.ytr.caption="Temps restant estimé="+TR+" Vitesse transfert="+vtr _screen.activeform.ylab.width=(x/nsize)*_screen.activeform.ylab0.width ************************************************************ if ( lnBytesRead > 0 )
ystring = ystring + left( lsReadBuffer, lnBytesRead ) endif * error trap - either a read failure or read past eof()
llOk = ( lnOK = 1 ) and ( lnBytesRead > 0 ) ENDDO
_screen.activeform.release&&fermer le progressbar
messagebox("uRL="+allt(yURl)+cr+"Taille "+allt(str(x))+" Octets"+cr+; "Fichier destinataire="+lcdest+cr+; "Temps du téléchargement="+allt(str(seconds()-t0))+" sec"+cr+cr+; "Ce fichier sera visualisé." ,0+32,"Informations du téléchargement")
*fermer tous les handles ouverts (important)
InternetCloseHandle( lhUrlFile )
InternetCloseHandle( lhInternetSession ) ************************** &&sauvegarde du téléchargement reçu sous forme de chaîne de caractères.
=strtofile(ystring,lcDest) &&extension à respecter ou renommer convenablement ************************** &&Visualiserr le téléchargement obtenu (l'extension a son importance ici) DECLAREINTEGER ShellExecute IN shell32.dll ; INTEGER hndWin, STRING cAction, STRING cFileName, ; STRING cParams, STRING cDir, INTEGER nShowWin
ShellExecute(0,"open",lcDest,"","",1) _screen.visible=.t. ********************************************************** *Création du progressbar DEFINECLASS yprogressbar ASform Height = 132 Width = 366 ShowWindow = 2 DoCreate = .T. AutoCenter = .T. BorderStyle = 3 Caption = "Form1" AlwaysOnTop = .T. Name = "Form1"