找回密码
 加入
搜索
查看: 11792|回复: 20

[网络通信] [已解决]迅雷下载开放引擎调用示例

 火.. [复制链接]
发表于 2011-11-12 00:34:53 | 显示全部楼层 |阅读模式
本帖最后由 my788522 于 2011-11-12 13:44 编辑

$dll = DllOpen("XLDownload.dll")
$int = DllCall($dll, "int", "XLInitDownloadEngine")

;下载文件

$down1 = DllCall($dll, "long", "XLURLDownloadToFile", "wstr", @ScriptDir & "\下载\test.rar", "wstr", "http://www.xdowns.com/soft/xdowns2009.asp?softid=33294&downid=47&id=34646", "wstr", "null", "long*", 0)
$time=TimerInit()
If $down1[0] = 0 Then
        While 1
                $txt = ""
                $query = DllCall($dll, "long", "XLQueryTaskInfo", "long", $down1[4], "long*", 0, "long*", 0, "long*", 0)
                If $query[2] = 2 Then
                        $txt = "正在下载"
                ElseIf $query[2] = 0 Then
                        $txt = "已建立连接"
                ElseIf $query[2] = 10 Then
                        $txt = "暂停"
                ElseIf $query[2] = 11 Then
                        $txt = "下载成功!"
                        MsgBox(0,"",$txt)
                        ExitLoop
                ElseIf $query[2] = 12 Then
                        $txt = "下载失败!"
                EndIf
                $time2=TimerDiff($time)
                ToolTip("任务ID:" & $query[1] & " 状态:" & $txt & " 进度:" & Round($query[4] / 1024) & "K/" & Round($query[3] / 1024) & "K 速度:"&Round($query[4]/$time2*1000/1024)&"K/S")
        WEnd

EndIf

$unt = DllCall($dll, "int", "XLUninitDownloadEngine")

已解决 感谢楼下的帮助和启发
迅雷接口如下网址:
http://thunderplatform.xunlei.com/

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2011-11-12 02:25:11 | 显示全部楼层
测试了一下,
明明成功返回确实0.无语!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-11-12 10:42:44 | 显示全部楼层
是呀我也是这样返回0
难道是传入参数的问题 可能需要一个回调
发表于 2011-11-12 12:50:02 | 显示全部楼层
本帖最后由 yeqing880 于 2011-11-12 12:54 编辑

返回0表示任务的编号为0

当我同时建立两个下载任务的时候,他的ID变成了1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-11-12 12:53:18 | 显示全部楼层
我能获取任务编号 但是XLQueryTaskInfo获取任务状态这里又卡住了。。
 楼主| 发表于 2011-11-12 13:09:53 | 显示全部楼层
$down1=DllCall($dll,"long","XLURLDownloadToFile","wstr",@ScriptDir&"\下载\test.rar","wstr","http://www.xdowns.com/soft/xdowns2009.asp?softid=33294&downid=47&id=34646","wstr","null","long*",0)
$down2=DllCall($dll,"long","XLURLDownloadToFile","wstr",@ScriptDir&"\下载\test2.rar","wstr","http://www.xdowns.com/soft/xdowns2009.asp?softid=33294&downid=58&id=34646","wstr","null","long*",0)

_ArrayDisplay($down1)
_ArrayDisplay($down2)

$query=DllCall($dll,"long","XLQueryTaskInfo","long",$down1[4],"long*",0,"long*",0,"long*",0)
;停止引擎
_ArrayDisplay($query)

可以得到状态了
发表于 2011-11-12 13:13:36 | 显示全部楼层
$dll=DllOpen ("XLDownload.dll")
$int=DllCall($dll,"int","XLInitDownloadEngine")

;下载文件
$dow ...
my788522 发表于 2011-11-12 00:34

$down[4]就是任务ID,XLURLDownloadToFile的返回值($down[0])为XL_SUCCESS代表成功,其它值则为失败.
 楼主| 发表于 2011-11-12 13:14:32 | 显示全部楼层
enum enumTaskStatus{
        enumTaskStatus_Connect = 0,                 // 已经建立连接
        enumTaskStatus_Download = 2,                // 开始下载
        enumTaskStatus_Pause = 10,                  // 暂停
        enumTaskStatus_Success = 11,                // 成功下载
        enumTaskStatus_Fail = 12,                   // 下载失败
};
发表于 2011-11-12 13:14:37 | 显示全部楼层
我这里还是0 楼上的。你Q多少。。交流下
发表于 2011-11-12 13:17:37 | 显示全部楼层
本帖最后由 yeqing880 于 2011-11-12 13:23 编辑

哈。。成功了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-11-12 13:26:03 | 显示全部楼层
$dll = DllOpen("XLDownload.dll")
$int = DllCall($dll, "int", "XLInitDownloadEngine")

;下载文件

$down1 = DllCall($dll, "long", "XLURLDownloadToFile", "wstr", @ScriptDir & "\下载\test.rar", "wstr", "http://www.xdowns.com/soft/xdowns2009.asp?softid=33294&downid=47&id=34646", "wstr", "null", "long*", 0)
$time=TimerInit()
If $down1[0] = 0 Then
        While 1
                $txt = ""
                $query = DllCall($dll, "long", "XLQueryTaskInfo", "long", $down1[4], "long*", 0, "long*", 0, "long*", 0)
                If $query[2] = 2 Then
                        $txt = "正在下载"
                ElseIf $query[2] = 0 Then
                        $txt = "已建立连接"
                ElseIf $query[2] = 10 Then
                        $txt = "暂停"
                ElseIf $query[2] = 11 Then
                        $txt = "下载成功!"
                        MsgBox(0,"",$txt)
                        ExitLoop
                ElseIf $query[2] = 12 Then
                        $txt = "下载失败!"
                EndIf
                $time2=TimerDiff($time)
                ToolTip("任务ID:" & $query[1] & " 状态:" & $txt & " 进度:" & Round($query[4] / 1024) & "K/" & Round($query[3] / 1024) & "K 速度:"&Round($query[4]/$time2*1000/1024)&"K/S")
        WEnd

EndIf

$unt = DllCall($dll, "int", "XLUninitDownloadEngine")

已解决
 楼主| 发表于 2011-11-12 13:32:33 | 显示全部楼层
$down1=XLURLDownloadToFile的返回值问题
$down1[0]=0表示成功
若不成功则返回一个数字 转换Hex($down1[0]) 得出错误代码

#define XL_SUCCESS                     0
#define XL_ERROR_FAIL                  0x10000000

// 尚未进行初始化
#define XL_ERROR_UNINITAILIZE          XL_ERROR_FAIL+1

// 不支持的协议,目前只支持HTTP
#define XL_ERROR_UNSPORTED_PROTOCOL    XL_ERROR_FAIL+2

// 初始化托盘图标失败
#define XL_ERROR_INIT_TASK_TRAY_ICON_FAIL  XL_ERROR_FAIL+3

// 添加托盘图标失败
#define XL_ERROR_ADD_TASK_TRAY_ICON_FAIL   XL_ERROR_FAIL+4

// 指针为空
#define XL_ERROR_POINTER_IS_NULL    XL_ERROR_FAIL+5

// 字符串是空串
#define XL_ERROR_STRING_IS_EMPTY    XL_ERROR_FAIL+6

// 传入的路径没有包含文件名
#define XL_ERROR_PATH_DONT_INCLUDE_FILENAME    XL_ERROR_FAIL+7

// 创建目录失败
#define XL_ERROR_CREATE_DIRECTORY_FAIL    XL_ERROR_FAIL+8

// 内存不足
#define XL_ERROR_MEMORY_ISNT_ENOUGH    XL_ERROR_FAIL+9

// 参数不合法
#define XL_ERROR_INVALID_ARG    XL_ERROR_FAIL+10

// 任务不存在
#define XL_ERROR_TASK_DONT_EXIST    XL_ERROR_FAIL+11

// 文件名不合法
#define XL_ERROR_FILE_NAME_INVALID   XL_ERROR_FAIL+12

// 没有实现
#define XL_ERROR_NOTIMPL    XL_ERROR_FAIL+13

// 已经创建的任务数达到最大任务数,无法继续创建任务
#define XL_ERROR_TASKNUM_EXCEED_MAXNUM    XL_ERROR_FAIL+14

// 任务类型未知
#define XL_ERROR_INVALID_TASK_TYPE    XL_ERROR_FAIL+15

// 文件已经存在
#define XL_ERROR_FILE_ALREADY_EXIST   XL_ERROR_FAIL+16

// 文件不存在
#define XL_ERROR_FILE_DONT_EXIST      XL_ERROR_FAIL+17

// 读取cfg文件失败
#define XL_ERROR_READ_CFG_FILE_FAIL   XL_ERROR_FAIL+18

// 写入cfg文件失败
#define XL_ERROR_WRITE_CFG_FILE_FAIL   XL_ERROR_FAIL+19

// 无法继续任务,可能是不支持断点续传,也有可能是任务已经失败
// 通过查询任务状态,确定错误原因。
#define XL_ERROR_CANNOT_CONTINUE_TASK  XL_ERROR_FAIL+20

// 无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败
// 通过查询任务状态,确定错误原因。
#define XL_ERROR_CANNOT_PAUSE_TASK  XL_ERROR_FAIL+21

// 缓冲区太小
#define XL_ERROR_BUFFER_TOO_SMALL   XL_ERROR_FAIL+22

// 调用XLInitDownloadEngine的线程,在调用XLUninitDownloadEngine之前已经结束。
// 初始化下载引擎线程,在调用XLUninitDownloadEngine之前,必须保持执行状态。
#define XL_ERROR_INIT_THREAD_EXIT_TOO_EARLY XL_ERROR_FAIL+23

// TP崩溃
#define XL_ERROR_TP_CRASH XL_ERROR_FAIL+24

// 任务不合法,调用XLContinueTaskFromTdFile继续任务。内部任务切换失败时,会产生这个错误。
#define XL_ERROR_TASK_INVALID XL_ERROR_FAIL+25
发表于 2011-11-12 13:56:29 | 显示全部楼层
本帖最后由 happytc 于 2011-11-12 13:58 编辑

回复 1# my788522

看来大家对迅雷很感兴趣呀

我完全把那个“程序示例”从C++翻到au3




XLDownload()

Func XLDownload()
        Local $Dll, $tTaskId, $lTaskId, $aRet
        
        $Dll = DllOpen (@ScriptDir & "\XLDownload.dll")
        
        ;1、初始化下载引擎
        If False == DllCall($Dll, "Bool", "XLInitDownloadEngine") Then
                MsgBox(16, "Error", "Initialize download engine failed")
                Return 1
        EndIf
        
        ;2、启动新任务
        $tTaskId = DllStructCreate("long")
        DllStructSetData($tTaskId, 1, 0)
        $aRet = DllCall($Dll, "dword", "XLURLDownloadToFile", "wstr", @ScriptDir & "\LiveCapture1.3.1.7z", _
                       "wstr", "http://livecapture.googlecode.com/files/LiveCapture1.3.1.7z", "wstr", "http://livecapture.googlecode.com", "long*", DllStructGetPtr($tTaskId, 1))
        $lTaskId = DllStructGetData($tTaskId, 1)
        
        If "0" <> $aRet[0] Then
                DllCall($Dll, "Bool", "XLUninitDownloadEngine")
                MsgBox(16, "Error", "Create new task failed, error code")
                Return 1
        EndIf
        
        
        ;3、查询任务状态
        Do
                Local $tStatus, $tFileSize, $tRecvSize, $iProgress
                Local $iStatus, $iFileSize, $iRecvSize
                
                Sleep(1000)
                
                $tStatus = DllStructCreate("long")
                $tFileSize = DllStructCreate("UINT64")
                $tRecvSize = DllStructCreate("UINT64")
                
                DllStructSetData($tStatus, 1, -1)
                DllStructSetData($tFileSize, 1, 0)
                DllStructSetData($tRecvSize, 1, 0)
                
                $aRet = DllCall($Dll, "DWORD", "XLQueryTaskInfo", "int", $lTaskId, "long*", _
                                DllStructGetPtr($tStatus, 1), "UINT64*", DllStructGetPtr($tFileSize, 1), "UINT64*", DllStructGetPtr($tRecvSize, 1))
                $iStatus = $aRet[2]
                $iFileSize = $aRet[3]
                $iRecvSize = $aRet[4]
                
                If $aRet[0] = 0 Then
                        If 0 <> $iFileSize Then
                                $iProgress = $iRecvSize / $iFileSize
                                $iProgress *= 100                                
                                $iProgress = StringFormat("%.2f%%", $iProgress)
                                ConsoleWrite($iProgress & @CRLF)
                        Else
                                ConsoleWrite("File size is zero" & @CRLF)
                        EndIf
                        
                        If 11 == $iStatus Then
                                MsgBox(0, "Success", "Download successfully")
                                Exit
                        EndIf
                        
                        If 12 == $iStatus Then 
                                MsgBox(16, "Failed", "Download failed")
                                Exit
                        EndIf
                EndIf
        Until $aRet[0] <> 0
EndFunc

评分

参与人数 1贡献 +5 收起 理由
lynfr8 + 5

查看全部评分

发表于 2011-11-13 08:25:15 | 显示全部楼层
回复 13# happytc


    支持,试一下先。哈哈!
发表于 2011-11-13 11:45:22 | 显示全部楼层
这个很不错,收藏学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 16:21 , Processed in 0.103027 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表