![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сетевое окружение [D7, 95/98, XP]
Димыч © (2006-11-23 13:28:00)Неужели нет способа получить список компьютеров в локальной сети не производя длительных поисков (таких как в программе NetScan)? Есть ли способ получить этот список от Windows, она же выводит его гораздо быстрее, может она его гдето хранит?
Elen (2006-11-24 09:32:00) [1]
> Димыч
В догонку : ListBox.items.text:=FindAllComputers(...
Димыч (2006-11-24 09:28:00) [2]В работе код еще не опробовал, но все равно большое спасибо за ответ поделу (без воды) :)
Elen (2006-11-23 13:38:00) [3]Почему нет? есть :
function FindAllComputers(Workgroup: string;Divider:string=#13#10):string;
var
EnumHandle: THandle;
WorkgroupRS: TNetResource;
Buf: array [1..500] of TNetResource;
BufSize: cardinal;
Entries: cardinal;
Res: Integer;
Computer:string[255]; { array [1..500] of string[25];}
ComputerCount: 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);
Res := WNetEnumResource(EnumHandle, Entries, @Buf, BufSize);
if (Res = NO_ERROR) and (Entries = 1) then
begin
Inc( ComputerCount );
Computer{[ ComputerCount ]} := StrPas(Buf[1].lpRemoteName);
result:=result+Divider+(Computer{[ ComputerCount ]});
end;
until
(Entries <> 1) or (Res <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end;
//**************************************************************************