wolf9228 Posted June 29, 2010 Posted June 29, 2010 Hi i am trying to download more than 1 file at the same time. I got it to so i don't have to define a filename when it's downloaded, but i need to download a big list of rapidshare links from links.txt, and not only 1 by 1, it should start them all, please help, i tryed making a new process for eath download, but that is not a good solution for me, i know it can be done with background downloading, but it have to get it's default filename. here's my script: $file = FileOpen("links.txt", 0) ; Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf ; Read in lines of text until the EOF is reached While 1 $line = FileReadLine($file) ;If @error = -1 Then ExitLoop $url = ($line) ;source $folder = @UserProfileDir & "\Downloads\" ;destination folder InetGet($url,$folder & StringTrimLeft($url,StringInStr($url,"/",Default,-1))) ;stringinstr finds the last "/". Stringtrimleft trims all but the filename wend expandcollapse popup#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Dim $Array , $complete = False DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393.exe",@ScriptDir & "\Dir1") DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393bg.exe",@ScriptDir & "\Dir1") DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393.exe",@ScriptDir & "\Dir2") ;only 2 file in one time download in WinRar Site DownloaderMultiFiles($Array,"http://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/" & _ "download/SciTE4AutoIt3.exe",@ScriptDir & "\Dir2") While 1 if $complete = False Then $complete = ProgressLoop($Array,$complete) Else MsgBox(0,"","download is complete") Exit EndIf WEnd Func ProgressLoop($Array,$complete = False) if $complete = False Then Dim $TempArray[1][7] $complete = True For $i = 0 To UBound($Array) - 1 Sleep(250) $read = InetGetInfo($Array[$i][5],0) $Size = InetGetInfo($Array[$i][5],1) $Array[$i][6] += $read $CompBool = InetGetInfo($Array[$i][5],2) $error = @error GUICtrlSetData($Array[$i][3],(100 / $Size) * $read) GUICtrlSetData($Array[$i][4],"( " & StringLeft(int($read / 1024) / 1000 ,8) _ & " OF " & StringLeft(int($Size /1024) / 1000 ,8) & " ) MB") if $CompBool = False And Not $error Then $complete = False $TempArray[UBound($TempArray) -1][0] = $Array[$i][0] $TempArray[UBound($TempArray) -1][1] = $Array[$i][1] $TempArray[UBound($TempArray) -1][2] = $Array[$i][2] $TempArray[UBound($TempArray) -1][3] = $Array[$i][3] $TempArray[UBound($TempArray) -1][4] = $Array[$i][4] $TempArray[UBound($TempArray) -1][5] = $Array[$i][5] $TempArray[UBound($TempArray) -1][6] = $Array[$i][6] ReDim $TempArray[UBound($TempArray) +1][7] Else InetClose($Array[$i][5]) EndIf Next if $complete Then GUIDelete($Array[0][2]) if UBound($TempArray) > 1 Then ReDim $TempArray[UBound($TempArray) - 1][7] Else $TempArray = 0 EndIf $Array = $TempArray Return $complete EndIf EndFunc Func DownloaderMultiFiles(ByRef $Array,$link,$OutDir) if Not IsArray($Array) Then Dim $Array[1][7] $Array[0][2] = GUICreate("Downloader Progress", 590, 140, 100, 200, _ BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW _ ,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) Else ReDim $Array[UBound($Array) + 1][7] EndIf if StringRight($OutDir,1) == "\" Then $OutDir = StringTrimRight($OutDir,1) if Not FileExists($OutDir) Then DirCreate($OutDir) $FileName = StringSplit($link,"/") $FileName = $FileName[$FileName[0]] $OutDir &= "\" & $FileName $Array[UBound($Array) - 1][0] = $link $Array[UBound($Array) - 1][1] = $OutDir $Array[UBound($Array) - 1][3] = GUICtrlCreateProgress(190, 10 + ((UBound($Array) - 1) * 30), 200, 20) GUICtrlCreateLabel($FileName, 10, 10 + ((UBound($Array) - 1) * 30), 170, 20, BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][4] = GUICtrlCreateLabel("", 400, 10 + ((UBound($Array) - 1) * 30), 170, 20,BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][5] = InetGet($Array[UBound($Array) - 1][0],$Array[UBound($Array) - 1][1], 1, 1) Sleep(1500) EndFunc صرح السماء كان هنا
spymare Posted June 29, 2010 Author Posted June 29, 2010 (edited) wolf thanks alot for you reply. i tryed this: it still only read 1 line from links.txt :/ expandcollapse popup#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $file = FileOpen("links.txt", 0) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $line = FileReadLine($file) Dim $Array , $complete = False DownloadserMultiFiles($Array, $line, @ScriptDir & "\Downloads") DownloadserMultiFiles($Array, $line, @ScriptDir & "\Downloads") While 1 if $complete = False Then $complete = ProgressLoop($Array,$complete) Else MsgBox(0,"","Downloads is complete") Exit EndIf WEnd Func ProgressLoop($Array,$complete = False) if $complete = False Then Dim $TempArray[1][7] $complete = True For $i = 0 To UBound($Array) - 1 Sleep(250) $read = InetGetInfo($Array[$i][5],0) $Size = InetGetInfo($Array[$i][5],1) $Array[$i][6] += $read $CompBool = InetGetInfo($Array[$i][5],2) $error = @error GUICtrlSetData($Array[$i][3],(100 / $Size) * $read) GUICtrlSetData($Array[$i][4],"( " & StringLeft(int($read / 1024) / 1000 ,8) _ & " OF " & StringLeft(int($Size /1024) / 1000 ,8) & " ) MB") if $CompBool = False And Not $error Then $complete = False $TempArray[UBound($TempArray) -1][0] = $Array[$i][0] $TempArray[UBound($TempArray) -1][1] = $Array[$i][1] $TempArray[UBound($TempArray) -1][2] = $Array[$i][2] $TempArray[UBound($TempArray) -1][3] = $Array[$i][3] $TempArray[UBound($TempArray) -1][4] = $Array[$i][4] $TempArray[UBound($TempArray) -1][5] = $Array[$i][5] $TempArray[UBound($TempArray) -1][6] = $Array[$i][6] ReDim $TempArray[UBound($TempArray) +1][7] Else InetClose($Array[$i][5]) EndIf Next if $complete Then GUIDelete($Array[0][2]) if UBound($TempArray) > 1 Then ReDim $TempArray[UBound($TempArray) - 1][7] Else $TempArray = 0 EndIf $Array = $TempArray Return $complete EndIf EndFunc Func DownloadserMultiFiles(ByRef $Array,$link,$OutDir) if Not IsArray($Array) Then Dim $Array[1][7] $Array[0][2] = GUICreate("QDownloader", 590, 140, 100, 200, _ BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW _ ,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) Else ReDim $Array[UBound($Array) + 1][7] EndIf if StringRight($OutDir,1) == "\" Then $OutDir = StringTrimRight($OutDir,1) if Not FileExists($OutDir) Then DirCreate($OutDir) $FileName = StringSplit($link,"/") $FileName = $FileName[$FileName[0]] $OutDir &= "\" & $FileName $Array[UBound($Array) - 1][0] = $link $Array[UBound($Array) - 1][1] = $OutDir $Array[UBound($Array) - 1][3] = GUICtrlCreateProgress(190, 10 + ((UBound($Array) - 1) * 30), 200, 20) GUICtrlCreateLabel($FileName, 10, 10 + ((UBound($Array) - 1) * 30), 170, 20, BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][4] = GUICtrlCreateLabel("", 400, 10 + ((UBound($Array) - 1) * 30), 170, 20,BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][5] = InetGet($Array[UBound($Array) - 1][0],$Array[UBound($Array) - 1][1], 1, 1) Sleep(1500) EndFunc Edited June 29, 2010 by spymare
wolf9228 Posted June 30, 2010 Posted June 30, 2010 wolf thanks alot for you reply. i tryed this: it still only read 1 line from links.txt :/ expandcollapse popup#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $file = FileOpen("links.txt", 0) If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit EndIf $line = FileReadLine($file) Dim $Array , $complete = False DownloadserMultiFiles($Array, $line, @ScriptDir & "\Downloads") DownloadserMultiFiles($Array, $line, @ScriptDir & "\Downloads") While 1 if $complete = False Then $complete = ProgressLoop($Array,$complete) Else MsgBox(0,"","Downloads is complete") Exit EndIf WEnd Func ProgressLoop($Array,$complete = False) if $complete = False Then Dim $TempArray[1][7] $complete = True For $i = 0 To UBound($Array) - 1 Sleep(250) $read = InetGetInfo($Array[$i][5],0) $Size = InetGetInfo($Array[$i][5],1) $Array[$i][6] += $read $CompBool = InetGetInfo($Array[$i][5],2) $error = @error GUICtrlSetData($Array[$i][3],(100 / $Size) * $read) GUICtrlSetData($Array[$i][4],"( " & StringLeft(int($read / 1024) / 1000 ,8) _ & " OF " & StringLeft(int($Size /1024) / 1000 ,8) & " ) MB") if $CompBool = False And Not $error Then $complete = False $TempArray[UBound($TempArray) -1][0] = $Array[$i][0] $TempArray[UBound($TempArray) -1][1] = $Array[$i][1] $TempArray[UBound($TempArray) -1][2] = $Array[$i][2] $TempArray[UBound($TempArray) -1][3] = $Array[$i][3] $TempArray[UBound($TempArray) -1][4] = $Array[$i][4] $TempArray[UBound($TempArray) -1][5] = $Array[$i][5] $TempArray[UBound($TempArray) -1][6] = $Array[$i][6] ReDim $TempArray[UBound($TempArray) +1][7] Else InetClose($Array[$i][5]) EndIf Next if $complete Then GUIDelete($Array[0][2]) if UBound($TempArray) > 1 Then ReDim $TempArray[UBound($TempArray) - 1][7] Else $TempArray = 0 EndIf $Array = $TempArray Return $complete EndIf EndFunc Func DownloadserMultiFiles(ByRef $Array,$link,$OutDir) if Not IsArray($Array) Then Dim $Array[1][7] $Array[0][2] = GUICreate("QDownloader", 590, 140, 100, 200, _ BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW _ ,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) Else ReDim $Array[UBound($Array) + 1][7] EndIf if StringRight($OutDir,1) == "\" Then $OutDir = StringTrimRight($OutDir,1) if Not FileExists($OutDir) Then DirCreate($OutDir) $FileName = StringSplit($link,"/") $FileName = $FileName[$FileName[0]] $OutDir &= "\" & $FileName $Array[UBound($Array) - 1][0] = $link $Array[UBound($Array) - 1][1] = $OutDir $Array[UBound($Array) - 1][3] = GUICtrlCreateProgress(190, 10 + ((UBound($Array) - 1) * 30), 200, 20) GUICtrlCreateLabel($FileName, 10, 10 + ((UBound($Array) - 1) * 30), 170, 20, BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][4] = GUICtrlCreateLabel("", 400, 10 + ((UBound($Array) - 1) * 30), 170, 20,BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][5] = InetGet($Array[UBound($Array) - 1][0],$Array[UBound($Array) - 1][1], 1, 1) Sleep(1500) EndFunc $file = FileOpen("links.txt", 0) $SpArray = StringSplit(FileRead($file),@LF) For $i = 1 To $SpArray[0] $Line = StringStripWS($SpArray[$i],3) if $Line <> "" Then _ DownloaderMultiFiles($Array,$Line,@ScriptDir & "\Dir") Next FileClose($file) expandcollapse popup#include <GUIConstantsEx.au3> #include <ProgressConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIScrollBars.au3> #include <ScrollBarConstants.au3> Dim $Array , $complete = False $file = FileOpen("links.txt", 0) $SpArray = StringSplit(FileRead($file),@LF) For $i = 1 To $SpArray[0] $Line = StringStripWS($SpArray[$i],3) if $Line <> "" Then _ DownloaderMultiFiles($Array,$Line,@ScriptDir & "\Dir") Next FileClose($file) ;DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393.exe",@ScriptDir & "\Dir1") ;DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393bg.exe",@ScriptDir & "\Dir1") ;DownloaderMultiFiles($Array,"http://www.win-rar.com/downloads/wrar393.exe",@ScriptDir & "\Dir2") ;only 2 file in one time download in WinRar Site ;DownloaderMultiFiles($Array,"http://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/" & _ ;"download/SciTE4AutoIt3.exe",@ScriptDir & "\Dir2") While 1 if $complete = False Then $complete = ProgressLoop($Array,$complete) Else MsgBox(0,"","download is complete") Exit EndIf WEnd Func ProgressLoop($Array,$complete = False) if $complete = False Then Dim $TempArray[1][7] $complete = True For $i = 0 To UBound($Array) - 1 Sleep(250) $read = InetGetInfo($Array[$i][5],0) $Size = InetGetInfo($Array[$i][5],1) $Array[$i][6] += $read $CompBool = InetGetInfo($Array[$i][5],2) $error = @error GUICtrlSetData($Array[$i][3],(100 / $Size) * $read) GUICtrlSetData($Array[$i][4],"( " & StringLeft(int($read / 1024) / 1000 ,8) _ & " OF " & StringLeft(int($Size /1024) / 1000 ,8) & " ) MB") if $CompBool = False And Not $error Then $complete = False $TempArray[UBound($TempArray) -1][0] = $Array[$i][0] $TempArray[UBound($TempArray) -1][1] = $Array[$i][1] $TempArray[UBound($TempArray) -1][2] = $Array[$i][2] $TempArray[UBound($TempArray) -1][3] = $Array[$i][3] $TempArray[UBound($TempArray) -1][4] = $Array[$i][4] $TempArray[UBound($TempArray) -1][5] = $Array[$i][5] $TempArray[UBound($TempArray) -1][6] = $Array[$i][6] ReDim $TempArray[UBound($TempArray) +1][7] Else InetClose($Array[$i][5]) EndIf Next if $complete Then GUIDelete($Array[0][2]) if UBound($TempArray) > 1 Then ReDim $TempArray[UBound($TempArray) - 1][7] Else $TempArray = 0 EndIf $Array = $TempArray Return $complete EndIf EndFunc Func DownloaderMultiFiles(ByRef $Array,$link,$OutDir) if Not IsArray($Array) Then Dim $Array[1][7] $Array[0][2] = GUICreate("Downloader Progress", 590, 130, 100, 200, _ BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX)) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") _GUIScrollBars_Init($Array[0][2]) GUISetState(@SW_SHOW) Else ReDim $Array[UBound($Array) + 1][7] EndIf if StringRight($OutDir,1) == "\" Then $OutDir = StringTrimRight($OutDir,1) if Not FileExists($OutDir) Then DirCreate($OutDir) $FileName = StringSplit($link,"/") $FileName = $FileName[$FileName[0]] $OutDir &= "\" & $FileName $Array[UBound($Array) - 1][0] = $link $Array[UBound($Array) - 1][1] = $OutDir $Array[UBound($Array) - 1][3] = GUICtrlCreateProgress(190, 10 + ((UBound($Array) - 1) * 30), 200, 20) GUICtrlCreateLabel($FileName, 10, 10 + ((UBound($Array) - 1) * 30), 170, 20, BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][4] = GUICtrlCreateLabel("", 400, 10 + ((UBound($Array) - 1) * 30), 170, 20,BitOR($SS_CENTER,$WS_BORDER)) GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFFFFFF) $Array[UBound($Array) - 1][5] = InetGet($Array[UBound($Array) - 1][0],$Array[UBound($Array) - 1][1], 1, 1) Sleep(1500) EndFunc Func WM_SIZE($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $wParam Local $index = -1, $yChar, $xChar, $xClientMax, $xClient, $yClient, $ivMax For $x = 0 To UBound($aSB_WindowInfo) - 1 If $aSB_WindowInfo[$x][0] = $hWnd Then $index = $x $xClientMax = $aSB_WindowInfo[$index][1] $xChar = $aSB_WindowInfo[$index][2] $yChar = $aSB_WindowInfo[$index][3] $ivMax = $aSB_WindowInfo[$index][7] ExitLoop EndIf Next If $index = -1 Then Return 0 Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO) ; Retrieve the dimensions of the client area. $xClient = BitAND($lParam, 0x0000FFFF) $yClient = BitShift($lParam, 16) $aSB_WindowInfo[$index][4] = $xClient $aSB_WindowInfo[$index][5] = $yClient ; Set the vertical scrolling range and page size DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", $ivMax) DllStructSetData($tSCROLLINFO, "nPage", $yClient / $yChar) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ; Set the horizontal scrolling range and page size DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", 2 + $xClientMax / $xChar) DllStructSetData($tSCROLLINFO, "nPage", $xClient / $xChar) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $wParam, $lParam Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Local $index = -1, $yChar, $yPos Local $Min, $Max, $Page, $Pos, $TrackPos For $x = 0 To UBound($aSB_WindowInfo) - 1 If $aSB_WindowInfo[$x][0] = $hWnd Then $index = $x $yChar = $aSB_WindowInfo[$index][3] ExitLoop EndIf Next If $index = -1 Then Return 0 ; Get all the vertial scroll bar information Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $Min = DllStructGetData($tSCROLLINFO, "nMin") $Max = DllStructGetData($tSCROLLINFO, "nMax") $Page = DllStructGetData($tSCROLLINFO, "nPage") ; Save the position for comparison later on $yPos = DllStructGetData($tSCROLLINFO, "nPos") $Pos = $yPos $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $nScrollCode Case $SB_TOP ; user clicked the HOME keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Min) Case $SB_BOTTOM ; user clicked the END keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Max) Case $SB_LINEUP ; user clicked the top arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1) Case $SB_LINEDOWN ; user clicked the bottom arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1) Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page) Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $TrackPos) EndSwitch ;~ // Set the position and then retrieve it. Due to adjustments ;~ // by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ;// If the position has changed, scroll the window and update it $Pos = DllStructGetData($tSCROLLINFO, "nPos") If ($Pos <> $yPos) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos)) $yPos = $Pos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL صرح السماء كان هنا
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now