Guest User

Untitled

a guest
Sep 7th, 2014
157
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; AOL File Downloader. *VERY MUCH BETA*
  2. ; by slipstream, in 2014
  3. ; Needs AOL 9.7.
  4. ; Run AOL 9.7, sign in, close all windows, run this script, it'll start downloading to C:\AOLDLs.
  5. ; Sorry for the mess of this script.. a mix of used stuff and no longer used stuff from debugging and previous iterations..
  6. ; The script *will* screw up if it encounters something it can't handle..
  7. ;
  8. ; Script version 0.31
  9. ; Changelog:
  10. ; 0.31 - fixes an issue with clicking the List More Files button. Also adds a sleep() to fix 100% cpu usage.
  11. ; 0.3 - now clicks the "List More Files" button until it greys out, so we can get everything.
  12. ; 0.2 - fixed some more things, now it handles file-exists and download-failure, it's all completely automated now! the only way this script will screw up, is on connection failure, or AOL client crash..
  13.  
  14. ; Start Area: the area number we start at
  15. $startarea = 1
  16. ; End Area: the area number we end at
  17. $endarea = 40000
  18.  
  19. #include <GuiListView.au3>
  20. #include <GuiListBox.au3>
  21. #include <ListBoxConstants.au3>
  22. #include <Array.au3>
  23. #include <Constants.au3>
  24. ;#include <StringConstants.au3>
  25. #include <WinAPI.au3>
  26. #include <SendMessage.au3>
  27. Const $PROCESS_READ = 0x10
  28. Const $RIGHTS_REQUIRED = 0xF0000
  29.  
  30. Func AOLList_GetCount($hwnd)
  31.     return _SendMessage($hwnd,$LB_GETCOUNT,0,0)
  32. EndFunc
  33.  
  34. Func AOLList_Select($hwnd,$index)
  35.     return _SendMessage($hwnd,$index,0)
  36. EndFunc
  37.  
  38. Func AOLList_GetText($hwnd,$index)
  39.     Global $hProcess
  40.     $memptr = _SendMessage($hwnd,$LB_GETITEMDATA,$index,0)
  41.     $memptr += 28
  42.     $struct1 = DllStructCreate("long pointer;")
  43.     $rBytes = 0
  44.     _WinAPI_ReadProcessMemory($hProcess,$memptr,DllStructGetPtr($struct1,"pointer"),4,$rBytes)
  45.     $struct2 = DllStructCreate("char string[2048];") ; we shouldn't need this much ram but just in case!
  46.     _WinAPI_ReadProcessMemory($hProcess,DllStructGetData($struct1,"pointer")+6,DllStructGetPtr($struct2,"string"),2048,$rbytes)
  47.     return DllStructGetData($struct2,"string")
  48. EndFunc
  49.  
  50. Func MakeValidFilename($fn)
  51.     $fn = StringReplace($fn,"\","_")
  52.     $fn = StringReplace($fn,"/","_")
  53.     $fn = StringReplace($fn,":","_")
  54.     $fn = StringReplace($fn,"*","_")
  55.     $fn = StringReplace($fn,"?","_")
  56.     $fn = StringReplace($fn,'"',"_")
  57.     $fn = StringReplace($fn,"<","_")
  58.     $fn = StringReplace($fn,">","_")
  59.     $fn = StringReplace($fn,"|","_")
  60.     Return $fn
  61. EndFunc
  62.  
  63. Func WinGetFirstChild($hwnd,$class)
  64.     ; loops the list of child windows, returns the hwnd of the first with specified class name or class names, if not found return 0
  65.     if not IsArray($class) then
  66.         Local $class2[1] = [$class]
  67.         $class = $class2
  68.     EndIf
  69.  
  70.     $hChild = _WinAPI_GetWindow($hwnd,$GW_CHILD)
  71.     While $hChild
  72.         $childClass = _WinAPI_GetClassName($hChild)
  73.         for $wanted in $class
  74.             if $wanted = $childClass then return $hChild
  75.         Next
  76.         $result = WinGetFirstChild($hChild,$class)
  77.         if not $result = 0 then return $result
  78.         $hChild = _WinAPI_GetWindow($hChild,$GW_HWNDNEXT)
  79.     WEnd
  80.  
  81.     return 0
  82. EndFunc
  83.  
  84. Func WinListChildren($hWnd, ByRef $avArr)
  85.     If UBound($avArr, 0) <> 2 Then
  86.         Local $avTmp[10][3] = [[0]]
  87.         $avArr = $avTmp
  88.     EndIf
  89.  
  90.     Local $hChild = _WinAPI_GetWindow($hWnd, $GW_CHILD)
  91.  
  92.     While $hChild
  93.         If $avArr[0][0]+1 > UBound($avArr, 1)-1 Then ReDim $avArr[$avArr[0][0]+10][3]
  94.         $avArr[$avArr[0][0]+1][0] = $hChild
  95.         $avArr[$avArr[0][0]+1][1] = _WinAPI_GetWindowText($hChild)
  96.         $avArr[$avArr[0][0]+1][2] = _WinAPI_GetClassName($hChild)
  97.         $avArr[0][0] += 1
  98.         WinListChildren($hChild, $avArr)
  99.         $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT)
  100.     WEnd
  101.  
  102.     ReDim $avArr[$avArr[0][0]+1][3]
  103. EndFunc
  104.  
  105. $hwnd = WinGetHandle("America  Online")
  106. if $hwnd = 0 then $hwnd = WinGetHandle("AOL")
  107. $pid = 0
  108. $tid = _WinAPI_GetWindowThreadProcessId($hwnd,$pid)
  109. $hProcess = _WinAPI_OpenProcess(BitOr($PROCESS_READ,$RIGHTS_REQUIRED),0,$pid)
  110. if not $hProcess then Exit
  111. for $area = $startarea to $endarea
  112. ; kill everything that will be a nuisance to us
  113. while True
  114.     $hwnd2 = ControlGetHandle($hwnd,"","[REGEXPCLASS:(?i)(_AOL_Modal|AOL Child)]")
  115.     if $hwnd2 = 0 then ExitLoop
  116.     $title = WinGetTitle($hwnd2)
  117.     WinKill($hwnd2)
  118.     if WinExists($hwnd2) then WinClose($hwnd2)
  119.     if WinExists($hwnd2) then WinSetState($hwnd2,"",@SW_SHOW)
  120.     if WInExists($hwnd2) then ExitLoop
  121. WEnd
  122.  
  123. ControlFocus($hwnd,"","[CLASS:_AOL_Edit; INSTANCE:1]")
  124. ; aol://4400:
  125.  
  126. #cs
  127. If we get a list of downloads:
  128. Advanced (Class):   [CLASS:AOL Child; INSTANCE:1]
  129. ID: 31746
  130. Text:   Guild of Heroes WAV Files
  131.  
  132. List of errors:
  133.  
  134. >>>> Window <<<<
  135. Title:
  136. Class:  _AOL_Modal
  137.  
  138. Advanced (Class):   [CLASS:_AOL_Static; INSTANCE:1]
  139. ID:
  140. Text:   Sorry, but you do not have access to this library/file.
  141.  
  142. Class:  _AOL_Icon
  143. Instance:   1
  144. ClassnameNN:    _AOL_Icon1
  145. Name:
  146. Advanced (Class):   [CLASS:_AOL_Icon; INSTANCE:1]
  147. ID:
  148.  
  149. No released files [with upload]:
  150. ClassnameNN:    AOL Child1
  151. Name:
  152. Advanced (Class):   [CLASS:AOL Child; INSTANCE:1]
  153.  
  154. ; 2nd button;
  155. Class:  _AOL_Icon
  156. Instance:   2
  157. ClassnameNN:    _AOL_Icon2
  158. Name:
  159. Advanced (Class):   [CLASS:_AOL_Icon; INSTANCE:2]
  160.  
  161. ; Only one button [no upload]
  162. Name:
  163. Advanced (Class):   [CLASS:AOL Child; INSTANCE:1]
  164.  
  165. ClassnameNN:    _AOL_Icon2
  166. Name:
  167. Advanced (Class):   [CLASS:_AOL_Icon; INSTANCE:2]
  168. #ce
  169.  
  170. ; so.. based on this info.. let's try this:
  171.  
  172. while ControlGetText($hwnd,"","[CLASS:_AOL_Edit; INSTANCE:1]") <> "aol://4400:"&$area
  173.     ControlSetText($hwnd,"","[CLASS:_AOL_Edit; INSTANCE:1]","")
  174.     ControlSend($hwnd,"","[CLASS:_AOL_Edit; INSTANCE:1]","aol://4400:"&$area&"{DELETE}")
  175. WEnd
  176. ControlSend($hwnd,"","[CLASS:_AOL_Edit; INSTANCE:1]","{ENTER}")
  177. ;Sleep(1000)
  178. ;Global $test
  179. ;WinListChildren($hwnd,$test)
  180. ;_ArrayDisplay($test)
  181. ;Exit
  182. ;Sleep(1000)
  183. while True
  184.     $hwnd2 = WinGetHandle("[CLASS:_AOL_Modal]")
  185.     if $hwnd2 = 0 then $hwnd2 = WinGetFirstChild($hwnd,"AOL Child")
  186.     if ($hwnd2 = 0) or (StringInStr(WinGetTitle($hwnd2),"Welcome, ")) or (StringInStr(WinGetTitle($hwnd2),"AOL Channels")) Then
  187.         Sleep(500)
  188.     else
  189.         ExitLoop
  190.     EndIf
  191. WEnd
  192. $title = WinGetTitle($hwnd2)
  193. if $title == "" Then
  194.     ; this is an _AOL_Modal?
  195.     WinKill($hwnd2)
  196. Else
  197.     $ctrl = ControlGetText($hwnd2,"","[CLASS:_AOL_Static; INSTANCE:1]")
  198.     if StringInStr($ctrl,"There are no released files.") then
  199.         WinKill($hwnd2)
  200.         ContinueLoop
  201.     EndIf
  202.     ; plunder the list of downloads!
  203.     $hListBox = ControlGetHandle($hwnd2,"","[CLASS:_AOL_Listbox; INSTANCE:1]")
  204.     if $hListBox = 0 then
  205.         WinKill($hwnd2)
  206.         ContinueLoop
  207.     EndIf
  208.     ; wait for the list to be populated
  209.     while AOLList_GetCount($hListBox) = 0
  210.         sleep(500)
  211.     WEnd
  212.     $title = StringStripWS(WinGetTitle($hwnd2),3)
  213.     ; keep on clicking, keep on clicking, keep on clicking clicking clicking!
  214.     $hListMore = ControlGetHandle($hwnd2,"","[CLASS:_AOL_Icon; INSTANCE:5]")
  215.     while BitAnd(WinGetState($hListMore),4)
  216.         ControlSend($hListMore,"","","{ENTER}")
  217.         sleep(500)
  218.     WEnd
  219.     for $dlnumber = 1 to AOLList_GetCount($hListBox)
  220.     ControlSend($hListBox,"","","{ENTER}")
  221.     ; wait for the second child
  222.     $fail = False
  223.     while True
  224.         $hwnd3 = WinGetFirstChild($hwnd,"AOL Child")
  225.         if $hwnd3 = $hwnd2 then
  226.             Sleep(500)
  227.             $hwnd3 = WinGetHandle("[CLASS:_AOL_Modal]")
  228.             if not $hwnd3 = 0 Then
  229.                 $fail = True
  230.                 ExitLoop
  231.             EndIf
  232.         Else
  233.             ExitLoop
  234.         EndIf
  235.     WEnd
  236.     if $fail Then
  237.         WinKill($hwnd3)
  238.         ControlSend($hListBox,"","","{DOWN}")
  239.         WinActivate($hwnd2)
  240.         ContinueLoop
  241.     EndIf
  242.     While True
  243.         $ctrl = ControlGetText($hwnd3,"","[CLASS:_AOL_View; INSTANCE:1]")
  244.         if $ctrl = "" then
  245.             Sleep(500)
  246.         Else
  247.             ExitLoop
  248.         EndIf
  249.     WEnd
  250.     ;for $i = -1 to AOLList_GetCount($hListBox)+1
  251.     ;   ConsoleWrite(AOLList_GetText($hListBox,$i)&@CRLF)
  252.     ;Next
  253.     ControlEnable($hwnd3,"Download Now","[CLASS:_AOL_Icon]")
  254.     $fail = False
  255.     for $count = 1 to 10
  256.         WinActivate($hwnd3)
  257.         ControlSend($hwnd3,"","","{ENTER}")
  258.         $hwnd4 = WinWait("Download Manager","",1)
  259.         if not $hwnd4 = 0 then ExitLoop
  260.         if $count = 10 then $fail = True
  261.     Next
  262.     if $fail Then
  263.         WinKill($hwnd3)
  264.         ControlSend($hListBox,"","","{DOWN}")
  265.         while True
  266.             $hwndkill = ControlGetHandle($hwnd,"","[REGEXPCLASS:(?i)(_AOL_Modal|AOL Child)]")
  267.             if $hwndkill = 0 then ExitLoop
  268.             $titlekill = WinGetTitle($hwndkill)
  269.             if $titlekill = WinGetTitle($hwnd2) then ExitLoop
  270.             WinKill($hwndkill)
  271.             if WinExists($hwndkill) then WinClose($hwndkill)
  272.             if WinExists($hwndkill) then WinSetState($hwndkill,"",@SW_SHOW)
  273.             if WInExists($hwndkill) then ExitLoop
  274.         WEnd
  275.         WinActivate($hwnd2)
  276.         ContinueLoop
  277.     EndIf
  278.     if StringInStr(ControlGetText($hwnd4,"","[CLASS:_AOL_Static]"),"You have already downloaded this file") Then
  279.         WinKill($hwnd4)
  280.         WinKill($hwnd3)
  281.         ControlSend($hListBox,"","","{DOWN}")
  282.         while True
  283.             $hwndkill = ControlGetHandle($hwnd,"","[REGEXPCLASS:(?i)(_AOL_Modal|AOL Child)]")
  284.             if $hwndkill = 0 then ExitLoop
  285.             $titlekill = WinGetTitle($hwndkill)
  286.             if $titlekill = WinGetTitle($hwnd2) then ExitLoop
  287.             WinKill($hwndkill)
  288.             if WinExists($hwndkill) then WinClose($hwndkill)
  289.             if WinExists($hwndkill) then WinSetState($hwndkill,"",@SW_SHOW)
  290.             if WInExists($hwndkill) then ExitLoop
  291.         WEnd
  292.         WinActivate($hwnd2)
  293.         ContinueLoop
  294.     EndIf
  295.     $hEdit = ControlGetHandle($hwnd4,"","[CLASS:Edit; INSTANCE:1]")
  296.     $filename = ControlGetText($hEdit,"","")
  297.     if not FileExists("C:\AOLDLs\"&MakeValidFilename($title)) then
  298.         DirCreate("C:\AOLDLs\"&MakeValidFilename($title))
  299.         FileWrite("C:\AOLDLs\"&MakeValidFilename($title)&"\url.txt","aol://4400:"&$area)
  300.     EndIf
  301.     $subj = StringSplit($ctrl,@CRLF,3)
  302.     $subj = StringStripWS(StringTrimLeft($subj[0],8),3)
  303.     if not FileExists("C:\AOLDLs\"&MakeValidFilename($title)&"\"&MakeValidFilename($subj)) then DirCreate("C:\AOLDLs\"&MakeValidFilename($title)&"\"&MakeValidFilename($subj))
  304.     ControlSetText($hEdit,"","","C:\AOLDLs\"&MakeValidFilename($title)&"\"&MakeValidFilename($subj))
  305.     ControlSend($hEdit,"","","{ENTER}")
  306.     FileWrite("C:\AOLDLs\"&MakeValidFilename($title)&"\"&MakeValidFilename($subj)&"\info.txt",$ctrl)
  307.     $it = 2
  308.     $oldfilename = $filename
  309.     while FileExists("C:\AOLDLs\"&MakeValidFilename($title)&"\"&MakeValidFilename($subj)&"\"&$filename)
  310.         $filename = $it&"_"&$oldfilename ; too lazy to do anything else
  311.         $it += 1
  312.     WEnd
  313.     ControlSetText($hEdit,"","",$filename)
  314.     ControlSend($hEdit,"","","{ENTER}")
  315.     while True
  316.         $hwnd5 = WinGetFirstChild($hwnd,"AOL Child")
  317.         if StringInStr(WinGetTitle($hwnd5),"File Transfer -") Then
  318.             while not WinWaitClose($hwnd5,"",1)
  319.                 if winexists("Download Manager") Then
  320.                     winkill("Download Manager")
  321.                 EndIf
  322.             WEnd
  323.             ExitLoop
  324.         EndIf
  325.         if stringinstr(wingettitle($hwnd5),"Download Confirmation - ") Then
  326.             ExitLoop
  327.         EndIf
  328.     WEnd
  329.     ;$hwnd5 = WinWait("Download Confirmation")
  330.     ;ControlSend($hwnd5,"","","{ENTER}")
  331.     WinKill($hwnd3)
  332.     ControlSend($hListBox,"","","{DOWN}")
  333.     while True
  334.         $hwndkill = ControlGetHandle($hwnd,"","[REGEXPCLASS:(?i)(_AOL_Modal|AOL Child)]")
  335.         if $hwndkill = 0 then ExitLoop
  336.         $titlekill = WinGetTitle($hwndkill)
  337.         if $titlekill = WinGetTitle($hwnd2) then ExitLoop
  338.         WinKill($hwndkill)
  339.         if WinExists($hwndkill) then WinClose($hwndkill)
  340.         if WinExists($hwndkill) then WinSetState($hwndkill,"",@SW_SHOW)
  341.         if WInExists($hwndkill) then ExitLoop
  342.     WEnd
  343.     WinActivate($hwnd2)
  344.     Next
  345. EndIf
  346. Next
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×