Автор | Сообщение |
|
| постоянный участник
|
Пост N: 790
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.02.09 18:04. Заголовок: Как узнать когда комп подключается к Инету !
Всем привет ! Подскажите пожалуйста: как написать прогу, которая бы отлавливала подключение к Инету ? Хочу сделать добавление в БАЗУ-LetoDB из локальной БАЗЫ с компьютера при появление интернет соединения ! Заранее спасибо.
|
|
|
Ответов - 38
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 1362
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.10 14:47. Заголовок: 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
| Так кто же поможет в этом нелегком деле ???
|
|
|
|
| |
Пост N: 1742
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.06.10 15:01. Заголовок: CallDll( <pFunct..
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
|
|
|
|
| постоянный участник
|
Пост N: 1363
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.10 16:32. Заголовок: Dima пишет: CallDll..
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 Там кол-во передаваемых параметров разное !
|
|
|
|
| |
Пост N: 13
Зарегистрирован: 16.12.08
|
|
Отправлено: 08.06.10 16:48. Заголовок: в xHarbour есть функ..
в xHarbour есть функция DllCall(), попробуй использовать её.
|
|
|
|
| постоянный участник
|
Пост N: 1364
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.10 17:38. Заголовок: santy пишет: в xHar..
santy пишет: цитата: | в xHarbour есть функция DllCall(), попробуй использовать её. |
| Вы меня извините, а мое предыдущее сообщение вы читали ? Или только заголовок начального сообщения ?
|
|
|
|
| постоянный участник
|
Пост N: 968
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.06.10 21:24. Заголовок: Это у меня Опера что..
Андрей, santy дал нормальный совет, в чем дело? #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
|
|
|
|
| постоянный участник
|
Пост N: 1365
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.06.10 21:35. Заголовок: Петр пишет: Андрей,..
Петр пишет: цитата: | Андрей, santy дал нормальный совет, в чем дело? |
| Так я и про это писал. По хелпу [CallDll( <pFunction> [,<xParams,...>] ) --> xResult] там 2 параметра, я же не знал, что можно больше ! До этого Дима мне про эту функцию написал, я ему написал про 2 параметра. А потом santy пишет что типа воспользуйся этой функцией ! Ну я уже про 2 параметра ему писать не стал ! Посчитал за повтор... Извини santy ! Спасибо Петр за исправленный исходник. Теперь мне понятно, как в таких случаях делать !
|
|
|
|
| постоянный участник
|
Пост N: 969
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.06.10 06:00. Заголовок: Andrey пишет: По хе..
Andrey пишет: цитата: | По хелпу [CallDll( <pFunction> [,<xParams,...>] ) --> xResult] там 2 параметра, я же не знал, что можно больше ! До этого Дима мне про эту функцию написал, я ему написал про 2 параметра. А потом santy пишет что типа воспользуйся этой функцией ! |
| Во первых CallDll функция с переменным числом аргументов и на это четко указывают три точки в определении функции; Во вторых CallDll и DllCall - это две разные функции.
|
|
|
|
| постоянный участник
|
Пост N: 1366
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.06.10 07:48. Заголовок: Петр пишет: и на эт..
Петр пишет: цитата: | и на это четко указывают три точки в определении функции; |
| Спасибо Петр ! Теперь буду знать ! Функцию твою вставил к себе в программу ! Работает !!!
|
|
|
|
| |
Пост N: 14
Зарегистрирован: 16.12.08
|
|
Отправлено: 09.06.10 11:41. Заголовок: Andrey пишет: Извин..
Andrey пишет: Пробежали
|
|
|
|
| постоянный участник
|
Пост N: 2917
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.07.13 20:17. Заголовок: Возник вопрос, по пр..
Возник вопрос, по проверке работоспособности сайта. Не долго думая, взял пример Григория из поставки МиниГУИ (папка samples\Advanced\Inet_Checker): и заменил адрес http://www.google.com на адрес проверяемого сайта. Если проверяемый сайт "лежит" (не открывается в браузере), то функция из примера IsConnected() все равно выдает .T. Что есть - неправильно. Какие есть еще варианты/функции проверки работоспособности сайта ?
|
|
|
|
|
| |
Пост N: 3324
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.07.13 20:49. Заголовок: Andrey пишет: Если ..
Andrey пишет: цитата: | Если проверяемый сайт "лежит" (не открывается в браузере) |
| Наводящий вопрос: пинг на "лежащий" сайт проходит нормально ? PS Вот такого сайта нет и что выдаст тест на него ? http://www.skdjhfksjdhfkjsd.com/
|
|
|
|
| постоянный участник
|
Пост N: 2918
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.07.13 21:21. Заголовок: Dima пишет: Наводящ..
Dima пишет: цитата: | Наводящий вопрос: пинг на лежащий сайт проходит нормально ? |
| Да ! Нормально. Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 6мсек, Максимальное = 7 мсек, Среднее = 6 мсек
|
|
|
|
| |
Пост N: 3325
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.07.13 21:26. Заголовок: Andrey А на тот что..
Andrey А на тот что в PS ?
|
|
|
|
| постоянный участник
|
Пост N: 2919
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.07.13 21:56. Заголовок: Dima пишет: Вот так..
Dima пишет: Переделанный пример (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
|
|
|
|
| |
Пост N: 3326
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.07.13 22:10. Заголовок: Ответ как бы сам нап..
Ответ как бы сам напрашивается. Надо анализировать HTML форму или что там на сайте. Пример есть тут Наверное (не уверен) но это самый правильный подход , ведь сайту могут и DDOS устроить , так что анализ не помешает.
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 21.04.13
|
|
Отправлено: 23.07.13 22:19. Заголовок: Все же уже есть - minigui\samples\basic\socket - TestHttp
Все же уже есть minigui\samples\basic\socket - TestHttp Если главная страница сайта прочитана и не пустая - сайт доступен.
|
|
|
|
| постоянный участник
|
Пост N: 2920
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.07.13 23:21. Заголовок: petr707 пишет: Все ..
petr707 пишет: То что надо ! "Подвисший" сайт выдает нулевую строку ! Спасибо !
|
|
|
Ответов - 38
, стр:
1
2
All
[только новые]
|
|