Unit ShlObj

Classes

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 -

Functions

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 -

Types

BFFCALLBACK
PBrowseInfo
PCMInvokeCommandInfo
PDROPFILES
PFILEDESCRIPTOR
PFILEGROUPDESCRIPTOR
PFVShowInfo
PIDA
PItemIDList
PNRESARRAY
PSHItemID
PSTRRet
TBrowseInfo
TCMInvokeCommandInfo
TDROPFILES
TFILEDESCRIPTOR
TFILEGROUPDESCRIPTOR
TFVShowInfo
TIDA
TItemIDList
TNRESARRAY
TSHItemID
TSTRRET

Constants

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

Variables


Functions


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;


Types


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;

Constants

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 } {-------------------------------------------------------------------------

Variables