Форум » [x]Harbour » Как узнать когда комп подключается к Инету ! » Ответить

Как узнать когда комп подключается к Инету !

Andrey: Всем привет ! Подскажите пожалуйста: как написать прогу, которая бы отлавливала подключение к Инету ? Хочу сделать добавление в БАЗУ-LetoDB из локальной БАЗЫ с компьютера при появление интернет соединения ! Заранее спасибо.

Ответов - 38, стр: 1 2 All

Andrey: Andrey пишет: Вариант Григория из МиниГУИ (папка samples\Advanced\Inet_Checker) работает сейчас быстро и правильно, но портировать код на хХарбор не могу. Можно ли заменить вызов CallDll32() на CallDll() из хХарбора ? и как тогда будет выглядеть код ? Программа Григория: FUNCTION MAIN() LOCAL lInet lInet := IsConnected() if lInet ? "Есть ИНТЕРНЕТ....." else ? "Нет ИНТЕРНЕТА....." endif wait RETURN NIL // Flags for InternetGetConnectedState and Ex #define INTERNET_CONNECTION_MODEM 1 #define INTERNET_CONNECTION_LAN 2 #define INTERNET_CONNECTION_PROXY 4 #define INTERNET_CONNECTION_MODEM_BUSY 8 /* no longer used */ #define INTERNET_RAS_INSTALLED 16 #define INTERNET_CONNECTION_OFFLINE 32 #define INTERNET_CONNECTION_CONFIGURED 64 // Flag for InternetCheckConnection #define FLAG_ICC_FORCE_CONNECTION 1 *--------------------------------------------------------* Function IsConnected() *--------------------------------------------------------* local nFlags := 0, lRet := .f. if CallDll32( "InternetGetConnectedState", "WININET.DLL", @nFlags, 0 ) == 1 if CallDll32( "InternetCheckConnection", "WININET.DLL", "http://www.google.com", ; FLAG_ICC_FORCE_CONNECTION, 0 ) == 1 lRet := .t. endif endif RETURN lRet Так кто же поможет в этом нелегком деле ???

Dima: CallDll( <pFunction> [,<xParams,...>] ) --> xResult // The example implements a simple command line utility // that opens a file using the associated file viewer. PROCEDURE Main( cFile ) LOCAL nDll, pFunc IF cFile == NIL .OR. .NOT. File( cFile ) CLS ? "File name must be specified" QUIT ENDIF nDll := DllLoad( "Shell32.dll" ) pFunc := GetProcAddress( nDll, "ShellExecute" ) ? CallDll( pFunc, 0, "open", cFile, NIL, NIL, 1 ) DllUnload( nDll ) RETURN

Andrey: Dima пишет: CallDll( <pFunction> [,<xParams,...>] ) --> xResult Так это кусок из Хелпа.... А мне вот это переделать нужно: if CallDll32( "InternetGetConnectedState", "WININET.DLL", @nFlags, 0 ) == 1 if CallDll32( "InternetCheckConnection", "WININET.DLL", "http://www.google.com", ; FLAG_ICC_FORCE_CONNECTION, 0 ) == 1 lRet := .t. endif endif Там кол-во передаваемых параметров разное !


santy: в xHarbour есть функция DllCall(), попробуй использовать её.

Andrey: santy пишет: в xHarbour есть функция DllCall(), попробуй использовать её. Вы меня извините, а мое предыдущее сообщение вы читали ? Или только заголовок начального сообщения ?

Петр: Андрей, santy дал нормальный совет, в чем дело? [pre2] #define DC_CALL_STD 0x0020 #define INTERNET_CONNECTION_MODEM 1 #define INTERNET_CONNECTION_LAN 2 #define INTERNET_CONNECTION_PROXY 4 #define INTERNET_RAS_INSTALLED 16 #define INTERNET_CONNECTION_OFFLINE 32 #define INTERNET_CONNECTION_CONFIGURED 64 // Flag for InternetCheckConnection #define FLAG_ICC_FORCE_CONNECTION 1 proc main() local nFlags := 0 local lRet := .f. if DllCall( "WININET.DLL", DC_CALL_STD, "InternetGetConnectedState", @nFlags, 0 ) == 1 if DllCall( "WININET.DLL", DC_CALL_STD, "InternetCheckConnection", "http://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0 ) == 1 lRet := .t. endif endif ? lRet return[/pre2]

Andrey: Петр пишет: Андрей, santy дал нормальный совет, в чем дело? Так я и про это писал. По хелпу [CallDll( <pFunction> [,<xParams,...>] ) --> xResult] там 2 параметра, я же не знал, что можно больше ! До этого Дима мне про эту функцию написал, я ему написал про 2 параметра. А потом santy пишет что типа воспользуйся этой функцией ! Ну я уже про 2 параметра ему писать не стал ! Посчитал за повтор... Извини santy ! Спасибо Петр за исправленный исходник. Теперь мне понятно, как в таких случаях делать !

Петр: Andrey пишет: По хелпу [CallDll( <pFunction> [,<xParams,...>] ) --> xResult] там 2 параметра, я же не знал, что можно больше ! До этого Дима мне про эту функцию написал, я ему написал про 2 параметра. А потом santy пишет что типа воспользуйся этой функцией ! Во первых CallDll функция с переменным числом аргументов и на это четко указывают три точки в определении функции; Во вторых CallDll и DllCall - это две разные функции.

Andrey: Петр пишет: и на это четко указывают три точки в определении функции; Спасибо Петр ! Теперь буду знать ! Функцию твою вставил к себе в программу ! Работает !!!

santy: Andrey пишет: Извини santy ! Пробежали

Andrey: Возник вопрос, по проверке работоспособности сайта. Не долго думая, взял пример Григория из поставки МиниГУИ (папка samples\Advanced\Inet_Checker): и заменил адрес http://www.google.com на адрес проверяемого сайта. Если проверяемый сайт "лежит" (не открывается в браузере), то функция из примера IsConnected() все равно выдает .T. Что есть - неправильно. Какие есть еще варианты/функции проверки работоспособности сайта ?

Dima: Andrey пишет: Если проверяемый сайт "лежит" (не открывается в браузере) Наводящий вопрос: пинг на "лежащий" сайт проходит нормально ? PS Вот такого сайта нет и что выдаст тест на него ? http://www.skdjhfksjdhfkjsd.com/

Andrey: Dima пишет: Наводящий вопрос: пинг на лежащий сайт проходит нормально ? Да ! Нормально. Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 6мсек, Максимальное = 7 мсек, Среднее = 6 мсек

Dima: Andrey А на тот что в PS ?

Andrey: Dima пишет: Вот такого сайта нет и что выдаст тест на него ? http://www.skdjhfksjdhfkjsd.com/ Переделанный пример (samples\Advanced\Inet_Checker) - выдает .F. Мой "висящий" сайт - выдает .T. Пример короткий: FUNCTION MAIN(cSite) LOCAL lInet lInet := IsConnectedInet(cSite) ? cSite if lInet ? "Yes INTERNET....." else ? "No internet....." endif ? wait RETURN NIL #define DC_CALL_STD 0x0020 #define INTERNET_CONNECTION_MODEM 1 #define INTERNET_CONNECTION_LAN 2 #define INTERNET_CONNECTION_PROXY 4 #define INTERNET_RAS_INSTALLED 16 #define INTERNET_CONNECTION_OFFLINE 32 #define INTERNET_CONNECTION_CONFIGURED 64 // Flag for InternetCheckConnection #define FLAG_ICC_FORCE_CONNECTION 1 FUNCTION IsConnectedInet(cSite) local nFlags := 0 local lRet := .f. if DllCall( "WININET.DLL", DC_CALL_STD, "InternetGetConnectedState", @nFlags, 0 ) == 1 if DllCall( "WININET.DLL", DC_CALL_STD, "InternetCheckConnection", cSite, FLAG_ICC_FORCE_CONNECTION, 0 ) == 1 lRet := .t. endif endif Return lRet Только нужно указать для сборки calldll.lib

Dima: Ответ как бы сам напрашивается. Надо анализировать HTML форму или что там на сайте. Пример есть тут Наверное (не уверен) но это самый правильный подход , ведь сайту могут и DDOS устроить , так что анализ не помешает.

petr707: Все же уже есть minigui\samples\basic\socket - TestHttp Если главная страница сайта прочитана и не пустая - сайт доступен.

Andrey: petr707 пишет: Все же уже есть То что надо ! "Подвисший" сайт выдает нулевую строку ! Спасибо !



полная версия страницы