2009-02-11 19 views
5

VB6 uygulamasından birden çok dosya (çoğunlukla görüntüler) indirmek istiyorum. Şu anda URLDownloadToFile kullanıyorum ama bir seferde sadece bir dosyaya izin veriyor ve ilerleme çubuğu yok. Birden fazla dosya ve ilerleme çubuğu ile indirmek istiyorum. lütfen yardım et. şimdiden teşekkürler.VB6'da ilerleme çubuğu ile birden fazla dosya nasıl karşıdan yüklenir?

şimdiki kodu:

Dim lngRetVal As Long 
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0) 
If lngRetVal = 0 Then DownloadFile = True 

cevap

2

Bir VB cevap umuyoruz, ancak bu sigara önemsiz olduğunu. Aşağıdaki çoğu

http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20571958.html

IBindStatusCallback arayüzünden gelen VB doğrudan erişilebilir değildir. uyumlu bir kitaplığına eklenmelidir. Ayrıca o dahil nasıl kullanılacağına dair örnekler bulacaksınız tl_ole.zip

: indirmek için http://www.domaindlx.com/e_morcillo/scripts/type/default.asp zip dosyası adıdır:

Sen altında Tipi kütüphane OLELIB.TLB bulabilirsiniz. 'un, IBindStatusCallback üzerinde özel bir örnek olup olmadığına emin değilsiniz, ancak bunu denemeye değer .

Sen her şeyin üzerinde tam kontrol verecek bir dizeye verileri almak için kendi fonksiyonu yazabiliriz: Burada geri arama yöntemi yapmak için ek kaynaklar bulacaksınız

Option Explicit 

Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0 
Public Const INTERNET_DEFAULT_HTTP_PORT = 80 
Public Const INTERNET_SERVICE_HTTP = 3 
Public Const INTERNET_FLAG_RELOAD = &H80000000 
Public Const HTTP_QUERY_STATUS_CODE = 19 
Public Const HTTP_ADDREQ_FLAG_ADD = &H20000000 

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 InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long 
Public Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long 
Public Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal sOptional As String, ByVal lOptionalLength As Long) As Long 
Public Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Long 
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer 
Public Declare Function HttpAddRequestHeaders Lib "wininet.dll" Alias "HttpAddRequestHeadersA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lModifiers As Long) As Integer 
Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) As Integer 
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternet&, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength&, ByVal dwFlags&, ByVal dwContext&) As Long 
Public Declare Function InternetQueryDataAvailable Lib "wininet.dll" (ByVal hFile As Long, lpdwNumberOfBytesAvailable As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long 

Public Function GetHTML(strURL As String) As String 
Const BufferSize = 16384 
Dim hSession&, hURL&, lRet&, lBytesAvail& 
Dim Buffer As String * BufferSize 
Dim BufferLen&, sResult$ 
    hSession = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0) 
    hURL = InternetOpenUrl(hSession, strURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&) 
    sResult = "" 
    Do 
     InternetReadFile hURL, Buffer, Len(Buffer), BufferLen 
     If BufferLen > 0 Then sResult = sResult & Left(Buffer, BufferLen) 
    Loop Until BufferLen = 0 
    GetHTML = sResult 
    InternetCloseHandle hURL 
    InternetCloseHandle hSession 
End Function 

(aşağı kaydırmak) altına:

http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_21763861.html

http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_21746456.html

Ancak, üzerinde daha fazla kontrol sahibi olmak istiyorsanız, kendi indirme fonksiyonunuzu gerçekleştirmekten daha iyi olacağınızı düşünüyorum. VB'deki TCP/IP şeyler aslında çok kolaydır.

Sen VB kod indir olur ise yürütmeye devam eder, böylece zaman uyumsuz dosyayı indirmek istediğiniz

+0

Aslında VB6'da oldukça basittir - API çağrısı gerekli değildir. Cevabımı gör. – MarkJ

+0

Evet, cevabınızdaki tek kişi değilim. –

+0

Sadece burada durdum - teşekkür için teşekkürler Adam. – MarkJ

4

-Adam. , yerel VB6 ile bunu yapmak için bilinen bir yöntemdir, AsyncRead UserControl ve UserDocument nesneleri yöntemi kullanılarak - API çağrılarına gerek yoktur.

İşte mükemmel bir explanation and VB6 code for multiple simultaneous downloads, ünlü VB6 gurusu Karl Peterson dan. AsyncReadProgress olayı size bir ilerleme çubuğu görüntülemenizi sağlayan BytesRead ve BytesMax verir.

+0

vb.mvps.org çevrimdışı görünüyor. Karl'ın projelerinin nerede olduğu hakkında bir fikrin var mı? Eğer her yerde bulabilirsem tam örneği görmek isterim. – Jeff

+1

Burada görünüyorlar http://test.epeterson.net. Bunun kalıcı bir şey olup olmadığını bilmiyorum. – MarkJ

+0

http://test.epeterson.net/samples/ adresinde listelenmiş olsa da, tüm örnek projelerin de eksik olduğu anlaşılıyor. – Jeff