res := wnetopenenum(resource_globalnet, resourcetype_disk,
resourceusage_container, nil, lphenum);
if res <> no_error then
exit; //执行失败
//获取整个网络中的网络类型信息
count := $ffffffff; //不限资源数目
bufsize := 8192; //缓冲区大小设置为8k
getmem(buf1, bufsize); //申请内存,用于获取工作组信息
list := tlist.create;
try
res := wnetenumresource(lphenum, count, pointer(buf1), bufsize);
if (res = error_no_more_items) or (res <> no_error) then
exit; //资源列举完毕 或者 执行失败
p := buf1;
for i := 0 to count - 1 do
begin
list.add(p);
inc(p);
end;
res := wnetcloseenum(lphenum); //关闭一次列举
if res <> no_error then exit;
for i := 0 to list.count -1 do
begin
netresource := tnetresource(list.items[i]^);
res := wnetopenenum(resource_globalnet, resourcetype_disk,
resourceusage_container, @netresource, lphenum);
if res <> no_error then break; //执行失败
names.clear;
while true do
begin
count := $ffffffff; //不限资源数目
getmem(buf2, bufsize); //申请内存,用于获取工作组信息
try
res := wnetenumresource(lphenum, count, pointer(buf2), bufsize); //获取一个网络类型的文件资源信息
if (res = error_no_more_items) or (res <> no_error) then
break; //资源列举完毕 或者 执行失败
p := buf2;
for j := 0 to count - 1 do //列举各个工作组的信息
begin
names.add(p^.lpremotename);
inc(p);
end;
finally
freemem(buf2, bufsize);
end;
end;
end;
finally
freemem(buf1, bufsize);
list.free;
end;
end;
procedure getcomputernamelist(groupname: string;names: tstrings);
var
netresource: tnetresource;
p: ^tnetresource;
lphenum: thandle;
buf1: pointer;
count, bufsize, res: dword;
i: integer;
begin
fillchar(netresource, sizeof(netresource), 0); //初始化网络层次信息
netresource.lpremotename := @groupname[1]; //指定工作组名称
netresource.dwdisplaytype := resourcedisplaytype_server; //类型为服务器(工作组)
netresource.dwusage := resourceusage_container;
netresource.dwscope := resourcetype_disk; //列举文件资源信息
//获取指定工作组的网络资源句柄
res := wnetopenenum(resource_globalnet, resourcetype_disk,
resourceusage_container, @netresource, lphenum);
if res <> no_error then exit; //执行失败
names.clear;
while true do //列举指定工作组的网络资源
begin
count := $ffffffff; //不限资源数目
bufsize := 8192; //缓冲区大小设置为8k
getmem(buf1, bufsize); //申请内存,用于获取工作组信息
try
res := wnetenumresource(lphenum, count, pointer(buf1), bufsize);
if res = error_no_more_items then break; //资源列举完毕
if (res <> no_error) then exit; //执行失败
p := buf1;