`

VB 用API下载文件实例

    博客分类:
  • vb
阅读更多
'#############################
'**
'** 文件 frmDownLoad.frm 的内容
'**
'#############################
VERSION 5.00
Begin VB.Form frmDownLoad
BorderStyle =
1 'Fixed Single
Caption = "Form1"
ClientHeight = 2880
ClientLeft = 45
ClientTop = 330
ClientWidth = 6375
BeginProperty Font
Name =
"宋体"
Size = 9
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
LinkTopic =
"文件下载"
MaxButton = 0 'False
ScaleHeight = 2880
ScaleWidth = 6375
StartUpPosition = 2 'CenterScreen
Begin VB.CommandButton cmdStop
Caption =
"停止"
Enabled = 0 'False
Height = 480
Left = 1860
TabIndex = 6
Top = 2160
Width = 1365
End
Begin VB.CommandButton cmdStart
Caption =
"开始"
Height = 480
Left = 165
TabIndex = 5
Top = 2160
Width = 1365
End
Begin VB.TextBox txtFile
Height =
330
Left = 750
TabIndex = 3
Top = 705
Width = 5445
End
Begin VB.TextBox txtURL
Height =
330
Left = 750
TabIndex = 1
Top = 285
Width = 5445
End
Begin VB.Label lblCount
BackStyle =
0 'Transparent
Caption = "下载"
Height = 180
Left = 180
TabIndex = 4
Top = 1245
Width = 5130
End
Begin VB.Label Label1
AutoSize = -
1 'True
Caption = "文件:"
Height = 180
Left = 195
TabIndex = 2
Top = 780
Width = 450
End
Begin VB.Label lblURL
AutoSize = -
1 'True
Caption = "URL:"
Height = 180
Left = 195
TabIndex = 0
Top = 360
Width = 360
End
End
Attribute VB_Name = "frmDownLoad"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option
Explicit

Private Declare Function StrFormatByteSize Lib "shlwapi" Alias _
"StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByRef _
cchBuf
As Long) As String

Private 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
Private 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

Private Declare Function
HttpOpenRequest Lib "wininet.dll" _
Alias "HttpOpenRequestA" _
(
ByVal hInternetSession As Long, _
ByVal lpszVerb As String, _
ByVal lpszObjectName As String, _
ByVal lpszVersion As String, _
ByVal lpszReferer As String, _
ByVal lpszAcceptTypes As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function
InternetConnect Lib "wininet.dll" _
Alias "InternetConnectA" _
(
ByVal hInternetSession As Long, _
ByVal lpszServerName As String, _
ByVal nProxyPort As Integer, _
ByVal lpszUsername As String, _
ByVal lpszPassword As String, _
ByVal dwService As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private 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 Boolean

Private Declare Function
InternetReadFile Lib "wininet.dll" _
(
ByVal hFile As Long, ByRef sBuffer As Byte, _
ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) _
As Integer
Private Declare Function
InternetCloseHandle Lib "wininet.dll" _
(
ByVal hInet As Long) As Integer

Private Declare Function
GetLastError Lib "kernel32" () As Long

' Adds one or more HTTP request headers to the HTTP request handle.
'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
Private bolStop As Boolean
' 然后,我们可以得到包含了一份详细说明的URL文本文件,它显示在下面的函数中:
Public Function DownloadFile(ByVal surl As String, ByVal strFile As String) As Long
Dim
s As String
Dim
hOpen As Long
Dim
hOpenUrl As Long
Dim
bDoLoop As Boolean
Dim
bRet As Boolean
Dim
intFH As Integer

Dim
sReadBuffer() As Byte
Dim
lNumberOfBytesRead As Long
Dim
lCount As Long
Dim
myCount As New clsCount
Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const scUserAgent = "VB OpenUrl"
Const INTERNET_FLAG_RELOAD = &H80000000

lblCount.Caption = "正在连接服务器..."
lblCount.Refresh
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString,
0)
hOpenUrl = InternetOpenUrl(hOpen, surl, vbNullString,
0, INTERNET_FLAG_RELOAD, 0)
lCount =
0

If hOpen <> 0 And hOpenUrl <> 0 Then
intFH = FreeFile
If Dir(strFile) <> "" Then
VBA.FileSystem.Kill strFile
End If
Open strFile For Binary As #intFH
myCount.Clear
Do While True
ReDim
sReadBuffer(2048)
bRet = InternetReadFile(hOpenUrl, sReadBuffer(
0), 2048, lNumberOfBytesRead)
If lNumberOfBytesRead > 0 And bRet = True Then
'if lnumberofbytesread<>2048 then
ReDim Preserve sReadBuffer(0 To lNumberOfBytesRead - 1)
Put
#intFH, , sReadBuffer
'
' buf.AddRange sReadBuffer, 0, lNumberOfBytesRead - 1
lCount = lCount + lNumberOfBytesRead
myCount.Count lNumberOfBytesRead
lblCount.Caption =
"已下载 " & VBStrFormatByteSize(lCount) & " [ " & VBStrFormatByteSize(myCount.Speed) & " /秒 ]"
lblCount.Refresh
Else
Exit Do
End If
bolStop = False
DoEvents
If bolStop = True Then
Exit Do
End If
Loop
Close #intFH
lblCount.Caption = "共下载 " & lCount & " 字节"
Else
lblCount.Caption = "打开URL错误"
End If

If
hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
Set myCount = Nothing
DownloadFile = lCount
End Function
Private Sub
cmdStart_Click()
txtURL.Enabled =
False
txtFile.Enabled = False
cmdStart.Enabled = False
cmdStop.Enabled = True
DownloadFile txtURL.Text, txtFile.Text
cmdStop.Enabled =
False
cmdStart.Enabled = True
txtFile.Enabled = True
txtURL.Enabled = True

End Sub
Private Sub
cmdStop_Click()
bolStop =
True
End Sub
Private Sub
SetText(ByVal txt As TextBox)
txt.Text = GetSetting(App.Title, Me.Name, txt.Name)
End Sub
Private Sub
SaveText(ByVal txt As TextBox)
SaveSetting App.Title, Me.Name, txt.Name, txt.Text
End Sub
Private Sub
Form_Load()
SetText Me.txtFile
SetText Me.txtURL
End Sub
Private Sub
Form_Unload(Cancel As Integer)
SaveText Me.txtFile
SaveText Me.txtURL
End Sub

Private Function
VBStrFormatByteSize(ByVal lngSize As Long) As String
Dim
strSize As String * 128
Dim strData As String
Dim
lPos As Long
StrFormatByteSize lngSize, strSize, 128
lPos = InStr(1, strSize, Chr$(0))
strData = Left$(strSize, lPos -
1)
If lngSize > 1024 Then
strData = lngSize & "字节(" & strData & ")"
End If
VBStrFormatByteSize = strData
End Function

 

'########################
'**
'** 文件 clsCount.cls 的内容
'**
'########################
VERSION 1.0 CLASS
BEGIN
MultiUse = -
1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "clsCount"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option
Explicit
'******************************************************************************
'**
'** 用于计算速度的类模块
'**
'** 该类模块设定一个计数器,由程序不断的累计数据,并根据所花时间计算数据
'**
'** 编制: 袁永福
'** 时间: 2002-4-2
'**
'******************************************************************************
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private
lngCountStart As Long
Private
lngCountCurrent As Long
Private
lngCountLast As Long
Private
lngSpeed As Long
Private
lngTickStart As Long
Private
lngTickCurrent As Long
Private
lngTickLast As Long
'Public StopCount As Boolean
'** 获得计数数据 **************************************************************
'** 累计初始值
Public Property Get CountStart() As Long
CountStart = lngCountStart
End Property
'** 累计终止值
Public Property Get CountEnd() As Long
CountEnd = lngCountCurrent
End Property
'** 累计总的速度
Public Property Get TotalSpeed() As Long
If
lngTickCurrent = lngTickStart Then
TotalSpeed = 0
Else
TotalSpeed = (lngCountCurrent - lngCountStart) / ((lngTickCurrent - lngTickStart) / 1000)
End If
End Property
'** 累计所花毫秒数
Public Property Get TotalTickCount() As Long
TotalTickCount = lngTickCurrent - lngTickStart
End Property
'** 清除所有数据 **************************************************************
Public Sub Clear()
lngCountStart =
0
lngCountCurrent = 0
lngCountLast = 0

lngSpeed = 0

lngTickStart = GetTickCount()
lngTickCurrent = lngTickStart
lngTickLast = lngTickStart

'StopCount = False
End Sub
'** 设置累计基数
Public Property Let CountStart(ByVal lStart As Long)
lngCountStart = lStart
lngCountCurrent = lStart
End Property
'** 累加数据 **
Public Sub Count(Optional ByVal lCount As Long = 1)
lngCountCurrent = lngCountCurrent + lCount
lngTickCurrent = GetTickCount()
End Sub

'** 获得速度 **
Public Property Get Speed() As Long
'lngTickCurrent = GetTickCount()
If lngTickLast = lngTickCurrent Then
Speed = lngSpeed
Else
Speed = (lngCountCurrent - lngCountLast) / ((lngTickCurrent - lngTickLast) / 1000)
lngSpeed = Speed
lngTickLast = lngTickCurrent
lngCountLast = lngCountCurrent
End If
End Property

'** 数据是否是最新更新的 **
Public Property Get NewSpeed() As Boolean
Dim
bolNew As Boolean
If
lngTickCurrent > lngTickLast + 1000 Then
bolNew = True
Else
bolNew = False
End If
NewSpeed = bolNew
End Property

 

分享到:
评论

相关推荐

    vb调用URLDownloadToFile Api下载文件实例

    vb调用URLDownloadToFile Api下载文件实例

    vb.net 读取INI文件示例.rar

    vb.net vs2008读取INI文件示例,ini文件名为 Send.ini,代码中包括了一个读ini API函数。  Ini文件说明:  [节名] []中的节名对应此API的第一参数  Name=内容 Name对应此API的第二参数  API的第三参数是没有取到...

    VB利用官方api读写JSON数据格式文件简单实例

    VB利用官方api读写JSON数据格式文件简单实例,是一个非常、非常简单的例子…………

    VB HOOk API源码

    用VB实现的Hook API实例,带工程文件

    已经实现了:(含源码)VB利用官方api读写JSON数据格式文件简单实例.zip

    vb6读写json格式文件,这里是源码,可以直接拿来使用。

    API_VB实例150(精)

    共150个API实例,全为VB源文件,打开VB工程源文件,可看到实例,运行即见效果! SendMessage改变任意程序的标题 SendMessage实现获得密码 IsIconic判断窗口是否已最小化 ...

    一个演示VB API高速搜索文件的程序.rar

    一个演示VB高速搜索文件程序,基于API来实现,用于快速查找文件,类似的例子在前几年的书籍实例中,有很多,这一个也是从VB的书中整理出来的,代码中有丰富的注释,主要是分享给VB新手参考学习的。

    VB编程资源大全(源码 API)

    33,vbapi.zip 中文 TXT格式 (26KB) 34,api008.zip 本帮助文件中的Windows API 函数大约有774个,全中文并且有VB例子CHM格式 中文(954KB) 35,api009.zip 本帮助文件中的API 分为6 篇,分别为 :1.前言2.API的数据类型...

    VB串口通信UART程序实例源码合集学习资料(200个).zip

    vb实现串口通信 文件传送系统,用vb以及mscomm控件实现.rar VB实现串口通信,发送命令从而接收相应数据.rar VB嵌入式串口通讯波形分析显示软件.rar VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富.rar ...

    VB VB.NET 用 API 做内存映射文件也很简单

    最近用.NET 写Windows 服务程序,要用到内存文件映射,顺便把练习整理了一下...本实例用VB.net写的映射文件创建程序,用 VB6 写的测试程序。 其实完全可以用一种就能全部完成,而且都很简单。 只不过想练习一下VB.Net。

    新编VB-API函数查询(带数据库文件)

    PI函数搜索于查看程序,支持* 和?通配符。是个非常方便的查看 WindowsAPI函数的工具,可以根 据API函数名或全文进行匹配查询 ,迅速找到相应的资料。 据API函数名或全 文进行匹配查询 ...新增300多个实例

    VB6 纯API调用打开保存对话框(不会实际打开保存)

    此源代码仅为利用API来获取打开文件完整路径 以及 保存时的完整路径 不会实际打开文件或保存文件 如果需要实际操作则需要另外代码实现 这里就不实例了. 主要免控件而利用API实现打开保存对话框

    VB FTP操作类示例

    VB6中实现FTP的上传文件、文件下载、文件删除、修改文件名称、创建目录,使用API实现的

    vb api 函数实例

    vb软件的API函数调用,连接dll文件,简单的调试vb工程文件

    VB文件系统实例-文件系统全家福

    Dir和Api扫描驱动器 Exe伪装天使 FreeActiveX Shell获取特殊文件 安全的删除自己 比较两个文件是否相同 查找目录全部文件大小 查找文件 从全路径名中获得文件扩展名 从全路径名中提取文件名 二进制复制文件 获取当前...

    VB6.0基于API的INI文件操作类库.rar

    VB6.0基于API的INI文件操作类库,示例程序包括了对该类库的测试单元,可进入写入和读取测试,读写测试循环500次,最终结果为准,看上去要比Windows自带的API效率和速度更高,程序窗口上部主要是对INI文件的读写操作...

    VB网络编程实例

    ◆ 88.htm 用VB创建自己的通信程序 ◆ 89.htm 用VB构建Internet的应用[微软提供] ◆ 90.htm 用VB开发标准CGI程序 ◆ 91.htm 用VB实现客户——服务器(TCP IP)编程实例 ◆ 92.htm 用VB实现...

    一个高级的VB文件搜索程序.rar

    一个高级的VB文件搜索程序,基于API技术实现的文件高级搜索功能,作者: Richard Mewett。该VB工程源码是cScanPath 类的示例程序,这个搜索类可以指定文件路径进行文件查找.程序具有真正全面的过滤功能. 你可以按如下...

    VB纯API CommonDialog封装类

    纯API实现的CommonDialog封装类,完全脱离CommonDialog OCX控件实现CommonDialog全功能(包括打开、保存文件,字体对话框,颜色对话框,打印机对话框,页面设置对话框等,有详细的示例程序)且加入了一些常用的...

    VB API hook源码+实例

    摘要:VB源码,系统相关,Hook,API VB源码基于API的Hook实例及源码,请注意测试程序运行时会被360等安全软件拦截,如果不想测试就不用管了。  源码包括导出生成的例子及源码文件,源码下载。

Global site tag (gtag.js) - Google Analytics