Delphi - определить подключение к Интернету.

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Delphi - определить подключение к Интернету.

Re: Delphi - определить подключение к Интернету.

Ardatov » 11 янв 2010, 23:36

Подключите модуль WinInet, добавте следующую функцию:
function IsConnectedToInternet: Boolean;
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsConnectedToInternet then ShowMessage('online') else ShowMessage('offline');
end;

Re: Delphi - определить подключение к Интернету.

Snake-ssr » 04 дек 2009, 15:59

Вот это должно работать



uses
windows,
registry,
ShellAPI,
SysUtils,
Psapi,
tlhelp32,
Messages,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
shlObj, activeX, filectrl, comObj,WinSock,mshtml, WinINet,OleCtrls, SHDocVw, HTTPApp, HTTPProd,
ComCtrls,ExtCtrls;

var
WebBrowser1:TWebBrowser;
HTMLDocument: IHTMLDocument2;
htm:String;
neton:boolean;

function RealOnline:boolean;



function base:boolean;
begin
WebBrowser1:=TWebBrowser.Create(WebBrowser1);
if htm<>'http://www.ya.ru/' then WebBrowser1.Navigate('www.ya.ru');
if htm<>'http://www.yandex.ru/' then WebBrowser1.Navigate('www.yandex.ru');
htm:='';
while Webbrowser1.ReadyState <> READYSTATE_INTERACTIVE do
application.ProcessMessages;

HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
htm:=HTMLDocument.url;
if (htm='http://www.ya.ru/') or (htm='http://www.yandex.ru/') then neton:=true else neton:=false;

end;


function RealOnline:boolean;
begin
base;
HTMLDocument:=nil;
result:=neton;
end;

Re: Delphi - определить подключение к Интернету.

MOTOCoder » 31 мар 2008, 18:31

AiK писал(а):Не бывает в природе "чисто дельфийских" (равно как и сишных или же ассемблерных) решений для системных событий. Бывают только обёртки. Впрочем, это уже на оффтоп похоже :)
Под "чисто дельфийским" подходом я подразумеваю, например, какой-нибудь компонент, а в WinApi мне скорее всего просто сказали бы, что такого системного события нет.

Re: Delphi - определить подключение к Интернету.

AiK » 31 мар 2008, 18:27

Не бывает в природе "чисто дельфийских" (равно как и сишных или же ассемблерных) решений для системных событий. Бывают только обёртки. Впрочем, это уже на оффтоп похоже :)

Re: Delphi - определить подключение к Интернету.

MOTOCoder » 31 мар 2008, 18:21

Я задавал вопрос в этом разделе, так как писал именно на Delphi, к тому же я не исключал вариант, что есть "чисто дельфовский" подход к решению этой проблемы.

Re: Delphi - определить подключение к Интернету.

AiK » 31 мар 2008, 18:18

Requirements
Client Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server 2008, Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.
Version Requires Internet Explorer 4.0 or later.
Header

Declared in Wininet.h.
Library

Use Wininet.lib.
DLL

Requires Wininet.dll.
На мой взгляд это всё к вопросу о кураторстве. Вопрос системный и его задавать логично было в разделе WinAPI etc.

Re: Delphi - определить подключение к Интернету.

MOTOCoder » 31 мар 2008, 18:06

AiK писал(а):InternetGetConnectedState ?
Во-первых вопрос, из какого модуля эта функция? Я такой что-то не нашел.
Во-вторых, я просто думал, что "умные" программеры MS предусмотрели какой-нибудь способ оповещения приложений о подключении к интернету(типа как оповещение всех окон о завершении работы), а так все равно предется вызывать функцию по таймеру.

Re: Delphi - определить подключение к Интернету.

AiK » 31 мар 2008, 18:00

InternetGetConnectedState ?

Re: Delphi - определить подключение к Интернету.

MOTOCoder » 07 фев 2008, 12:59

Хыиуду писал(а):А если тупо раз в десять секунд пинговать яндекс?
Пытался делать примерно так, выполнял по таймеру такой код:
[syntax='delphi']
function CheckRASConnections: string;
const
MaxEntries = 100;
var
BufSize: Integer;
NumEntries: Integer;
Entries: array[1..MaxEntries] of TRasConn;
begin
Entries[1].dwSize := SizeOf(TRasConn);
Bufsize := SizeOf(TRasConn) * MaxEntries;
RasEnumConnections(@Entries[1], BufSize, NumEntries);
if numentries > 0 then
result := strpas(@Entries[1].szEntryName)
else
Result := 'Disconnected';
end;
[/syntax]

Просто думал, что есть более рациональный способ.

Вернуться к началу