我很久以前得到的这段代码应该返回一个字符串列表,每台计算机都连接到我的 Windows workgroup
,但是当我测试时我只得到我自己的计算机,但是我有三台计算机以相同的workgroup
名称连接并出现在我的 Windows 中资源管理器网络列表。
有什么问题?还有另一种方法吗?
function FindAllComputers(Workgroup: string; WithIP: Boolean): TStringList;
var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : cardinal;
Entries : cardinal;
Res : Integer;
Computers : Tstringlist;
Limit, I: Integer;
begin
Limit := 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);
Computers := TStringList.Create;
repeat
Entries := 1;
BufSize := SizeOf(Buf);
Res := WNetEnumResource(EnumHandle, Entries, @Buf, BufSize);
if (Res = NO_ERROR) and (Entries = 1) then
begin
Computers.Add(StrPas(Buf[1].lpRemoteName));
end;
Inc(Limit);
until (Entries > 0) or (Res <> NO_ERROR) or (Limit > 100);
WNetCloseEnum( EnumHandle );
if WithIP then
begin
for I := 0 to Computers.Count-1 do
Computers[I] := Computers[I] + '=' + GetIP(Computers[I]);
end;
Result := Computers;
end;