Что нового

[Сеть, интернет] Как отобразить прогресс бар множественной закачки

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1
Есть функция множественной закачки:
Код:
Func _Pro_Down()

Local $InetSizeDrWeb = InetGetSize("http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe", 1)
Local $InetSizeAVZ = InetGetSize('http://z-oleg.com/avz4.zip', 1)
Local $InetSizeKasp = InetGetSize($URL & $Reg[UBound($Reg) - 1], 1)
Local $InetSizeMBAM = InetGetSize($mFileName, 1)
Local $InetSizeHiJack = InetGetSize($sLastLink, 1)
Local $InetSizeUVSP = InetGetSize($AllLink, 1)
Local $InetSizeUVSB = InetGetSize('http://dsrt.dyndns.org/files/MAIN.zip', 1)
Local $InetSizeGMER = InetGetSize("http://www2.gmer.net/gmer.zip", 1)
Local $InetSizeMcafi = InetGetSize($LinkMc, 1)
Local $AllSizeDown = $InetSizeDrWeb + $InetSizeAVZ + $InetSizeHiJack + $InetSizeKasp + $InetSizeGMER + $InetSizeMBAM + $InetSizeMcafi + $InetSizeUVSB + $InetSizeUVSP
Local $iSizeFile = FileGetSize(@ScriptDir&@ScriptName)
Local $SizeFoldDownS = DirGetSize(@ScriptDir, 1) - $iSizeFile
Local $ProcentDown = ($AllSizeDown - $SizeFoldDownS)

if $TD = True Then

	Local $hDrDown = InetGet('http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe', @ScriptDir & '\drweb-cureit.exe', 1, 1)
	Local $hKasDown = InetGet($URL & $Reg[UBound($Reg) - 1], @ScriptDir & '\' & $Reg[UBound($Reg) - 1], 1, 1)
	Local $hMbsDown = InetGet($mFileName, @ScriptDir & '\mbam-setup.exe', 1, 1)
	Local $hHiDown = InetGet($sLastLink, @ScriptDir & '\HijackThis.exe', 1, 1)
	Local $hMstDown = InetGet($LinkMc, @ScriptDir & '\' & $LastMc, 1, 1)
	Local $hAVZDown = InetGet('http://z-oleg.com/avz4.zip', @ScriptDir & '\avz4.zip', 1, 1)
	Local $hUDown = InetGet($AllLink, @ScriptDir & '\uvs' & $Dig, 1, 1)
	Local $hUMDown = InetGet('http://dsrt.dyndns.org/files/MAIN.zip', @ScriptDir & '\MAIN.zip', 1, 1)
	Local $hGMDown = InetGet('http://www2.gmer.net/gmer.zip', @ScriptDir & '\gmer.zip', 1, 1)

Do
    Sleep(3000)
Until InetGetInfo($hDrDown, 2)
InetClose($hDrDown)
Do
    Sleep(3000)
Until InetGetInfo($hKasDown, 2)
InetClose($hKasDown)
Do
    Sleep(3000)
Until InetGetInfo($hMbsDown, 2)
InetClose($hMbsDown)
Do
    Sleep(3000)
Until InetGetInfo($hHiDown, 2)
InetClose($hHiDown)
Do
    Sleep(3000)
Until InetGetInfo($hMstDown, 2)
InetClose($hMstDown)
Do
    Sleep(3000)
Until InetGetInfo($hAVZDown, 2)
InetClose($hAVZDown)
Do
    Sleep(3000)
Until InetGetInfo($hUDown, 2)
InetClose($hUDown)
Do
    Sleep(3000)
Until InetGetInfo($hUMDown, 2)
InetClose($hUMDown)
Do
    Sleep(3000)
Until InetGetInfo($hGMDown, 2)
InetClose($hGMDown)
EndIf
EndFunc

Не пойму как отобразить прогресс всех загрузок в этой функции.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
А можно на моем примере, что-бы без ListViewProgress.au3 ?
Да и к тому же в то примере прогресс для каждого в отдельности.
А вот как это объединить в один прогресс для всех ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
ivsatel
Вам все в 1 ProgressBar? Или в разных?
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Да именно в одном прогресс баре все. Т.е. общий (один) прогресс для всех.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Я хотел включить в функцию предоставленную выше, прогресс общей загрузки. Функция рабочая.
Вот примерно так, покороче:

Код:
#include <WinAPIEx.au3>

_Pro()

Func _Pro()

Local $InetSizeDrWeb = InetGetSize("http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe", 1)
Local $InetSizeAVZ = InetGetSize('http://z-oleg.com/avz4.zip', 1)
Local $InetSizeUVSB = InetGetSize('http://dsrt.dyndns.org/files/MAIN.zip', 1)
Local $InetSizeGMER = InetGetSize("http://www2.gmer.net/gmer.zip", 1)

Local $AllSizeDown = $InetSizeDrWeb + $InetSizeAVZ + $InetSizeGMER + $InetSizeUVSB

Local $hDrDown = InetGet('http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe', @ScriptDir & '\drweb-cureit.exe', 1, 1)
Local $hAVZDown = InetGet('http://z-oleg.com/avz4.zip', @ScriptDir & '\avz4.zip', 1, 1)
Local $hUMDown = InetGet('http://dsrt.dyndns.org/files/MAIN.zip', @ScriptDir & '\MAIN.zip', 1, 1)
Local $hGMDown = InetGet('http://www2.gmer.net/gmer.zip', @ScriptDir & '\gmer.zip', 1, 1)

Do
    Sleep(3000)
Until InetGetInfo($hDrDown, 2)
InetClose($hDrDown)
Do
    Sleep(3000)
Until InetGetInfo($hAVZDown, 2)
InetClose($hAVZDown)
Do
    Sleep(3000)
Until InetGetInfo($hUMDown, 2)
InetClose($hUMDown)
Do
    Sleep(3000)
Until InetGetInfo($hGMDown, 2)
InetClose($hGMDown)

EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
#include <WinAPIEx.au3>

_Pro()

Func _Pro()

Local $InetSizeDrWeb = InetGetSize("http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe", 1)
Local $InetSizeAVZ = InetGetSize('http://z-oleg.com/avz4.zip', 1)
Local $InetSizeUVSB = InetGetSize('http://dsrt.dyndns.org/files/MAIN.zip', 1)
Local $InetSizeGMER = InetGetSize("http://www2.gmer.net/gmer.zip", 1)

Local $AllSizeDown = $InetSizeDrWeb + $InetSizeAVZ + $InetSizeGMER + $InetSizeUVSB

Local $hDrDown = InetGet('http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe', @ScriptDir & '\drweb-cureit.exe', 1, 1)
Local $hAVZDown = InetGet('http://z-oleg.com/avz4.zip', @ScriptDir & '\avz4.zip', 1, 1)
Local $hUMDown = InetGet('http://dsrt.dyndns.org/files/MAIN.zip', @ScriptDir & '\MAIN.zip', 1, 1)
Local $hGMDown = InetGet('http://www2.gmer.net/gmer.zip', @ScriptDir & '\gmer.zip', 1, 1)
ProgressOn("Загрузка","Загрузка антивирусов")
Do
    $iDownloaded = InetGetInfo($hDrDown, 0) + InetGetInfo($hAVZDown, 0) + InetGetInfo($hUMDown, 0) + InetGetInfo($hGMDown, 0)
	ProgressSet($iDownloaded / $AllSizeDown * 100, "Выполнено: " & Round($iDownloaded / $AllSizeDown * 100,1) & "%")
	Sleep(500) ;Чтоб не моргало =)
Until (InetGetInfo($hDrDown, 2) And InetGetInfo($hAVZDown, 2) And InetGetInfo($hUMDown, 2) And InetGetInfo($hGMDown, 2)) = True
ProgressOff()
InetClose($hDrDown)
InetClose($hAVZDown)
InetClose($hUMDown)
InetClose($hGMDown)
EndFunc


Ну можно и так ;)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Как то так:

Код:
HotKeySet('{ESC}', '_Abort')

Dim $ahInet[2][2] = _
	[ _
		['http://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe'], _
		['http://www.autoitscript.com/autoit3/scite/download/SciTE4AutoIt3.zip'] _
	]

$iAborted = 0
$iDownloads = 0
$iPercent = 0
$iTotal_Size = 0
$iCurrent_Size = 0

For $i = 0 To UBound($ahInet)-1
	$ahInet[$i][1] = InetGet($ahInet[$i][0], @TempDir & '\' & StringRegExpReplace($ahInet[$i][0], '^.*/', ''), 1, 1)
	$iTotal_Size += InetGetSize($ahInet[$i][0], 1)
	$iDownloads += 1
Next

ProgressOn('Please wait, downloading', 'Downloads left: ' & InetGetInfo(), 'Completed: 0/' & $iTotal_Size)

Do
	$iDownloads = 0
	$iCurrent_Size = 0
	
	For $i = 0 To UBound($ahInet)-1
		$iCurrent_Size += InetGetInfo($ahInet[$i][1], 0)
		$iDownloads += Int(Not InetGetInfo($ahInet[$i][1], 2))
	Next
	
	$iPercent = Round(100 / ($iTotal_Size / $iCurrent_Size))
    ProgressSet($iPercent, 'Completed: ' & $iCurrent_Size & '/' & $iTotal_Size & ' Bytes', 'Downloads left: ' & $iDownloads)
	
	Sleep(1000)
Until $iDownloads = 0 Or $iAborted

If Not $iAborted Then
	ProgressSet($iPercent, 'Completed: ' & $iCurrent_Size & '/' & $iTotal_Size & ' Bytes', 'Completed!')
EndIf

Sleep(3000)
ProgressOff()

Func _Abort()
	$iAborted = 1
	
	For $i = 0 To UBound($ahInet)-1
		InetClose($ahInet[$i][1])
	Next
	
	ProgressSet($iPercent, 'Completed: ' & $iCurrent_Size & '/' & $iTotal_Size & ' Bytes', 'Aborted!')
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ivsatel,
Мой вариант.
Код:
#include <Date.au3>

Opt('TrayMenuMode', 1)

Global $aInfo[5][4] = [[4],['', 'http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe'], _
		['', 'http://z-oleg.com/avz4.zip'], _
		['', 'http://dsrt.dyndns.org/files/MAIN.zip'], _
		['', 'http://www2.gmer.net/gmer.zip']], $sDir = @ScriptDir & '\Download', $iSec, $iCount = $aInfo[0][0]

HotKeySet('+{Esc}', '_Exit');Shift + Esc - exit

If Not FileExists($sDir) Then DirCreate($sDir)
If Not FileExists($sDir & '\Temp') Then DirCreate($sDir & '\Temp')

;HttpSetProxy(1);my

For $i = 1 To $aInfo[0][0]
	$aInfo[$i][0] = StringRegExpReplace($aInfo[$i][1], '^.*/', '')
	$aInfo[$i][2] = InetGet($aInfo[$i][1], $sDir & '\Temp' & '\' & $aInfo[$i][0] & '.tmp', 17, 1)
	$aInfo[$i][1] = 0
Next
ProgressOn('Download', StringFormat('Downloading %d files, [%d], [%s]', _
		$aInfo[0][0], $aInfo[0][0] - $iCount, _Timer($iSec * 1000)), '0%', 50, 50, 16)
While $iCount
	Sleep(1000)
	$iSec += 1
	$aInfo[0][3] = 0
	$aInfo[0][2] = 0
	For $i = 1 To $aInfo[0][0]
		If $aInfo[$i][2] Then
			If InetGetInfo($aInfo[$i][2], 2) Then
				$iCount -= 1
				If InetGetInfo($aInfo[$i][2], 4) Then
					$aInfo[$i][1] = 0
					FileDelete($sDir & '\Temp' & '\' & $aInfo[$i][0] & '.tmp')
					$aInfo[0][1] -= $aInfo[$i][1]
					TrayTip('Download', 'Error downloading: ' & $aInfo[$i][0], 5, 3)
					AdlibRegister('_Del_TrayTip', 3000)
				Else
					TrayTip('Download', 'Download ' & $aInfo[$i][0] & ' completed', 5, 1)
					AdlibRegister('_Del_TrayTip', 3000)
					FileMove($sDir & '\Temp' & '\' & $aInfo[$i][0] & '.tmp', $sDir & '\' & $aInfo[$i][0], 1)
				EndIf
				InetClose($aInfo[$i][2])
				$aInfo[$i][2] = 0
			Else
				If Not $aInfo[$i][1] Then
					$aInfo[$i][1] = InetGetInfo($aInfo[$i][2], 1)
					$aInfo[0][1] += $aInfo[$i][1]
				EndIf
				$aInfo[$i][3] = InetGetInfo($aInfo[$i][2], 0)
				$aInfo[0][3] += $aInfo[$i][3]
			EndIf
		EndIf
		$aInfo[0][2] += $aInfo[$i][3]
	Next
	If $aInfo[0][1] And $aInfo[0][3] Then
		ProgressSet(Int(100 * $aInfo[0][2] / $aInfo[0][1]), _
				StringFormat('%.2f%\t%s/sec, [%s], [%s]', 100 * $aInfo[0][2] / $aInfo[0][1], _
				_Format_Size($aInfo[0][3] / $iSec), _Format_Size($aInfo[0][2]), _
				_Format_Size($aInfo[0][1])), StringFormat('Downloading %d files, [%d], [%s]', _
				$aInfo[0][0], $aInfo[0][0] - $iCount, _Timer($iSec * 1000)))
	EndIf
WEnd
ProgressSet(100, 'Download completed', StringFormat('Downloading %d files, [%d], [%s]', _
		$aInfo[0][0], $aInfo[0][0] - $iCount, _Timer($iSec * 1000)))
$sString = StringFormat('Downloaded files: %d, [%s], [%s]\n\n', $aInfo[0][0], _
		_Format_Size($aInfo[0][1]), _Timer($iSec * 1000))
For $i = 1 To $aInfo[0][0]
	$sString &= StringFormat('%s\t%s\t%s\n', $aInfo[$i][0], _Format_Size($aInfo[$i][1]))
Next
DirRemove($sDir & '\Temp', 1)
MsgBox(64, 'Download', StringTrimRight($sString, 1))
ProgressOff()

Func _Format_Size($i_Size, $i_Lang = 1);$i_Lang = 0 - рус, 1 - англ.
	Local $a_Str[5][2] = [['байт', 'byte'],['КБ', 'KB'],['МБ', 'MB'],['ГБ', 'GB'],['ТБ', 'TB']]
	$i_Lang = Int($i_Lang)
	If $i_Lang > 1 Or $i_Lang < 0 Then $i_Lang = 0
	$i_Size = Abs($i_Size)
	If $i_Size < 1024 Then Return StringFormat('%d ' & $a_Str[0][$i_Lang], $i_Size)
	For $i = 1 To 4
		$i_Size /= 1024
		If $i_Size < 1024 Then ExitLoop
	Next
	Return StringFormat('%.2f ' & $a_Str[$i][$i_Lang], $i_Size)
EndFunc   ;==>_Format_Size

Func _Timer($i_Diff)
	Local $i_Hour, $i_Min, $i_Sec
	_TicksToTime(Int($i_Diff), $i_Hour, $i_Min, $i_Sec)
	Return StringFormat('%02d:%02d:%02d', $i_Hour, $i_Min, $i_Sec)
EndFunc   ;==>_Timer

Func _Exit()
	For $i = 1 To $aInfo[0][0]
		If $aInfo[$i][2] Then
			InetClose($aInfo[$i][2])
			FileDelete($sDir & '\Temp' & '\' & $aInfo[$i][0] & '.tmp')
		EndIf
	Next
	DirRemove($sDir & '\Temp', 1)
	Exit
EndFunc   ;==>_Exit

Func _Del_TrayTip()
	AdlibUnRegister('_Del_TrayTip')
	TrayTip('', '', 0)
EndFunc   ;==>_Del_TrayTip
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
последний вариант самое то
 
Верх