[Delphi] Проверка наличия локалки

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Pr0b3L, 1 Nov 2006.

  1. Pr0b3L

    Pr0b3L New Member

    Joined:
    6 Jun 2006
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    Нужно проверить наличие локалки, подскажите через что можно реализовать :confused:
    wininet.INTERNET_CONNECTION_LAN не возращяет правельного результата
     
  2. TaNkist

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    Можно попробывать так:
    Code:
    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.
    
    Или так
    Code:
     if GetSystemMetrics(SM_NETWORK) and $01 = $01 then  MessageBoxA(0,'LAN Connection','lan',0);
    
     
  3. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Code:
    InternetGetConnectedState(@flags,0);
    if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN
    
    Зачем так усложнять

    Code:
    var Flag :DWord; isLan:Boolean;
    begin
    Flag  := INTERNET_CONNECTION_LAN;
    isLan := InternetGetConnectedState(@Flag,0);
    case isLan of
    true  : ShowMessage('Connected');
    false : ShowMessage('disConnected');
    
    Code:
     if GetSystemMetrics(SM_NETWORK) and $01 = $01 then  MessageBoxA(0,'LAN Connection','lan',0);
    
    Вообще непонятная функция,вернет true если подключено любое сетевое устройство,справка тоже ничего хорошего нам не говорит

    Можно еще так

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

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    Можно попробывать поискать компьютеры в сети, и если найдешь хоть один, то локальная сеть найдена.
    Code:
    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
    
     
  5. Pr0b3L

    Pr0b3L New Member

    Joined:
    6 Jun 2006
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    у меня сработал только вариант с поиском компов в сети %) TaNkist, держи + :) а че плюс то не добавляется? =/
     
    #5 Pr0b3L, 2 Nov 2006
    Last edited: 2 Nov 2006