Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

Computer arbeitsgruppen übergreifend suchen mit Win-Dialog

  Alt 26. Apr 2005, 13:11
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.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(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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat