Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Проверка наличия локалки (https://forum.antichat.xyz/showthread.php?t=26357)

Pr0b3L 02.11.2006 00:00

[Delphi] Проверка наличия локалки
 
Нужно проверить наличие локалки, подскажите через что можно реализовать :confused:
wininet.INTERNET_CONNECTION_LAN не возращяет правельного результата

TaNkist 02.11.2006 09:53

Можно попробывать так:
Код:

uses Wininet,windows;
var
  flags: DWORD;
begin
 InternetGetConnectedState(@flags,0);
 if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then MessageBoxA(0,'LAN Connection','lan',0);
end.

Или так
Код:

if GetSystemMetrics(SM_NETWORK) and $01 = $01 then  MessageBoxA(0,'LAN Connection','lan',0);

gemaglabin 02.11.2006 11:16

Код:

InternetGetConnectedState(@flags,0);
if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN

Зачем так усложнять

Код:

var Flag :DWord; isLan:Boolean;
begin
Flag  := INTERNET_CONNECTION_LAN;
isLan := InternetGetConnectedState(@Flag,0);
case isLan of
true  : ShowMessage('Connected');
false : ShowMessage('disConnected');

Код:

if GetSystemMetrics(SM_NETWORK) and $01 = $01 then  MessageBoxA(0,'LAN Connection','lan',0);
Вообще непонятная функция,вернет true если подключено любое сетевое устройство,справка тоже ничего хорошего нам не говорит

Можно еще так

Код:

function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL'
Но это уже к интернету %)

TaNkist 02.11.2006 14:32

Можно попробывать поискать компьютеры в сети, и если найдешь хоть один, то локальная сеть найдена.
Код:

function TNetForm.FillNetLevel(xxx: PNetResource; List: TListItems): Word;
type
  PNRArr = ^TNRArr;
  TNRArr = array[0..59] of TNetResource;
var
  x: PNRArr;
  tnr: TNetResource;
  I: integer;
  EntrReq,
    SizeReq,
    twx: THandle;
  WSName: string;
  LI: TListItem;
begin
  Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
    RESOURCEUSAGE_CONTAINER, xxx, twx);
  if Result = ERROR_NO_NETWORK then
    Exit;
  if Result = NO_ERROR then
  begin
    New(x);
    EntrReq := 1;
    SizeReq := SizeOf(TNetResource) * 59;
    while (twx <> 0) and
      (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
    begin
      for i := 0 to EntrReq - 1 do
      begin
        Move(x^[i], tnr, SizeOf(tnr));
        case tnr.dwDisplayType of
          RESOURCEDISPLAYTYPE_SERVER:
            begin
              if tnr.lpRemoteName <> '' then
                WSName := tnr.lpRemoteName
              else
                WSName := tnr.lpComment;
              LI := list.Add;
              LI.Caption := copy(WSName, 3, length(WSName) - 2);
              //list.Add(WSName);
            end;
        else
          FillNetLevel(@tnr, list);
        end;
      end;
    end;
    Dispose(x);
    WNetCloseEnum(twx);
  end;
end;
Пример вызова:
FillNetLevel(nil, ListView1.Items); 
(с) DelphiWorld


Pr0b3L 02.11.2006 21:34

у меня сработал только вариант с поиском компов в сети %) TaNkist, [s]держи + :)[/s] а че плюс то не добавляется? =/


Время: 12:54