Вниз
Скачать: CL | DM;

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

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
1-71595
Dred2k
2003-09-10 21:21
2003.09.22
Ошибка при ClientDataSet.Open - Член группы не найден


14-71943
CinCinNut
2003-09-01 16:15
2003.09.22
Бывают такие люди...


1-71599
mrcat
2003-09-09 14:49
2003.09.22
Манифест XP vs. TListView.OwnerDraw


4-72011
Marat VG
2003-07-21 12:23
2003.09.22
CopyFile


1-71583
Alek Aaz
2003-09-09 13:33
2003.09.22
Печать на принтер




   Наверх