Что нового

Сеть, интернет InetEx - Альтернатива Inet* с расширенными возможностями

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Версия AutoIt
3.3.12.0
Версия
0.1
Описание:
Библиотека предназначена для скачивании файлов с расширенными возможностями (тема зарождения идеи).
Данная библиотека изначально задумывалась как альтернатива встроенным функциям Inet*, с возможностью ставить закачку на паузу.
Но в процессе её развития была также реализована поддержка callback-функции, и другие возможности.

Смежная теме: TCPInet - Альтернатива Inet* с расширенными возможностями

Примечания:
* Используйте асинхронный режим (background) с осторожностью, одновременная закачка многих файлов может привести к большому потреблению памяти.

Примеры:
Простой:
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include 'InetEx.au3'

$sPath = @DesktopDir

$sURL1 = 'https://www.autoitscript.com/autoit3/files/beta/autoit/archive/autoit-v3.3.13.19.zip'
$sURL2 = 'http://svn2.assembla.com/svn/anthraxinteractive/encrpytion/emdll/au3src/src/AutoIt.cpp'

$hGUI = GUICreate('InetEx.au3 UDF Simple Example', 400, 100)
GUICtrlCreateLabel(StringRegExp($sURL1, '([^/]+)$', 3)[0] & ' [MEMORY]', 10, 20, 200, 20)
$iLabel1 = GUICtrlCreateLabel('', 230, 20, 100, 20)
GUICtrlCreateLabel(StringRegExp($sURL2, '([^/]+)$', 3)[0], 10, 40, 200, 20)
$iLabel2 = GUICtrlCreateLabel('', 230, 40, 100, 20)
$iPause_Bttn = GUICtrlCreateButton('Pause', (300 / 2) - 35, 70, 70, 20)
GUISetState(@SW_SHOW, $hGUI)

$hInet1 = _InetEx_GetFile($sURL1, '', True, $INETEX_DOWNLOADBACKGROUND) ;Download to memory
$hInet2 = _InetEx_GetFile($sURL2, $sPath, True, $INETEX_DOWNLOADBACKGROUND)

$fCheckInfo = True

While 1
    $nMsg = GUIGetMsg()
   
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            _InetEx_Close($hInet1)
            _InetEx_Close($hInet2)
           
            Exit
        Case $iPause_Bttn
            $iState = True
            $sText = 'Resume'
           
            If GUICtrlRead($iPause_Bttn) <> 'Pause' Then
                $iState = False
                $sText = 'Pause'
            EndIf
           
            GUICtrlSetData($iPause_Bttn, $sText)
           
            _InetEx_Pause($hInet1, $iState)
            _InetEx_Pause($hInet2, $iState)
    EndSwitch
   
    If $fCheckInfo Then
        If _InetEx_GetInfo() > 0 Then
            _SetLabelProgress($hInet1, $iLabel1)
            _SetLabelProgress($hInet2, $iLabel2)
        Else
            $fCheckInfo = False
        EndIf
    EndIf
WEnd

Func _SetLabelProgress($hInet, $iLabel)
    Local $aInfo = _InetEx_GetInfo($hInet, -1)
   
    If @error Or $aInfo[$INETEX_DOWNLOADREAD] = 0 Or $aInfo[$INETEX_DOWNLOADPAUSED] Then
        Return
    EndIf
   
    Local $sProgress = (Floor($aInfo[$INETEX_DOWNLOADREAD] / $aInfo[$INETEX_DOWNLOADSIZE] * 1000) / 10) & '%'
   
    If GUICtrlRead($iLabel) <> $sProgress Then
        GUICtrlSetData($iLabel, $sProgress)
    EndIf
   
    If $aInfo[$INETEX_DOWNLOADCOMPLETE] Then
        If $aInfo[$INETEX_DOWNLOADMEMORY] Then
            Local $hProcess = _WinAPI_GetCurrentProcess()
            Local $stBuffer = DllStructCreate('byte[' & $aInfo[$INETEX_DOWNLOADREAD] & ']')
            Local $iRead = 0
           
            _WinAPI_ReadProcessMemory($hProcess, $aInfo[$INETEX_DOWNLOADMEMORY], DllStructGetPtr($stBuffer), DllStructGetSize($stBuffer), $iRead)
           
            Local $bMemory = DllStructGetData($stBuffer, 1)
           
            If BinaryLen($bMemory) Then
                Local $hFile = FileOpen($sPath & '\' & StringRegExp($aInfo[$INETEX_DOWNLOADURL], '([^/]+)$', 3)[0], 2 + 16)
                FileWrite($hFile, $bMemory)
                FileClose($hFile)
               
                $bMemory = 0
            EndIf
        EndIf
       
        _InetEx_Close($hInet)
        GUICtrlSetData($iLabel, 'Completed')
    EndIf
EndFunc


Продвинуты пример (от Yashied) есть в архиве.

Файл: InetEx.zip

Снимок:
Screenshot.png

История версий:
v0.1
* Первая публичная версия

Спасибо: Yashied за существенный вклад в развитие библиотеки и за пример
 
Автор
G.Sandler (CreatoR)
Источник
Ссылка на источник

Вложения

  • InetEx_0.1.zip
    76.9 КБ · Просмотры: 33
Последнее редактирование:

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
В функции _InetEx_GetInfo() Вы получаете значения из структуры способом (например, $aRet[$INETEX_DOWNLOADREAD] = $stInfo.NumberOfBytesRead), который не поддерживается в версиях 3.3.6.1 - 3.3.8.1.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
В функции _InetEx_GetInfo() Вы получаете значения из структуры способом (например, $aRet[$INETEX_DOWNLOADREAD] = $stInfo.NumberOfBytesRead), который не поддерживается в версиях 3.3.6.1 - 3.3.8.1.
Поправил, спасибо.
Версия осталась прежней.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR,
И еще один нюанс. У Вас, похоже, настройки прокси берутся из IE. У меня, например, постоянно работает бот в IE через прокси, а хожу по страницам через Opera или Firefox. В результате примеры или не отрабатывают вообще, или отрабатывают очень долго. Может быть, имеет смысл задавать опции использования прокси по аналогии с функцией HttpSetProxy(), что бы сделать Вашу библиотеку полностью автономной?

PS
По поводу поддержки версий 3.3.6.1 - 3.3.8.1: в файле Ex Simple (No Callback).au3, в функции _SetLabelProgress() используется конструкция
Код:
;~ ...
Local $hFile = FileOpen($sPath & '\' & StringRegExp($aInfo[$INETEX_DOWNLOADURL], '([^/]+)$', 3)[0], 2 + 16)
;~ ...
котрая также не поддерживается в 3.3.6.1 - 3.3.8.1.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
настройки прокси берутся из IE
Это уже касается ThredLibrary.dll, там используется Wininet.dll, чтобы это отключить придётся перекомпилировать, у меня нет такой возможности.
Если кто то может компилировать C++ то буду признателен.

в функции _SetLabelProgress() используется конструкция
Поправил, спасибо.
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Единственный минус: большие файлы, например 1Гб+ лучше не качать.
oE7Kg8N.png
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Написал автору ThredLibrary.dll, также написал о других проблемах, надеюсь поправит.
 

Olim98

Новичок
Сообщения
48
Репутация
2
Фух, доформатировал код наконец-то. Потому что мне было страшно смотреть на исходники библиотеки ;D. Пожалуйста кому не трудно, выложите отформатированные исходники в ориг. тему. Судя по всему разработчик данной библиотеки не собирается ее развивать, а так больше шанс что кто нибудь другой захочет доделать)))
PS Под библиотекой подразумеваю DLL библиотеку Thred Library
 

Вложения

  • thredlib.zip
    8.1 КБ · Просмотры: 6

Olim98

Новичок
Сообщения
48
Репутация
2
CreatoR сказал(а):
Тогда в чём смысл?
Её нужно исправлять, там много багов.
Мне кажется, если кто то захочет исправить эти баги и увидет неотформатированный код, то сразу разхочет :D их исправлять. А так по крайней мере код выглядит более менее опрятно и его легче анализировать и исправлять в нем баги и т.д.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Olim98 [?]
если кто то захочет исправить эти баги
А у тебя случаем нет такого желания? :whistle:
Я бы сам с радостью поправил, но я в C++ не бум бум.
 

Olim98

Новичок
Сообщения
48
Репутация
2
CreatoR сказал(а):
А у тебя случаем нет такого желания? :whistle:
Я бы сам с радостью поправил, но я в C++ не бум бум.
Я пока-что знаю только самые азы, так бы уже исправил ;D
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Было бы здорово, если бы починили ссылку на скачивание архива)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Первое сообщение отредактировано, ссылки теперь рабочие.
 
Верх