Ändere mal diesen Teil so ab :
Delphi-Quellcode:
procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
Application.ProcessMessage //<-- Änderung
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
Dann wirst Du sehen, dass sich doch etwas tut. Nur wenn ich das Programm starte, hat die Variable Entries schon einen Wert von 1942475233 (Breaktpoint bei if CreateNetResourceList... in der Procedure Scanlevel). Dann Ändert er den Wert auf 4. Trotzdem wird die Procedure mehr als 4 Mal durchgegangen.