TELECHARGER AVEC AFFICHAGE DES INFORMATIONS (part1)
# 0000000612
ajouté le 11/06/2008 00:28:53 et modifié le 06/07/2008
consulté 8268 fois
Niveau
initié
Version(s) Foxpro : VFP 6.0
Description
Dans la continuité de mes articles sur le sujet :
ydownload3.prg est un programme de téléchargement avec visualisation des informations dans une fenêtre obtenue avec
wait window de VFP.
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: le 25 juiin 2008 j'ai rajouté dans le progressbar ,la vitesse de transfert en ko/s que j'avais 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
#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)
DOWHILE llOK *Mettre en place un tampon assez grand de mémoire
lsReadBuffer = SPACE(32767)
lnBytesRead = 0 && initialiser le nbre de bytes à lire
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 "&&vitesse d etransfert en ko/s ********************************
tt=(seconds()-t0)*(nsize/x -1) 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
xmessage=" TELECHARGEMENT "+cr+; "URl="+allt(yUrl)+cr+; "Taille= " + ysize+cr+; "Fichier destinataire ="+lcDest+cr+cr+; "Téléchargé="+ pourc+cr+; "Temps restant estimé="+TR+" Vitesse de transfert="+vtr iflen(xmessage)>254 && tronquer pour la limitation de wait window à 254 caractères sinon erreur !
xmessage=substr(xmessage,1,254)
endi waitwindow (xmessage) atsrows()/2-20,scols()/2-20 nowait
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
waitclear 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.