Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как найти все компьютеры в рабочей группе? Для WinNT/2000/XP [NT4, Win2k, WinXP]


maguk ©   (2004-06-27 15:21:00) 

Доброго времени суток, Мастера!
Возникла проблема такого рода: нужно перечислить все раб. группы в сети и компьютеры в каждой рабочей группе. В FAQ'е уже давно нашел замечательную процедуру:

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 }


...и даже сам догнал, что она не только перечисляет компютеры в раб. группе, но и сами группы (для этого достаточно передать ей в качестве параметра пустую строку). Все это дело замечательно работало в Win9x/Me, но в XP (и, как я подозреваю, во всем семействе NT), если в эту функцию передать пустую строку, то она начинает перечисление не с раб. групп, а со всяких "Microsoft Windows Network", "Web Client Network" и "Службы терминалов Microsoft". Собссно вопрос как в WinNT/2000/XP перечислить все раб. группы и компьютеры в них?

Заранее благодарен.


Rouse_   (2004-07-01 15:55:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1088540567&n=4


maguk   (2004-07-01 14:03:00) [2]

up


Наверх

Титульная страница Поиск, карта сайта Написать письмо