Considerando la necesidad de enumerar los equipos que se encuentran en varias redes diferentes dentro de una LAN hice la siguiente variación del truco;
Código Delphi
[-]procedure AddHosts(Node: PNetResource; List: TStrings);
var hEnum, Count, Size: Cardinal; lpAddress, Item: PNetResource;
begin
Count := $FFFFFFFF; Size := 1024 * 1024;
lpAddress := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, Node, hEnum);
WNetEnumResource(hEnum, Count, lpAddress, Size);
WNetCloseEnum(hEnum);
Item := lpAddress;
while Integer(Count) > 0 do
begin
if Item.dwDisplayType in [RESOURCEDISPLAYTYPE_DOMAIN, RESOURCEDISPLAYTYPE_NETWORK] then
AddResources(Item, List)
else
if Item.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
List.Add(Item.lpRemoteName);
Dec(Count);
Inc(Item);
end;
VirtualFree(lpAddress, 0, MEM_RELEASE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AddResources(nil, ListBox1.Items);
end;