⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsclient.pas

📁 详细Windows API大全有关知识以及相关问题
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  {$EXTERNALSYM DSGIF_ISMASK}
  DSGIF_GETDEFAULTICON     = $0000010; // = 1 => if no icon then get default (from shell32.dll)
  {$EXTERNALSYM DSGIF_GETDEFAULTICON}
  DSGIF_DEFAULTISCONTAINER = $0000020; // = 1 => if returning default icon, return it as a container
  {$EXTERNALSYM DSGIF_DEFAULTISCONTAINER}

//
// Flags for IDsDisplaySpecifier::IsClassContainer
//

  DSICCF_IGNORETREATASLEAF = $00000001; // = 1 => igore the "treatAsLeaf" and use only schema information
  {$EXTERNALSYM DSICCF_IGNORETREATASLEAF}

//
// Callback function used for IDsDisplaySpecifier::EnumClassAttributes
//

  DSECAF_NOTLISTED = $00000001; // = 1 => hide from the field drop down in the query UI
  {$EXTERNALSYM DSECAF_NOTLISTED}

type
  LPDSENUMATTRIBUTES = function (lParam: LPARAM; pszAttributeName: LPCWSTR;
    pszDisplayName: LPCWSTR; dwFlags: DWORD): HRESULT; stdcall;
  {$EXTERNALSYM LPDSENUMATTRIBUTES}
  TDsEnumAttributes = LPDSENUMATTRIBUTES;  

//
// IDsDisplaySpecifier::GetClassCreationInfo information
//

const
  DSCCIF_HASWIZARDDIALOG      = $00000001; // = 1 => return the wizard dialog CLSID
  {$EXTERNALSYM DSCCIF_HASWIZARDDIALOG}
  DSCCIF_HASWIZARDPRIMARYPAGE = $00000002; // = 1 => returning a primary wizard dlg CLSID
  {$EXTERNALSYM DSCCIF_HASWIZARDPRIMARYPAGE}

type
  LPDSCLASSCREATIONINFO = ^DSCLASSCREATIONINFO;
  {$EXTERNALSYM LPDSCLASSCREATIONINFO}
  DSCLASSCREATIONINFO = record
    dwFlags: DWORD;
    clsidWizardDialog: CLSID;
    clsidWizardPrimaryPage: CLSID;
    cWizardExtensions: DWORD; // how many extension CLSIDs?
    aWizardExtensions: array [0..0] of CLSID;
  end;
  {$EXTERNALSYM DSCLASSCREATIONINFO}
  TDsClassCreationInfo = DSCLASSCREATIONINFO;
  PDsClassCreationInfo = LPDSCLASSCREATIONINFO;

//
// IDsDisplaySpecifier - a COM object for interacting with display specifiers
//

  IDsDisplaySpecifier = interface (IUnknown)
  ['{1ab4a8c0-6a0b-11d2-ad49-00c04fa31a86}']
    function SetServer(pszServer, pszUserName, pszPassword: LPCWSTR;
      dwFlags: DWORD): HRESULT; stdcall;
    function SetLanguageID(langid: LANGID): HRESULT; stdcall;
    function GetDisplaySpecifier(pszObjectClass: LPCWSTR; riid: LPGUID;
      var ppv: Pointer): HRESULT; stdcall;
    function GetIconLocation(pszObjectClass: LPCWSTR; dwFlags: DWORD;
      pszBuffer: LPWSTR; cchBuffer: Integer; var presid: Integer): HRESULT; stdcall;
    function GetIcon(pszObjectClass: LPCWSTR; dwFlags: DWORD;
      cxIcon, cyIcon: Integer): HICON; stdcall;
    function GetFriendlyClassName(pszObjectClass: LPCWSTR; pszBuffer: LPWSTR;
      cchBuffer: Integer): HRESULT; stdcall;
    function GetFriendlyAttributeName(pszObjectClass, pszAttributeName,
      pszBuffer: LPCWSTR; cchBuffer: UINT): HRESULT; stdcall;
    function IsClassContainer(pszObjectClass, pszADsPath: LPCWSTR;
      dwFlags: DWORD): BOOL; stdcall;
    function GetClassCreationInfo(pszObjectClass: LPCWSTR;
      var ppdscci: LPDSCLASSCREATIONINFO): HRESULT; stdcall;
    function EnumClassAttributes(pszObjectClass: LPCWSTR;
      pcbEnum: LPDSENUMATTRIBUTES; lParam: LPARAM): HRESULT; stdcall;
    function GetAttributeADsType(pszAttributeName: LPCWSTR): ADSTYPEENUM; stdcall;
  end;
  {$EXTERNALSYM IDsDisplaySpecifier}

//---------------------------------------------------------------------------//
//
// DsBrowseForContainer
// --------------------
//  Provides a container browser similar to the SHBrowseForFolder, except
//  targetting the DS.
//
// In:
//  pInfo -> DSBROWSEINFO structure
//
// Out:
//  == IDOK/IDCANCEL depending on buttons, -1 if error
//
//---------------------------------------------------------------------------//

type
  BFFCALLBACK = function (hwnd: HWND; msg: UINT;
    lpData, lParam: LPARAM): Integer; stdcall;
  {$NODEFINE BFFCALLBACK}
  TBffCallback = BFFCALLBACK;

  PDSBROWSEINFOW = ^DSBROWSEINFOW;
  DSBROWSEINFOW = record
    cbStruct: DWORD; // size of structure in bytes
    hwndOwner: HWND; // dialog owner
    pszCaption: LPCWSTR; // dialog caption text (can be NULL)
    pszTitle: LPCWSTR; // displayed above the tree view control (can be NULL)
    pszRoot: LPCWSTR; // ADS path to root (NULL == root of DS namespace)
    pszPath: LPWSTR; // [in/out] initial selection & returned path (required)
    cchPath: ULONG; // size of pszPath buffer in characters
    dwFlags: DWORD;
    pfnCallback: BFFCALLBACK; // callback function (see SHBrowseForFolder)
    lParam: LPARAM; // passed to pfnCallback as lpUserData
    dwReturnFormat: DWORD; // ADS_FORMAT_* (default is ADS_FORMAT_X500_NO_SERVER)
    pUserName: LPCWSTR; // Username and Password to authenticate against DS with
    pPassword: LPCWSTR;
    pszObjectClass: LPWSTR; // UNICODE string for the object class
    cchObjectClass: ULONG;
  end;
  {$EXTERNALSYM DSBROWSEINFOW}
  TDsBrowseInfoW = DSBROWSEINFOW;

  PDSBROWSEINFOA = ^DSBROWSEINFOA;
  DSBROWSEINFOA = record
    cbStruct: DWORD;
    hwndOwner: HWND;
    pszCaption: LPCSTR;
    pszTitle: LPCSTR;
    pszRoot: LPCWSTR; // ADS paths are always UNICODE
    pszPath: LPWSTR; // ditto
    cchPath: ULONG;
    dwFlags: DWORD;
    pfnCallback: BFFCALLBACK;
    lParam: LPARAM;
    dwReturnFormat: DWORD;
    pUserName: LPCWSTR; // Username and Password to authenticate against DS with
    pPassword: LPCWSTR;
    pszObjectClass: LPWSTR; // object class of the selected object
    cchObjectClass: ULONG;
  end;
  {$EXTERNALSYM DSBROWSEINFOA}
  TDsBrowseInfoA = DSBROWSEINFOA;

{$IFDEF UNICODE}
  DSBROWSEINFO = DSBROWSEINFOW;
  {$EXTERNALSYM DSBROWSEINFO}
  PDSBROWSEINFO = PDSBROWSEINFOW;
  {$EXTERNALSYM PDSBROWSEINFO}
  TDsBrowseInfo = TDsBrowseInfoW;
{$ELSE}
  DSBROWSEINFO = DSBROWSEINFOA;
  {$EXTERNALSYM DSBROWSEINFO}
  PDSBROWSEINFO = PDSBROWSEINFOA;
  {$EXTERNALSYM PDSBROWSEINFO}
  TDsBrowseInfo = TDsBrowseInfoA;
{$ENDIF}

// DSBROWSEINFO flags

const
  DSBI_NOBUTTONS          = $00000001; // NOT TVS_HASBUTTONS
  {$EXTERNALSYM DSBI_NOBUTTONS}
  DSBI_NOLINES            = $00000002; // NOT TVS_HASLINES
  {$EXTERNALSYM DSBI_NOLINES}
  DSBI_NOLINESATROOT      = $00000004; // NOT TVS_LINESATROOT
  {$EXTERNALSYM DSBI_NOLINESATROOT}
  DSBI_CHECKBOXES         = $00000100; // TVS_CHECKBOXES
  {$EXTERNALSYM DSBI_CHECKBOXES}
  DSBI_NOROOT             = $00010000; // don't include pszRoot in tree (its children become top level nodes)
  {$EXTERNALSYM DSBI_NOROOT}
  DSBI_INCLUDEHIDDEN      = $00020000; // display hidden objects
  {$EXTERNALSYM DSBI_INCLUDEHIDDEN}
  DSBI_EXPANDONOPEN       = $00040000; // expand to the path specified in pszPath when opening the dialog
  {$EXTERNALSYM DSBI_EXPANDONOPEN}
  DSBI_ENTIREDIRECTORY    = $00090000; // browse the entire directory (defaults to having DSBI_NOROOT set)
  {$EXTERNALSYM DSBI_ENTIREDIRECTORY}
  DSBI_RETURN_FORMAT      = $00100000; // dwReturnFormat field is valid
  {$EXTERNALSYM DSBI_RETURN_FORMAT}
  DSBI_HASCREDENTIALS     = $00200000; // pUserName & pPassword are valid
  {$EXTERNALSYM DSBI_HASCREDENTIALS}
  DSBI_IGNORETREATASLEAF  = $00400000; // ignore the treat as leaf flag when calling IsClassContainer
  {$EXTERNALSYM DSBI_IGNORETREATASLEAF}
  DSBI_SIMPLEAUTHENTICATE = $00800000; // don't use secure authentication to DS
  {$EXTERNALSYM DSBI_SIMPLEAUTHENTICATE}
  DSBI_RETURNOBJECTCLASS  = $01000000; // return object class of selected object
  {$EXTERNALSYM DSBI_RETURNOBJECTCLASS}

  DSB_MAX_DISPLAYNAME_CHARS = 64;
  {$EXTERNALSYM DSB_MAX_DISPLAYNAME_CHARS}

type
  PDSBITEMW = ^DSBITEMW;
  DSBITEMW = record
    cbStruct: DWORD;
    pszADsPath: LPCWSTR; // ADS paths are always Unicode
    pszClass: LPCWSTR; // ADS properties are always Unicode
    dwMask: DWORD;
    dwState: DWORD;
    dwStateMask: DWORD;
    szDisplayName: array [0..DSB_MAX_DISPLAYNAME_CHARS - 1] of WCHAR;
    szIconLocation: array [0..MAX_PATH - 1] of WCHAR;
    iIconResID: Integer;
  end;
  {$EXTERNALSYM DSBITEMW}
  TDsBItemW = DSBITEMW;

  PDSBITEMA = ^DSBITEMA;
  DSBITEMA = record
    cbStruct: DWORD;
    pszADsPath: LPCWSTR; // ADS paths are always Unicode
    pszClass: LPCWSTR; // ADS properties are always Unicode
    dwMask: DWORD;
    dwState: DWORD;
    dwStateMask: DWORD;
    szDisplayName: array [0..DSB_MAX_DISPLAYNAME_CHARS - 1] of CHAR;
    szIconLocation: array [0..MAX_PATH - 1] of CHAR;
    iIconResID: Integer;
  end;
  {$EXTERNALSYM DSBITEMA}
  TDsBItemA = DSBITEMA;

{$IFDEF UNICODE}
  DSBITEM = DSBITEMW;
  {$EXTERNALSYM DSBITEM}
  PDSBITEM = PDSBITEMW;
  {$EXTERNALSYM PDSBITEM}
  TDsBItem = TDsBItemW;
{$ELSE}
  DSBITEM = DSBITEMA;
  {$EXTERNALSYM DSBITEM}
  PDSBITEM = PDSBITEMA;
  {$EXTERNALSYM PDSBITEM}
  TDsBItem = TDsBItemA;
{$ENDIF}

// DSBITEM mask flags

const
  DSBF_STATE        = $00000001;
  {$EXTERNALSYM DSBF_STATE}
  DSBF_ICONLOCATION = $00000002;
  {$EXTERNALSYM DSBF_ICONLOCATION}
  DSBF_DISPLAYNAME  = $00000004;
  {$EXTERNALSYM DSBF_DISPLAYNAME}

// DSBITEM state flags

  DSBS_CHECKED = $00000001;
  {$EXTERNALSYM DSBS_CHECKED}
  DSBS_HIDDEN  = $00000002;
  {$EXTERNALSYM DSBS_HIDDEN}
  DSBS_ROOT    = $00000004;
  {$EXTERNALSYM DSBS_ROOT}

//
// this message is sent to the callback to see if it wants to insert or modify
// the item that is about to be inserted into the view.
//

  DSBM_QUERYINSERTW = 100; // lParam = PDSBITEMW (state, icon & name may be modified). Return TRUE if handled.
  {$EXTERNALSYM DSBM_QUERYINSERTW}
  DSBM_QUERYINSERTA = 101; // lParam = PDSBITEMA (state, icon & name may be modified). Return TRUE if handled.
  {$EXTERNALSYM DSBM_QUERYINSERTA}

{$IFDEF UNICODE}
  DSBM_QUERYINSERT = DSBM_QUERYINSERTW;
  {$EXTERNALSYM DSBM_QUERYINSERT}
{$ELSE}
  DSBM_QUERYINSERT = DSBM_QUERYINSERTA;
  {$EXTERNALSYM DSBM_QUERYINSERT}
{$ENDIF}

//
// Called before we change the state of the icon (on tree collapse/expand)
//

  DSBM_CHANGEIMAGESTATE = 102; // lParam = adspath.  Return TRUE/FALSE top allow/disallow
  {$EXTERNALSYM DSBM_CHANGEIMAGESTATE}

//
// The dialog receives a WM_HELP
//

  DSBM_HELP = 103; // lParam == LPHELPINFO structure
  {$EXTERNALSYM DSBM_HELP}

//
// The dialog receives a WM_CONTEXTMENU, DSBID_xxx are the control ID's for this
// dialog so that you can display suitable help.
//

  DSBM_CONTEXTMENU = 104; // lParam == window handle to retrieve help for
  {$EXTERNALSYM DSBM_CONTEXTMENU}

//
// These are the control IDs for the controls in the dialog.   The callback can use
// these to modify the contents of the dialog as required.
//

  DSBID_BANNER        = 256;
  {$EXTERNALSYM DSBID_BANNER}
  DSBID_CONTAINERLIST = 257;
  {$EXTERNALSYM DSBID_CONTAINERLIST}

//
// API exported for browsing for containers.
//

function DsBrowseForContainerW(const pInfo: DSBROWSEINFOW): Integer; stdcall;
{$EXTERNALSYM DsBrowseForContainerW}
function DsBrowseForContainerA(const pInfo: DSBROWSEINFOA): Integer; stdcall;
{$EXTERNALSYM DsBrowseForContainerA}

{$IFDEF UNICODE}
function DsBrowseForContainer(const pInfo: DSBROWSEINFOW): Integer; stdcall;
{$EXTERNALSYM DsBrowseForContainer}
{$ELSE}
function DsBrowseForContainer(const pInfo: DSBROWSEINFOA): Integer; stdcall;
{$EXTERNALSYM DsBrowseForContainer}
{$ENDIF}

//BUGBUG: these are here to keep old clients building - remove soon

function DsGetIcon(dwFlags: DWORD; pszObjectClass: LPWSTR;
  cxImage, cyImage: Integer): HICON; stdcall;
{$EXTERNALSYM DsGetIcon}
procedure DsGetFriendlyClassName(pszObjectClass, pszBuffer: LPWSTR;
  cchBuffer: UINT); stdcall;
{$EXTERNALSYM DsGetFriendlyClassName}

implementation

const
  dsuiext = 'dsuiext.dll';

function DsBrowseForContainerW; external dsuiext name 'DsBrowseForContainerW';
function DsBrowseForContainerA; external dsuiext name 'DsBrowseForContainerA';
{$IFDEF UNICODE}
function DsBrowseForContainer; external dsuiext name 'DsBrowseForContainerW';
{$ELSE}
function DsBrowseForContainer; external dsuiext name 'DsBrowseForContainerA';
{$ENDIF}

function DsGetIcon; external dsuiext name 'DsGetIcon';
procedure DsGetFriendlyClassName; external dsuiext name 'DsGetFriendlyClassName';

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -