Als erstes kann man doch einfach alle PC im Netz ermitteln, dann hat man die IPs in einer Liste und kann bei jeder
IP das zugeordnete Port abfragen, ob dort das Serverprogramm läuft.
Die Procedure:
Delphi-Quellcode:
procedure TMainForm.GetLANPCs(List: TStrings);
procedure EnumFunc(NetResource: PNetResource);
var
Enum: THandle;
Count, BufferSize: DWORD;
Buffer: array[0..16384 div SizeOf(TNetResource)] of TNetResource;
i: Integer; S: String;
begin
if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetResource,
Enum) = NO_ERROR then
try
Count := $FFFFFFFF;
BufferSize := SizeOf(Buffer);
while WNetEnumResource(Enum, Count, @Buffer, BufferSize) = NO_ERROR do
for i := 0 to Count - 1 do
begin
if Buffer[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then begin
S:=Buffer[i].lpRemoteName;
Delete(S,1,2);
List.Add(S);
end;
if (Buffer[i].dwUsage and RESOURCEUSAGE_CONTAINER) > 0 then
EnumFunc(@Buffer[i])
end;
finally
WNetCloseEnum(Enum);
end;
end;
begin
EnumFunc(nil);
end;