Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alle PC-Namen eines Netzwerkes erhalten (https://www.delphipraxis.net/6213-alle-pc-namen-eines-netzwerkes-erhalten.html)

Illuminator-23-5 3. Jul 2003 17:34


Alle PC-Namen eines Netzwerkes erhalten
 
gibt es im delphi eine möglichkeit, eine liste mit allen ans netzwerk angeschlossene PCs zu erhalten?

Christian Seehase 3. Jul 2003 17:37

Moin Illuminator,

such' mal hier noch WNetEnumResource.
Das hatten wir schon.

Trouble_Maker 4. Jul 2003 15:55

Hiho ...

hier hab ich maln Code dafür:
Code:
type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
                              NetResource: PNetResource;
                              out Entries: DWord;
                              out List: PNetResourceArray): Boolean;
var
  EnumHandle: THandle;
  BufSize: DWord;
  Res: DWord;
begin
  Result := False;
  List := Nil;
  Entries := 0;
  if WNetOpenEnum(RESOURCE_GLOBALNET,
                  ResourceType,
                  0,
                  NetResource,
                  EnumHandle) = NO_ERROR then begin
    try
      BufSize := $4000; // 16 kByte
      GetMem(List, BufSize);
      try
        repeat
          Entries := DWord(-1);
          FillChar(List^, BufSize, 0);
          Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
          if Res = ERROR_MORE_DATA then begin
            ReAllocMem(List, BufSize);
          end;
        until Res <> ERROR_MORE_DATA;

        Result := Res = NO_ERROR;
        if not Result then begin
          FreeMem(List);
          List := Nil;
          Entries := 0;
        end;
      except
        FreeMem(List);
        raise;
      end;
    finally
      WNetCloseEnum(EnumHandle);
    end;
  end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
  Entries: DWord;
  NetResourceList: PNetResourceArray;
  i: Integer;
begin
  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;
Code:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;

hoffe es klappt bei dir! Bei mir klappts zumindest! ^^


cu Trouble_Maker

Matze 8. Jul 2003 13:06

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Hi zusammen!

Ich habe ein Pronlem...
Mein Informatiklehrer hat gemeint, dass keiner aus unserer Klasse das schaft, sich die Netzwerk-PCs unseres Internetraums in einer ListBox anzeigen zu lassen. Doch ich habe gesagt, dass ich's schaffe (blöd von mir!)
Jetzt habe ich den obigen Code verwendet, aber mein Programm listet mir nur folgendes auf: \\EASYSERVER, obwohl mind. 10 PC angeschaltet sind.

Was mache ich falsch?? :x

Gruß Matze

Christian Seehase 8. Jul 2003 16:00

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

ich hab' den Code eben mal ausprobiert, der tut's einwandfrei.

Kannst Du aus Windows heraus die anderen Rechner in der Netzwerkumgebung sehen?
Wenn für die Workstations das Browsing abgeschaltet ist, werden sie dort nämlich auch nicht angezeigt.

Matze 8. Jul 2003 16:11

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Hi!

Wenn ich an die Benutzer per Net Send Befehle schicke, dann geht das, falls du das meinst.

Gruß Matze

Christian Seehase 8. Jul 2003 16:28

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

nein, das meine ich nicht.
Das die Rechner mit ihren Namen erreichbar sind, hat nichts damit zu tun, ob man sie in der Netzwerkumgebung sehen kann oder nicht.
Das ist so ähnlich wie mit den versteckten Freigaben. Sie sind da, man kann sie sich verbinden, bzw. darauf zugreifen, aber im Explorer sehen kann man sie nicht.

Wenn Du in den Explorer gehst, Netzwerkumgebung, und da mal schaust
(Netzwerkumgebung, dann in Microsoft Windows-Netzwerk), müssten die Domänen/Arbeitsgruppen zu sehen sein, soweit verfügbar, und darin wieder die einzelnen Rechner.

Deshalb meine Frage: Sind die Rechner da zu sehen?

Wenn nicht, hat sich euer Lehrer nämlich eine "kleine Gemeinheit" einfallen lassen ;-)

Matze 8. Jul 2003 16:31

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Ich bin grad nicht in der Schule, aber ich glaube in der Netzwerkumgebung sind die Rechner nicht aufgeführt. Heißt das, mein Lehrer hatte Recht, als er sagte, das könne niemand von uns proggen?

Christian Seehase 8. Jul 2003 16:34

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Moin Matze,

wenn sie da nicht zu sehen sind, melden sie sich nicht beim Browserdienst (hat nichts mit dem Webbrowser zu tun).
Dann dürfte es mit den WNetxxx Funktionen nicht machbar sein.

Aber es gibt auch noch andere ;-)

Auf welchem Betriebbsystem soll das Programm laufen?

Chewie 8. Jul 2003 16:35

Re: Alle PC-Namen eines Netzwerkes erhalten
 
Na ja, es gäbe immernoch die BruteForce-Methode. Also alle erdenklichen Namen bilden und einen Verbindungsversuch starten. Könnte allerdings ein paar Tage dauern :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.
Seite 1 von 7  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz