轉載 VB.NET編程調用迅雷下載檔案(1)

來源:互聯網
上載者:User
在做抓取的時候,不知道什麼原因,無法直接抓到,於是想到調用迅雷下載,這個是網站上找的,沒想到還很好用,我只是使用了簡單的下載檔案功能。

【導讀】本文詳細講解了使用VB.NET編程來調用訊雷下載檔案的過程和步驟。內容包括:建立訊雷調用對象、使用訊雷調用物件查詢下載任務資訊、迅雷平台介面函數定義等。

 

首先確保電腦已經安裝訊雷,開啟VS.NET 點擊菜單:項目->添加引用->COM->添加對ThunderAgent 1.0 Type Library的引用。

1.建立訊雷調用對象

Private ThunderEng As New THUNDERAGENTLib.Agent'建立訊雷調用對象

ThunderEng.AddTask("", "另存檔案名稱", "儲存目錄","任務注釋","引用地址","開始模式", "只從原始地址下載","從原始地址下載線程數") '添加下載任務

ThunderEng.CommitTasks()'提交下載任務

2.使用訊雷調用物件查詢下載任務資訊

sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")'擷取下載檔案大小

sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")'擷取已完成大小

sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")'擷取檔案名稱

二、迅雷平台介面函數定義

獲得資訊

1. BSTR GetInfo(BSTR pInfoName)

功能:獲得迅雷或平台相關資訊

參數:

參數名 含義
pInfoName 資訊名稱,有如下4種

◆“ThunderExists”:迅雷是否存在

◆“ThunderRunning”:迅雷是否運行

◆“ThunderVersion”:迅雷版本號碼

◆“PlatformVersion”:平台版本號碼

傳回值:傳回值是字串與參數pInfoName有對應關係

參數 傳回值
“ThunderExists” “true”存在,“false”不存在
“ThunderRunning” “true” 運行中, “false”未運行
“ThunderVersion” 迅雷版本號碼 “x.x.x.x”
“PlatformVersion” 平台版本號碼 “x.x.x.x”

2. HRESULT GetInfoStruct(INT pInfo)

功能:擷取迅雷或平台相關全部資訊

參數:

參數名 含義
pInfo 其實是THUNDER_INFO類型的結構指標,調用前把它轉換為INT類型;調用後結構中將填充平台資訊,定義如下:

typedef struct _THUNDER_INFO

{

BOOL bThunderExists;

BOOL bThunderRunning;

CHAR szThunderVersion[32];

CHAR szPlatformVersion[32];

} THUNDER_INFO;

函數調用後,結構中將填充相應的資訊。

傳回值:

0 擷取成功
非0 擷取失敗

任務操作

3. 加入任務

HRESULT AddTask

(BSTR pURL,

BSTR pFileName = "",

BSTR pPath = "",

BSTR pComments = "",

BSTR pReferURL = "",

INT nStartMode = -1,

INT nOnlyFromOrigin = 0,

INT nOriginThreadCount = -1);

功能:

往平台加入下載任務資訊,此時尚未體現到迅雷中

參數:

參數名 含義
pURL 目標URL,必須參數
pFileName 另存名稱,預設為空白,表示由迅雷處理,選擇性參數
pPath 儲存目錄,預設為空白,表示由迅雷處理,選擇性參數
pComments 下載注釋,預設為空白,選擇性參數
pReferURL 引用頁URL,預設為空白,選擇性參數
nStartMode 開始模式,0手工開始,1立即開始,預設為-1,表示由迅雷處理,選擇性參數
nOnlyFromOrigin 是否只從原始URL下載,1隻從原始URL下載,0多資源下載,預設為0,選擇性參數
nOriginThreadCount 原始地址下載線程數,範圍1-10,預設為-1,表示由迅雷處理,選擇性參數

 

 

4. 開始任務

HRESULT CommitTaskss()

功能:

把AddTask所加入的下載任務資訊真正提交到迅雷中進行下載,並從平台中刪除

注意:如果AddTask添加的任務沒有被提交沒有被取消(調用CancelTasks),則Agent對象析構時會阻塞,所以調用者不應該殘留一些沒有被提交或者取消的任務,以避免指令碼執行者停止回應。

5. 取消任務

HRESULT CancelTasks()

功能:

取消平台中所有由AddTask所加入的下載任務資訊

6. 查詢任務資訊

BSTR GetTaskInfo(BSTR pURL,BSTR pInfoName);

參數:

參數名 含義
pURL 所要查詢的下載URL資訊
pInfoName 狀態名稱,有如下幾種

◆“Exists”:pURL是否在迅雷的工作清單

◆“Path”:儲存目錄

◆“FileName”:檔案名稱

◆“FileSize”:檔案大小

◆“CompletedSize”:已下載大小

◆“Percent”:下載進度

◆“Status”:任務狀態

傳回值: 傳回值是字串與參數pInfoName有對應關係

參數 傳回值
“Exists” ”true”存在,”false”不存在
“Path” 儲存目錄,最後帶反斜線\,例:C:\TDDownload\
“FileName” 檔案名稱
“FileSize” 檔案大小,以位元組為單位,0表示大小未知
“CompletedSize” 已下載大小,以位元組為單位
“Percent” 下載進度,帶1位小數,例:70.0
“Status” 任務狀態,有以下6種狀態

。“running”: 運行狀態

。“stopped”: 停止狀態

。“failed”: 失敗狀態

。“success”: 成功狀態

。“creatingfile”:正在建立資料檔案

。“connecting”: 正在串連

7. GetTaskInfoStruct(INT pTaskInfo)

功能:查詢一個任務的所有資訊

參數名 含義
pTaskInfo 其實是THUNDER_TASKINFO類型的結構指標,調用前把它轉換為INT類型;調用後結構中將填充平台資訊,定義如下:

typedef struct _THUNDER_TASKINFO

{

CHAR szURL[1024]; // 任務URL,預先填充

BOOL bTaskExists; // 任務是否存在,TRUE為存在

CHAR szPath[256]; // 下載的本地儲存路徑

CHAR szFileName[256]; // 本地檔案名稱

ULONGLONG nFileSize; // 檔案大小

ULONGLONG nCompletedSize; // 已完成的大小

CHAR szPercent[16]; // 完成的百分數,用 “56.8”的格式

CHAR szStatus[16]; // 目前狀態,定義同GetTaskInfo函數

} THUNDER_TASKINFO;

調用者先填充結構中的szURL成員,來指定需要查詢的任務的URL,然後等函數返回後就可以從其他成員中取得該任務的資訊。

本例所有代碼:

            

Imports System

Imports System.Text

Public Class frmThunderClass frmThunder

Private _iStartMode As Integer '訊雷任務下載開始模式

Private ThunderEng As New THUNDERAGENTLib.Agent '建立訊雷調用對象

Private Sub frmThunder_Load()Sub frmThunder_Load(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub btnCancel_Click()Sub btnCancel_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles btnCancel.Click

Close()

End Sub

'開始下載任務

Private Sub btnStartDown_Click()Sub btnStartDown_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles btnStartDown.Click

Dim iOnlyFromOrigin, iOriginThreadCount As Integer

iOnlyFromOrigin = IIf(chkOnlyFromOrigin.Checked = True, 1, 0)

iOriginThreadCount = CInt(txtOriginThreadCounts.Text)

If chkDefault.Checked Then

iOriginThreadCount = -1

End If

ThunderEng.AddTask(txtURL.Text, txtSaveAsFileName.Text, txtSaveDir.Text,

txtComment.Text, _ txtReferencePage.Text, _iStartMode, iOnlyFromOrigin,

iOriginThreadCount)

ThunderEng.CommitTasks()

Timer1.Enabled = True

End Sub

Private Sub radMaual_Click()Sub radMaual_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles radMaual.Click, radImmediate.Click,

radDefault.Click

Dim rad As RadioButton = CType(sender, RadioButton)

_iStartMode = CInt(rad.Tag)

End Sub

'當任務開始時定時查詢任務下載資訊

Private Sub Timer1_Tick()Sub Timer1_Tick(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Timer1.Tick

Dim sFileSize, sDownedSize, sStatus, sFileName, sPercent As String

Try

sStatus = ThunderEng.GetTaskInfo(txtURL.Text, "Status")

sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")

sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")

sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")

lblDownedSize.Text = String.Format(lblDownedSize.Tag, sDownedSize)

lblFileSize.Text = String.Format(lblFileSize.Tag, sFileSize)

lblTaskStatus.Text = String.Format(lblTaskStatus.Tag, sStatus)

lblFilename.Text = String.Format(lblFilename.Tag, sFileName)

sPercent = ThunderEng.GetTaskInfo(txtURL.Text, "Percent") '擷取下載百分比

lblProgress.Text = String.Format(lblProgress.Tag,

sPercent.Remove(3, Len(sPercent) - 3))

Catch ex As Exception

End Try

End Sub

Private Sub chkOnlyFromOrigin_CheckedChanged_1()Sub

chkOnlyFromOrigin_CheckedChanged_1(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles chkOnlyFromOrigin.CheckedChanged

Panel1.Enabled = chkOnlyFromOrigin.Checked

End Sub

Private Sub GroupBox1_Enter()Sub GroupBox1_Enter(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles GroupBox1.Enter

End Sub

End Class

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.