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

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

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

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

Dima: [pre2] // в первом приближении hInternet := InternetOpen() if hInternet <> 0 // бла бла бла endif [/pre2] ps what32.lib

Andrey: Что-то не получается собрать.... Выдает кучу ошибок: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external 'InternetDial' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetGetConnectedState' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetOpenA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetConnectA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpOpenFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetWriteFile' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetReadFile' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpCommandA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpFindFirstFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetFindNextFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpGetFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpPutFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpCreateDirectoryA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpRemoveDirectoryA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpDeleteFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpRenameFileA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpGetCurrentDirectoryA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'FtpSetCurrentDirectoryA' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetCloseHandle' referenced from Z:\TEST\WHAT32.LIB|_WinINet Error: Unresolved external 'InternetAttemptConnect' referenced from Z:\TEST\WHAT32.LIB|_WinINet Что делать ?

Dima: Andrey пишет: Что делать ? Прилинкуй c:\bcc55\lib\wininet.lib


Andrey: Собрал прогу ! Фигня получается.... Пишет ВСЕГДА ЕСТЬ интернет !!! FUNCTION MAIN() LOCAL hInternet hInternet := InternetOpen() if hInternet <> 0 ? "Есть ИНТЕРНЕТ....." else ? "Нет ИНТЕРНЕТА....." endif ?? hInternet ? wait RETURN NIL Возвращает всегда "Есть ИНТЕРНЕТ..... 13369348" ?

Dima: Тогда вот так ;) ? InternetGetConnectedState()

Andrey: Dima пишет: Тогда вот так ;) ? InternetGetConnectedState() Возвращает .Т. даже когда подключена просто локальная сеть. Какие еще будут предложения ?

gfilatov: Andrey пишет: Какие еще будут предложения ? Посмотри рабочий пример из поставки МиниГУИ (папка samples\Advanced\Inet_Checker): // 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

Andrey: Спасибо Григорий !!! Чувствуется рука мастера .... Буду пробовать.....

Dima: Andrey пишет: Возвращает .Т. даже когда подключена просто локальная сеть. у меня возвращает .f. в этом случае

Andrey: Dima пишет: у меня возвращает .f. в этом случае У меня городская локальная сеть, и возвращает .T. даже если VPN-соединение отключено.

Andrey: Сделал програмку, как Григорий порекомендовал. Добавил к себе в проект cdll.c и hdll.prg FUNCTION MAIN() LOCAL lInet lInet := IsConnected() if lInet ? "Есть ИНТЕРНЕТ....." else ? "Нет ИНТЕРНЕТА....." endif wait RETURN NIL Если Интернет подключен, то быстро сообщает. А если его нет, то просто чума, программа минут 5 его ищет. Можно ли как нибудь ускорить этот процесс ?

Петр: Для Windows 2000 Professional, Windows 2000 Server, Windows XP, Windows Server 2003 можно использовать такую версию IsConnected() (не забываем подключить sensapi.lib ) #pragma BEGINDUMP #include "windows.h" #include "sensapi.h" #include "hbapi.h" HB_FUNC( ISCONNECTED ) { DWORD dwFlag; BOOL bRes = FALSE; if ( IsNetworkAlive(&dwFlag) && dwFlag & NETWORK_ALIVE_WAN ) { if( IsDestinationReachable("http://www.google.com", NULL) ) { bRes = TRUE; } } hb_retl( bRes ); } #pragma ENDDUMP

Andrey: Спасибо БОЛЬШОЕ Петр ! Твоя версия самая быстрая .... Выдает моментально ! Видать вызов DLL слишком медленный... Но вариант Григория все равно пригодиться для использования в других случаях.

Andrey: Возвращаюсь опять к этой теме ! Петр, не работает твой последний вариант !!! Исходник: FUNCTION MAIN() LOCAL lInet lInet := IsConnected() if lInet ? "Есть ИНТЕРНЕТ....." else ? "Нет ИНТЕРНЕТА....." endif wait RETURN NIL #pragma BEGINDUMP #include "windows.h" #include "sensapi.h" #include "hbapi.h" HB_FUNC( ISCONNECTED ) { DWORD dwFlag; BOOL bRes = FALSE; if ( IsNetworkAlive(&dwFlag) && dwFlag & NETWORK_ALIVE_WAN ) { if( IsDestinationReachable("http://www.google.com", NULL) ) { bRes = TRUE; } } hb_retl( bRes ); } #pragma ENDDUMP Сейчас у меня установлен роутер, так вот на нем возращает: ? "Нет ИНТЕРНЕТА....." Что делать ? Можно ли создать универсальный вариант: для VPN и для роутеров ?

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 И к нему еще нужно цеплять hdll.prg....

Dima: Andrey Функции IsNetworkAlive , IsDestinationReachable из какой оперы (библиотеки) ?

Andrey: Dima пишет: Функции IsNetworkAlive , IsDestinationReachable из какой оперы (библиотеки) ? Из sensapi.lib ! Ну обижаешь .... Уже выучился чуть-чуть.... Прицеплена к программе Петра ! Не писал бы об этом, если работало...

Dima: Andrey пишет: Из sensapi.lib Пардон , не заметил.

Pasha: Andrey пишет: Хочу сделать добавление в БАЗУ-LetoDB из локальной БАЗЫ с компьютера при появление интернет соединения ! Андрей, так ты эту функцию добавляешь в сервер letodb ?

Andrey: Pasha пишет: Андрей, так ты эту функцию добавляешь в сервер letodb ? Да хотел, потом передумал. Делаю отдельную программу для клиента, чтоб когда ИНЕТ включался, то на сервер копировались (синхронизировались) записи с клиента ! ИНЕТ же отрубается, а юзверу не объяснишь, что это не проблемы моей программы.



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