[已解决]迅雷下载开放引擎调用示例
本帖最后由 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 Then
While 1
$txt = ""
$query = DllCall($dll, "long", "XLQueryTaskInfo", "long", $down1, "long*", 0, "long*", 0, "long*", 0)
If $query = 2 Then
$txt = "正在下载"
ElseIf $query = 0 Then
$txt = "已建立连接"
ElseIf $query = 10 Then
$txt = "暂停"
ElseIf $query = 11 Then
$txt = "下载成功!"
MsgBox(0,"",$txt)
ExitLoop
ElseIf $query = 12 Then
$txt = "下载失败!"
EndIf
$time2=TimerDiff($time)
ToolTip("任务ID:" & $query & " 状态:" & $txt & " 进度:" & Round($query / 1024) & "K/" & Round($query / 1024) & "K 速度:"&Round($query/$time2*1000/1024)&"K/S")
WEnd
EndIf
$unt = DllCall($dll, "int", "XLUninitDownloadEngine")
已解决 感谢楼下的帮助和启发
迅雷接口如下网址:
http://thunderplatform.xunlei.com/ 测试了一下,
明明成功返回确实0.无语! 是呀我也是这样返回0
难道是传入参数的问题 可能需要一个回调 本帖最后由 yeqing880 于 2011-11-12 12:54 编辑
返回0表示任务的编号为0
当我同时建立两个下载任务的时候,他的ID变成了1
我能获取任务编号 但是XLQueryTaskInfo获取任务状态这里又卡住了。。 $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,"long*",0,"long*",0,"long*",0)
;停止引擎
_ArrayDisplay($query)
可以得到状态了 $dll=DllOpen ("XLDownload.dll")
$int=DllCall($dll,"int","XLInitDownloadEngine")
;下载文件
$dow ...
my788522 发表于 2011-11-12 00:34 http://www.autoitx.com/images/common/back.gif
$down就是任务ID,XLURLDownloadToFile的返回值($down)为XL_SUCCESS代表成功,其它值则为失败. enum enumTaskStatus{
enumTaskStatus_Connect = 0, // 已经建立连接
enumTaskStatus_Download = 2, // 开始下载
enumTaskStatus_Pause = 10, // 暂停
enumTaskStatus_Success = 11, // 成功下载
enumTaskStatus_Fail = 12, // 下载失败
}; 我这里还是0 楼上的。你Q多少。。交流下 本帖最后由 yeqing880 于 2011-11-12 13:23 编辑
哈。。成功了 $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 Then
While 1
$txt = ""
$query = DllCall($dll, "long", "XLQueryTaskInfo", "long", $down1, "long*", 0, "long*", 0, "long*", 0)
If $query = 2 Then
$txt = "正在下载"
ElseIf $query = 0 Then
$txt = "已建立连接"
ElseIf $query = 10 Then
$txt = "暂停"
ElseIf $query = 11 Then
$txt = "下载成功!"
MsgBox(0,"",$txt)
ExitLoop
ElseIf $query = 12 Then
$txt = "下载失败!"
EndIf
$time2=TimerDiff($time)
ToolTip("任务ID:" & $query & " 状态:" & $txt & " 进度:" & Round($query / 1024) & "K/" & Round($query / 1024) & "K 速度:"&Round($query/$time2*1000/1024)&"K/S")
WEnd
EndIf
$unt = DllCall($dll, "int", "XLUninitDownloadEngine")
已解决 $down1=XLURLDownloadToFile的返回值问题
$down1=0表示成功
若不成功则返回一个数字 转换Hex($down1) 得出错误代码
#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_FAILXL_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_TASKXL_ERROR_FAIL+20
// 无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败
// 通过查询任务状态,确定错误原因。
#define XL_ERROR_CANNOT_PAUSE_TASKXL_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 本帖最后由 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 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
$iFileSize = $aRet
$iRecvSize = $aRet
If $aRet = 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
EndFunc
回复 13# happytc
支持,试一下先。哈哈! 这个很不错,收藏学习
页:
[1]
2