In Lazarus existiert die Unit NetworkFunctions, welche aus der Delphipraxis stammen dürfte. Die procedure GetComputerList(List: TStrings) wurde dabei etwas abgeändert, um compilieren zu können. Diese Procedure bringt jedoch keine Ergebnisse. Eine ähnliche Routine von Angus Johnson habe ich etwas angepasst ebenfalls getestet:
Code: Alles auswählen
procedure GetNetworkedDrives(strings: TStrings);
procedure EnumNetworkDrives(pnr : PNetResource);
var
hEnum: THandle;
i, enumRes, count, BufferSize: DWORD;
buffer: pointer;
begin
BufferSize := $4000; //ie: use a 16kb buffer
buffer := nil; //just in case memory allocation fails
if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pnr, hEnum) = ERROR_SUCCESS
then try
GetMem(buffer, BufferSize);
repeat
count := dword(-1); //ie: get as many items possible
enumRes := WNetEnumResource(hEnum, count, buffer, BufferSize);
//break if either no more items found or an error occurs...
if (enumRes = ERROR_SUCCESS)
then begin
pnr := buffer; //reuse the pnr pointer
for i := 1 to count do
begin
if (pnr^.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN or RESOURCEDISPLAYTYPE_SERVER) and (pnr^.dwType = RESOURCETYPE_DISK)
then strings.Add(pnr^.lpRemoteName);
//recursive function call...
if (pnr^.dwUsage and RESOURCEUSAGE_CONTAINER) > 0
then EnumNetworkDrives(pnr);
inc(Pointer(pnr),sizeof(TNetResource));
end;
end;
until enumRes <> ERROR_SUCCESS;
finally
FreeMem(buffer);
WNetCloseEnum(hEnum);
end;
end;
begin
if strings = nil then exit;
//simply call the nested recursive function
//passing nil to starting at the network root ...
EnumNetworkDrives(nil);
end;
Der erste Aufruf von WNetEnumResource ergibt drei Einträge (siehe Bild). Die rekursiven Aufrufe von WNetEnumResource ergeben jeweils 0 (NO_ERROR) mit 0 Einträgen oer 259 (ERROR_NO_MORE_ITEMS).
YANA gibt mir nur Host-IP, Hostnamen und DHCP-Server-IP zurück.
LuckiePing funktioniert leider nicht. Thread Ping von pacman1986 funktioniert, ist jedoch ohne Source und Angabe der Funktionsweise.
Trotz etlicher Stunden suchen und testen habe ich bisher nichts brauchbares für Lazarus gefunden. Auch die Funktion Ping auf Fritzbox und Druckers ergaben False, während Ping in der Konsole funktioniert.
Kann jemand helfen oder ist Lazarus in der Beziehung unbrauchbar?