📄 dsclient.pas
字号:
{$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 + -