Esta función te devuelve los recursos de la red :
Código Delphi
[-]
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array [0 .. 100] of TNetResource;
TResourceType = (
rtAny = 0,
rtDisk = 1,
rtPrint = 2,
rtReserved = 8,
rtUnknow = DWORD($FFFFFFFF)
);
TResourceDisplayType = (
rdGeneric = $00000000,
rdDomain = $00000001,
rdServer = $00000002,
rdShare = $00000003,
rdFile = $00000004,
rdGroup = $00000005,
rdNetwork = $00000006,
rdRoot = $00000007,
rdShareAdmin = $00000008,
rdDirectory = $00000009,
rdTree = $0000000A,
rdNdsContainer = $0000000B
);
function CreateNetResourceList(ResourceType: TResourceType;
NetResource: PNetResource; out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET, DWord(ResourceType), 0, NetResource, EnumHandle)
= NO_ERROR then
begin
try
BufSize := $4000; GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;
Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;
procedure ScanNetworkResources(ResourceType: TResourceType; DisplayType: TResourceDisplayType);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries,
NetResourceList) then
try
for i := 0 to Integer(Entries) - 1 do
begin
if (DWord(DisplayType) = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DWord(DisplayType)) then
begin
ListBox1.Items.Add(NetResourceList^[i].lpRemoteName);
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(rtDisk, rdServer);
end;
Podrías aprovechar esta función para detectar si el PC que buscas aparece en esta enumeración.
PD: Espero no haberme olvidado de ninguna parte del código...
Saludos