IContextMenu -
ICopyHook -
IEnumIDList - ------------------------------------------------------------------------- } { IEnumIDList interface } { IShellFolder::EnumObjects member returns an IEnumIDList object.
IExtractIcon - this icon should not be cached
IFileViewer - The viewer can view it.
IFileViewerSite - =========================================================================== } { IFileViewerSite Interface } {===========================================================================
IShellExtInit -
IShellFolder - is this removeable media?
IShellLink -
IShellPropSheetExt -
SHAddToRecentDocs -
SHBrowseForFolder -
SHChangeNotify - APIs
SHGetDesktopFolder - Helper function which returns a IShellFolder interface to the desktop } { folder.
SHGetInstanceExplorer -
SHGetMalloc -
SHGetPathFromIDList - Buffer to fill in
SHGetSpecialFolderLocation -
SHLoadInProc -
BFFCALLBACK
PBrowseInfo
PCMInvokeCommandInfo
PDROPFILES
PFILEDESCRIPTOR
PFILEGROUPDESCRIPTOR
PFVShowInfo
PIDA
PItemIDList
PNRESARRAY
PSHItemID
PSTRRet
TBrowseInfo
TCMInvokeCommandInfo
TDROPFILES
TFILEDESCRIPTOR
TFILEGROUPDESCRIPTOR
TFVShowInfo
TIDA
TItemIDList
TNRESARRAY
TSHItemID
TSTRRET
BFFM_ENABLEOK
BFFM_INITIALIZED
BFFM_SELCHANGED
BFFM_SETSELECTION
BFFM_SETSTATUSTEXT
BIF_BROWSEFORCOMPUTER
BIF_BROWSEFORPRINTER
BIF_DONTGOBELOWDOMAIN
BIF_RETURNFSANCESTORS
BIF_RETURNONLYFSDIRS
BIF_STATUSTEXT
CFSTR_FILECONTENTS
CFSTR_FILEDESCRIPTOR
CFSTR_FILENAME
CFSTR_FILENAMEMAP
CFSTR_NETRESOURCES
CFSTR_PRINTERGROUP
CFSTR_SHELLIDLIST
CFSTR_SHELLIDLISTOFFSET
CLSID_ShellDesktop
CLSID_ShellLink
CMDSTR_NEWFOLDER
CMDSTR_VIEWDETAILS
CMDSTR_VIEWLIST
CMF_DEFAULTONLY
CMF_EXPLORE
CMF_NORMAL
CMF_RESERVED
CMF_VERBSONLY
CMIC_MASK_FLAG_NO_UI
CMIC_MASK_HOTKEY
CMIC_MASK_ICON
CMIC_MASK_MODAL
CSIDL_BITBUCKET
CSIDL_CONTROLS
CSIDL_DESKTOP
CSIDL_DESKTOPDIRECTORY
CSIDL_DRIVES
CSIDL_FAVORITES
CSIDL_FONTS
CSIDL_NETHOOD
CSIDL_NETWORK
CSIDL_PERSONAL
CSIDL_PRINTERS
CSIDL_PROGRAMS
CSIDL_RECENT
CSIDL_SENDTO
CSIDL_STARTMENU
CSIDL_STARTUP
CSIDL_TEMPLATES
DVASPECT_SHORTNAME
FD_ACCESSTIME
FD_ATTRIBUTES
FD_CLSID
FD_CREATETIME
FD_FILESIZE
FD_LINKUI
FD_SIZEPOINT
FD_WRITESTIME
FVSIF_CANVIEWIT
FVSIF_NEWFAILED
FVSIF_NEWFILE
FVSIF_PINNED
FVSIF_RECT
GCS_HELPTEXT
GCS_VALIDATE
GCS_VERB
GIL_DONTCACHE
GIL_FORSHELL
GIL_NOTFILENAME
GIL_OPENICON
GIL_PERCLASS
GIL_PERINSTANCE
GIL_SIMULATEDOC
IID_IContextMenu
IID_IEnumIDList
IID_IExtractIcon
IID_IFileViewer
IID_IFileViewerSite
IID_IShellCopyHook
IID_IShellExtInit
IID_IShellFolder
IID_IShellLink
IID_IShellPropSheetExt
SFGAO_CANCOPY
SFGAO_CANDELETE
SFGAO_CANLINK
SFGAO_CANMOVE
SFGAO_CANRENAME
SFGAO_CAPABILITYMASK
SFGAO_CONTENTSMASK
SFGAO_DISPLAYATTRMASK
SFGAO_DROPTARGET
SFGAO_FILESYSANCESTOR
SFGAO_FILESYSTEM
SFGAO_FOLDER
SFGAO_GHOSTED
SFGAO_HASPROPSHEET
SFGAO_HASSUBFOLDER
SFGAO_LINK
SFGAO_READONLY
SFGAO_REMOVABLE
SFGAO_SHARE
SFGAO_VALIDATE
SHARD_PATH
SHARD_PIDL
SHCNE_ALLEVENTS
SHCNE_ASSOCCHANGED
SHCNE_ATTRIBUTES
SHCNE_CREATE
SHCNE_DELETE
SHCNE_DISKEVENTS
SHCNE_DRIVEADD
SHCNE_DRIVEADDGUI
SHCNE_DRIVEREMOVED
SHCNE_FREESPACE
SHCNE_GLOBALEVENTS
SHCNE_INTERRUPT
SHCNE_MEDIAINSERTED
SHCNE_MEDIAREMOVED
SHCNE_MKDIR
SHCNE_NETSHARE
SHCNE_NETUNSHARE
SHCNE_RENAMEFOLDER
SHCNE_RENAMEITEM
SHCNE_RMDIR
SHCNE_SERVERDISCONNECT
SHCNE_UPDATEDIR
SHCNE_UPDATEIMAGE
SHCNE_UPDATEITEM
SHCNF_DWORD
SHCNF_FLUSH
SHCNF_FLUSHNOWAIT
SHCNF_IDLIST
SHCNF_PATH
SHCNF_PRINTER
SHCNF_TYPE
SHCONTF_FOLDERS
SHCONTF_INCLUDEHIDDEN
SHCONTF_NONFOLDERS
SHGDN_FORPARSING
SHGDN_INFOLDER
SHGDN_NORMAL
SLGP_SHORTPATH
SLGP_UNCPRIORITY
SLR_ANY_MATCH
SLR_NO_UI
SLR_UPDATE
STRRET_CSTR
STRRET_OFFSET
STRRET_WSTR
procedure SHAddToRecentDocs(uFlags:UINT; pv:pointer);
function SHBrowseForFolder(lpbi:PBROWSEINFO):PItemIDList;
procedure SHChangeNotify(wEventId:longint; uFlags:UINT;
dwItem1,dwItem2:pointer);
APIs
function SHGetDesktopFolder(var ppshf: ISHELLFOLDER):HResult;
Helper function which returns a IShellFolder interface to the desktop } { folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop. } { CoCreateInstance(CLSID_Desktop, NULL, } { CLSCTX_INPROC, IID_IShellFolder, &pshf);
function SHGetInstanceExplorer(var Unk:IUnknown):HResult;
function SHGetMalloc(var ppMalloc: IMALLOC):HResult;
function SHGetPathFromIDList(pidl:PITEMIDLIST; pszPath:LPSTR):BOOL;
Buffer to fill in
function SHGetSpecialFolderLocation(hwndOwner:HWND; nFolder:integer;
var ppidl:PITEMIDLIST):HResult;
function SHLoadInProc(rclsid:TCLSID):HRESULT;
BFFCALLBACK = function(Wnd:HWND;uMsg:UINT;lParam,lpData:LPARAM):integer stdcall
------------------------------------------------------------------------- } { SHBrowseForFolder API } {-------------------------------------------------------------------------
PBrowseInfo = ^TBrowseInfo
PCMInvokeCommandInfo = ^TCMInvokeCommandInfo
!! CMIC_VALID_SEE_FLAGS = SEE_VALID_CMIC_FLAGS; (* ; Internal
PDROPFILES = ^TDROPFILES
format of CF_HDROP and CF_PRINTERS, in the HDROP case the data that follows } { is a double null terinated list of file names, for printers they are printer } { friendly names
PFILEDESCRIPTOR = ^TFILEDESCRIPTOR
'link' UI is prefered
PFILEGROUPDESCRIPTOR = ^TFILEGROUPDESCRIPTOR
format of CF_FILEGROUPDESCRIPTOR
PFVShowInfo = ^TFVShowInfo
PIDA = ^TIDA
format of CF_IDLIST
PItemIDList = ^TItemIDList
ITEMIDLIST -- List if item IDs (combined with 0-terminator)
PNRESARRAY = ^TNRESARRAY
format of CF_NETRESOURCE
PSHItemID = ^TSHItemID
SHITEMID -- Item ID
PSTRRet = ^TStrRet
TBrowseInfo = record
hwndOwner : HWND;
pidlRoot : PITEMIDLIST;
pszDisplayName : LPSTR;
lpszTitle : LPCSTR;
ulFlags : UINT;
lpfn : BFFCALLBACK;
lParam : LPARAM;
iImage : integer;
end;
TCMInvokeCommandInfo = record
cbSize : DWORD;
fMask : DWORD;
hwnd : HWND;
lpVerb : LPCSTR;
lpParameters : LPCSTR;
lpDirectory : LPCSTR;
nShow : integer;
dwHotKey : DWORD;
hIcon : THANDLE;
end;
TDROPFILES = record
pFiles : DWORD;
pt : TPOINT;
fNC : BOOL;
fWide : BOOL;
end;
TFILEDESCRIPTOR = record
dwFlags : DWORD;
clsid : TCLSID;
sizel : TSIZE;
pointl : TPOINT;
dwFileAttributes : DWORD;
ftCreationTime : TFILETIME;
ftLastAccessTime : TFILETIME;
ftLastWriteTime : TFILETIME;
nFileSizeHigh : DWORD;
nFileSizeLow : DWORD;
cFileName : array[0..MAX_PATH-1] of CHAR;
end;
TFILEGROUPDESCRIPTOR = record
cItems : UINT;
fgd : array[0..0] of TFILEDESCRIPTOR;
end;
TFVShowInfo = record
cbSize : DWORD;
hwndOwner : HWND;
iShow : integer;
dwFlags : DWORD;
rect : TRECT;
punkRel : IUNKNOWN;
strNewFile : array[0..MAX_PATH-1] of TOLECHAR;
end;
TIDA = record
cidl : UINT;
aoffset : array[0..0] of UINT;
end;
TItemIDList = record
mkid : TSHITEMID;
end;
TNRESARRAY = record
cItems : UINT;
nr : array[0..0] of TNETRESOURCE;
end;
TSHItemID = record
cb : word;
abID : array[0..0] of BYTE;
end;
TSTRRET = record
uType : UINT;
end;
BFFM_ENABLEOK = (WM_USER + 101)
BFFM_INITIALIZED = 1
message from browser
BFFM_SELCHANGED = 2
BFFM_SETSELECTION = (WM_USER + 102)
BFFM_SETSTATUSTEXT = (WM_USER + 100)
messages to browser
BIF_BROWSEFORCOMPUTER = $1000 { Browsing for Computers. }
BIF_BROWSEFORPRINTER = $2000 { Browsing for Printers }
Browsing for Computers.
BIF_DONTGOBELOWDOMAIN = $0002 { For starting the Find Computer }
For finding a folder to start document searching
BIF_RETURNFSANCESTORS = $0008
BIF_RETURNONLYFSDIRS = $0001 { For finding a folder to start document searching }
Browsing for directory.
BIF_STATUSTEXT = $0004
For starting the Find Computer
CFSTR_FILECONTENTS = 'FileContents' { CF_FILECONTENTS }
CF_FILEGROUPDESCRIPTOR
CFSTR_FILEDESCRIPTOR = 'FileGroupDescriptor' { CF_FILEGROUPDESCRIPTOR }
CF_NETRESOURCE
CFSTR_FILENAME = 'FileName' { CF_FILENAME }
CF_FILECONTENTS
CFSTR_FILENAMEMAP = 'FileNameMap' { CF_FILENAMEMAP }
CF_PRINTERS
CFSTR_NETRESOURCES = 'Net Resource' { CF_NETRESOURCE }
CF_OBJECTPOSITIONS
CFSTR_PRINTERGROUP = 'PrinterFriendlyName' { CF_PRINTERS }
CF_FILENAME
CFSTR_SHELLIDLIST = 'Shell IDList Array' { CF_IDLIST }
========================================================================== } { Clipboard format which may be supported by IDataObject from system } { defined shell folders (such as directories, network, ...). } {==========================================================================
CFSTR_SHELLIDLISTOFFSET = 'Shell Object Offsets' { CF_OBJECTPOSITIONS }
CF_IDLIST
CLSID_ShellDesktop = (
D1:$00021400; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
Übertragung der Deklarationen aus der Include-Datei
ShlObj.h von Borland C++
Die Deklarationen und Kommentare dieser Unit entstammen
dem Archiv SHELLOBJ.ZIP aus dem Borland Delphi 32-Forum
von CompuServe; dort finden Sie noch weitere ca. 400
Zeilen Kommentare, aber keinen Copyright-Vermerk. Da
die Datei ShellObj.h von C++ den Microsoft-Copyright-
Vermerk enthält, wurden die Kommentare nicht in diese
Datei nicht übernommen.
CLSID_ShellLink = (
D1:$00021401; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
CMDSTR_NEWFOLDER = 'NewFolder'
validate command exists
CMDSTR_VIEWDETAILS = 'ViewDetails'
CMDSTR_VIEWLIST = 'ViewList'
CMF_DEFAULTONLY = $00000001
CMF_EXPLORE = $00000004
CMF_NORMAL = $00000000
QueryContextMenu uFlags
CMF_RESERVED = $ffff0000 { View specific }
CMF_VERBSONLY = $00000002
CMIC_MASK_FLAG_NO_UI = SEE_MASK_FLAG_NO_UI
CMIC_MASK_HOTKEY = SEE_MASK_HOTKEY
CMIC_MASK_ICON = SEE_MASK_ICON
CMIC_MASK_MODAL = $80000000 (* ; Internal *)
CSIDL_BITBUCKET = $000a
CSIDL_CONTROLS = $0003
CSIDL_DESKTOP = $0000
hierfür wird auch die Datei RegStr.h benötigt: REGSTR_PATH_SPECIAL_FOLDERS = REGSTR_PATH_EXPLORER+'\Shell Folders';
CSIDL_DESKTOPDIRECTORY = $0010
CSIDL_DRIVES = $0011
CSIDL_FAVORITES = $0006
CSIDL_FONTS = $0014
CSIDL_NETHOOD = $0013
CSIDL_NETWORK = $0012
CSIDL_PERSONAL = $0005
CSIDL_PRINTERS = $0004
CSIDL_PROGRAMS = $0002
CSIDL_RECENT = $0008
CSIDL_SENDTO = $0009
CSIDL_STARTMENU = $000b
CSIDL_STARTUP = $0007
CSIDL_TEMPLATES = $0015
DVASPECT_SHORTNAME = 2 { use for CF_HDROP to get short name version }
CF_OBJECTPOSITIONS
FD_ACCESSTIME = $0010
FD_ATTRIBUTES = $0004
FD_CLSID = $0001
FILEDESCRIPTOR.dwFlags field indicate which fields are to be used
FD_CREATETIME = $0008
FD_FILESIZE = $0040
FD_LINKUI = $8000
FD_SIZEPOINT = $0002
FD_WRITESTIME = $0020
FVSIF_CANVIEWIT = $40000000 { The viewer can view it. }
A new file to view has been returned
FVSIF_NEWFAILED = $08000000 { The new file passed back failed }
We should Initialize pinned
FVSIF_NEWFILE = $80000000 { A new file to view has been returned }
to be viewed.
FVSIF_PINNED = $00000002 { We should Initialize pinned }
The rect variable has valid data.
FVSIF_RECT = $00000001 { The rect variable has valid data. }
Define File View Show Info Flags.
GCS_HELPTEXT = $00000001 { help text (for status bar) }
canonical verb
GCS_VALIDATE = $00000002 { validate command exists }
help text (for status bar)
GCS_VERB = $00000000 { canonical verb }
GetCommandString uFlags
GIL_DONTCACHE = $0010 { this icon should not be cached }
location is not a filename, must call ::Extract
GIL_FORSHELL = $0002 { icon is to be displayed in a ShellFolder }
allows containers to specify an 'open' look
GIL_NOTFILENAME = $0008 { location is not a filename, must call ::Extract }
icons from this class per class (shared for all files of this type)
GIL_OPENICON = $0001 { allows containers to specify an 'open' look }
GetIconLocation() input flags
GIL_PERCLASS = $0004 { icons from this class per class (shared for all files of this type) }
icons from this class are per instance (each file has its own)
GIL_PERINSTANCE = $0002 { icons from this class are per instance (each file has its own) }
simulate this document icon for this
GIL_SIMULATEDOC = $0001 { simulate this document icon for this }
GetIconLocation() return flags
IID_IContextMenu = (
D1:$000214E4; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IEnumIDList = (
D1:$000214F2; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IExtractIcon = (
D1:$000214EB; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IFileViewer = (
D1:$000214F0; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IFileViewerSite = (
D1:$000214F3; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellCopyHook = (
D1:$000214EF; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellExtInit = (
D1:$000214E8; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellFolder = (
D1:$000214E6; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellLink = (
D1:$000214EE; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
IID_IShellPropSheetExt = (
D1:$000214E9; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46))
SFGAO_CANCOPY = DROPEFFECT_COPY { Objects can be copied }
for hidden/system objects } { IShellFolder::GetAttributesOf flags
SFGAO_CANDELETE = $00000020 { Objects can be deleted }
Objects can be renamed
SFGAO_CANLINK = DROPEFFECT_LINK { Objects can be linked }
Objects can be moved
SFGAO_CANMOVE = DROPEFFECT_MOVE { Objects can be moved }
Objects can be copied
SFGAO_CANRENAME = $00000010 { Objects can be renamed }
Objects can be linked
SFGAO_CAPABILITYMASK = $00000177
Objects are drop target
SFGAO_CONTENTSMASK = $80000000
Expandable in the map pane
SFGAO_DISPLAYATTRMASK = $000F0000
ghosted icon
SFGAO_DROPTARGET = $00000100 { Objects are drop target }
Objects have property sheets
SFGAO_FILESYSANCESTOR = $10000000 { It contains file system folder }
SFGAO_FILESYSTEM = $40000000 { is a file system thing (file/folder/root) }
It's a folder.
SFGAO_FOLDER = $20000000 { It's a folder. }
It contains file system folder
SFGAO_GHOSTED = $00080000 { ghosted icon }
read-only
SFGAO_HASPROPSHEET = $00000040 { Objects have property sheets }
Objects can be deleted
SFGAO_HASSUBFOLDER = $80000000 { Expandable in the map pane }
is a file system thing (file/folder/root)
SFGAO_LINK = $00010000 { Shortcut (link) }
SFGAO_READONLY = $00040000 { read-only }
shared
SFGAO_REMOVABLE = $02000000 { is this removeable media? }
invalidate cached information
SFGAO_SHARE = $00020000 { shared }
Shortcut (link)
SFGAO_VALIDATE = $01000000 { invalidate cached information }
SHARD_PATH = $00000002
SHARD_PIDL = $00000001
SHAddToRecentDocs
SHCNE_ALLEVENTS = $7FFFFFFF
Events that dont match pidls first
SHCNE_ASSOCCHANGED = $08000000
SHCNE_ATTRIBUTES = $00000800
SHCNE_CREATE = $00000002
SHCNE_DELETE = $00000004
SHCNE_DISKEVENTS = $0002381F
SHCNE_DRIVEADD = $00000100
SHCNE_DRIVEADDGUI = $00010000
SHCNE_DRIVEREMOVED = $00000080
SHCNE_FREESPACE = $00040000
SHCNE_GLOBALEVENTS = $0C0581E0 { Events that dont match pidls first }
SHCNE_INTERRUPT = $80000000 { The presence of this flag indicates }
SHCNE_MEDIAINSERTED = $00000020
SHCNE_MEDIAREMOVED = $00000040
SHCNE_MKDIR = $00000008
SHCNE_NETSHARE = $00000200
SHCNE_NETUNSHARE = $00000400
SHCNE_RENAMEFOLDER = $00020000
SHCNE_RENAMEITEM = $00000001
File System Notification flags
SHCNE_RMDIR = $00000010
SHCNE_SERVERDISCONNECT = $00004000
SHCNE_UPDATEDIR = $00001000
SHCNE_UPDATEIMAGE = $00008000
SHCNE_UPDATEITEM = $00002000
SHCNF_DWORD = $0003 { DWORD }
printer friendly name
SHCNF_FLUSH = $1000
SHCNF_FLUSHNOWAIT = $2000
SHCNF_IDLIST = $0000 { LPITEMIDLIST }
that the event was generated by an } { interrupt. It is stripped out before } { the clients of SHCNNotify_ see it. } { Flags } { uFlags & SHCNF_TYPE is an ID which indicates what dwItem1 and dwItem2 mean
SHCNF_PATH = $0001 { path name }
LPITEMIDLIST
SHCNF_PRINTER = $0002 { printer friendly name }
path name
SHCNF_TYPE = $00FF
DWORD
SHCONTF_FOLDERS = 32
for ParseDisplayName or path } { IShellFolder::EnumObjects
SHCONTF_INCLUDEHIDDEN = 128
for default view
SHCONTF_NONFOLDERS = 64
for shell browser
SHGDN_FORPARSING = $8000
displayed under a folder (relative)
SHGDN_INFOLDER = 1
default (display purpose)
SHGDN_NORMAL = 0
IShellFolder::GetDisplayNameOf/SetNameOf uFlags
SLGP_SHORTPATH = $0001
IShellLink::GetPath fFlags
SLGP_UNCPRIORITY = $0002
SLR_ANY_MATCH = $0002
SLR_NO_UI = $0001
IShellLink::Resolve fFlags
SLR_UPDATE = $0004
STRRET_CSTR = $0002
STRRET_OFFSET = $0001
STRRET_WSTR = $0000
------------------------------------------------------------------------- } { struct STRRET } { structure for returning strings from IShellFolder member functions } {-------------------------------------------------------------------------