|
|
|
|
Как
проверить соединение с интернетом.
Часто приложению, которое работает в интернете, требуется знать,
подключён пользователь к интернету или нет. Предлагаю Вам довольно гибкое
решение этого вопроса. Совместимость: Delphi 3.x (или выше)
Для
работы Вам необходимо импортировать функцию InetIsOffline из URL.DLL:
function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';
а
затем поместить в программу простой вызов функции для проверки статуса
соединения:
if InetIsOffline(0) then ShowMessage('This computer is not connected to Internet!') else ShowMessage(You are connected to Internet!');
Эта
функция возвращает TRUE если соединение с интернетов отсутствует, или FALSE
если соединение установлено.
Замечание: параметр Flag
игнорируется, соответственно используем ноль. Эта DLL обычно
проинсталлирована на большинстве компьютеров. Она также существует в Win98
либо поставляется с Internet Explorer 4 или выше, Office 97 и т.д..
Более подробно можно прочитать в MSDN. Оригинал: http://msdn.microsoft.com/library/psdk/shellcc/shell/Functions/InetIsOffline.htm
Автор:
Vitaly Zayko (zayko@vitsoftware.com) Источник:
http://www.sources.ru/delphi/
Комментарий от Ефремова Александра
(aleks@vilgus.kamchatka.ru) Зашел на официальный сайт Microsoft по MSDN
где черным по белому написано, что функция эта выдает
false не только, когда комп подключен к интернету, но и когда ЕЩЕ НЕ БЫЛО
ПОПЫТОК подключения (or if no attempt has yet been made to connect to the
Internet). Ну и скажите мне теперь, какой у этой функции тогда смысл ? Да,
умом Microsoft не понять (к сожалению). Помогите найти нормальный способ
проверки подключения к инет (online).
Merlin: самым нормальны, мне
кажется, пинговать какой-то адрес в интернете, лучше два :) но это тоже
связано с проблемой, что может запускаться установка связи, когда не
надо.
Комментарий от Dmitry Shkil (Mitya@bigmir.net) ShkilSoft
interface uses Windows; { Flags for InternetGetConnectedState } const INTERNET_CONNECTION_MODEM = 1; INTERNET_CONNECTION_LAN = 2; INTERNET_CONNECTION_PROXY = 4; INTERNET_CONNECTION_MODEM_BUSY = 8; const winetdll = 'wininet.dll'; function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved: DWORD):BOOL; stdcall; external winetdll name 'InternetGetConnectedState'; implementation
function InternetConnected: Boolean; var dwConnectionTypes: DWORD; begin dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY; Result := InternetGetConnectedState(@dwConnectionTypes, 0); end;
Хотя возможно через RAS API. Компоненты можно поискать на
www.torry.net
Kondakov (owl@conecs.lviv.ua) Я попробовал это на основе предложения
Dmitriya Работает вроде. . Через Button or Activate
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
const IC_Modem=1; IC_LAN= 2; IC_PROXY=3; IC_MODEM_BUSY=4; winetdll='wininet.dll';
type TForm1 = class(TForm) Button1: TButton;
procedure CheckState(Sender: TObject); end;
var Form1: TForm1;
implementation
function InternetGetConnectedState(lpdwFlags:LPDWORD;
dwReserved: DWORD): BOOLEAN; stdcall; external winetdll name 'InternetGetConnectedState';
{$R *.DFM}
procedure TForm1.CheckState(Sender: TObject); var dwConnectionTypes: DWORD; begin dwConnectionTypes:=IC_MODEM+IC_LAN+IC_PROXY; if InternetGetConnectedState(@dwConnectionTypes,0) then ShowMessage('Youa connected') else ShowMessage('No Connection'); end;
end.
Комментарий от "Vladimir Artemov" Из MSDN: You cannot rely solely
on the fact that InternetGetConnectedState returning TRUE means that you
have a valid active Internet connection. It is impossible for
InternetGetConnectedState to determine if the entire connection to the
Internet is functioning without sending a request to a server. This is why
you need to send a request to determine if you are really connected or not.
You can be assured however that if InternetGetConnectedState returns TRUE,
that attempting your connection will NOT cause you to be prompted to connect
to the default Internet Service Provider.
Ну не получится таким
образом ДОСТОВЕРНО проверить! Надо либо подключаться, либо пинговать.
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|