Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Вниз

Проверка соединения с локалкой   Найти похожие ветки 

 
Edvard   (2003-07-21 14:25) [0]

Господа, подскажите! Как можно контролировать соединение компа с локалкой?
таким образом не получается:

procedure CheckNet(Sender: TObject); (ставлю на таймер)
begin
if GetSystemMetrics(SM_NETWORK) and $01 = $01 then
ShowMessage("Computer is attached
to a network!")
else
ShowMessage("Computer is not
attached to a network!");
end;


при отключении от сети или просто выдергивании кабеля из сетевухи никак не реагирует.
Какие еще есть варианты?


 
Comwad   (2003-07-21 14:35) [1]

Посылай что-то вроде ping на адрес шлюза.
Есть компоненты для Delphi


 
Nick2000   (2003-07-22 10:46) [2]

>Edvard
Нашел тут такую вещь. Попробуй. Может подойдет.


const
MAX_NEIGHBORS = 20;

function NetAvailable: Boolean;
var
NetRes: array[0..MAX_NEIGHBORS] of TNetResource;
NNError,
hEnum,
EntryCount,
NetResLen: DWORD;
loop1: Integer;
begin
hEnum := -1;
Result := FALSE;
try
NNError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, nil, hEnum);
if NNError = NO_ERROR then
begin
while NNError <> ERROR_NO_MORE_ITEMS do
begin
EntryCount := 1;
NetResLen := SizeOf(NetRes);
NNError := WNetEnumResource(hEnum, EntryCount, @NetRes, NetResLen);
if (NNError = NO_ERROR) then
begin
for loop1 := 1 to EntryCount do
begin
if Pos("Microsoft", NetRes[0].lpProvider) = 1 then
begin
Result := TRUE;
Break
end
end
end
else
begin
Break
end
end;
WNetCloseEnum(hEnum)
// close enum
end
except
on exception do
if DEBUG then
begin
( "Network Neighborhood Detection Failed.") >Edvard
Нашел тут такую вещь. Попробуй. Может подойдет.


const
MAX_NEIGHBORS = 20;

function NetAvailable: Boolean;
var
NetRes: array[0..MAX_NEIGHBORS] of TNetResource;
NNError,
hEnum,
EntryCount,
NetResLen: DWORD;
loop1: Integer;
begin
hEnum := -1;
Result := FALSE;
try
NNError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, nil, hEnum);
if NNError = NO_ERROR then
begin
while NNError <> ERROR_NO_MORE_ITEMS do
begin
EntryCount := 1;
NetResLen := SizeOf(NetRes);
NNError := WNetEnumResource(hEnum, EntryCount, @NetRes, NetResLen);
if (NNError = NO_ERROR) then
begin
for loop1 := 1 to EntryCount do
begin
if Pos("Microsoft", NetRes[0].lpProvider) = 1 then
begin
Result := TRUE;
Break
end
end
end
else
begin
Break
end
end;
WNetCloseEnum(hEnum)
// close enum
end
except
on exception do
if DEBUG then
begin
ShowMessage("Network Neighborhood Detection Failed.")
end;
end
end;


 
S@shka   (2003-07-22 12:28) [3]

Да, а с помощью пинга все получилось бы проще!!!


 
Verg   (2003-07-22 12:43) [4]


> S@shka ©
> Да, а с помощью пинга все получилось бы проще!!!


А кто вам сказал, что TCP/IP неотъемлимая часть виндовой сети?


 
Толик   (2003-07-22 13:51) [5]

to Nick2000 (22.07.03 10:46)
Под Win2k это сработает даже в том случае, если комп отключен от сети (узел «Сеть Microsoft Windows» проводник показывает всегда), так что этот способ не проходит.
Скорее здесь может подойти следующее:

type
Tip = array[0..4] of byte;
Pip = ^Tip;
function HostToIP(AHostName: string): string;
const
FormatMask: string = "%d.%d.%d.%d";
var
WSData: TWSAData;
HostEnt: PHostEnt;
IP : Pip;
begin
WinSock.WSAStartup($0101, WSData);
try
HostEnt := WinSock.GetHostByName(pchar(AHostName));
IP := Pip(HostEnt^.h_addr_list^);
( FormatMask, [IP[0], IP[1], IP[2], IP[3]])
to Nick2000 (22.07.03 10:46)
Под Win2k это сработает даже в том случае, если комп отключен от сети (узел «Сеть Microsoft Windows» проводник показывает всегда), так что этот способ не проходит.
Скорее здесь может подойти следующее:

type
Tip = array[0..4] of byte;
Pip = ^Tip;
function HostToIP(AHostName: string): string;
const
FormatMask: string = "%d.%d.%d.%d";
var
WSData: TWSAData;
HostEnt: PHostEnt;
IP : Pip;
begin
WinSock.WSAStartup($0101, WSData);
try
HostEnt := WinSock.GetHostByName(pchar(AHostName));
IP := Pip(HostEnt^.h_addr_list^);
RESULT := SysUtils.Format(FormatMask, [IP[0], IP[1], IP[2], IP[3]]);
finally
WinSock.WSACleanup();
end;
end;

Если эта ф-я вернёт 127.0.0.1 - значит соединения нет.



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

Форум: "Сети";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
14-71921
Kost
2003-09-02 14:19
2003.09.22
Темы


14-71915
Проходий
2003-09-03 09:11
2003.09.22
Ожидание события


6-71796
Andriy
2003-07-21 20:43
2003.09.22
Невидимый комп в сети.


1-71627
Berezne
2003-09-09 12:34
2003.09.22
Что означает ета ошибка???


1-71665
Immortal_Death
2003-09-08 14:06
2003.09.22
Иконка в прложениях без формы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский