Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Создание "Прогресса" на время работы "InetGetSize" (http://forum.oszone.net/showthread.php?t=142959)

sashadeg 18-06-2009 17:43 1146129

Создание "Прогресса" на время работы "InetGetSize"
 
Это программа проверяющая наличие интернета на компьютере... Для функции "InetGetSize" хотелось бы "прогресс" установить, пока она выполняется... Это возможно? А как? :)
Код:

$size = InetGetSize("http://ya.ru/logo.png")
If $size = 0 Then
        $1=MsgBox(20, "Yes or No Inet ?","К сожалению, сейчас Интернет на вашем компьютере НЕ РАБОТАЕТ. Сообщить, если Интернет будет работать?")
Else
        MsgBox(64, "Yes or No Inet ?","Интернет РАБОТАЕТ =)")
        Exit
EndIf
If $1 = 6 Then
        While 1
                sleep(5000)
                $size1 = InetGetSize("http://www.ya.ru")
                If $size1 = 0 Then
                Else
                        Beep(1000,100)
                        MsgBox(64, "Yes or No Inet ?","Интернет РАБОТАЕТ =) Время подключения: " & @hour &":"& @min &":"&@sec)
                        Exit
                        EndIf
                WEnd
                        EndIf


beve 18-06-2009 22:28 1146305

Цитата:

Цитата sashadeg
Это программа проверяющая наличие интернета на компьютере... »

Если просто нужно проверить наличие инета, то можно попроще:
Код:

#include <Inet.au3>
If
_GetIP()<>-1 Then
   
MsgBox(0, "Сообщение", "Все в порядке, интрернет работает",10)
   
Exit
Else
   
$1=MsgBox(20, "Yes or No Inet ?","К сожалению, сейчас Интернет на вашем компьютере НЕ РАБОТАЕТ. Сообщить, если Интернет будет работать?")
EndIf
;
If $1==6 Then
While
1
   
sleep
(5000)
   
If
_GetIP()<>-1 then
   
Beep(1000,100)
   
MsgBox(64, "Yes or No Inet ?","Интернет РАБОТАЕТ =) Время подключения: " & @hour &":"& @min &":"&@sec,10)
   
Exit
    EndIf
WEnd
EndIf


Creat0R 19-06-2009 00:01 1146374

Цитата:

Цитата sashadeg
я то хочу полоску прогресса GUICtrlCreateProgress »

Сорри, я неверно понял вопроса (прочитал очень бегло).

А зачем прогресс для получения размера файла в сети? Или прогресс нужен именно для процесса проверки подключения?

Тогда просто можно вывести замкнуты прогресс, я бы сделал так к примеру:

Код:

#include <Timers.au3>

Global $iShow_While_Progress = 1
Global $iProgress = 0
Global $hTimer = 0

_ProgressStart_Proc()

$iInetIsConnected = _InternetIsConnected("ya.ru")

_ProgressStop_Proc()

If $iInetIsConnected Then
    MsgBox(64, "Internet Connection", "Интернет РАБОТАЕТ =)")
    Exit
EndIf


$iAsk = MsgBox(20, "Internet Connection", _
    "К сожалению, сейчас Интернет на вашем компьютере НЕ РАБОТАЕТ. Сообщить, если Интернет будет работать?")

If $iAsk = 6 Then
    If
$iShow_While_Progress Then _ProgressStart_Proc()

    While 1
        Sleep(5000)

        If _InternetIsConnected("ya.ru") Then
            _ProgressStop_Proc()

            Beep(1000, 100)
            MsgBox(64, "Internet Connection", "Интернет РАБОТАЕТ =) Время подключения: " & @HOUR & ":" & @MIN & ":" & @SEC)

            Exit
        EndIf
    WEnd
EndIf

Func
_ProgressStart_Proc()
    ProgressOn("Internet Connection", "Проверка подключения", "Пожалуйста, подождите...", -1, -1, 16)
    $hTimer = _Timer_SetTimer(0, 100, "_ProgressSet_Proc")
EndFunc

Func
_ProgressStop_Proc()
    If $hTimer <> 0 Then _Timer_KillTimer(0, $hTimer)

    $hTimer = 0

    ProgressSet(100)
    Sleep(1000)
    ProgressOff()
EndFunc

Func
_ProgressSet_Proc($hWnd, $nMsg, $iIDTimer, $dwTime)
    $iProgress += 1
    If $iProgress >= 100 Then $iProgress = 0

    ProgressSet($iProgress)
EndFunc

Func
_InternetIsConnected($sPing_Host="google.com", $iPing_TimeOut=1000)
    Local Const $INTERNET_CONNECTION_MODEM = 0x1
    Local Const $INTERNET_CONNECTION_LAN = 0x2
    Local Const $INTERNET_CONNECTION_PROXY = 0x4
    Local Const $INTERNET_CONNECTION_OFFLINE = 0x20
    Local Const $INTERNET_CONNECTION_CONFIGURED = 0x40

    Local $stInetGetConnectedState = DllStructCreate("int")

    DllCall("wininet.dll", "int", "InternetGetConnectedState", "ptr", DllStructGetPtr($stInetGetConnectedState), "dword", 0)

    Local $s_stDataState = DllStructGetData($stInetGetConnectedState, 1)
    Local $iRetState = 0

    If BitAND($s_stDataState, $INTERNET_CONNECTION_MODEM) Or _
        BitAND($s_stDataState, $INTERNET_CONNECTION_PROXY) Then $iRetState = 1

    If BitAND($s_stDataState, $INTERNET_CONNECTION_OFFLINE) Then $iRetState = 0

    If $iRetState = 0 And BitAND($s_stDataState, $INTERNET_CONNECTION_CONFIGURED) Then
        Local
$iPingCheck = Ping($sPing_Host, $iPing_TimeOut)
        If $iPingCheck > 0 Then $iRetState = 1
    EndIf

    Return
$iRetState
EndFunc


sashadeg 19-06-2009 15:22 1146800

Цитата:

Цитата Creat0R
А зачем прогресс для получения размера файла в сети? »

Просто если подключения нету, то этот файл в сети (типа "http://ya.ru/") возвратит значение 0 - то есть инета нет... Канешна через }|{0пу, но по другому я не мог догадаться, как проверить наличие интернета :)

P.S. Твоя программа пишет что инета нету, а в действительности он есть он есть =)
Программа beve работает нормально...

Цитата:

Цитата beve
_GetIP()<>-1 »

а это что такое? и как это работает?

Creat0R 19-06-2009 15:37 1146815

Цитата:

Цитата sashadeg
Программа beve работает нормально »

Ну так используйте оттуда функцию проверки подключения (хотя странно что не работает, какое соеденение?), тема ведь не про это, а про создание прогресса :)

beve 19-06-2009 15:54 1146832

Цитата:

а это что такое? и как это работает?
Просто в справке к Autoit в поиске набери: _GetIP и прочитай объяснение этой функции, которая возвращает ip адресс, а если адресс получить не удалось, значит возвращаемое значение будет -1 и соответственно можна сделать вывод, что инет отсуствует на данное время. А _GetIP()<>-1 другими словами, если результат _GetIP() не равно -1...

Добавлено:
Цитата:

Цитата Creat0R
Тогда просто можно вывести замкнуты прогресс, я бы сделал так к примеру: »

У меня твой пример постоянно показывает, что интернет работает, даже когда я отключил (Интернет Adsl, модем подключен через сетевую...)

sashadeg 19-06-2009 16:04 1146845

Creat0R, я про прогресс так и ничего и не понял...=( Можно сделать чтобы он бесконечно бегал (как у тебя, когда ждет "появления" инета) пока идет работа InetGetSize ? Ну или до появления msgbox'. без разницы... И если можно, то объясните пожалуйста (;в коментарии) что к чему. А то я мало что понимаю в устройстве и работе этого "прогресса"

Цитата:

Цитата beve
Просто в справке к Autoit в поиске набери »

в русской справке вапще гаМно а не поиск =( А в ENG я лось =) Я же не Creat0R... (вчера его пост видел на каком то английском форуме, полностью на английском языке 0_о )

Creat0R 19-06-2009 16:29 1146875

Цитата:

Цитата sashadeg
Можно сделать чтобы он бесконечно бегал (как у тебя, когда ждет "появления" инета) пока идет работа InetGetSize ? »

Можно. Поменять _InternetIsConnected на InetGetSize думаю не сложно? :)

Цитата:

Цитата sashadeg
я мало что понимаю в устройстве и работе этого "прогресса" »

Вот для этого (и не только) начните в первую очередь, учить английский язык, а во-вторую, англ. справку к AutoIT.
Я когда начинал учить аутоит, паралельно учил англ. язык, стал общаться на офф. форуме.. а иначе никак.

Цитата:

Цитата sashadeg
вчера его пост видел на каком то английском форуме, полностью на английском языке 0_о »

У меня там вообще то около 2500 сообщении, полностью на Английском языке ;)

sashadeg 19-06-2009 16:54 1146902

Цитата:

Цитата Creat0R
Поменять _InternetIsConnected на InetGetSize думаю не сложно »

хмм... ну у тебя ведь он для того чтобы работал пока ждёт подключения...
Что то щас пробЫвал из твоего вытащить... постоянно ошибка вылазит... ссылается на _ProgressStop_Proc()...
Я бедный RUSский AutoХудоIt парень :not-me: Помогите пожалуйста... :not-me: :)

Creat0R 19-06-2009 23:37 1147238

Цитата:

Цитата sashadeg
у тебя ведь он для того чтобы работал пока ждёт подключения... »

Мда...

Код:

#include <Timers.au3>

Global $iShow_While_Progress = 1
Global $iProgress = 0
Global $hTimer = 0

_ProgressStart_Proc()

$iInetIsConnected = InetGetSize("http://ya.ru/logo.png")

_ProgressStop_Proc()

If $iInetIsConnected > 0 Then
    MsgBox(64, "Internet Connection", "Интернет РАБОТАЕТ =)")
    Exit
EndIf


$iAsk = MsgBox(20, "Internet Connection", _
    "К сожалению, сейчас Интернет на вашем компьютере НЕ РАБОТАЕТ. Сообщить, если Интернет будет работать?")

If $iAsk = 6 Then
    If
$iShow_While_Progress Then _ProgressStart_Proc()

    While 1
        Sleep(5000)

        If InetGetSize("http://ya.ru/logo.png") > 0 Then
            _ProgressStop_Proc()

            Beep(1000, 100)
            MsgBox(64, "Internet Connection", "Интернет РАБОТАЕТ =) Время подключения: " & @HOUR & ":" & @MIN & ":" & @SEC)

            Exit
        EndIf
    WEnd
EndIf

Func
_ProgressStart_Proc()
    ProgressOn("Internet Connection", "Проверка подключения", "Пожалуйста, подождите...", -1, -1, 16)
    $hTimer = _Timer_SetTimer(0, 100, "_ProgressSet_Proc")
EndFunc

Func
_ProgressStop_Proc()
    If $hTimer <> 0 Then _Timer_KillTimer(0, $hTimer)

    $hTimer = 0

    ProgressSet(100)
    Sleep(1000)
    ProgressOff()
EndFunc

Func
_ProgressSet_Proc($hWnd, $nMsg, $iIDTimer, $dwTime)
    $iProgress += 1
    If $iProgress >= 100 Then $iProgress = 0

    ProgressSet($iProgress)
EndFunc

Цитата:

Цитата beve
У меня твой пример постоянно показывает, что интернет работает, даже когда я отключил (Интернет Adsl, модем подключен через сетевую...) »

Интересно... А такая функция работает:

Код:

Func _InetIsConnected($sPing_Host="google.com", $iPing_TimeOut=1000)
    Local Const $INTERNET_CONNECTION_MODEM          = 0x1
    Local Const $INTERNET_CONNECTION_LAN            = 0x2
    Local Const $INTERNET_CONNECTION_PROXY          = 0x4
    Local Const $INTERNET_CONNECTION_MODEM_BUSY    = 0x8
    Local Const $INTERNET_RAS_INSTALLED            = 0x10
    Local Const $INTERNET_CONNECTION_OFFLINE        = 0x20
    Local Const $INTERNET_CONNECTION_CONFIGURED    = 0x40

    ;For 3.2.10.0 the next line should be used
    ;Local $aRetConnectedState = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int*", 0, "int", 0)

    Local $aRetConnectedState = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)
    Local $iRetState = 0

    If UBound($aRetConnectedState) > 0 And $aRetConnectedState[0] Then
        If
BitAND($aRetConnectedState[1], $INTERNET_CONNECTION_MODEM) Or _
            BitAND($aRetConnectedState[1], $INTERNET_CONNECTION_LAN) Or _
            BitAND($aRetConnectedState[1], $INTERNET_CONNECTION_PROXY) Or _
            BitAND($aRetConnectedState[1], $INTERNET_RAS_INSTALLED) Then $iRetState = 1

        If BitAND($aRetConnectedState[1], $INTERNET_CONNECTION_OFFLINE) Then $iRetState = 0
    Else
        $iRetState = 0
    Endif

    If
$iRetState = 0 Then
        Local
$iPingCheck = Ping($sPing_Host, $iPing_TimeOut)
        If $iPingCheck > 0 Then $iRetState = 1
    EndIf

    Return
$iRetState
EndFunc

?
:unsure:

beve 19-06-2009 23:55 1147245

Цитата:

Цитата Creat0R
Интересно... А такая функция работает: »

Такая функция работает правильно.

SyDr 20-06-2009 14:44 1147525

Код:

Func GetSourceOrFile($URL, $SourceOrFile = "Source", $PathToDownLoad = "")
#cs ----------------------------------------------------------------------------
Внешние связи: #include <File.au3>, переменная $AllowDownLoad для немедленного завершения и цикл обработки GUI {GUIProcess()}
Получает файл или исходный текст файла в интернете. При этом обрабатывает GUI
Возвращаемое значение: Исходный текст файла или пустая строка
#ce ----------------------------------------------------------------------------

    Local $Handle
    Local $Return = ""

    If $PathToDownLoad = "" Then $PathToDownLoad = _TempFile()
    $Handle = InetGet($URL, $PathToDownLoad, 0, 1)

    While (NOT(InetGetInfo($Handle, 2))) And $AllowDownLoad
        ; Вот здесь можно вставить функцию обновления прогресса.
        GUIProcess()
    WEnd

    InetClose($Handle)

    If $SourceOrFile = "Source" Then
        $Return = FileRead($PathToDownLoad)
        FileDelete($PathToDownLoad)
    EndIf

    Return
$Return
EndFunc


Creat0R 20-06-2009 23:11 1147811

Sylver Dragon, Это в последней бета, на финалке оно работать не будет ;)

SyDr 21-06-2009 09:26 1147983

В предпоследней тоже будет работать :)

читать дальше »
3.3.1.1 (14th June, 2009) (Beta)
AutoIt:
- Added #529: Added the "NAME" property to allow direct search for .NET WinForm control names.
- Added: PixelChecksum() extra parameter to select CRC32 instead of ADLER.
- Added #984: @OSVersion now returns "WIN_XPe" for Windows XP Embedded.
- Added #938: UDPOpen() flag to allow broadcasting with 255.255.255.255. (Thanks skyteddy)

- Fixed #969: FileFindNextFile() does not set @extended if first found is a dir. (Thanks wraithdu)
- Fixed #975: Checkbox or Radio bkcolor on tab regression with Theme. (Thanks GEOSoft, jchd)
- Fixed #983: InetGet() crash with IE6.
- Fixed #1006: @MSEC returned wrong value for values < 100.
- Fixed #1010: FileRead() UTF8 with BOM files return too many chars.

- Changed #968: AutoUpdateIt updated by ProgAndy to use new Inet features.

AU3Info:
- Added: Control information now includes the .NET WinForm if available.

UDFs:
- Fixed #979: _ArrayDisplay() - just old/incorrect syntax in header comment
- Fixed #974: _WinAPI_WindowFromPoint tagPoint structure
- Fixed #1000: _GUICtrlListBox_Create result error message _WinAPI_CreateWindowEx: Cannot find window class
- Fixed #1004: _PathFull() was returning invalid results.
- Fixed #1015: _SQLite_SaveMode() renamed as _SQLite_SafeMode(). (Thanks Zedna)
- Fixed #1019: _GUICtrlListView_SetItemCut, _GUICtrlListView_SetItemFocused, _GUICtrlListView_SetItemDropHilited enabled flag not working correctly.

- Changed: Error msg with UTF8 info can be displayed on Scite console. Extra parameter in _SQLite_Startup().
- Changed: _SQLite 3.6.14.1 -> 3.6.14.2

- Removed: _StringAddThousandsSep() has been removed. Too many opinions on how the function should work means nobody is happy with it.


Я думаю, что изменить под свои нужды труда не составит. У меня к тому же есть вещи, которые не нужны (переменная для немедленного завершения и получение исходного текста).

Кстати, а если есть некоторые вопросы, которые на отдельную тему не тянут... Куда их задавать? Всё равно тему создавать?

Creat0R 21-06-2009 12:57 1148090

Цитата:

Цитата Sylver Dragon
Всё равно тему создавать? »

Да.

sashadeg 22-06-2009 14:30 1148968

Цитата:

Цитата Creat0R
Интересно... А такая функция работает »

А у меня она вообще не запускается...

Creat0R 25-06-2009 17:12 1151574

Цитата:

Цитата sashadeg
у меня она вообще не запускается »

Это функция, её нужно вызвать ;)

sashadeg 26-06-2009 00:10 1151918

Цитата:

Цитата Creat0R
Это функция, её нужно вызвать »

ммм... а я думал это готовая...

zbruy 13-09-2009 16:32 1217949

Занятно, а я хотел по другому использовать этот скрипт, для перезвона при разрыве соединения. У меня adsl в сетевых подключениях есть автоматически созданное модемом(dsl-200, usb) соединение. Я просто сделал ярлык в автозапуск и поставил галку для перезвона при разрыве. То есть все само коненктится при включении или обрыве связи, но комп я гашу в спящий режим, и после его включения автозапуск само собой не срабатывает, ну и перезвон разрыва тоже. Идея такова, в этот скрипт
Код:

#include <Inet.au3>
$g_szVersion = "Script 1.0"
If WinExists($g_szVersion) Then Exit ; не дает запуска дубликата
AutoItWinSetTitle($g_szVersion)
While 1 = 1
If _GetIP()<>-1 Then
Sleep(5000)
Else
 RunWait(@COMSPEC ,"с\путь.....lnk")
EndIf
Wend

вбиваем возможность запуска ярлыка или нужного элемента папки сетевых поключений, проблема в том, что я не знаю как запустить ярлык, а RunWait(@COMSPEC ,"путь\....lnk") тоже не помогает

Iska 13-09-2009 16:53 1217959

Цитата:

но комп я гашу в спящий режим, и после его включения автозапуск само собой не срабатывает, ну и перезвон разрыва тоже.
zbruy, а что мешает там же подписаться и попутно следить за рассылаемыми сообщениями о смене режима энергопотребления?

zbruy 13-09-2009 16:59 1217962

Цитата:

zbruy, а что мешает там же подписаться и попутно следить за рассылаемыми сообщениями о смене режима энергопотребления?
не понял вопроса

Creat0R 13-09-2009 19:02 1218069

zbruy, Как ваш вопрос связан с данной темой?

zbruy 13-09-2009 19:54 1218114

Цитата:

zbruy, Как ваш вопрос связан с данной темой?
косвенно, вопрос по поводу расширения функционала прогресс бара=)

Creat0R 13-09-2009 20:37 1218139

Цитата:

Цитата zbruy
косвенно »

Косвенно могут быть связаны сотни друних тем, это не значит что нужно постить их тут. Создайте новую тему.

Sp01LeR 30-09-2009 15:26 1231253

Мне вот трудно понять, зачем вообще для функции "InetGetSize" ставить прогрес-бар - ведь она работает даже при плохой связи максимум 3-4 секунды:

Код:

While 1
        sleep(5000)
        $begin = TimerInit()
        $size1 = InetGetSize("http://www.ya.ru/")
        $dif = TimerDiff($begin)
        TrayTip("", "$dif="&Round($dif/1000, 3)&" сек."&@CR&"$size1="&$size1,6,1)
        If $size1 = 0 Then
                Else
                Beep(1000,100)
                MsgBox(64, "Yes or No Inet ?", _
                "Интернет РАБОТАЕТ =) Время подключения: " & @hour &":"& @min &":"&@sec)
                Exit
        EndIf
WEnd

Может топикстартер имел ввиду прогрес-бар для цикла While?


Время: 08:09.

Время: 08:09.
© OSzone.net 2001-