本帖最后由 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
|