Downloader.ctl
上传用户:luoweizhao
上传日期:2022-08-01
资源大小:1290k
文件大小:5k
源码类别:

外挂编程

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Begin VB.UserControl Downloader 
  3.    ClientHeight    =   2385
  4.    ClientLeft      =   0
  5.    ClientTop       =   0
  6.    ClientWidth     =   3480
  7.    InvisibleAtRuntime=   -1  'True
  8.    Picture         =   "Downloader.ctx":0000
  9.    ScaleHeight     =   2385
  10.    ScaleWidth      =   3480
  11. End
  12. Attribute VB_Name = "Downloader"
  13. Attribute VB_GlobalNameSpace = False
  14. Attribute VB_Creatable = True
  15. Attribute VB_PredeclaredId = False
  16. Attribute VB_Exposed = False
  17. Option Explicit
  18. Event DownloadProgress(CurBytes As Long, MaxBytes As Long, SaveFile As String)
  19. Event DownloadError(SaveFile As String)
  20. Event DownloadComplete(MaxBytes As Long, SaveFile As String)
  21. Event DownloadAllComplete(FileNotDownload() As String)
  22. Public Testdown As Boolean
  23. Private AsyncPropertyName() As String
  24. Private AsyncStatusCode() As Byte
  25. Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
  26.     On Error Resume Next
  27.         If AsyncProp.BytesMax <> 0 Then
  28.             RaiseEvent DownloadProgress(CLng(AsyncProp.BytesRead), CLng(AsyncProp.BytesMax), AsyncProp.PropertyName)
  29.         End If
  30.         Select Case AsyncProp.StatusCode
  31.           Case vbAsyncStatusCodeSendingRequest
  32.             'Debug.Print "下载连接:", AsyncProp.Target
  33.           Case vbAsyncStatusCodeConnecting
  34.             'Debug.Print "服务器IP:", AsyncProp.Status '显示模板IP
  35.           Case vbAsyncStatusCodeBeginDownloadData
  36.             'Debug.Print "临时文件位置:", AsyncProp.Status '显示临时保存文件路径
  37.             'Case vbAsyncStatusCodeDownloadingData
  38.             '  Debug.Print "Downloading", AsyncProp.Status '显示目标 URL
  39.           Case vbAsyncStatusCodeRedirecting
  40.             Debug.Print "Redirecting", AsyncProp.Status
  41.           Case vbAsyncStatusCodeEndDownloadData
  42.             'Debug.Print "下载地址:", AsyncProp.Status
  43.           Case vbAsyncStatusCodeError
  44.             Debug.Print "Error...aborting transfer", AsyncProp.Status
  45.             CancelAsyncRead AsyncProp.PropertyName
  46.         End Select
  47. End Sub
  48. Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
  49. On Error Resume Next
  50.   Dim f() As Byte, fn As Long
  51.   Dim i As Integer
  52.     On Error Resume Next
  53.         Select Case AsyncProp.StatusCode
  54.           Case vbAsyncStatusCodeEndDownloadData
  55.             fn = FreeFile
  56.             f = AsyncProp.value
  57.             'Debug.Print "保存位置: " & AsyncProp.PropertyName
  58.             Open AsyncProp.PropertyName For Binary Access Write As #fn
  59.             Put #fn, , f
  60.             Close #fn
  61.             RaiseEvent DownloadComplete(CLng(AsyncProp.BytesMax), AsyncProp.PropertyName)
  62.           Case vbAsyncStatusCodeError
  63.             CancelAsyncRead AsyncProp.PropertyName
  64.             RaiseEvent DownloadError(AsyncProp.PropertyName)
  65.         End Select
  66.         For i = 1 To UBound(AsyncPropertyName)
  67.             If AsyncPropertyName(i) = AsyncProp.PropertyName Then
  68.                 AsyncStatusCode(i) = AsyncProp.StatusCode
  69.                 Exit For
  70.             End If
  71.         Next i
  72.         CheckAllDownloadComplete
  73. End Sub
  74. Private Sub UserControl_Initialize()
  75. On Error Resume Next
  76.     SizeIt
  77.     ReDim AsyncPropertyName(0)
  78.     ReDim AsyncStatusCode(0)
  79. End Sub
  80. Private Sub UserControl_Resize()
  81. On Error Resume Next
  82.     SizeIt
  83. End Sub
  84. Private Sub UserControl_Terminate()
  85. On Error Resume Next
  86.     If UBound(AsyncPropertyName) > 0 Then CancelAllDownload
  87. End Sub
  88. Private Sub SizeIt()
  89. On Error Resume Next
  90.     On Error GoTo ErrorSizeIt
  91.     With UserControl
  92.         .Width = ScaleX(32, vbPixels, vbTwips)
  93.         .Height = ScaleY(32, vbPixels, vbTwips)
  94.     End With
  95. Exit Sub
  96. ErrorSizeIt:
  97.     Testdown = True
  98. Exit Sub
  99. End Sub
  100. Public Sub BeginDownload(URL As String, SaveFile As String, Optional AsyncReadOptions = vbAsyncReadForceUpdate)
  101. On Error Resume Next
  102.     Testdown = False
  103.     On Error GoTo ErrorBeginDownload
  104.     UserControl.AsyncRead URL, vbAsyncTypeByteArray, SaveFile, AsyncReadOptions
  105.     ReDim Preserve AsyncPropertyName(UBound(AsyncPropertyName) + 1)
  106.     AsyncPropertyName(UBound(AsyncPropertyName)) = SaveFile
  107.     ReDim Preserve AsyncStatusCode(UBound(AsyncStatusCode) + 1)
  108.     AsyncStatusCode(UBound(AsyncStatusCode)) = 255
  109. Exit Sub
  110. ErrorBeginDownload:
  111.     Testdown = True
  112. Exit Sub
  113. End Sub
  114. Public Function CancelAllDownload() As Boolean
  115. On Error Resume Next
  116.   Dim i As Integer
  117.     On Error Resume Next
  118.         For i = 1 To UBound(AsyncPropertyName)
  119.             CancelAsyncRead AsyncPropertyName(i)
  120.             'Debug.Print "保存位置:" & AsyncPropertyName(i)
  121.         Next i
  122.         ReDim AsyncPropertyName(0)
  123.         ReDim AsyncStatusCode(0)
  124.         CancelAllDownload = True
  125. End Function
  126. Private Function CheckAllDownloadComplete()
  127. On Error Resume Next
  128.   Dim i As Integer
  129.   Dim FileNotDownload() As String
  130.   Dim AllDownloadComplete As Boolean
  131.     ReDim FileNotDownload(0)
  132.     AllDownloadComplete = True
  133.     For i = 1 To UBound(AsyncStatusCode)
  134.         If AsyncStatusCode(i) = vbAsyncStatusCodeError Then
  135.             ReDim Preserve FileNotDownload(UBound(FileNotDownload) + 1)
  136.             FileNotDownload(UBound(FileNotDownload)) = AsyncPropertyName(i)
  137.           ElseIf AsyncStatusCode(i) <> vbAsyncStatusCodeEndDownloadData Then
  138.             AllDownloadComplete = False
  139.             Exit For
  140.         End If
  141.     Next i
  142.     If AllDownloadComplete Then
  143.         CancelAllDownload
  144.         RaiseEvent DownloadAllComplete(FileNotDownload)
  145.     End If
  146. End Function