Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IP адреса локальных машин, Как определить ip адрес 
:(
    Опции темы
sharnir
Дата 2.4.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.4.2006

Репутация: нет
Всего: нет



Не могу разобраться как определяются ip адресса комп-ов локальной сети!!!
Недавно находил UNIT
Код

unit FindComp;

interface 

uses 
  Windows, Classes; 

function FindComputers: DWORD;

var 
  Computers: TStringList; 

implementation 

uses 
  SysUtils; 

const 
  MaxEntries = 250; 

function FindComputers: DWORD; 

var 
  EnumWorkGroupHandle, EnumComputerHandle: THandle; 
  EnumError: DWORD; 
  Network: TNetResource; 
  WorkGroupEntries, ComputerEntries: DWORD; 
  EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource; 
  EnumBufferLength: DWORD; 
  I, J: DWORD; 

begin 

  Computers.Clear; 

  FillChar(Network, SizeOf(Network), 0); 
  with Network do 
  begin 
    dwScope := RESOURCE_GLOBALNET; 
    dwType := RESOURCETYPE_ANY; 
    dwUsage := RESOURCEUSAGE_CONTAINER; 
  end; 
   
  EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle); 

  if EnumError = NO_ERROR then 
  begin 
    WorkGroupEntries := MaxEntries; 
    EnumBufferLength := SizeOf(EnumWorkGroupBuffer); 
    EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength); 

    if EnumError = NO_ERROR then 
    begin 
      for I := 1 to WorkGroupEntries do 
      begin 
        EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle); 
        if EnumError = NO_ERROR then 
        begin 
          ComputerEntries := MaxEntries; 
          EnumBufferLength := SizeOf(EnumComputerBuffer); 
          EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength); 
          if EnumError = NO_ERROR then 
            for J := 1 to ComputerEntries do 
              Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2)); 
          WNetCloseEnum(EnumComputerHandle); 
        end; 
      end; 
    end; 
    WNetCloseEnum(EnumWorkGroupHandle); 
  end; 

  if EnumError = ERROR_NO_MORE_ITEMS then 
    EnumError := NO_ERROR; 
  Result := EnumError; 

end; 

initialization 

  Computers := TStringList.Create; 

finalization 

  Computers.Free; 

end.


Данный пример находит в сети всего 1 комп "НОМЕ", Хотя в сети компов не мение 35!!!
smile smile smile

Это сообщение отредактировал(а) sharnir - 2.4.2006, 15:58
PM MAIL   Вверх
Демо
Дата 2.4.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



См. здесь: http://rouse.front.ru/


--------------------
    
PM MAIL ICQ Skype   Вверх
Poseidon
Дата 2.4.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Код

var  
  Computer: array[1..500] of string[25];  
  ComputerCount: Integer;  

procedure FindAllComputers(Workgroup: string);  
var  
  EnumHandle: THandle;  
  WorkgroupRS: TNetResource;  
  Buf: array[1..500] of TNetResource;  
  BufSize: Integer;  
  Entries: Integer;  
  Result: Integer;  
begin  
  ComputerCount := 0;  
  Workgroup := Workgroup + #0;  
  FillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0);  
  with WorkgroupRS do  
    begin  
      dwScope := 2;  
      dwType := 3;  
      dwDisplayType := 1;  
      dwUsage := 2;  
      lpRemoteName := @Workgroup[1];  
    end;  
  WNetOpenEnum(RESOURCE_GLOBALNET,  
    RESOURCETYPE_ANY,  
    0,  
    @WorkgroupRS,  
    EnumHandle);  
  repeat  
    Entries := 1;  
    BufSize := SizeOf(Buf);  
    Result :=  
      WNetEnumResource(EnumHandle,  
      Entries,  
      @Buf,  
      BufSize);  
    if (Result = NO_ERROR) and (Entries = 1) then  
      begin  
        Inc(ComputerCount);  
        Computer[ComputerCount] := StrPas(Buf[1].lpRemoteName);  
      end;  
  until (Entries <> 1) or (Result <> NO_ERROR);  
  WNetCloseEnum(EnumHandle);  
end; { Find All Computers } 




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0406 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.