Quelqu'un pourrait'il m'aider sur une source assez compliqué ! merci

Quelqu'un pourrait'il m'aider sur une source assez compliqué ! merci - VB/VBA/VBS - Programmation

Marsh Posté le 23-08-2002 à 17:21:21    

voici la source

Code :
  1. Option Explicit
  2. Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
  3. Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
  4. Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  5. Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  6. Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
  7. Public Const INTERNET_OPEN_TYPE_DIRECT = 1
  8. Public Const INTERNET_OPEN_TYPE_PROXY = 3
  9. Public Const scUserAgent = "VB OpenUrl"
  10. Public Const INTERNET_FLAG_RELOAD = &H80000000
  11. Sub Download(URL As String, SaveAs As String)
  12.         Dim hOpen                            As Long
  13.         Dim hOpenUrl                        As Long
  14.         Dim bDoLoop                      As Boolean
  15.         Dim bRet                                As Boolean
  16.         Dim sReadBuffer              As String * 2048
  17.         Dim lNumberOfBytesRead  As Long
  18.         Dim sBuffer                      As String
  19.         hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
  20.         hOpenUrl = InternetOpenUrl(hOpen, URL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
  21.         bDoLoop = True
  22.         While bDoLoop
  23.                 sReadBuffer = vbNullString
  24.                 bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
  25.                 sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
  26.                 If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
  27.              
  28.                
  29.         Wend
  30.        
  31.         Open SaveAs For Binary Access Write As #1
  32.         Put #1, , sBuffer
  33.         Close #1
  34.        
  35.         If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
  36.         If hOpen <> 0 Then InternetCloseHandle (hOpen)
  37. End Sub


ce que j'aimerais c'est ecrire dans un label ou un text
le nombre de bytes à lire et le nombre de byte lu  
pour faire une barre de téléchargement  
MErci


Message édité par remixgame le 23-08-2002 à 17:28:35
Reply

Marsh Posté le 23-08-2002 à 17:21:21   

Reply

Marsh Posté le 23-08-2002 à 17:44:14    

s'il vous plait aidez moi !!!!!!

Reply

Marsh Posté le 23-08-2002 à 19:54:18    

remixgame a écrit a écrit :

s'il vous plait aidez moi !!!!!!



c'est du Lustre ca [:totoz]


---------------
"OCPLB : On Casse Pas Le Binôme, 'moiselle Jade, Carlson & Peters, page 823 !"
Reply

Marsh Posté le 23-08-2002 à 19:58:11    

C'est bien dans l'histoire d'avoir repondu mais bon tu n'es pas plus fort que moi et tu ne m'aides pas alors je ne vois pas l'utilité d'envoyer des messages bidons !

Reply

Marsh Posté le 23-08-2002 à 21:09:17    

Ben pour le nb de bytes téléchargés, c'est len(sBuffer)
(le calculer via le left$ et additionner si tes fichiers sont trop gros)
 
maius la taille totale, j'ai pas l'impression que tu puisses la savoir à l'avance.

Reply

Marsh Posté le 23-08-2002 à 21:28:34    

pour obteniur la taille totale du dois passer par l'api HttpQueryInfo (voir l'aide) tu lui passes un buffet vide et elle va te retourner la taille que tu devras alors allouer pour récupérer le doc...

Reply

Marsh Posté le 28-08-2002 à 01:58:27    

Je sais que ce n'est pas la question, mais ceci:

bDoLoop = True
While bDoLoop
   '...
   If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend


Équivaut à ceci:

Do
   '...
While CBool(lNumberOfBytesRead)


Cette ligne risque d'être très lente avec de grandes tailles:

sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)

Pourquoi la lecture se fait-elle en plusieurs fois ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed