AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Domain-Server auflisten
Thema durchsuchen
Ansicht
Themen-Optionen

Domain-Server auflisten

Ein Thema von Luckie · begonnen am 31. Jan 2003 · letzter Beitrag vom 22. Mär 2003
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Domain-Server auflisten

  Alt 31. Jan 2003, 14:40
Kuck euch doch bitte mal in diesem Thread den Wunsch von Sharky an. Man soll in meinem User-Manager den Domain-Controller oder nennt man es Server? angeben können.

Ich bräuchte jetzt also was, was mir alle im Netzwerk vorhandenen Server auflistet.

Ich müßte euch allerdings um funktionierenden, lauffähigen Code bitten, da ich keinen Zugriff auf ein entsprechendes Netzwerk habe. Am liebsten wäre mit Code, der mir die Namen in eine Listbox packt - mehr nicht.

Nachtrag: Es geht mir um den ersten Parameter dieser Funktion: NetUserEnum

Ich habe da gerade eine Idee bekommen: Was passiert denn, wenn ich den "Computer auswählen" Dialog anzeige? Könnte man da den Server aus wählen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Domain-Server auflisten

  Alt 31. Jan 2003, 16:20
Hai Luckie,

ich habe bei Torry diesen Code gefunden:

Delphi-Quellcode:
const
  FOCUSDLG_DOMAINS_ONLY = 1;
  FOCUSDLG_SERVERS_ONLY = 2;
  FOCUSDLG_SERVERS_DOMAINS = 3;
  FOCUSDLG_BROWSE_LOGON_DOMAIN = $00010000;
  FOCUSDLG_BROWSE_WKSTA_DOMAIN = $00020000;
  FOCUSDLG_BROWSE_OTHER_DOMAINS = $00040000;
  FOCUSDLG_BROWSE_TRUSTING_DOMAINS = $00080000;
  FOCUSDLG_BROWSE_WORKGROUP_DOMAINS = $00100000;
  FOCUSDLG_BROWSE_ALL_DOMAINS = FOCUSDLG_BROWSE_LOGON_DOMAIN or
    FOCUSDLG_BROWSE_WKSTA_DOMAIN or FOCUSDLG_BROWSE_OTHER_DOMAINS or
    FOCUSDLG_BROWSE_TRUSTING_DOMAINS or FOCUSDLG_BROWSE_WORKGROUP_DOMAINS;


function SystemFocusDialog(hwndOwner: HWND; dwSelectionFlag: UINT;
  wszName: PWideChar; dwBufSize: DWORD; var bOKPressed: Boolean;
  wszHelpFile: PWideChar; dwContextHelpId: DWORD): DWORD; stdcall;
  external 'ntlanman.dllName 'I_SystemFocusDialog';

function ComputerBrowser(hWndParent: HWND; wCompName: PWideChar;
  dwBufLen: DWORD): Boolean;
var
  dwError: DWORD;
begin
  Result := False;
  dwError := SystemFocusDialog(hWndParent, FOCUSDLG_SERVERS_DOMAINS or
    FOCUSDLG_BROWSE_ALL_DOMAINS,
    wCompName, dwBufLen, Result, nil, 0);
  if dwError <> NO_ERROR then Exit;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  wCompName: array [0..MAX_COMPUTERNAME_LENGTH + 1] of WideChar;
begin
  if ComputerBrowser(0, wCompName, MAX_COMPUTERNAME_LENGTH + 1) then
    ShowMessage(wCompName)
  else
    ShowMessage('no computer selected');
end;
Die Funktion ComputerBrowser listet dir alle Domainen und die Computer in ihr auf.

Der Dialog steckt in der ntlanman.dll.

Ich habe es getestet und es geht.


Das wäre doch genau das richtige für dein Programm!!!!
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 31. Jan 2003, 16:24
Ich habe gerade den "Computer auswählen" Dialog eingebaut und mir wurde berichtet, dass man da auch alle Freigebaben sieht, war also nicht so das wahre.

Gott sei dank habe ich es gleich so flexible gemacht, dass ich deinen Code das innerhalb zwei Minuten einbauen kann.

Wie bist du schnell zu erreichen, um es zu testen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 22. Mär 2003, 14:00
Hallo,

bin gerade dabei, einen peer to peer-Messenger fürs LAN zu entwerfen. Dabei fungiert der erste Rechner auf dem das Prog gestartet wird immer als Server und die später kommen sind Clients und übernehmen auch die Serverfunktion, falls der erste wieder rausgeht.
Im Prinzip funktioniert das ganze schon, leider muß ich immer die Rechner im Netz von Hand eingeben und auch der Code von Sharky ist insofern nervig, als daß das Prog im Autostart steht und eigentlich keine Benutzereingabe nötig sein soll.

Ich habe mir jetzt folgenden Quellcode zusammengekl***, leider hat dieser einen Fehler und meine Delphi-Hilfe kennt den Befehl WNetEnumResource nicht.
Code:
Procedure TRecipForm.FormCreate(Sender: TObject);
   Procedure Enum(h: THandle);
   Var
      I            : Integer;
      nRes,cbBuf   : Integer;
      he            : THandle;
      Nr         : Array [0..99] Of TNetResource;
   Begin
      nRes:=100;
      cbBuf:=Sizeof(Nr);
      FillChar(Nr,SizeOf(Nr),0);
      WNetEnumResource(h,nRes,@Nr,cbBuf); //hier liegt das Problem!!!
      For I:=0 To nRes-1 Do
      Begin
         If (Nr[I].dwDisplayType In [RESOURCEDISPLAYTYPE_DOMAIN,
                                     RESOURCEDISPLAYTYPE_SERVER]) And
             Assigned(Nr[i].lpRemoteName) Then
               cbRecip.Items.Add(Nr[i].lpRemoteName);
         If Nr[i].dwDisplayType In [RESOURCEDISPLAYTYPE_NETWORK,
                                    RESOURCEDISPLAYTYPE_DOMAIN] Then
         Begin
            WNetOpenEnum(RESOURCE_GLOBALNET,
                         RESOURCETYPE_DISK,
                         RESOURCEUSAGE_CONTAINER,@Nr[I],he);
            Enum(he);
            WNetCloseEnum(he);
         End;
      End;
   End;
Var
   he         : THandle;
Begin
   cbRecip.Items.Clear;
   WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
   RESOURCEUSAGE_CONTAINER, nil, he);
   Enum(he);
   WNetCloseEnum(he);
End;
Kann mir jemand helfen?

P.S. Wo im Netz kann man Hilfe (möglichst auf deutsch) zu den WNet...-Befehlen finden? - So bin ich übrigens auf Euer Forum gestoßen
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#5
  Alt 22. Mär 2003, 14:13
Hoi, und Herzlich Willkommen.
Bei WNetEnumResource handelt es sich um einen Befehl der WinAPi.
Diese Befehle kann man auf http://msdn.microsoft.com nachlesen, allerdings englisch. Wenn du das öfters machst dann lad dir das PSDK runter, link im Forum suchen.
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 22. Mär 2003, 14:55
Delphi hat da für auch keine pas-Dateien. Du hast zwei Möglichkieten: Entweder übersetzt du dir die nötigen Header selber, oder nimmst die Jedi-Übersetzungen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 22. Mär 2003, 19:22
Danke für den TIP!!!

Also für alle, die es jetzt wissen wollen:
nRes,cbBuf : Integer; ist natürlich falsch!
Richtigerweise müssen beide DWord sein und dann geht das ganze auch super.

Also nochmals vielen Dank.
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.
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