Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
Эта проблема решается комплексно.
Во-первых, надо определить тип соединения (Постоянное(LAN) и коммутируемое (Dial-Up)).
В зависимости от этого действовать по разному. Для постоянного соединения можно что-ли пропинговать.
Для dial-up сложнее. В Explorer может быть выставлен флаг, что предлагать законектится при первом обращении к Internet. Там надо действовать как-то по другому....
Да ещё и файрволы по пути могут попаться
Я не даю точного ответа, т.к. незнаю его сам. Я всего лишь хочу сказать, что это достаточно сложная задача.
P.S. Если мне не изменяет склероз, то подобная проблема частично (или полностью) решена в продуктах комании ztrace (www.ztrace.com)
G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
Попробуй воспользоваться следующим:
--- cut --- InternetGetConnectedState Function
Retrieves the connected state of the local system.
lpdwFlags
[out] Pointer to an unsigned long integer variable where the connection description should be returned. This can be a combination of the following values:
INTERNET_CONNECTION_CONFIGURED
Local system has a valid connection to the Internet, but it may or may not be currently connected.
INTERNET_CONNECTION_LAN
Local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_MODEM
Local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_MODEM_BUSY
No longer used.
INTERNET_CONNECTION_OFFLINE
Local system is in offline mode.
INTERNET_CONNECTION_PROXY
Local system uses a proxy server to connect to the Internet.
INTERNET_RAS_INSTALLED
Local system has RAS installed.
dwReserved
[in] Reserved. Must be set to zero.
Return Value
Returns TRUE if there is an Internet connection, or FALSE otherwise.
Function Information
Stock Implementation wininet.dll
Custom Implementation No
Header Wininet.h
Import library Wininet.lib
Minimum availability Internet Explorer 4.0
Minimum operating systems Windows NT 4.0, Windows 95, Windows CE 2.12
G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
Вообще-то в ICQ эта задача на самом деле не решена. ICQ требует сначала задать тип подключения — LAN или Dial-Up.
Для LAN она вообще не мониторит соединение, для Dial-Up можно юзать функции типа RASEnumConnections и RASGetConnectionStatus.
Чтобы проверить, есть ли реальное подключение к интету, все равно придется обращаться к какому-нибудь ресурсу, т.к. и LAN и dial-up могут быть локальными.
Здравствуйте TSS, Вы писали:
TSS>Здравствуйте Gambler, Вы писали:
G>>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
G>>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
TSS>Попробуй воспользоваться следующим: TSS>--- cut --- TSS>InternetGetConnectedState Function
TSS>Retrieves the connected state of the local system.
К сожалению, она не всегда работает. Это здесь (кажется) уже обсуждалось.
G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало
G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?"
Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
Реализация пинга где-то на этом форуме проскакивала.
KK>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?" KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
KK>Реализация пинга где-то на этом форуме проскакивала.
Если Dial-Up и стоит автопоключении к Internet, то при потытке пинговать выскочит окошечко от Explorer
Тут, как я понял, стоит задача сделать всё незаменто. Только вот где это может пригодится ,
если что-то делается в тайне от пользователя ?
G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало :)
G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
Для nt/2000
ipconfig /all
если что-то скажет — а потом сам додумаешь =)
G>>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя? L>Для nt/2000 L>ipconfig /all L>если что-то скажет — а потом сам додумаешь =)
Т.е. предлагается забрать output отпарсить его и т.д.?
Вот спасибо, до этого бы уж точно не додумался
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Здравствуйте KoraK, Вы писали:
KK>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?" KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
Только тут есть одно НО — ping может не сработать, если ему дали неверный адрес, например в адресе www.microsoft.com забыли букву "t".
Или если пингуемый сервер отключен, или недоступен по какой-то еще другой причине. Короче говоря, ping вернет ошибку, но это НЕ означает, что Интернет недоступен.
Здравствуйте nikita1, Вы писали:
N>Здравствуйте KoraK, Вы писали:
KK>>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?" KK>>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер. N>Только тут есть одно НО — ping может не сработать, если ему дали неверный адрес, например в адресе www.microsoft.com забыли букву "t". N>Или если пингуемый сервер отключен, или недоступен по какой-то еще другой причине. Короче говоря, ping вернет ошибку, но это НЕ означает, что Интернет недоступен.
А что значит "Интернет недоступен"? Это что за зверь такой ? Может быть недоступен один из серверов интернета (в том числе и сервер провайдера). Ну а в интернет лезут обычно с в полне определенными целями, а значит на вполне определенный адрес.
Здравствуйте KoraK, Вы писали:
KK>Здравствуйте Gambler, Вы писали:
KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
KK>Реализация пинга где-то на этом форуме проскакивала.
А если стоит FireWall то пингом ты неичего не добъешься... Фигу тебе ответ прийдет.
----------------------
Одно из свойств человеческого ума состоит в том, что, сталкиваясь с противоречием, он не может оставаться пассивным.
Э. Фромм.
TSS>>Попробуй воспользоваться следующим: TSS>>InternetGetConnectedState Function TSS>>Retrieves the connected state of the local system. V>К сожалению, она не всегда работает. Это здесь (кажется) уже обсуждалось.
Есть еще такая функция (но мне неизвестно, насколько хорошо она работает) :
InetIsOffline
Determines whether or not the system is connected to the Internet.
BOOL InetIsOffline(
DWORD dwFlags,
);
Parameters
dwFlags
Input flags for the function. This must be set to zero.
Return Value
Returns TRUE if the local system is not currently connected to the Internet. Returns FALSE if the local system is connected to the Internet or if no attempt has yet been made to connect to the Internet.
Requirements
Version 4.00 and later of Shell32.dll
Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98/Me: Requires Windows 95 or later.
Header: Declared in intshcut.h.