Descargas simultaneas (Ayuda)
Publicado: 19 Ene 2012, 23:46
Buenas, tengo el siguiente script que saque del foro de autoit, he quitado algunas cosas que no quería y tal, pero quiero adaptarlo a una interfaz que tengo, porque funcionar, funciona, pero quiero sacar uno de los datos que actualiza en el console write para actualizar una barra de progreso y estoy más que perdido, si alguien me puede ayudar, se lo agradecería.
Saludos!
Saludos!
Código: Seleccionar todo
#include-once
Global $__MultiDownloadInet
Global $__MultiDownloadFiles
Global $__MultiDownloadResults
;#cs
Global $asFiles[5][2] = [["http://dl.dropbox.com/u/18344147/Opera_1110_int_Setup.exe", @ScriptDir & "\Opera Desktop 11.10.exe"], ["http://dl.dropbox.com/u/18344147/Opera_Mobile_11_Win7.exe", @ScriptDir & "\Opera Mobile for Desktop.exe"], ["http://something.something/something.something", @ScriptDir & "\Poop.exe"], ["http://dl.dropbox.com/u/18344147/autoit-v3.3.6.1-setup.exe", @ScriptDir & "\AutoIt 3.3.6.1.exe"], ["http://dl.dropbox.com/u/18344147/SciTE4AutoIt3%202010.02.28.exe", @ScriptDir & "\SciTE4AutoIt.exe"]]
_CW(_MultiDownloadAdlib($asFiles, 2))
_CW(_MultiDownloadAdlib($asFiles, 2))
Do
Sleep(100)
For $iX = 0 To UBound($asFiles, 1) -1
MsgBox(0,$ix,$__MultiDownloadResults[$iX][0] & @lf &$__MultiDownloadResults[$iX][1])
_CW($__MultiDownloadResults[$iX][0] & ": " & $__MultiDownloadResults[$iX][1])
Next
Until IsArray($__MultiDownloadInet) = 0
Func _CW($Whatever1, $Whatever2 = @ScriptLineNumber, $Whatever3 = @error, $Whatever4 = @extended) ;Copied from CodecControl 2.2.9.au3
Static Local $iExist = FileExists(@ScriptDir & "\Log.txt")
Local $sText = $Whatever1 & @CRLF
If $iExist <> 0 Then
FileWrite(@ScriptDir & "\Log.txt", $sText)
Else
ConsoleWrite($sText)
EndIf
EndFunc
;#ce
Func _MultiDownloadAdlib($asFiles, $iSimultaneous, $iAdlibTime = 50)
If IsArray($asFiles) = 0 Then Return SetError(1, 0, 0) ;$asFiles must be array
If UBound($asFiles, 0) <> 2 Then Return SetError(2, 0, 0) ;a 2-dimensional array
If IsInt($iSimultaneous) And $iSimultaneous < 1 Then Return SetError(3, 0, 0) ;make sure $iSimultaneous is a number above 0
If IsArray($__MultiDownloadInet) Then Return SetError(4, 0, 0) ;There's already one adlib going on, error and return to prevent clash
Global $__MultiDownloadInet[$iSimultaneous][UBound($asFiles)], $__MultiDownloadResults[UBound($asFiles)][3]
Global $__MultiDownloadFiles = $asFiles
AdlibRegister("__MultiDownloadAdlibInternal", $iAdlibTime)
EndFunc
Func __MultiDownloadAdlibInternal()
Local $avInet, $iBusy
For $iX = 0 To UBound($__MultiDownloadInet, 1) -1
If $__MultiDownloadInet[$iX][0] <> "" Then
$avInet = InetGetInfo($__MultiDownloadInet[$iX][0])
$__MultiDownloadResults[$__MultiDownloadInet[$iX][1]][1] = $avInet[0] / $avInet[1] * 100
If $avInet[2] Then
$__MultiDownloadResults[$__MultiDownloadInet[$iX][1]][2] = $avInet[3]
InetClose($__MultiDownloadInet[$iX][0])
$__MultiDownloadInet[$iX][0] = ""
EndIf
EndIf
Next
For $iX = UBound($__MultiDownloadInet, 1) -1 To 0 Step -1
If $__MultiDownloadInet[$iX][0] <> "" Then ContinueLoop
If IsArray($__MultiDownloadFiles) = 0 Then ExitLoop
$__MultiDownloadInet[$iX][1] = UBound($__MultiDownloadFiles) -1
$asFile = __ArrayPop2D($__MultiDownloadFiles)
$__MultiDownloadInet[$iX][0] = InetGet($asFile[0], $asFile[1], 1, 1)
$__MultiDownloadResults[$__MultiDownloadInet[$iX][1]][0] = $asFile[0]
Next
$iBusy = 0
For $iX = 0 To UBound($__MultiDownloadInet, 1) -1
If $__MultiDownloadInet[$iX][0] <> "" Then $iBusy += 1
Next
If $iBusy < 1 Then
AdlibUnRegister("__MultiDownloadAdlibInternal")
Global $__MultiDownloadInet = ""
EndIf
EndFunc
;Based on _ArrayPop() from the official Array.au3
Func __ArrayPop2D(ByRef $avArray)
Local $iUBound = UBound($avArray) - 1
Local $asLastVal[2] = [$avArray[$iUBound][0], $avArray[$iUBound][1]]
; Remove last item
If Not $iUBound Then
$avArray = ""
Else
ReDim $avArray[$iUBound][2]
EndIf
; Return last item
Return $asLastVal
EndFunc ;==>_ArrayPop