![]() |
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.
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Kann es sein, dass "SHFindComputer" unter 2000 und XP nicht mehr funktioniert? :gruebel: Wundern würde es mich nicht, weil die XP-Suchfunktion ja so ein Explorer-Addin ist. Ist bei 2000 IMHO auch so. Kann auch sein, dass mir langsam mein Delphi-Wissen abhanden kommt (sch*** CSharp :mrgreen:), aber bei mir erscheint bei "SHFindComputer" gerade nichts.
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Guck mal in der DLL nach den Namen und lad sie über den Namen anstatt über den Index.
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
In der Shell32.dll von Windows 2000 gibt es besagte Funktion jedenfalls nicht, das ist richtig. Die korrekte Lösung ist aber sowieso der modernisierte Browse-Dialog. Der, den du (Luckie) vorher benutzt hast, stammt noch von NT4 und früher.
Hier einmal alle die mit SHFi* beginnen:
Code:
Alle mit SH*:
SHFileOperation
SHFileOperationA SHFileOperationW
Code:
SHEmptyRecycleBinA
SHEmptyRecycleBinW SheRemoveQuotesA SheRemoveQuotesW SheSetCurDrive SheShortenPathA SheShortenPathW SHExtractIconsW SHFileOperation SHFileOperationA SHFileOperationW SHFormatDrive SHFreeNameMappings SHGetDataFromIDListA SHGetDataFromIDListW SHGetDesktopFolder SHGetDiskFreeSpaceA SHGetDiskFreeSpaceExA SHGetDiskFreeSpaceExW SHGetFileInfo SHGetFileInfoA SHGetFileInfoW SHGetFolderLocation SHGetFolderPathA SHGetFolderPathW SHGetIconOverlayIndexA SHGetIconOverlayIndexW SHGetInstanceExplorer SHGetMalloc SHGetNewLinkInfo SHGetNewLinkInfoA SHGetNewLinkInfoW SHGetPathFromIDList SHGetPathFromIDListA SHGetPathFromIDListW SHGetSettings SHGetSpecialFolderLocation SHGetSpecialFolderPathA SHGetSpecialFolderPathW SHHelpShortcuts_RunDLL SHHelpShortcuts_RunDLLA SHHelpShortcuts_RunDLLW SHInvokePrinterCommandA SHInvokePrinterCommandW SHIsFileAvailableOffline SHLoadInProc SHLoadNonloadedIconOverlayIdentifiers SHPathPrepareForWriteA SHPathPrepareForWriteW SHQueryRecycleBinA SHQueryRecycleBinW SHUpdateRecycleBinIcon |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
An dem Namen würde ich das jetzt sowieso nicht festmachen wollen. Wir hatten schon mal einen Beitrag über so genannte "inoffizielle Dialoge", wie etwas den Ausführen-Dialog. Aber das kannst du nicht wissen, da warst du noch nicht angemeldet. :stupid: Jedenfalls waren die meisten dieser Dialoge auch bloß per Index erreich- und nutzbar.
Wie gesagt, da unserem Luckie ja das Browsen reicht, spielt´s keine große Rolle. Mich hat´s nur interessiert, aber scheinbar ist das mal so ein Fall, wo der Index nicht mehr stimmt, bzw. wo es den Dialog überhaupt nicht mehr gibt. |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
Mod-Osterhasi Luckie schrieb: Guck mal in der DLL nach den Namen und lad sie über den Namen anstatt über den Index. |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Und das bedeutet, bezogen auf mein Zitat, jetzt was? :gruebel:
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
Grüße vom marabu |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Wollt ihr mich in Atem halten?
Ich muss ab und zu auch Geld verdienen!
Delphi-Quellcode:
Grüße vom marabu
program FC;
{$APPTYPE CONSOLE} uses ActiveX, ShlObj; function SHFindComputer(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): boolean; stdcall; external 'Shell32.dll' index 91; begin OleInitialize(nil); SHFindComputer(nil, nil); end. |
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Geht bei mir: Windows 2000 SP4.
|
Re: Computer arbeitsgruppen übergreifend suchen mit Win-Dial
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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