Ca m'enerve ce module fait tout planter ! Aidez moi c'est tres important !

Signaler
Messages postés
56
Date d'inscription
mardi 12 février 2002
Statut
Membre
Dernière intervention
2 août 2007
-
Messages postés
68
Date d'inscription
lundi 21 mai 2001
Statut
Membre
Dernière intervention
4 janvier 2003
-
J'ai un prob avec ce module que je vous affiche
après des que je fais appelle à celui ci
exemple call download("www.truc.com/grosfichier.exe","c:\grosfff.exe)
le programme ne répond pas jusqu'a ce qu'il est fini de télécharger le fichier pourquoi ????
aidez moi !!!

Option Explicit

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
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
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_OPEN_TYPE_DIRECT = 1
Public Const INTERNET_OPEN_TYPE_PROXY = 3

Public Const scUserAgent = "VB OpenUrl"
Public Const INTERNET_FLAG_RELOAD = &H80000000

Sub Download(URL As String, SaveAs As String)

Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String

hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, URL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)

bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False


Wend

Open SaveAs For Binary Access Write As #1
Put #1, , sBuffer
Close #1

If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)

End Sub

AIDEZ MOI C'est IMPORTANT

4 réponses

Messages postés
73
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
20 février 2003

Lorsqu'un Process VB s'effecute, il prime sur tout les autres. Dans ton cas la boucle While Wend servant à lire le contenu du fichier bloque les autres process. Donc la solution est d'encapsuler ta procédure de lecture dans un composant activeX ou tu peux ne lire qu'a intervalle régulier par un timer, mais la meilleure solution reste l'externalisation des opérations longues.
0
Messages postés
56
Date d'inscription
mardi 12 février 2002
Statut
Membre
Dernière intervention
2 août 2007

Mais dans ce cas la comment dois je faire pour le mettre en active X ?
comment faire pour que ca marche
J'aurais bien aimé aussi mettre une progressbar pour voir l'avance du téléchargement du fichier ?
Comment connaitre les bytes lu et les bytes totales aide moi merci
Merci
0
Messages postés
32
Date d'inscription
vendredi 23 août 2002
Statut
Membre
Dernière intervention
7 mars 2003

Adieu p'tit

insere un doevents dans ton while
0
Messages postés
68
Date d'inscription
lundi 21 mai 2001
Statut
Membre
Dernière intervention
4 janvier 2003

Si tu voulait faire tout ca, fallait utiliser Winsock (plus simple à mon gout et plus souple.) . Et laisse tomber les ActiveX sa alourdi le programme (et donc les plantages) pour trois fois rien. Met juste un DoEvents dans ta boucle et t'aura plus de problèmes!

couriousous
0