Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Computer arbeitsgruppen übergreifend suchen mit Win-Dialog (https://www.delphipraxis.net/44883-computer-arbeitsgruppen-uebergreifend-suchen-mit-win-dialog.html)

Luckie 26. Apr 2005 12:11


Computer arbeitsgruppen übergreifend suchen mit Win-Dialog
 
Kennt jemand einen Windows-Dialog, mit dem amn arbeitsgruppenübergreifen Rechner im Netzwerk suchen kann?

Zur Zeit benutze ich folgenden Windows-Dialog aus der ntlanman.dll, um Computer im Netzwerk zu suchen:
Delphi-Quellcode:
type
  TServerBrowseDialogA0 = function(hwnd: HWND; pchBuffer: pointer;
    cchBufSize: DWord): bool; stdcall;

//...;

LANMAN_DLL := GetModuleHandle('NTLANMAN.DLL');
  if LANMAN_DLL = 0 then
    LANMAN_DLL := LoadLibrary('NTLANMAN.DLL');
  if LANMAN_DLL <> 0 then
  begin
    @ServerBrowseDialogA0 := GetProcAddress(LANMAN_DLL,
      ServerBrowseDialogA0_name);
    if @ServerBrowseDialogA0 = nil then
      halt;
  end;

//...;

ServerBrowseDialogA0(hDlg, @buffer, MAX_PATH);
Leider sucht der nur in der eigenen Arbeitsgruppe. Es müsste doch eigentlich auch einen Dialog geben, um arbeitsgruppenübergreifend zu suchen.

Mit diesem geht es wohl:
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.dll' Name '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(Handle, wCompName, MAX_COMPUTERNAME_LENGTH + 1) then
    ShowMessage(wCompName)
  else
    ShowMessage('no computer selected');
end;
Nur steht dann überall was von einer Domäne, was natürlcih etwas verwirrt, da man ja eigentlich einen Computer auswählen soll. :gruebel:

marabu 26. Apr 2005 18:26

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Ich benutze den Standarddialog der Shell mit SHBrowseForFolder().

Grüße vom marabu

Luckie 26. Apr 2005 20:24

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Zitat:

Zitat von marabu
Ich benutze den Standarddialog der Shell mit SHBrowseForFolder().

Um Computer im Netzwerk zu suchen? Bist du sicher, dass du verstanden hast, was ich will?

marabu 26. Apr 2005 20:40

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Warum zweifelst Du an der Auffassungsgabe vom marabu?

Luckie 27. Apr 2005 13:37

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Zitat:

Zitat von marabu
Warum zweifelst Du an der Auffassungsgabe vom marabu?

Warum sprichst du von dir selber in der Drittenpersoneinzahl? :mrgreen:

Warum ich daran zweifele? Weil ich den angesprochenen Dialog nur zum Auswählen von Ordnern kenne. Eventuell zeigst du mir mal, wie du ihn so einsetzt, dass er nur Computer im lokalen Netzwerk arbeitsgruppenübergreifend anzeigt.

marabu 27. Apr 2005 17:31

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Warum sprichst du von dir selber in der Drittenpersoneinzahl? :mrgreen:

Tue ich das wirklich?

Zitat:

Zitat von Luckie
Eventuell zeigst du mir mal, wie du ihn so einsetzt, dass er nur Computer im lokalen Netzwerk arbeitsgruppenübergreifend anzeigt.

SHBrowseForFolder() listet Folder und Virtuelle Folder aus dem Shell-Namespace. Computer und Drucker sind virtuelle Folder. Achte auf BIF_BROWSEFORCOMPUTER im angehängten Code. Beim Aufruf der Funktion kannst du bestimmen, was der RootFolder sein soll. Näheres im PSDK.

Delphi-Quellcode:
FindComputer('Such dir einen Vogel aus:', CSIDL_NETWORK, sMachine);
Grüße vom marabu.

MathiasSimmack 27. Apr 2005 17:36

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Luckie hat auf seiner Homepage selbst eine SHBrowseForFolder-Lösung. Ich glaube, die hat er auch ganz allein entworfen, :stupid:. Der Dialog ist nützlich, wenn du dir die Netzwerkumgebung anzeigen lassen willst. Aber Suchen (so wie ich das verstehe: Rechnername eintippen -> Enter -> Computer wird gesucht) kannst du damit nicht.

Luckie 27. Apr 2005 20:15

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Nein nein, das passt schon. Danke marabu, das war es was ich brauchte. Habe nur nicht gewusst, dass der BrowsForFolder Dialog das auch kann. ;)

Achm, was mir da noch einfällt: Klappt das jetzt auch arbeitsgruppenübergreifend?

marabu 28. Apr 2005 06:28

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
Zitat:

Zitat von Luckie
Klappt das jetzt auch arbeitsgruppenübergreifend?

Das Fenster stellt einen Browser zur Verfügung. Wenn du CSIDL_NETWORK für den root folder nimmst, dann kannst du in jede Arbeitsgruppe rein navigieren.

Dialog-basiertes Suchen im Sinne von MathiasSimmack geht einfacher:

Delphi-Quellcode:
function SHFindComputer(pidlRoot: PItemIDList; pidlSaveFile: PItemIDList): boolean;
  stdcall; external 'Shell32.dll' index 91;
Grüße vom marabu

Luckie 28. Apr 2005 10:02

Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
 
"Computer auswählen" trifft es wohl besser, was ich will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.
Seite 1 von 3  1 23      

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