Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2009, 16:25   #1
nixstill
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 12
Печаль Проверка наличия подключения к локальной сети

Доброе время суток!
Подскажите пожалуйста, как сделать проверку на наличие подключения по локальной сети.
Есть множество вариантов с проверками подключения к сети интернет, но мне нужна именно локальная сеть

Есть такая проверка
GetSystemMetrics(SM_NETWORK) and 1 > 0;
но она показывает только в случае отключенного кабеля.
Если вырубить интерфейс принудительно, а кабель оставить, то она все равно возвращает наличия коннекта.

Последний раз редактировалось nixstill; 29.07.2009 в 16:32. Причина: Добавление
nixstill вне форума Ответить с цитированием
Старый 29.07.2009, 16:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно попробовать получит список компов в сетевом окружении, или попинговать доменный сервер если он есть.
Пройдись по http://delphiworld.narod.ru/_all_articles_.html в поисках кода с WNetEnumResource в разделе Сеть - [38]
I'm learning to live...

Последний раз редактировалось Stilet; 29.07.2009 в 16:44.
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 23:49   #3
nixstill
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 12
По умолчанию

Что вы думаете по поводу такого решения? Может что добавите?
PHP код:
type
 PMibIfRow 
= ^TMibIfRow;
 
TMibIfRow packed record
    wszName             
: array[0..255of WideChar;
    
dwIndex             DWORD;
    
dwType              DWORD;
    
dwMtu               DWORD;
    
dwSpeed             DWORD;
    
dwPhysAddrLen       DWORD;
    
bPhysAddr           : array[1..8of Byte;
    
dwAdminStatus       DWORD;
    
dwOperStatus        DWORD;
    
dwLastChange        DWORD;
 
end;
 
 
pMibIfArray = ^TMIBIFARRAY;
 
TMibIfArray = array [0..512of TMibIfRow;
 
 
PMibIfTable = ^TMibIfTable;
 
TMibIfTable packed record
   dwNumEntries 
DWORD;
   
Table        TMibIfArray;
 
end;
 
  function 
GetIfTable(pIfTable:PMibIfTablepdwSizePULONGbOrderboolean ): DWORDstdCallexternal 'IPHLPAPI.DLL';
 
function 
RightConnection(dwType:DWORD):Boolean;
  const
    
MIB_IF_TYPE_OTHER       1;
    
MIB_IF_TYPE_ETHERNET    6;
    
MIB_IF_TYPE_TOKENRING   9;
    
MIB_IF_TYPE_FDDI        15;
    
MIB_IF_TYPE_PPP         23;
    
MIB_IF_TYPE_IEEE_802_11 71;
    
MIB_IF_TYPE_SLIP        28;
begin
  
case dwtype of
    MIB_IF_TYPE_OTHER
MIB_IF_TYPE_ETHERNET,
    
MIB_IF_TYPE_TOKENRINGMIB_IF_TYPE_FDDI,
    
MIB_IF_TYPE_PPPMIB_IF_TYPE_SLIPResult := True;
  else
    
Result := False;
  
end;
end;
 
function 
LanIsConnected:Boolean;
  var
    
_MibIfTablePMibIfTable;
    
_PPointer;
     
i_NumEntriesinteger;
    
_buflenDWORD;
    
_errorDWORD;
 
  const
    
MIB_IF_OPER_STATUS_NON_OPERATIONAL 0;
    
MIB_IF_OPER_STATUS_UNREACHABLE     1;
    
MIB_IF_OPER_STATUS_DISCONNECTED    2;
    
MIB_IF_OPER_STATUS_CONNECTING      3;
    
MIB_IF_OPER_STATUS_CONNECTED       4;
    
MIB_IF_OPER_STATUS_OPERATIONAL     5;
 
begin
  Result 
:= False;
 
  
_buflen := sizeof(_MibIfTable^);
  New(
_MibIfTable);
  
_P := _MibIfTable;
  
_error := GetIfTable(_MibIfTable, @_buflenfalse);
 
  if 
_error <> NO_ERROR then
    begin
       ShowMessage
('Error!');
       Exit;
    
end;
 
  
_NumEntries := TMibIfTable(_P^).dwNumEntries;
  if 
_NumEntries 0 then
     
for i:=0 to _NumEntries-do
      
begin
        
if (RightConnection(TMibIfTable(_P^).table[i].dwtype)) and
           (
TMibIfTable(_P^).table[i].dwAdminStatus )
        
then
            
case TMibIfTable(_P^).table[i].dwOperStatus of
              MIB_IF_OPER_STATUS_CONNECTED
,
              
MIB_IF_OPER_STATUS_OPERATIONALResult := True;
            
end;
      
end;
  
dispose(_MibIfTable);
 
end
nixstill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отключение "подключения по локальной сети" photozaz Общие вопросы Delphi 2 25.06.2010 00:30
Проверка наличия записи в таблице MargoNik БД в Delphi 2 08.07.2009 06:20
проверка наличия файла Juffin Общие вопросы Delphi 2 18.04.2009 14:17
Проверка наличия файла russian-stalker Общие вопросы Delphi 4 31.08.2008 19:27
Проверка наличия директории SANIOK_AV Общие вопросы Delphi 2 16.01.2008 11:05