Announcement

Collapse
No announcement yet.

Computer im Netzwerk auflisten, eine Möglichkeit

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Computer im Netzwerk auflisten, eine Möglichkeit

    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 &lt;&gt; 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 &lt;&gt; NO_ERROR) then
    begin
    Result := False;
    end
    else
    begin
    Result := True;
    end;
    end;
    </PRE>

    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
Working...
X