Текущий архив: 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.48 MB
Время: 0.029 c