Hallo, liebe Delphi-Gemeinde!
<P>Nachdem ich ja selbst immer nur Fragen stelle, anstatt auch mal zu antworten, unternehme ich hiermit einen Versuch, meiner ewigen Eigennützigkeit mal etwas "Gemeinnützigkeit" voranzustellen.
<P>Schon oft hab ich hier die Frage nach "Netzwerk-Computer auflisten" gelesen; und selber hab ich auch schon etliche Male danach gesucht.
Die Seite <a href="http://community.borland.com/article/0,1410,26876,00.html">http://community.borland.com/article/0,1410,26876,00.html</a> hat mich zu folgender Möglichkeit geführt: ("geführt" ist gut, eigentlich hab ich es eh nur abgeschrieben ...)
<PRE>
function RechnerInWG(hwnd: HWND; hdc: HDC ; lpnr: PNetResource ): Boolean;
const
cbBuffer: DWORD = 16384;
var
hEnum, dwResult, dwResultEnum : DWORD;
lpnrLocal : array [0..16384 div SizeOf(TNetResource)] of TNetResource;
i : integer;
cEntries : Longint;
begin
centries := -1;
dwResult := WNetOpenEnum( RESOURCE_CONTEXT, RESOURCETYPE_DISK, 0, lpnr, hEnum);
if (dwResult <> NO_ERROR) then
begin
Result := False;
Exit;
end;
FillChar( lpnrLocal, cbBuffer, 0 );
dwResultEnum := WNetEnumResource(hEnum, DWORD(cEntries), @lpnrLocal, cbBuffer);
Clients.Clear;
for i := 0 to cEntries - 1 do
begin
Clients.Add(lpnrLocal[i].lpRemoteName);
end;
dwResult := WNetCloseEnum(hEnum);
if(dwResult <> NO_ERROR) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;
</PRE>
<P>Aufgerufen wird das ganze wie folgt:
<PRE>
var
a: Boolean;
b: HWnd;
c: HDC;
d: Integer;
e: String;
Clients: TStringList;
begin
b := GetDeskTopWindow;
c := GetWindowDC(b);
Clients := TStringList.Create;
a := RechnerInWG(b, c, nil);
if a = False then
begin
ShowMessage('Kann die verfügbaren Netzwerk Resourcen nicht ermitteln!');
end
else
begin
// Tu irgendwas mit der StringList "Clients"
end;
end;
</PRE>
<P>Wenn der Funktionsaufruf TRUE zurückliefert, sind anschließend in der StringList Clients die Namen der jeweiligen anderen Rechner der aktuellen Arbeitsgruppe zu finden.
Ausprobiert hab ich es mit D5 auf NT4/SP6, da hat es problemlos geklappt.
<P>Vielleicht hab ich somit auch mal jemanden helfen können ...
<P>Markus
<P>Nachdem ich ja selbst immer nur Fragen stelle, anstatt auch mal zu antworten, unternehme ich hiermit einen Versuch, meiner ewigen Eigennützigkeit mal etwas "Gemeinnützigkeit" voranzustellen.
<P>Schon oft hab ich hier die Frage nach "Netzwerk-Computer auflisten" gelesen; und selber hab ich auch schon etliche Male danach gesucht.
Die Seite <a href="http://community.borland.com/article/0,1410,26876,00.html">http://community.borland.com/article/0,1410,26876,00.html</a> hat mich zu folgender Möglichkeit geführt: ("geführt" ist gut, eigentlich hab ich es eh nur abgeschrieben ...)
<PRE>
function RechnerInWG(hwnd: HWND; hdc: HDC ; lpnr: PNetResource ): Boolean;
const
cbBuffer: DWORD = 16384;
var
hEnum, dwResult, dwResultEnum : DWORD;
lpnrLocal : array [0..16384 div SizeOf(TNetResource)] of TNetResource;
i : integer;
cEntries : Longint;
begin
centries := -1;
dwResult := WNetOpenEnum( RESOURCE_CONTEXT, RESOURCETYPE_DISK, 0, lpnr, hEnum);
if (dwResult <> NO_ERROR) then
begin
Result := False;
Exit;
end;
FillChar( lpnrLocal, cbBuffer, 0 );
dwResultEnum := WNetEnumResource(hEnum, DWORD(cEntries), @lpnrLocal, cbBuffer);
Clients.Clear;
for i := 0 to cEntries - 1 do
begin
Clients.Add(lpnrLocal[i].lpRemoteName);
end;
dwResult := WNetCloseEnum(hEnum);
if(dwResult <> NO_ERROR) then
begin
Result := False;
end
else
begin
Result := True;
end;
end;
</PRE>
<P>Aufgerufen wird das ganze wie folgt:
<PRE>
var
a: Boolean;
b: HWnd;
c: HDC;
d: Integer;
e: String;
Clients: TStringList;
begin
b := GetDeskTopWindow;
c := GetWindowDC(b);
Clients := TStringList.Create;
a := RechnerInWG(b, c, nil);
if a = False then
begin
ShowMessage('Kann die verfügbaren Netzwerk Resourcen nicht ermitteln!');
end
else
begin
// Tu irgendwas mit der StringList "Clients"
end;
end;
</PRE>
<P>Wenn der Funktionsaufruf TRUE zurückliefert, sind anschließend in der StringList Clients die Namen der jeweiligen anderen Rechner der aktuellen Arbeitsgruppe zu finden.
Ausprobiert hab ich es mit D5 auf NT4/SP6, da hat es problemlos geklappt.
<P>Vielleicht hab ich somit auch mal jemanden helfen können ...
<P>Markus