Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"ТИХАЯ" проверка коннекта [D5, D7, Win95/98, WinXP]


maxistent ©   (2004-09-16 11:05:00) 

Дарова, человеки!!! Буду чрезмерно рад, если Вы поможете с вопросом: как можно "ТИХО" (без лишнего шума и пыли) проверить коннект с ИНЕТОМ? Т.е. прога не должна задавать НИКАКИХ вопросов! Просто проверить - есть коннект, значит есть, нет - значит нет. ???


maxistent   (2004-09-21 17:02:00) [1]

Ну Вы ещё подеритесь, горячие финские парни! Я ж сказал: РАССЛАБЬТЕСЬ!!!:)


Digitman   (2004-09-21 13:22:00) [2]


> Samowar ©   (21.09.04 03:38) [7]


> Про какую ПОЛЬ ты говориш? Если ты имел ввиду моль, то


слушай-ка, клоун, ты очевидно попросту не понимаешь, что некое удаленное соединение с неким компьютером не обязательно есть соединение с компьютером инет-провайдера...

а даже если этот комп и есть комп в сети провайдера, то это отнюдь не значит, что провайдер обязан выполнять любые твои запросы на доступ к любым иным хостам за пределами его, провайдера, подсети


Reindeer Moss Eater   (2004-09-21 08:36:00) [3]

Чушь какая.
Установил сейчас соединение с домашним компьютером и мне эта чушь сказала, что я "соединился с интернет".


Samowar   (2004-09-21 03:38:00) [4]

> выполняющим поль сервера удал.доступа

Про какую ПОЛЬ ты говориш? Если ты имел ввиду моль, то она живёт в твоём шкафу и уже доедает твою шубу и ничего общего с коннектом не имеет.

Давненько я небыл на этом сайте, вижу на вопросы совсем разучились отвечать, зато как остроумно до слов придераться стали.

Часто приложению, которое работает в интернете, требуется знать, подключён пользователь к интернету или нет. Предлагаю Вам довольно гибкое решение этого вопроса.

Совместимость: 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
Взято с Исходников.ru http://www.sources.ru/delphi_src1.shtml

----------------------------------------------------------------

interface  

uses  
 Windows, SysUtils, Registry, WinSock, WinInet;  

type  
 TConnectionType = (ctNone, ctProxy, ctDialup);  

function ConnectedToInternet: TConnectionType;  
function RasConnectionCount: Integer;  

implementation  

//For RasConnectionCount =======================  
const  
 cERROR_BUFFER_TOO_SMALL = 603;  
 cRAS_MaxEntryName       = 256;  
 cRAS_MaxDeviceName      = 128;  
 cRAS_MaxDeviceType      = 16;  
type  
 ERasError = class(Exception);  

 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;  
 //End RasConnectionCount =======================  

function ConnectedToInternet: TConnectionType;  
var  
 Reg:       TRegistry;  
 bUseProxy: Boolean;  
 UseProxy:  LongWord;  
begin  
 Result := ctNone;  
 Reg    := TRegistry.Create;  
 with REG do  
   try  
     try  
       RootKey := HKEY_CURRENT_USER;  
       if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet settings', False) then  
       begin  
         //I just try to read it, and trap an exception  
         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 := ctProxy;  
       end;  
     except  
       //Obviously not connected through a proxy  
     end;  
   finally  
     Free;  
   end;  

 //We can check RasConnectionCount even if dialup networking is not installed  
 //simply because it will return 0 if the DLL is not found.  
 if Result = ctNone then  
 begin  
   if RasConnectionCount > 0 then Result := ctDialup;  
 end;  
end;  

function RasConnectionCount: Integer;  
var  
 RasDLL:    HInst;  
 Conns:     array[1..4] of TRasConn;  
 RasEnums:  TRasEnumConnections;  
 BufSize:   DWORD;  
 NumConns:  DWORD;  
 RasResult: Longint;  
begin  
 Result := 0;  

 //Load the RAS DLL  
 RasDLL := LoadLibrary('rasapi32.dll');  
 if RasDLL = 0 then Exit;  

 try  
   RasEnums := GetProcAddress(RasDLL, 'RasEnumConnectionsA');  
   if @RasEnums = nil then  
     raise ERasError.Create('RasEnumConnectionsA not found in 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;

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php


Digitman   (2004-09-20 10:47:00) [5]


> maxistent ©   (17.09.04 20:24) [2]
> Смешно! ... Я уже нашел ответ


смешно, что ты нашел ответ, которого быть не может в принципе
Интернет - это сеть сетей, с сетью коннекта не может быть, коннект устанавливается с КОНКРЕТНЫМ компьютером в той или иной сети, например, с компьютером, выполняющим поль сервера удал.доступа в сети провайдера

и установка коннекта твоего компьютера с компьютером-сервером доступа провайдера отнюдь не означает, что твой компьютер имеет "коннект с ИНЕТ"


RaPToR_1   (2004-09-19 21:46:00) [6]

Удалено модератором
Примечание: Оффтоп...


Anatoly Podgoretsky   (2004-09-19 11:57:00) [7]

maxistent ©   (17.09.04 20:24) [2]
Врешь


Verg   (2004-09-17 20:43:00) [8]


> расслабьтесь


:)))


maxistent   (2004-09-17 20:24:00) [9]

Смешно! Ладно, расслабьтесь. Я уже нашел ответ. Вродь подходит...


Digitman   (2004-09-16 13:50:00) [10]


> коннект с ИНЕТОМ


коннекта с "ИНЕТОМ" быть не может потому что его не может быть по определению


Наверх

Титульная страница Поиск, карта сайта Написать письмо