⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 152.htm

📁 vb功能实例介绍。详细、很好的实例说明。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>非同步文件下载类</p>
<p></p>
<p>注释:*********************************************************************************************</p>
<p>注释:</p>
<p>注释: AsyncDownload Class</p>
<p>注释:</p>
<p>注释: A class to download files asynchronously</p>
<p>注释:</p>
<p>注释:*********************************************************************************************</p>
<p>注释:</p>
<p>注释: Author: Eduardo A. Morcillo</p>
<p>注释: E-Mail: e_morcillo@yahoo.com</p>
<p>注释: Web Page: http://www.domaindlx.com/e_morcillo</p>
<p>注释:</p>
<p>注释: Distribution: You can freely use this code in your own applications but you</p>
<p>注释:               can注释:t publish this code in a web site, online service, or any</p>
<p>注释:               other media, without my express permission.</p>
<p>注释:</p>
<p>注释: Usage: at your own risk.</p>
<p>注释:</p>
<p>注释: Tested with:</p>
<p>注释:              Windows Me</p>
<p>注释:              VB5</p>
<p>注释:              URLMON.DLL v6.0.2462.0 (IE 6.0b)</p>
<p>注释:</p>
<p>注释: Dependencies:</p>
<p>注释:</p>
<p>注释:     * OLELIB.TLB</p>
<p>注释:     * URLMON.DLL</p>
<p>注释:</p>
<p>注释: History:</p>
<p>注释:</p>
<p>注释:           04/27/2001 - The class implements Iauthenticate and</p>
<p>注释:                        IHttpNegotiate</p>
<p>注释:           03/27/2001 - This code was released</p>
<p>注释:</p>
<p>注释:*********************************************************************************************</p>
<p>Option Explicit</p>
<p></p>
<p>注释: Implement IBindStatusCallback to receive</p>
<p>注释: the data and progress notification</p>
<p>Implements IBindStatusCallback</p>
<p></p>
<p>注释: Implement Iauthenticate to</p>
<p>注释: query for user name and password</p>
<p>Implements Iauthenticate</p>
<p></p>
<p>注释: Implement IHttpNegotiate to send and</p>
<p>注释: receive HTTP headers</p>
<p>Implements IHttpNegotiate</p>
<p></p>
<p>注释: ==== Enums ====</p>
<p>Enum adlFlags</p>
<p>   adlAsynchronous = BINDF_ASYNCHRONOUS</p>
<p>   adlOffLine = BINDF_OFFLINEOPERATION</p>
<p>   adlFromCacheIfAvailable = BINDF_FWD_BACK</p>
<p>   adlFromCacheIfNetFail = BINDF_GETFROMCACHE_IF_NET_FAIL</p>
<p>   adlGetNewest = BINDF_GETNEWESTVERSION</p>
<p>   adlResync = BINDF_RESYNCHRONIZE</p>
<p>End Enum</p>
<p></p>
<p>Enum adlDownloadType</p>
<p>   adlByteArray      注释: Returns the URL data in a byte array (using Data property)</p>
<p>   adlFile           注释: Saves the URL to a file</p>
<p>   adlStream         注释: Returns an Istream object (download is synchronous)</p>
<p>   adlCache          注释: Downloads the file to the IE cache</p>
<p>   adlGetObject      注释: Downloads the file and instanties an object</p>
<p>                     注释: using the registered mime type</p>
<p>End Enum</p>
<p></p>
<p>Enum adlErrors</p>
<p>   adlErrDownloading = vbObjectError</p>
<p>End Enum</p>
<p></p>
<p>注释: ==== Private members ====</p>
<p>Private m_oBinding As Ibinding</p>
<p>Private m_abData() As Byte</p>
<p>Private m_bFirstTime As Boolean</p>
<p>Private m_bSync As Boolean</p>
<p>Private m_oMk As Imoniker</p>
<p>Private m_oBC As IBindCtx</p>
<p>Private m_sHeaders As String</p>
<p>Private m_sPostData As String</p>
<p>Private m_sMethod As String</p>
<p></p>
<p>注释: ==== Public members ====</p>
<p>Public Flags As adlFlags</p>
<p></p>
<p>注释: ==== Events ====</p>
<p></p>
<p>注释: StartingDownload. Raised when the download starts.</p>
<p>Event StartingDownload()</p>
<p></p>
<p>注释: DownloadComplete. Raised when the download is complete.</p>
<p>Event DownloadComplete(ByVal ErrNum As Long)</p>
<p></p>
<p>注释: Progress. Raised to notify download progress.</p>
<p>Event Progress(ByVal Percent As Long, ByVal Status As BINDSTATUS, _</p>
<p>               ByVal StatusString As String)</p>
<p></p>
<p>注释: DataAvailable. Raised when there注释:s data available.</p>
<p>Event DataAvailable(ByVal Data As Variant)</p>
<p></p>
<p>注释: ObjectAvailable. Raised when the download type is adlGetObject and</p>
<p>注释: the object is instantiated.</p>
<p>Event ObjectAvailable(ByVal Object As Object)</p>
<p></p>
<p>注释: Authenticate. Raised by Iauthenticate interface when</p>
<p>注释: an user name and password is required to access to the URL</p>
<p>Event Authenticate(User As String, Password As String)</p>
<p></p>
<p>注释: HTTPResponse. Raised by IHttpNegotiate interface.</p>
<p>Event HTTPResponse(ByVal Response As Long, ByVal Headers As String)</p>
<p></p>
<p>注释: ==== APIs ====</p>
<p>Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long</p>
<p>Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long</p>
<p>Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long</p>
<p>Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long</p>
<p></p>
<p>Private Const GMEM_MOVEABLE = &H2</p>
<p>Private Const GMEM_ZEROINIT = &H40</p>
<p>Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)</p>
<p></p>
<p></p>
<p>Public Property Get Downloading() As Boolean</p>
<p></p>
<p>   Downloading = Not m_oBinding Is Nothing</p>
<p>   </p>
<p>End Property</p>
<p></p>
<p>注释:</p>
<p>注释: pvStr2Ptr</p>
<p>注释:</p>
<p>注释: Allocates a string using CoTaskMemAlloc</p>
<p>注释:</p>
<p>Private Function pvStr2Ptr(ByVal Str As String) As Long</p>
<p></p>
<p>   pvStr2Ptr = CoTaskMemAlloc(LenB(Str) + 2)</p>
<p></p>
<p>   注释: Copy the string</p>
<p>   MoveMemory ByVal pvStr2Ptr, _</p>
<p>              ByVal StrPtr(Str), _</p>
<p>              LenB(Str) + 2</p>
<p></p>
<p>End Function</p>
<p></p>
<p>注释:</p>
<p>注释: AbortDownload</p>
<p>注释:</p>
<p>注释: Aborts the current download</p>
<p>注释:</p>
<p>Sub AbortDownload()</p>
<p></p>
<p>   If Not m_oBinding Is Nothing Then</p>
<p>      m_oBinding.Abort</p>
<p>   End If</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>注释:</p>
<p>注释: Data</p>
<p>注释:</p>
<p>注释: Returns the downloaded data in a byte array</p>
<p>注释:</p>
<p>Public Property Get Data() As Variant</p>
<p></p>
<p>   Data = m_abData</p>
<p></p>
<p>End Property</p>
<p></p>
<p>注释:</p>
<p>注释: Download</p>
<p>注释:</p>
<p>注释: Downloads a file</p>
<p>注释:</p>
<p>注释: Parameters:</p>
<p>注释:</p>
<p>注释: URL: The file URL</p>
<p>注释: DownloadType: type of download</p>
<p>注释: FileName: Name of the destination file for adlFile download type</p>
<p>注释:</p>
<p>Function Download( _</p>
<p>   ByVal URL As String, _</p>
<p>   Optional ByVal DownloadType As adlDownloadType, _</p>
<p>   Optional ByVal FileName As String, _</p>
<p>   Optional ByVal Method As String = "GET", _</p>
<p>   Optional ByVal OptionalHeader As String, _</p>
<p>   Optional ByVal PostData As String) As Variant</p>
<p></p>
<p>   If Not m_oBinding Is Nothing Then Err.Raise adlErrDownloading, _</p>
<p>         "AsyncDownload", _</p>
<p>         "A download operation is still running. Cannot start a new one."</p>
<p></p>
<p>   m_bSync = False</p>
<p></p>
<p>   注释: Store the post data</p>
<p>   m_sPostData = StrConv(PostData, vbFromUnicode)</p>
<p>   If LenB(m_sPostData) >  0 And InStr(1, OptionalHeader, "Content-Type:", vbTextCompare) = 0 Then</p>
<p>      OptionalHeader = "Content-Type: application/x-www-form-urlencoded" & vbCrLf & OptionalHeader</p>
<p>   End If</p>
<p>   </p>
<p>   注释: Store the header</p>
<p>   m_sHeaders = OptionalHeader</p>
<p>   If Right$(m_sHeaders, 2) <>  vbCrLf Then m_sHeaders = m_sHeaders & vbCrLf</p>
<p></p>
<p>   注释: Store the method</p>
<p>   m_sMethod = Ucase$(Method)</p>
<p>   If Len(m_sMethod) = 0 Then m_sMethod = "GET"</p>
<p></p>
<p>   Select Case DownloadType</p>
<p></p>
<p>      Case adlByteArray</p>
<p></p>
<p>         注释: Erase the previous data</p>
<p>         Erase m_abData</p>
<p></p>
<p>         注释: Set the flags</p>
<p>         m_bFirstTime = True</p>
<p></p>
<p>         注释: Star the download</p>
<p>         URLOpenStreamW Me, URL, 0, Me</p>
<p></p>
<p>      Case adlStream</p>
<p></p>
<p>         Static oStream As Iunknown</p>
<p></p>
<p>         m_bSync = True</p>
<p></p>
<p>         注释: Download to the stream</p>
<p>         URLOpenBlockingStreamW Me, URL, oStream, 0, Me</p>
<p></p>
<p>         Set Download = oStream</p>
<p></p>
<p>      Case adlFile</p>
<p></p>
<p>         注释: Start downloading</p>
<p>         URLDownloadToFileW Me, URL, FileName, 0, Me</p>
<p></p>
<p>      Case adlCache</p>
<p></p>
<p>         Dim sCachedFile  As String</p>
<p></p>
<p>         sCachedFile = Space$(260)</p>
<p></p>
<p>         注释: Start downloading</p>
<p>         URLDownloadToCacheFileW Me, URL, StrPtr(sCachedFile), 260, 0, Me</p>
<p></p>
<p>         注释: Return the name of the file</p>
<p>         注释: in the IE cache</p>
<p>         Download = Trim$(sCachedFile)</p>
<p></p>
<p>      Case adlGetObject</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -