Следующая статья: Как создать индексный файл из приложения?
type PNetResourceArray=^TNetResourceArray;
TNetResourceArray=array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;
procedure EnumResources(LpNR: PNetResource);
var NetHandle: THandle; I, BufSize, NetResult: Integer;
NetResources: PNetResourceArray;
NewItem: TListItem; Count, size:DWORD;
begin
if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, LpNR, NetHandle)<>NO_ERROR then Exit;
try
BufSize:=50 * SizeOf(TNetResource);
GetMem(NetResources, BufSize);
try
while True do
begin
Count:=$FFFFFFFF;
Size:=BufSize;
NetResult:=WNetEnumResource(NetHandle, Count, NetResources, Size);
if NetResult=ERROR_MORE_DATA then
begin
BufSize:=Size;
ReallocMem(NetResources, BufSize);
Continue;
end;
if NetResult<>NO_ERROR then Exit;
for I:=0 to Count-1 do begin with NetResources^[I] do
begin
if RESOURCEUSAGE_CONTAINER=(DwUsage and RESOURCEUSAGE_CONTAINER) then EnumResources(@NetResources^[I]);
if dwDisplayType=RESOURCEDISPLAYTYPE_SHARE then
begin
// ^^^^^^^^^^^^^^^^^^^^^^^^^ - ресурс
// RESOURCEDISPLAYTYPE_SERVER - компьютер
// RESOURCEDISPLAYTYPE_DOMAIN - рабочая группа
// RESOURCEDISPLAYTYPE_GENERIC - сеть NewItem:=Form1.ListView1.Items.Add;
NewItem.Caption:=LpRemoteName;
end;
end;
end;
end;
finally FreeMem(NetResources, BufSize); end; finally WNetCloseEnum(NetHandle); end; end;
procedure TForm1.Button1Click(Sender: TObject); var Oldcursor:TCursor;
begin
OldCursor:=Screen.Cursor;
Screen.Cursor:=crHourGlass;
with ListView1.Items do
begin
BeginUpdate;
Clear;
EnumResources(nil);
EndUpdate;
end;
Screen.Cursor:=OldCursor;
end;
Примечание: Добавляем в uses модуль ComCtrls.