Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Вопрос по функции InetIsOffline   Найти похожие ветки 

 
Игорь   (2004-06-15 20:44) [0]

В Дайджест от 19.05.01 03:24 было выложено описание функии InetIsOffline:
******
Как проверить соединение с интернетом. (16.04.01 14:58)
Часто приложению, которое работает в интернете, требуется знать, подключён пользователь к интернету или нет. Предлагаю Вам довольно гибкое решение этого вопроса.
Совместимость: 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/

********

Попробовал в оффлайне. Результат: You are connected to Internet!
Подключился к Интернет. Результат: You are connected to Internet!

Далее попробовал заменить строку "if InetIsOffline(0) then" на "if not InetIsOffline(0)"

получилось все с точностью до наоборот:
в оффлайне: This computer is not connected to Internet!
в онлайне: This computer is not connected to Internet!

В чем смысл функции? Может кто объяснит?


 
Graber   (2004-06-17 02:21) [1]

Насколько я помню эта фцнкция коректно работает только под 98 Виновс.

Я тоде пытался определить подключение к интеренету и к меня не получалось даже под 98.

Можно использовать другой способ например попробовант зделать пинг на любой IP адрес или страничку


 
Cobalt ©   (2004-06-17 23:27) [2]

Такая вот мысль - при соединении с "интернетом" комп должени иметь реальный инетовский адрес (т.е. не адрес сети класса С).
Какие вообще есть методы подключения к "интернету":
1) Через прокси. Реальный Инет-адрес не требуется, т.к. его подставляет прокси-сервер. Но, полноценным соединением назвать это трудно, поскольку для соеджинения надо обязательно уметь работать через прокси.
2) Диалап, или VPN. Тут уже есть собственный сетевой интерфейс (надеюсь, ничего не напутал в терминологии?). Вот тут уже можно искать собственный "не локально-сетевой" адрес.

Что скажите?


 
Graber   (2004-06-18 01:37) [3]

Для проверки соединнения я использовал вот этот код. Функция проверяет наличие соединения с интернетом. Не дает информации о
действительной доступности сетевых ресурсов.
Для проверки доступности реурсов можно воспользоваться функцией CheckURL из
базы UBPFD или функцией CheckInetLink из базы UBPFD, которая выполняет обе
функции.
Функция возвращает
0 - если проверка показала отсутствие связи,
1 - если установлено модемное соединение,
2 - если установлено соединение через прокси.
Функция требует объявления типа в разделе interface модуля:
type ERasError = class(Exception);

function CheckInetConnect:byte;
const
 cERROR_BUFFER_TOO_SMALL = 603;
 cRAS_MaxEntryName = 256;
 cRAS_MaxDeviceName = 128;
 cRAS_MaxDeviceType = 16;
type
 HRASConn = DWord;
 PRASConn = ^TRASConn;
 TRASConn = record
              dwSize: DWORD;
              rasConn: HRASConn;
              szEntryName: array [0..cRAS_MaxEntryName] of Char;
              szDeviceType: array [0..cRAS_MaxDeviceType] of Char;
              szDeviceName: array [0..cRAS_MaxDeviceName] of char;
            end;
 TRasEnumConnections =
   function (RASConn: PrasConn; { buffer to receive Connections data }
             var BufSize: DWord; { size in bytes of buffer }
             var Connections: DWord { number of Connections written to
                                      buffer }
             ): LongInt; stdcall;

//---------------------------------------

function RasConnectionCount : Integer;
var
 RasDLL: HInst;
 Conns: array [1..4] of TRasConn;
 RasEnums: TRasEnumConnections;
 BufSize: DWord;
 NumConns: DWord;
 RasResult: Longint;
begin
Result:= 0;
// Загрузка библиотеки
RasDLL:= LoadLibrary("rasapi32.dll");
if RasDLL = 0 then exit;
try
 RasEnums:= GetProcAddress(RasDLL,"RasEnumConnectionsA");
 if @RasEnums = nil then
   raise ERasError.Create
    ("Ошибка вызова функции RasEnumConnectionsA из rasapi32.dll");
 Conns[1].dwSize:= Sizeof (Conns[1]);
 BufSize:= SizeOf(Conns);
 RasResult:= RasEnums(@Conns, BufSize, NumConns);
 If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then
  Result:=NumConns;
finally
 FreeLibrary(RasDLL);
end;

end;

//---------------------------------------

var
 Reg : TRegistry;
 bUseProxy : Boolean;
 UseProxy : LongWord;

begin
Result:= 0;
Reg:= TRegistry.Create;
with REG do
try
 try
   RootKey:= HKEY_CURRENT_USER;
   if OpenKey("\Software\Microsoft\Windows\CurrentVersion\Internet Settings",
    False) then begin
     // Пробуем прочитать и ловим ошибку
     if GetDataType("ProxyEnable") = rdBinary then
     ReadBinaryData("ProxyEnable", UseProxy, SizeOf(LongWord)) else
     begin
       bUseProxy:= ReadBool("ProxyEnable");
       if bUseProxy then UseProxy:= 1 else UseProxy:= 0;
     end;
     if (UseProxy <> 0) and (ReadString("ProxyServer") <> "" ) then Result:= 2;
   end;
 except
   // Вероятно, нет связи через прокси
 end;
finally
Free;
end;
// Мы можем проверять(отмечать) RasConnectionCount, даже если работа с сетями
// телефонного вызова не установлена просто, потому что это возвратится 0,
// если DLL не найден.
if Result = 0 then
begin
 if RasConnectionCount > 0 then Result:= 1;
end;

end;

Удачи!!!



Страницы: 1 вся ветка

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1091173196
Прог
2004-07-30 11:39
2004.08.15
Indy и кодировка


3-1090240496
Aslan
2004-07-19 16:34
2004.08.15
Как с помощью SQL добавить данные в поле типа Memo?


11-1060280346
BelchonokH
2003-08-07 22:19
2004.08.15
У кого -нибудь есть компонент для работы UDP протоколом?


1-1091188614
dprimakov
2004-07-30 15:56
2004.08.15
Видеопамять


1-1091092138
Dmirty
2004-07-29 13:08
2004.08.15
Изменение ширины кнопок вместе с шириной строк в StringGrid-е