Войти

Показать полную графическую версию : Создание "Прогресса" на время работы "InetGetSize"


Страниц : [1] 2

sashadeg
18-06-2009, 17:43
Это программа проверяющая наличие интернета на компьютере... Для функции "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
Это программа проверяющая наличие интернета на компьютере... »
Если просто нужно проверить наличие инета, то можно попроще: #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
я то хочу полоску прогресса 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
А зачем прогресс для получения размера файла в сети? »
Просто если подключения нету, то этот файл в сети (типа "http://ya.ru/") возвратит значение 0 - то есть инета нет... Канешна через }|{0пу, но по другому я не мог догадаться, как проверить наличие интернета :)

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

_GetIP()<>-1 »
а это что такое? и как это работает?

Creat0R
19-06-2009, 15:37
Программа beve работает нормально »
Ну так используйте оттуда функцию проверки подключения (хотя странно что не работает, какое соеденение?), тема ведь не про это, а про создание прогресса :)

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

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

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

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

Creat0R
19-06-2009, 16:29
Можно сделать чтобы он бесконечно бегал (как у тебя, когда ждет "появления" инета) пока идет работа InetGetSize ? »
Можно. Поменять _InternetIsConnected на InetGetSize думаю не сложно? :)

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

вчера его пост видел на каком то английском форуме, полностью на английском языке 0_о »
У меня там вообще то около 2500 сообщении, полностью на Английском языке ;)

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

Creat0R
19-06-2009, 23:37
у тебя ведь он для того чтобы работал пока ждёт подключения... »
Мда...

#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

У меня твой пример постоянно показывает, что интернет работает, даже когда я отключил (Интернет 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
Интересно... А такая функция работает: »
Такая функция работает правильно.

SyDr
20-06-2009, 14:44
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
Sylver Dragon, Это в последней бета, на финалке оно работать не будет ;)

SyDr
21-06-2009, 09:26
В предпоследней тоже будет работать :)

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
Всё равно тему создавать? »
Да.

sashadeg
22-06-2009, 14:30
Интересно... А такая функция работает »
А у меня она вообще не запускается...

Creat0R
25-06-2009, 17:12
у меня она вообще не запускается »
Это функция, её нужно вызвать ;)

sashadeg
26-06-2009, 00:10
Это функция, её нужно вызвать »
ммм... а я думал это готовая...

zbruy
13-09-2009, 16:32
Занятно, а я хотел по другому использовать этот скрипт, для перезвона при разрыве соединения. У меня 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
но комп я гашу в спящий режим, и после его включения автозапуск само собой не срабатывает, ну и перезвон разрыва тоже.
zbruy, а что мешает там же подписаться и попутно следить за рассылаемыми сообщениями о смене режима энергопотребления?




© OSzone.net 2001-2012