200512258782

您当前的位置:必威体育网址 -> 教程中心 -> 编程经验 -> Visual Basic -> 教程内容 退出登录 必威体育网址,
栏目导航
· Visual Basic· Delphi
· Visual C++· C++ Builder
· JAVA DotNet· 其他相关
热门教程
· 如何在Visual Basic…
· 使用Visual Basic操…
· 使用VB6.0设计Activ…
· VB动态调用外部函数…
· 建立一个程序员自己…
· 如何编写高质量的VB…
· [图文] 为更新到Visual Bas…
· 再谈在VB中调用VC++…
· 用VB语言编程实现JP…
· 用DTS实现SQL数据库…
相关教程
· 一段能够下载文件的…
· 如何利用软件从微软…
· 下载文件的点击数回…
· [组图] 用电子邮件遥控下载…
· [图文] 有的放矢!提前获得…
· [图文] FlashGet:让下载文…
· [图文] 如何增加迅雷的下载…

VB6使用API下载文件
必威体育网址,作者:佚名 来源: 发布时间:2005-12-25 18:56:48 发布人:admin

减小字体 增大字体

小弟用VB6.0编制了一个小程序,使用win32的关于internet 的API来下载文件。 程序用户界面如下 本程序包括两个文件 frmDownLoad.frm (主窗体)和clsCount.cls(计算下载速度的类模块) 大家建立一个简单的VB应用程序项目,将两个文件加入项目即可
我觉得clsCount.cls有问题,望有心人查查
javascript:if(this.width>screen.width-600)this.style.width=screen.width-600;”>
'##############################################################################'**'**   文件 frmDownLoad.frm 的内容'**'##############################################################################VERSION 5.00Begin 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   EndEndAttribute VB_Name = "frmDownLoad"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption ExplicitPrivate Declare Function StrFormatByteSize Lib "shlwapi" Alias _"StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByRef _cchBuf As Long) As StringPrivate 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 LongPrivate 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 LongPrivate 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 LongPrivate 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 BooleanPrivate Declare Function InternetReadFile Lib "wininet.dll" _   (ByVal hFile As Long, ByRef sBuffer As Byte, _   ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) _   As IntegerPrivate 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 IntegerPrivate 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 FunctionPrivate 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 SubPrivate Sub cmdStop_Click()    bolStop = TrueEnd SubPrivate Sub SetText(ByVal txt As TextBox)    txt.Text = GetSetting(App.Title, Me.Name, txt.Name)End SubPrivate Sub SaveText(ByVal txt As TextBox)    SaveSetting App.Title, Me.Name, txt.Name, txt.TextEnd SubPrivate Sub Form_Load()    SetText Me.txtFile    SetText Me.txtURLEnd SubPrivate Sub Form_Unload(Cancel As Integer)    SaveText Me.txtFile    SaveText Me.txtURLEnd SubPrivate 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 = strDataEnd Function'##############################################################################'**'**   文件 clsCount.cls 的内容'**'##############################################################################VERSION 1.0 CLASSBEGIN  MultiUse = -1  'True  Persistable = 0  'NotPersistable  DataBindingBehavior = 0  'vbNone  DataSourceBehavior  = 0  'vbNone  MTSTransactionMode  = 0  'NotAnMTSObjectENDAttribute VB_Name = "clsCount"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = TrueAttribute VB_PredeclaredId = FalseAttribute VB_Exposed = FalseOption Explicit'******************************************************************************'**'**     用于计算速度的类模块'**'** 该类模块设定一个计数器,由程序不断的累计数据,并根据所花时间计算数据'**'** 编制: 袁永福'** 时间: 2002-4-2'**'******************************************************************************Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate lngCountStart   As LongPrivate lngCountCurrent As LongPrivate lngCountLast    As LongPrivate lngSpeed        As LongPrivate lngTickStart    As LongPrivate lngTickCurrent  As LongPrivate 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    '** 本模块
[] [返回上一页] [打 印] [必威西甲,]
∷相关教程评论∷    (评论内容只代表网友观点,与 立场无关!) [更多评论…]