vb怎么使用UrlDownloadtoFile下载文件 同时显示 进度条 大小 下载速度
vb如何使用UrlDownloadtoFile下载文件 同时显示 进度条 大小 下载速度?
------解决方案--------------------
http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip
引用这个 olelib.tlb
,直接让你的类(窗体)继承 IBindStatusCallback,该对象的指针就可以作为 URLDownloadToFile 的最后一个参数。
- VB code
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Sub Command1_Click() '后台下载 r = URLDownloadToFile(0, "http://www.54nanren.com.cn/en-us/music/Music_Upload/mianhuatang.wma", "c:\8.Wma", 0, 0) If r = 0 Then MsgBox "下载完毕" Else MsgBox "下载失败" End If End Sub '上面的能否得到进程条, 文件大小, 下载速度? '下面的能否不显示下载对话框.只要得到进程条, 文件大小, 下载速度 等信息呢? Private Sub Command2_Click() 'API系统对话框 On Error GoTo ERR_OUT DoFileDownload StrConv("http://www.54nanren.com.cn/en-us/music/Music_Upload/mianhuatang.wma", vbUnicode) Exit Sub ERR_OUT: MsgBox "There is an error accoured" Exit Sub End Sub
------解决方案--------------------
http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip
引用这个 olelib.tlb
,直接让你的类(窗体)继承 IBindStatusCallback,该对象的指针就可以作为 URLDownloadToFile 的最后一个参数。
- VB code
'Form Option Explicit Implements IBindStatusCallback Sub Command1_Click() Dim r As Long r = URLDownloadToFileW(Me, "http://www.54nanren.com.cn/en-us/music/Music_Upload/mianhuatang.wma", "c:\8.Wma", 0, Me) If r = 0 Then MsgBox "下载完毕" Else MsgBox "下载失败" End If End Sub Private Sub IBindStatusCallback_GetBindInfo(grfBINDF As olelib.BINDF, pbindinfo As olelib.BINDINFO) End Sub Private Function IBindStatusCallback_GetPriority() As Long End Function Private Sub IBindStatusCallback_OnDataAvailable(ByVal grfBSCF As olelib.BSCF, ByVal dwSize As Long, pformatetc As olelib.FORMATETC, pStgmed As olelib.STGMEDIUM) End Sub Private Sub IBindStatusCallback_OnLowResource(ByVal reserved As Long) End Sub Private Sub IBindStatusCallback_OnObjectAvailable(riid As olelib.UUID, ByVal pUnk As stdole.IUnknown) End Sub Private Sub IBindStatusCallback_OnProgress(ByVal ulProgress As Long, ByVal ulProgressMax As Long, ByVal ulStatusCode As olelib.BINDSTATUS, ByVal szStatusText As Long) Dim sStatus As String Dim sText As String Dim bUsePercent As Boolean Select Case ulStatusCode Case BINDSTATUS_FINDINGRESOURCE sStatus = "Finding resource" Case BINDSTATUS_CONNECTING sStatus = "Connecting" Case BINDSTATUS_REDIRECTING sStatus = "Redirecting" Case BINDSTATUS_BEGINDOWNLOADDATA sStatus = "Begin download data" bUsePercent = True Case BINDSTATUS_DOWNLOADINGDATA sStatus = "Downloading data" bUsePercent = True Case BINDSTATUS_ENDDOWNLOADDATA sStatus = "End download data" bUsePercent = True Case BINDSTATUS_USINGCACHEDCOPY sStatus = "Using cached copy" Case BINDSTATUS_SENDINGREQUEST sStatus = "Sending request" Case BINDSTATUS_CLASSIDAVAILABLE sStatus = "Object CLSID" Case BINDSTATUS_MIMETYPEAVAILABLE, BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE sStatus = "Mime type available" Case BINDSTATUS_CACHEFILENAMEAVAILABLE sStatus = "Cache filename" Case BINDSTATUS_BEGINSYNCOPERATION sStatus = "Begin Sync operation" Case BINDSTATUS_ENDSYNCOPERATION sStatus = "End Sync operation" Case BINDSTATUS_BEGINUPLOADDATA sStatus = "Begin uploading data" Case BINDSTATUS_UPLOADINGDATA sStatus = "Uploading data" Case BINDSTATUS_ENDUPLOADDATA sStatus = "End uploading data" Case BINDSTATUS_PROTOCOLCLASSID sStatus = "Protocol CLSID" Case BINDSTATUS_ENCODING sStatus = "Encoding" Case BINDSTATUS_COOKIE_SENT sStatus = "Cookie sent" Case BINDSTATUS_P3P_HEADER sStatus = "P3P Header" Case BINDSTATUS_POLICY_HREF sStatus = "Policy HREF" Case BINDSTATUS_DECODING sStatus = "Decoding" Case BINDSTATUS_COOKIE_STATE_ACCEPT sStatus = "Cookie Accept" Case BINDSTATUS_COOKIE_STATE_LEASH sStatus = "Cookie state leash" Case BINDSTATUS_PROXYDETECTING sStatus = "Proxy detecting" Case BINDSTATUS_ACCEPTRANGES sStatus = "Accept ranges" Case Else sStatus = "ID:" & CStr(ulStatusCode) End Select If bUsePercent And (ulProgressMax <> 0) Then sStatus = FormatPercent(ulProgress / ulProgressMax, 0, vbTrue) ElseIf szStatusText <> 0 Then sStatus = sStatus & ": " & SysAllocString(szStatusText) End If Label1 = sStatus End Sub