![]() |
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:
Leider sucht der nur in der eigenen Arbeitsgruppe. Es müsste doch eigentlich auch einen Dialog geben, um arbeitsgruppenübergreifend zu suchen.
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); Mit diesem geht es wohl:
Delphi-Quellcode:
Nur steht dann überall was von einer Domäne, was natürlcih etwas verwirrt, da man ja eigentlich einen Computer auswählen soll. :gruebel:
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; |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Ich benutze den Standarddialog der Shell mit SHBrowseForFolder().
Grüße vom marabu |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Warum zweifelst Du an der Auffassungsgabe vom marabu?
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
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. |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Delphi-Quellcode:
Grüße vom marabu.
FindComputer('Such dir einen Vogel aus:', CSIDL_NETWORK, sMachine);
|
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.
|
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? |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
Dialog-basiertes Suchen im Sinne von MathiasSimmack geht einfacher:
Delphi-Quellcode:
Grüße vom marabu
function SHFindComputer(pidlRoot: PItemIDList; pidlSaveFile: PItemIDList): boolean;
stdcall; external 'Shell32.dll' index 91; |
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. |
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