Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 172

/ вопрос открыт /

Здравствуйте!
Подскажите, нужно программно узнать есть ли соеденения с интернетом или нету, как это сделать ?

niva622 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: niva622 (статус: Посетитель)
Вопрос отправлен: 16 мая 2010, 18:17
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: ast

Здравствуйте, niva622!

function IsConnectedToInternet(lpdwFlags: LPDWORD): Boolean;
const
WininetDLL = 'wininet.dll';
var
hWininetDLL: THandle;
dwReserved: DWORD;
fn_InternetGetConnectedState: function(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall;
begin
Result := False;
dwReserved := 0;
hWininetDLL := LoadLibrary(WininetDLL);
if hWininetDLL > 0 then
begin
@fn_InternetGetConnectedState := GetProcAddress(hWininetDLL,'InternetGetConnectedState');
if Assigned(fn_InternetGetConnectedState) then
begin
Result := fn_InternetGetConnectedState(lpdwFlags, dwReserved);
end;
FreeLibrary(hWininetDLL);
end else
raise Exception.Create('Unable to locate function InternetGetConnectedState in library ' + WininetDLL);

end;

procedure TForm1.Button1Click(Sender: TObject);
const
INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if IsConnectedToInternet(@dwConnectionTypes) then
ShowMessage('Connected.')
else
ShowMessage('Not Connected.')
end;

Ответ отправил: ast (статус: 1-ый класс)
Время отправки: 20 мая 2010, 09:05
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 21 мая 2010, 14:27; участников в обсуждении: 4.
Death_Master

Death_Master (статус: Посетитель), 16 мая 2010, 18:28 [#1]:

Всё очень просто.... нужно пропинговать пару адресов
8.8.8.8 4.2.2.4
Если пакеты прошли, значит интернет есть...
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
niva622

niva622 (статус: Посетитель), 16 мая 2010, 18:32 [#2]:

можно весь код написать.. как пропинговать сеть ?
Death_Master

Death_Master (статус: Посетитель), 16 мая 2010, 18:55 [#3]:

http://slil.ru/29142454 -- только пинг
http://www.projectindy.org/DemoDownloads/Indy9Demos_26Oct04.zip - все демки indy
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
niva622

niva622 (статус: Посетитель), 16 мая 2010, 19:02 [#4]:

спасибо...
Вадим К

Вадим К (статус: Академик), 16 мая 2010, 20:48 [#5]:

В целом, пинг - это ещё не достаточно. Может днс не работать. А может и он работать, но интернета "не будет". А кому то если Вконтакт не работает, то всё, интернет не работает. Поэтому обычно нужно проверять целенаправленно нужные сайты - просто скачать заглавную страницу.
Галочка "подтверждения прочтения" - вселенское зло.
Death_Master

Death_Master (статус: Посетитель), 16 мая 2010, 21:01 [#6]:

Вадим К: В моём предложении пингуются 2 мировые ДНСки....
Я думаю, что мало шансов с нерабочим интернетом до них достучаться....
Вопрос был по проверке работы подключения к интернету, а не к каким-то конкретным сайтам...
Вероятность, что обе ДНСки лягут одновременно- практически нулевая....
В общем-то можно проверять и несколькими способами, но нужны ли человеку лишние сложности?
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
Вадим К

Вадим К (статус: Академик), 16 мая 2010, 21:10 [#7]:

есть куча способов, когда все сервера будут пинговаться, а ни одна страница не откроется (например провайдерский днс упал - вполне типичная ситуация). И для человека это будет отсутствие интернета. Подумайте об этом.
А может быть по другому. Ни одна машина не будет пинговаться. А интернет будет. И таких ситуаций тоже много. Например хитрая прокся.
Галочка "подтверждения прочтения" - вселенское зло.

17 мая 2010, 13:02: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А.

Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 18 мая 2010, 08:50 [#8]:

Кстати Windows 7 более-менее достоверно определяет наличие подключения к и-нету, интересно, как это сделано?
Вадим К

Вадим К (статус: Академик), 18 мая 2010, 10:31 [#9]:

Подозреваю, что просто ходит на сайт майкрософта и пробует скачать оттудова заведомо известные файлы.
Также мне точно известно, что Виста и старше умеют определять роутер и забирать с него настройки. Это иногда сильно упрощает жизнь. Хотя подключаться к WiFi в некоторых случаях так и не научилась, тогда когда все другие устройства и операционные системы с пол пинка:) (у меня на работе такая ситуация, Линукс, Мак, Андроид, Айфон, Нокии подключаются моментально. А все Windows'ы нужно зайти ручками и поправить настройку).
Галочка "подтверждения прочтения" - вселенское зло.
niva622

niva622 (статус: Посетитель), 21 мая 2010, 14:27 [#10]:

всем спасибо

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.