doublecmd/ushlobjadditional.pas
2007-11-23 23:10:40 +00:00

1900 lines
77 KiB
ObjectPascal
Raw Blame History

unit uShlObjAdditional;
(*
Daniel U. Thibault
<D.U.Thibault@Bigfoot.com>
19 August 1999
Updated 15 September 1999
Constants, types that have appeared since ShlObj.pas.
The values marked //MISSING VALUES remain unidentified (two sets).
Koblov Alexander (Alexx2000@mail.ru)
15 July 2007
Add some functions, constants and types for Lazarus compability
*)
{$WEAKPACKAGEUNIT}
interface
uses
Windows,
ShlObj,
ActiveX; { IBindCtx }
{
IContextMenu::InvokeCommand
Parameters in lpci:
hMonitor -- Specifies the default monitor (optional).
When SEE_MASK_HMONITOR is set in TCMInvokeCommandInfo,
hIcon is treated as hMonitor
}
const
TPM_RETURNCMD = $100;
CSIDL_DRIVES = $0011;
{ GetCommandString uFlags }
GCS_VERBA = $00000000;
const
// QueryContextMenu uFlags
CMF_EXPLORE = $00000004;
CMF_CANRENAME = $00000010;
CMF_FINDHACK = $00000080;
CMF_EXTENDEDVERBS = $00000100; //Rarely used verbs
SEE_MASK_UNICODE = $00004000; //Correction
SEE_MASK_HMONITOR = $00200000;
//MISSING VALUES
// SEE_MASK_HASLINKNAME = $00000800; ?? Other possible values:
// SEE_MASK_FLAG_SEPVDM = $00001000; ?? $00010000 $00020000 $00040000 $00080000
// SEE_MASK_HASTITLE = $00002000; ?? $00400000 $02000000 $04000000 $08000000
// $10000000 $40000000 $80000000
//Shell 5+ only
SEE_MASK_USERLOGON = $00800000;
SEE_MASK_NOQUERYCLASSSTORE = $01000000;
// CMIC_MASK_HASLINKNAME = SEE_MASK_HASLINKNAME; ??
// CMIC_MASK_FLAG_SEP_VDM = SEE_MASK_FLAG_SEPVDM; ??
// CMIC_MASK_HASTITLE = SEE_MASK_HASTITLE; ??
CMIC_MASK_PTINVOKE = $20000000; // Shell 4+
type
//Shell 4+ version appends a ptInvoke field
TCMInvokeCommandInfoEx4 = packed record
cbSize,
fMask : DWORD;
hwnd : HWND;
lpVerb,
lpParameters,
lpDirectory : LPCSTR;
nShow : Integer;
dwHotKey : DWORD;
hIcon : THandle;
lpTitle : LPCSTR;
lpVerbW,
lpParametersW,
lpDirectoryW,
lpTitleW : LPCWSTR;
ptInvoke : TPoint; // Point where it's invoked
end; { TCMInvokeCommandInfoEx4 }
PCMInvokeCommandInfoEx4 = ^TCMInvokeCommandInfoEx4;
const
SID_IContextMenu = '{000214E4-0000-0000-C000-000000000046}';
SID_IContextMenu2 = '{000214F4-0000-0000-C000-000000000046}';
type
IContextMenu = interface(IUnknown)
[SID_IContextMenu]
function QueryContextMenu(Menu: HMENU;
indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult; stdcall;
function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HResult; stdcall;
end;
IContextMenu2 = interface(IContextMenu)
[SID_IContextMenu2]
function HandleMenuMsg(uMsg: UINT; WParam, LParam: Integer): HResult; stdcall;
end;
{ IContextMenu3 Interface }
{
IContextMenu3 (IContextMenu2 with one new member)
IContextMenu3::HandleMenuMsg2
This function is called if the client of IContextMenu is aware of
the IContextMenu3 interface and receives a WM_MENUCHAR message while
it is calling TrackPopupMenu (in the window proc of hwndOwner)
(typically when an accelerator is used to select a menu item that displays a bitmap).
WM_MENUCHAR is sent when the user presses a key that does not correspond to any
mnemonic or accelerator key; an application should process this message when an
accelerator is used to select a menu item that displays a bitmap.
}
const
IID_IContextMenu3 : TGUID = (
D1:$BCFCE0A0; D2:$EC17; D3:$11D0; D4:($8D,$10,$00,$A0,$C9,$0F,$27,$19));
SID_IContextMenu3 = '{BCFCE0A0-EC17-11d0-8D10-00A0C90F2719}';
type
IContextMenu3 = interface(IContextMenu2)
[SID_IContextMenu3]
function HandleMenuMsg2(uMsg : UINT; wParam : WPARAM; lParam : LPARAM; var MsgResult : LongInt) : HResult; stdcall;
end; { IContextMenu3 }
{ IPersistFolder2 Interface }
//Shell 4+ only
{
The IPersistFolder2 interface is used by the Shell 4+ file system implementation
of IShellFolder::BindToObject when it is initializing a shell folder object.
IPersistFolder2::GetCurFolder
Parameters:
ppidl --
}
const
IID_IPersistFolder2 : TGUID = (
D1:$1AC3D9F0; D2:$175C; D3:$11D1; D4:($95,$BE,$00,$60,$97,$97,$EA,$4F));
SID_IPersistFolder = '{000214EA-0000-0000-C000-000000000046}';
SID_IPersistFolder2 = '{1AC3D9F0-175C-11D1-95BE-00609797EA4F}';
type
IPersistFolder = interface(IPersist)
[SID_IPersistFolder]
function Initialize(pidl: PItemIDList): HResult; stdcall;
end;
IPersistFolder2 = interface(IPersistFolder)
[SID_IPersistFolder2]
function GetCurFolder(var ppidl: PItemIDList) : HResult; stdcall;
end; { IPersistFolder2 }
{ IPersistFolder3 Interface }
{
The PERSIST_FOLDER_TARGET_INFO (TPersistFolderTargetInfo) stucture is used
for Folder Shortcuts which allow the shell to have a file system folder act
like another area in the name space.
One of pidlTargetFolder, szTargetParsingName, or csidl needs to specify the
destination name space.
pidlTargetFolder:
NULL if not specified. This is a full pidl to the target folder.
szTargetParsingName:
Empty string if not specified. Ortherwise, it is the parsable name
of the target. This name can be parsed by IShellFolder::ParseDisplayName()
from the desktop.
szNetworkProvider:
Can be an empty string. If not empty, it specifies the type of network
provider that will be used when binding to the target. This is used for
performance optimizations for the WNet APIs.
dwAttributes:
-1 if not known. These are the SFGAO_ flags for IShellFolder::GetAttributesOf()
csidl:
This is -1 if not used. This can be used instead of pidlTargetFolder or
szTargetParsingName to indicate the TargetFolder. See the list of CSIDL_ folders
below. CSIDL_FLAG_PFTI_TRACKTARGET means that the IShellFolder's target folder
should change if the user changes the target of the underlying CSIDL value.
You can also pass CSIDL_FLAG_CREATE to indicate that the target folder should
be created if it does not exist. No other CSIDL_FLAG_* values are supported.
}
type
TPersistFolderTargetInfo = packed record
pidlTargetFolder : PItemIDList; // pidl for the folder we want to initialize
szTargetParsingName, // optional parsing name for the target
szNetworkProvider : array [1..MAX_PATH] of WideChar; // optional network provider
dwAttributes : DWord; // optional FILE_ATTRIBUTES_ flags (-1 if not used)
csidl : Integer; // optional folder index (SHGetFolderPath()) -1 if not used
end; { TPersistFolderTargetInfo }
{
The IPersistFolder3 interface is implemented by an IShellFolder object that
wants non-default handling of Folder Shortcuts.
IPersistFolder3::InitializeEx
This method initializes an IShellFolder and specifies where it is rooted in the name space.
Parameters:
pbc: May be NULL.
pidlRoot: This is the same parameter as IPersistFolder::Initialize(). Caller allocates
and frees this parameter.
ppfti: May be NULL, in which case this is the same as a call to IPersistFolder::Initialize().
Otherwise this is a Folder Shortcut and this struct specifies the target
folder and its attributes.
IPersistFolder3::GetFolderTargetInfo
This is used by the caller to find information about the folder shortcut.
Parameters:
ppfti: This is a Folder Shortcut and this struct specifies the target
folder and its attributes. This structure may not be initialized
by the caller, so the callee needs to initialize every member.
The callee allocates pidlTargetFolder and the caller will free it.
}
const
IID_IPersistFolder3 : TGUID = (
D1:$CEF04FDF; D2:$FE72; D3:$11D2; D4:($87,$A5,$00,$C0,$4F,$68,$37,$CF));
SID_IPersistFolder3 = '{CEF04FDF-FE72-11D2-87A5-00C04F6837CF}';
type
IPersistFolder3 = interface(IPersistFolder2)
[SID_IPersistFolder3]
function InitializeEx(var pbc : IBindCtx; pidlRoot : PItemIDList; var pfti : TPersistFolderTargetInfo) : HResult; stdcall;
function GetFolderTargetInfo(var pfti : TPersistFolderTargetInfo) : HResult; stdcall;
end; { IPersistFolder3 }
{ IPersistFreeThreadedObject Interface }
{
This interface is just the IID. Return back
a pointer to the IPersist interface if the object
implementation is free threaded. This is used
for performance on free threaded objects.
}
const
IID_IPersistFreeThreadedObject : TGUID = (
D1:$C7264BF0; D2:$EDB6; D3:$11D1; D4:($85,$46,$00,$60,$08,$05,$93,$68));
SID_IPersistFreeThreadedObject = '{C7264BF0-EDB6-11D1-8546-006008059368}';
type
IPersistFreeThreadedObject = interface(IPersist)
[SID_IPersistFreeThreadedObject]
end; { IPersistFreeThreadedObject }
{ IRemoteComputer Interface }
{
The IRemoteComputer interface is used to initialize a name space
extension invoked on a remote computer object.
[Member functions]
IRemoteComputer::Initialize
This member function is called when the explorer is initializing or
enumerating the name space extension. If failure is returned during
enumeration, the extension won't appear for this computer. Otherwise,
the extension will appear, and should target the given machine.
Parameters:
pszMachine -- Specifies the name of the machine to target.
}
const
IID_IRemoteComputer : TGUID = (
D1:$000214FE; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
SID_IRemoteComputer = '{000214FE-0000-0000-C000-000000000046}';
type
IRemoteComputer = interface(IUnknown)
[SID_IRemoteComputer]
function Initialize(pszMachine : PWideChar; bEnumerating : BOOL) : HResult; stdcall;
end; { IRemoteComputer }
{ IShellIconOverlayIdentifier Interface }
{
Used to identify a file as a member of the group of files that have this specific
icon overlay.
Users can create new IconOverlayIdentifiers and place them in the following registry
location together with the Icon overlay image and their priority.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellIconOverlayIdentifiers
The shell will enumerate through all IconOverlayIdentifiers at start, and prioritize
them according to internal rules, in case the internal rules don't apply, we use their
input priority.
[Member functions]
IShellIconOverlayIdentifier::IsMemberOf
Returns:
S_OK, if the file is a member
S_FALSE, if the file is not a member
E_FAIL, if the operation failed due to bad WIN32_FIND_DATA
Parameters:
pwszPath -- full path of the file
dwAttrib -- attribute of this file
IShellIconOverlayIdentifier::GetOverlayInfo
Parameters:
pszIconFile -- the path of the icon file
pIndex -- Depend on the flags, this could contain the IconIndex
dwFlags -- defined below
IShellIconOverlayIdentifier::GetPriority
Parameters:
pIPriority -- the priority of this Overlay Identifier
}
const
IID_IShellIconOverlayIdentifier : TGUID = (
D1:$0C6C4200; D2:$C589; D3:$11D0; D4:($99,$9A,$00,$C0,$4F,$D6,$55,$E1));
SID_IShellIconOverlayIdentifier = '{0C6C4200-C589-11D0-999A-00C04FD655E1}';
type
IShellIconOverlayIdentifier = interface(IUnknown)
[SID_IShellIconOverlayIdentifier]
function IsMemberOf(pwszPath : PWideChar; dwAttrib : DWORD) : HResult; stdcall;
function GetOverlayInfo(pwszIconFile : PWideChar; cchMax : Integer; var Index : Integer; var dwFlags : DWORD) : HResult; stdcall;
function GetPriority(var IPriority : Integer) : HResult; stdcall;
end; { IShellIconOverlayIdentifier }
const
ISIOI_ICONFILE = $00000001; // path is returned through pwszIconFile
ISIOI_ICONINDEX = $00000002; // icon index in pwszIconFile is returned through Index
{ IShellIconOverlay Interface }
{
Used to return the icon overlay index or its icon index for an IShellFolder object,
this is always implemented with IShellFolder
[Member functions]
IShellIconOverlay::GetOverlayIndex
Parameters:
pidl object to identify icon overlay for.
pdwIndex the Overlay Index in the system image list
IShellIconOverlay::GetOverlayIconIndex
This method is only used for those who are interested in seeing the real bits
of the Overlay Icon
Returns:
S_OK, if the index of an Overlay is found
S_FALSE, if no Overlay exists for this file
E_FAIL, if pidl is bad
Parameters:
pdwIconIndex the Overlay Icon index in the system image list
}
const
IID_IShellIconOverlay : TGUID = (
D1:$7D688A70; D2:$C613; D3:$11D0; D4:($99,$9B,$00,$C0,$4F,$D6,$55,$E1));
SID_IShellIconOverlay = '{7D688A70-C613-11D0-999B-00C04FD655E1}';
type
IShellIconOverlay = interface(IUnknown)
[SID_IShellIconOverlay]
function GetOverlayIndex(pidl : PItemIDList; var Index : Integer) : HResult; stdcall;
function GetOverlayIconIndex(pidl : PItemIDList; var IconIndex : Integer) : HResult; stdcall;
end; { IShellIconOverlay }
const
OI_ASYNC = $FFFFEEEE;
{ SHGetIconOverlayIndex }
{
This function takes the path and icon/res id to the icon and converts it into
an overlay index in the system image list.
Note: there are only 15 slots for system image overlays, some of which were
reserved by the system, or taken by the overlayidentifiers, so it's possible
for this function to fail and return -1.
To get the default overlays in the system, such as the share hand, link shortcut
and slow files, pass NULL as the file name, then the IDO_SHGIOI_* flags as the
icon index.
}
IDO_SHGIOI_SHARE = $0FFFFFFF;
IDO_SHGIOI_LINK = $0FFFFFFE;
IDO_SHGIOI_SLOWFILE = $0FFFFFFD;
function SHGetIconOverlayIndexA(pszIconPath : PANSIChar; iIconIndex : Integer) : Integer; stdcall;
function SHGetIconOverlayIndexW(pszIconPath : PWideChar; iIconIndex : Integer) : Integer; stdcall;
function SHGetIconOverlayIndex (pszIconPath : PChar; iIconIndex : Integer) : Integer; stdcall;
{ IShellLinkDataList Interface }
// Shell 4+ only
// IShellLinkDataList::GetFlags()/SetFlags()
const
//SHELL_LINK_DATA_FLAGS
SLDF_HAS_ID_LIST = $00000001; // Shell link saved with ID list
SLDF_HAS_LINK_INFO = $00000002; // Shell link saved with LinkInfo
SLDF_HAS_NAME = $00000004;
SLDF_HAS_RELPATH = $00000008;
SLDF_HAS_WORKINGDIR = $00000010;
SLDF_HAS_ARGS = $00000020;
SLDF_HAS_ICONLOCATION = $00000040;
SLDF_UNICODE = $00000080; // the strings are unicode
SLDF_FORCE_NO_LINKINFO = $00000100; // don't create a LINKINFO (make a dumb link)
SLDF_HAS_EXP_SZ = $00000200; // the link contains expandable env strings
SLDF_RUN_IN_SEPARATE = $00000400; // Run the 16-bit target exe in a separate VDM/WOW
SLDF_HAS_LOGO3ID = $00000800; // this link is a special Logo3/MSICD link
SLDF_HAS_DARWINID = $00001000; // this link is a special Darwin link
SLDF_RUNAS_USER = $00002000; // Run this link as a different user
SLDF_HAS_EXP_ICON_SZ = $00004000; // contains expandable env string for icon path
// Also defined in ShlWAPI.h
type
TDataBlockHeader = packed record
cbSize, // Size of this extra data block
dwSignature : DWORD; // signature of this extra data block
end; { TDataBlockHeader }
PDataBlockHeader = ^TDataBlockHeader;
PDBList = PDataBlockHeader;
TNTConsoleProps = packed record
dbh : TDataBlockHeader;
wFillAttribute, // fill attribute for console
wPopupFillAttribute : Word; // fill attribute for console popups
dwScreenBufferSize, // screen buffer size for console
dwWindowSize, // window size for console
dwWindowOrigin : TCoord; // window origin for console
nFont,
nInputBufferSize : DWord;
dwFontSize : TCoord;
uFontFamily,
uFontWeight : UInt;
FaceName : array [1..LF_FACESIZE] of WideChar;
uCursorSize : UInt;
bFullScreen,
bQuickEdit,
bInsertMode,
bAutoPosition : BOOL;
uHistoryBufferSize,
uNumberOfHistoryBuffers : UInt;
bHistoryNoDup : BOOL;
ColorTable : array[0..15] of TColorRef;
end; { TNTConsoleProps }
PNTConsoleProps = ^TNTConsoleProps;
const
NT_CONSOLE_PROPS_SIG = $A0000002;
//This is an FE Console property
type
TNTFEConsoleProps = packed record
dbh : TDataBlockHeader;
uCodePage : UInt;
end; { TNTFEConsoleProps }
PTNTFEConsoleProps = ^TNTFEConsoleProps;
const
NT_FE_CONSOLE_PROPS_SIG = $A0000004;
//Shell 5+ only
type
TExpDarwinLink = packed record
dbh : TDataBlockHeader;
szDarwinID : array [1..MAX_PATH] of Char; // ANSI Darwin ID associated with link
szwDarwinID : array [1..MAX_PATH] of WideChar; // UNICODE Darwin ID associated with link
end; { TExpDarwinLink }
PExpDarwinLink = ^TExpDarwinLink;
const
EXP_DARWIN_ID_SIG = $A0000006;
EXP_LOGO3_ID_SIG = $A0000007;
EXP_SPECIAL_FOLDER_SIG = $A0000005; // LPEXP_SPECIAL_FOLDER
type
TExpSpecialFolder = packed record
cbSize, // Size of this extra data block
dwSignature, // Signature of this extra data block
idSpecialFolder, // Special folder ID this link points into
cbOffset : DWord; // Offset into pidl from SLDF_HAS_ID_LIST for child
end; { TExpSpecialFolder }
PExpSpecialFolder = ^TExpSpecialFolder;
TExpSzLink = packed record
cbSize, // Size of this extra data block
dwSignature : DWord; // Signature of this extra data block
szTarget : array [1..MAX_PATH] of Char; // ANSI target name w/EXP_SZ in it
swzTarget : array [1..MAX_PATH] of WideChar; // UNICODE target name w/EXP_SZ in it
end; { TExpSzLink }
PExpSzLink = ^TExpSzLink;
const
EXP_SZ_LINK_SIG = $A0000001; // LPEXP_SZ_LINK (target)
EXP_SZ_ICON_SIG = $A0000007; // LPEXP_SZ_LINK (icon)
const
IID_IShellLinkDataList : TGUID = (
D1:$45E2B4AE; D2:$B1C3; D3:$11D0; D4:($B9,$2F,$00,$A0,$C9,$03,$12,$E1));
SID_IShellLinkDataList = '{45E2B4AE-B1C3-11D0-B92F-00A0C90312E1}';
type
IShellLinkDataList = interface(IUnknown)
[SID_IShellLinkDataList]
function AddDataBlock(pDataBlock : Pointer) : HResult; stdcall;
function CopyDataBlock(dwSig : DWord; var pDataBlock : Pointer) : HResult; stdcall;
function RemoveDataBlock(dwSig : DWord) : HResult; stdcall;
function GetFlags(var dwFlags : DWord) : HResult; stdcall;
function SetFlags(dwFlags : DWord) : HResult; stdcall;
end; { IShellLinkDataList }
{ IResolveShellLink Interface }
//Shell 5+ only
const
IID_IResolveShellLink : TGUID = (
D1:$5CD52983; D2:$9449; D3:$11D2; D4:($96,$3A,$00,$C0,$4F,$79,$AD,$F0));
SID_IResolveShellLink = '{5CD52983-9449-11D2-963A-00C04F79ADF0}';
type
IResolveShellLink = interface(IUnknown)
[SID_IResolveShellLink]
function ResolveShellLink(punk : IUnknown; hWndOwner : HWND; fFlags : DWord) : HResult; stdcall;
end; { IResolveShellLink }
{ IShellLink Interface }
const
// IShellLink.Resolve fFlags
SLR_NOUPDATE = $0008;
SLR_NOSEARCH = $0010; // don't execute the search heuristics
SLR_NOTRACK = $0020; // don't use NT5 object ID to track the link
SLR_NOLINKINFO = $0040; // don't use the net and volume relative info
SLR_INVOKE_MSI = $0080; // if we have a darwin link, then call msi to fault in the applicaion
// IShellLink::GetPath fFlags
SLGP_RAWPATH = $0004;
{ IURLSearchHook Interface }
const
IID_IURLSearchHook : TGUID = (
D1:$AC60F6A0; D2:$0FD9; D3:$11D0; D4:($99,$CB,$00,$C0,$4F,$D6,$44,$97));
SID_IURLSearchHook = '{AC60F6A0-0FD9-11D0-99CB-00C04FD64497}';
type
IURLSearchHook = interface(IUnknown)
[SID_IURLSearchHook]
function Translate(lpwszSearchURL : PWideChar; cchBufferSize : DWORD) : HResult; stdcall;
end; { IURLSearchHook }
{ Shell File Operations }
const
FOF_NOCOPYSECURITYATTRIBS = $0800; // dont copy NT file Security Attributes
FOF_NORECURSION = $1000; // don't recurse into directories.
//Shell 5+
FOF_NO_CONNECTED_ELEMENTS = $2000; // don't operate on connected file elements.
FOF_WANTNUKEWARNING = $4000; // during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION)
{ IShellBrowser/IShellView/IShellFolder interfaces }
//Shell 4+
// The resource id of the offline cursor
// This cursor is available in ShDocVw.dll
IDC_OFFLINE_HAND = 103;
{ FOLDERSETTINGS }
// NB Bitfields
FWF_NOICONS = $1000;
FWF_SHOWSELALWAYS = $2000;
FWF_NOVISIBLE = $4000;
{ Values for wFlags parameter of IShellBrwoser.BrowseObject member }
SBSP_HELPMODE = $0040; // IEUNIX : Help window uses this.
SBSP_NOTRANSFERHIST = $0080; // IEUNIX only mode.
SBSP_NAVIGATEBACK = $4000;
SBSP_NAVIGATEFORWARD = $8000;
SBSP_ALLOW_AUTONAVIGATE = $00010000;
SBSP_WRITENOHISTORY = $08000000;
SBSP_NOAUTOSELECT = $04000000;
{ Values for id parameter of IShellBrwoser.GetWindow/SendControlMsg members }
FCW_INTERNETBAR = $0006;
FCW_PROGRESS = $0008;
SBO_DEFAULT = 0;
SBO_NOBROWSERPAGES = 1;
{ ICommDlgBrowser2 Interface }
{
[Member functions]
ICommDlgBrowser2::Notify
Called when the view wants to notify common dialog when an event occurs.
CDB2N_CONTEXTMENU_START indicates the context menu has started.
CDB2N_CONTEXTMENU_DONE indicates the context menu has completed.
ICommDlgBrowser2::GetDefaultMenuText
Called when the view wants to get the default context menu text.
pszText points to buffer and cchMax specifies the size of the
buffer in characters. The browser on return has filled the buffer
with the default context menu text. The Shell will call this method
with at least a buffer size of MAX_PATH. The browser should return
S_OK if it returned a new default menu text, S_FALSE to let the view
to use the normal default menu text.
ICommDlgBrowser2::GetViewFlags
Called when the view wants to determine if special customization needs to
be done for the common dialog browser. For example View calls this function to
determine if all files(hidden and system) need to be shown.
If the GetViewFlags returns a DWORD with
CDB2GVF_SHOWALLFILES flag set then it will show all the files.
}
CDB2N_CONTEXTMENU_DONE = $00000001;
CDB2N_CONTEXTMENU_START = $00000002;
//GetViewFlags
CDB2GVF_SHOWALLFILES = $00000001;
(*
const
IID_ICommDlgBrowser2 : TGUID = (
D1:$6D71532E; D2:$889E; D3:$11D1; D4:($99,$7F,$08,$00,$36,$AF,$3F,$03));
SID_ICommDlgBrowser = '{000214F1-0000-0000-C000-000000000046}';
SID_ICommDlgBrowser2 = '{6D71532E-889E-11D1-997F-080036AF3F03}';
type
ICommDlgBrowser = interface(IUnknown)
[SID_ICommDlgBrowser]
function OnDefaultCommand(const ppshv: IShellView): HResult; stdcall;
function OnStateChange(const ppshv: IShellView; Change: ULONG): HResult; stdcall;
function IncludeObject(const ppshv: IShellView; pidl: PItemIDList): HResult; stdcall;
end;
ICommDlgBrowser2 = interface(ICommDlgBrowser)
[SID_ICommDlgBrowser2]
function Notify(var ShellView: IShellView; dwNotifyType : DWORD) : HResult; stdcall;
function GetDefaultMenuText(var ShellView: IShellView; pszText : PWideChar; cchMax : Integer) : HResult; stdcall;
function GetViewFlags(var dwFlags : DWORD) : HResult; stdcall;
end; { ICommDlgBrowser2 }
*)
const
{ IShellView select item flags }
SVSI_TRANSLATEPT = $0020;
function SHCreateDirectoryExA(hWndOwner : HWND; pszPath : PANSIChar; var sa : TSecurityAttributes) : Integer; stdcall;
function SHCreateDirectoryExW(hWndOwner : HWND; pszPath : PWideChar; var sa : TSecurityAttributes) : Integer; stdcall;
function SHCreateDirectoryEx (hWndOwner : HWND; pszPath : PChar ; var sa : TSecurityAttributes) : Integer; stdcall;
const
//Object identifiers in the explorer's name space (ItemID and IDList)
CSIDL_INTERNET = $0001; // Internet Explorer desktop icon
CSIDL_LOCAL_APPDATA = $001c; // <user name>\Local Settings\Application Data (non roaming)
CSIDL_ALTSTARTUP = $001d; // non localized startup
CSIDL_COMMON_ALTSTARTUP = $001e; // non localized common startup
CSIDL_COMMON_FAVORITES = $001f;
CSIDL_INTERNET_CACHE = $0020; // C:\Windows\Temporary Internet Files
CSIDL_COOKIES = $0021; // C:\Windows\Cookies
CSIDL_HISTORY = $0022; // C:\Windows\History (URL History Folder)
CSIDL_COMMON_APPDATA = $0023; // All Users\Application Data
CSIDL_WINDOWS = $0024; // GetWindowsDirectory()or SYSROOT
CSIDL_SYSTEM = $0025; // GetSystemDirectory()
CSIDL_PROGRAM_FILES = $0026; // C:\Program Files
CSIDL_MYPICTURES = $0027; // My Pictures
CSIDL_PROFILE = $0028; // USERPROFILE
CSIDL_SYSTEMX86 = $0029; // Get the x86 system directory on RISC
CSIDL_PROGRAM_FILESX86 = $002a; // x86 Program Files directory on RISC
CSIDL_PROGRAM_FILES_COMMON = $002b; // C:\Program Files\Common
CSIDL_PROGRAM_FILES_COMMONX86 = $002c; // x86 Program Files\Common on RISC
CSIDL_COMMON_TEMPLATES = $002d; // All Users\Templates
CSIDL_COMMON_DOCUMENTS = $002e; // All Users\Documents
CSIDL_COMMON_ADMINTOOLS = $002f; // All Users\Start Menu\Programs\Administrative Tools
CSIDL_ADMINTOOLS = $0030; // <user name>\Start Menu\Programs\Administrative Tools
CSIDL_FLAG_CREATE = $8000; // combine with CSIDL_ value to force create on SHGetSpecialFolderLocation()
CSIDL_FLAG_DONT_VERIFY = $4000; // combine with CSIDL_ value to return an unverified folder path
CSIDL_FLAG_PFTI_TRACKTARGET = CSIDL_FLAG_DONT_VERIFY;
CSIDL_FLAG_MASK = $FF00; // mask for all possible flag values
(*
What about C:\Windows\Subscriptions ? (Subscription Folder)
What about C:\Windows\Downloaded Program Files ? (ActiveX Cache Folder)
*)
//Shell 4+ only
function SHGetSpecialFolderPathA(hWndOwner : HWND; lpszPath : PANSIChar; csidl : Integer; fCreate : BOOL) : BOOL; stdcall;
function SHGetSpecialFolderPathW(hWndOwner : HWND; lpszPath : PWideChar; csidl : Integer; fCreate : BOOL) : BOOL; stdcall;
function SHGetSpecialFolderPath (hWndOwner : HWND; lpszPath : PChar; csidl : Integer; fCreate : BOOL) : BOOL; stdcall;
//Shell 5+ only
const
SHGFP_TYPE_CURRENT = 0; // current value for user, verify it exists
SHGFP_TYPE_DEFAULT = 1; // default value, may not exist
function SHGetFolderPathA(hWndOwner : HWND; csidl : Integer; hToken : THandle; dwReserved : DWORD; lpszPath : PANSIChar) : HResult; stdcall;
function SHGetFolderPathW(hWndOwner : HWND; csidl : Integer; hToken : THandle; dwReserved : DWORD; lpszPath : PWideChar) : HResult; stdcall;
function SHGetFolderPath (hWndOwner : HWND; csidl : Integer; hToken : THandle; dwReserved : DWORD; lpszPath : PChar ) : HResult; stdcall;
function SHGetFolderLocation(hWndOwner : HWND; csidl : Integer; hToken : THandle; dwReserved : DWORD; var pidl : PItemIDList) : HResult; stdcall;
const
{ SHBrowseForFolder API }
{ Browsing for directory }
{
BIF_STATUSTEXT = $0004;
The top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle
and one line if this flag is set. Passing the message
BFFM_SETSTATUSTEXTA to the hwnd can set the rest of the text.
This is not used with BIF_USENEWUI and BROWSEINFO.lpszTitle then
gets all three lines of text.
}
BIF_EDITBOX = $0010; // Add an editbox to the dialog. Always on with BIF_USENEWUI.
BIF_VALIDATE = $0020; // insist on valid result (or CANCEL)
BIF_USENEWUI = $0040; // Use the new dialog layout with the ability to resize.
// Caller needs to call OleInitialize() before using this API.
BIF_BROWSEINCLUDEURLS = $0080; // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
BIF_SHAREABLE = $8000; // sharable resources displayed (remote shares, requires BIF_USENEWUI)
{ message from browser }
BFFM_VALIDATEFAILEDA = 3; // lParam:szPath ret:1(cont),0(EndDialog)
BFFM_VALIDATEFAILEDW = 4; // lParam:wzPath ret:1(cont),0(EndDialog)
BFFM_VALIDATEFAILED = BFFM_VALIDATEFAILEDA;
//IShellFolder.GetDisplayNameOf/SetNameOf uFlags
SHGDN_FOREDITING = $1000; // for in-place editing
SHGDN_INCLUDE_NONFILESYS = $2000; // if not set, display names for shell name space items that are not in the file system will fail
//IShellFolder::EnumObjects flags
SHCONTF_INIT_ON_FIRST_NEXT = $0100; // allow EnumObject() to return before validating enum
SHCONTF_NETPRINTERSRCH = $0200; // hint that client is looking for printers
SHCONTF_SHAREABLE = $0400; // hint that client is looking for sharable resources (remote shares)
//IShellFolder::CompareIDs lParam flags
SHCIDS_ALLFIELDS = $80000000;
SHCIDS_COLUMNMASK = $0000FFFF;
//IShellFolder::GetAttributesOf flags
// SFGAO_CANLINK = DROPEFFECT_LINK; // Objects can be linked (0x4)
{
If this bit is set on an item in the shell folder, a "Create Shortcut"
menu item will be added to the File and context menus for the item.
If the user selects that command, your IContextMenu::InvokeCommand()
will be called with 'link'.
That flag will also be used to determine if "Create Shortcut" should be
added when the item in your folder is dragged to another folder.
}
SFGAO_HIDDEN = $00080000; // hidden object
SFGAO_BROWSABLE = $08000000; // is in-place browsable
SFGAO_NONENUMERATED = $00100000; // is a non-enumerated object
SFGAO_NEWCONTENT = $00200000; // should show bold in explorer tree
SFGAO_CANMONIKER = $00400000; // can create monikers for its objects
// IShellFolder BindCtx parameters.
//the IUnknown for these are accessed through IBindCtx::RegisterObjectParam/GetObjectParam
//This object will support IPersist to query a CLSID that should be skipped
//in the binding process. This is to avoid loops or to allow delegation to
//base name space functionality. See SHSkipJunction
STR_SKIP_BINDING_CLSID = 'Skip Binding CLSID';
{ IFileSystemBindData Interface }
{
IShellFolder IBindCtx* parameters. The IUnknown for these are
accessed through IBindCtx::RegisterObjectParam/GetObjectParam
use this to provide the data needed to create IDLists through
IShellFolder::ParseDisplayName(). This data applies to the last
element of the name that is parsed (e.g. 'c:\foo\bar.txt', data
applies to bar.txt) this makes creating these IDLists much faster
that suppling the name only.
}
STR_FILE_SYS_BIND_DATA = 'File System Bind Data';
const
IID_IFileSystemBindData : TGUID = (
D1:$01E18D10; D2:$4D8B; D3:$11D2; D4:($85,$5D,$00,$60,$08,$05,$93,$67));
SID_IFileSystemBindData = '{01E18D10-4D8B-11D2-855D-006008059367}';
type
IFileSystemBindData = interface(IUnknown)
[SID_IFileSystemBindData]
function SetFindData(var fd : TWin32FindDataW) : HResult; stdcall;
function GetFindData(var fd : TWin32FindDataW) : HResult; stdcall;
end; { IFileSystemBindData }
{ IShellDetails Interface }
type
TShellDetails = packed record
fmt, // LVCFMT_* value (header only)
cxChar : Integer; // Number of "average" characters (header only)
str : TStrRet; // String information
end; { TShellDetails }
PShellDetails = ^TShellDetails;
const
IID_IShellDetails : TGUID = (
D1:$000214EC; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
SID_IShellDetails = '{000214EC-0000-0000-C000-000000000046}';
type
IShellDetails = interface(IUnknown)
[SID_IShellDetails]
function GetDetailsOf(pidl : PItemIDList; iColumn : UInt; var Details : TShellDetails) : HResult; stdcall;
function ColumnClick(iColumn : UInt) : HResult; stdcall;
end; { IShellDetails }
{ IEnumExtraSearch Interface }
{
IShellFolder2::EnumSearches member returns an IEnumExtraSearch object.
}
type
TExtraSearch = packed record
guidSearch : TGUID;
(*
//This is the Sep 1998 declaration
wszMenuText,
wszHelpText : Array[1..MAX_PATH] of WideChar;
wszUrl : Array[1..2084] of WideChar;
wszIcon, // "name.dll,#" where # is icon index in the file name.dll
wszGreyIcon,
wszClrIcon : Array[1..MAX_PATH+10] of WideChar;
*)
//This is the Jul 1999 declaration
wszFriendlyName : array [1..80] of WideChar;
wszUrl : array [1..2084] of WideChar;
end; { TExtraSearch}
PExtraSearch = ^TExtraSearch;
// typedef struct IEnumExtraSearch *LPENUMEXTRASEARCH;
const
IID_IEnumExtraSearch : TGUID = (
D1:$0E700BE1; D2:$9DB6; D3:$11D1; D4:($A1,$CE,$00,$C0,$4F,$D7,$5D,$13));
SID_IEnumExtraSearch = '{0E700BE1-9DB6-11d1-A1CE-00C04FD75D13}';
type
IEnumExtraSearch = interface(IUnknown)
[SID_IEnumExtraSearch]
function Next(celt : ULONG; var rgelt : TExtraSearch; var celtFetched : ULONG) : HResult; stdcall;
function Skip(celt : ULONG) : HResult; stdcall;
function Reset : HResult; stdcall;
function Clone(out ppenum: IEnumExtraSearch) : HResult; stdcall;
end; { IEnumExtraSearch }
{ IShellFolder2 Interface }
{
[Member Functions]
IShellFolder2::GetDefaultSearchGUID
Returns the guid of the search that is to be invoked when user clicks
on the search toolbar button.
IShellFolder2::EnumSearches
Gives an enumerator of the searches to be added to the search menu.
IShellFolder2::GetDefaultColumn
IShellFolder2::GetDefaultColumnState
IShellFolder2::GetDetailsEx
IShellFolder2::GetDetailsOf
IShellFolder2::MapColumnToSCID
}
const
// IShellFolder2::GetDefaultColumnState values
SHCOLSTATE_TYPE_STR = $00000001;
SHCOLSTATE_TYPE_INT = $00000002;
SHCOLSTATE_TYPE_DATE = $00000003;
SHCOLSTATE_TYPEMASK = $0000000F;
SHCOLSTATE_ONBYDEFAULT = $00000010; // should be on by default in details view
SHCOLSTATE_SLOW = $00000020; // will be slow to compute, do on a background thread
SHCOLSTATE_EXTENDED = $00000040; // provided by a handler, not the folder
SHCOLSTATE_SECONDARYUI = $00000080; // not displayed in context menu, but listed in the "More..." dialog
SHCOLSTATE_HIDDEN = $00000100; // not displayed in the UI
type
TSHColumnID = packed record
fmtid : TGUID;
pid : DWORD;
end; { TSHColumnID }
PSHColumnID = ^TSHColumnID;
const
IID_IShellFolder2 : TGUID = (
D1:$93F2F68C; D2:$1D1B; D3:$11D3; D4:($A3,$0E,$00,$C0,$4F,$79,$AB,$D1));
SID_IShellFolder2 = '{93F2F68C-1D1B-11D3-A30E-00C04F79ABD1}';
type
IShellFolder2 = interface(IShellFolder)
[SID_IShellFolder2]
function GetDefaultSearchGUID(var lpGuid : TGUID) : HResult; stdcall;
function EnumSearches(ppenum : IEnumExtraSearch) : HResult; stdcall;
function GetDefaultColumn(dwRes : DWord; var Sort, Display : ULONG) : HResult; stdcall;
function GetDefaultColumnState(iColumn : UInt; var csFlags : DWord) : HResult; stdcall;
function GetDetailsEx(pidl : PItemIDList; var scid : TShColumnID; var v : OLEVariant {VARIANT}) : HResult; stdcall;
function GetDetailsOf(pidl : PItemIDList; iColumn : UInt; var sd : TShellDetails) : HResult; stdcall;
function MapColumnToSCID(iColumn : UInt; var scid : TShColumnID) : HResult; stdcall;
end; { IShellFolder2 }
{ ITaskbarList Interface }
{
[Member functions]
ITaskbarList::HrInit
This function must be called first to validate use of other members.
ITaskbarList::AddTab
This function adds a tab for hwnd to the taskbar.
ITaskbarList::DeleteTab
This function deletes a tab for hwnd from the taskbar.
ITaskbarList::ActivateTab
This function activates the tab associated with hwnd on the taskbar.
ITaskbarList::SetActivateAlt
This function marks hwnd in the taskbar as the active tab.
}
const
IID_ITaskbarList : TGUID = (
D1:$56FDF342; D2:$FD6D; D3:$11D0; D4:($95,$8A,$00,$60,$97,$C9,$A0,$90));
SID_ITaskbarList = '{56FDF342-FD6D-11d0-958A-006097C9A090}';
type
ITaskbarList = interface(IUnknown)
[SID_ITaskbarList]
function HrInit : HResult; stdcall;
function AddTab(hWndOwner : HWND) : HResult; stdcall;
function DeleteTab(hWndOwner : HWND) : HResult; stdcall;
function ActivateTab(hWndOwner : HWND) : HResult; stdcall;
function SetActiveAlt(hWndOwner : HWND) : HResult; stdcall;
end; { ITaskbarList }
{ IInputObjectSite/IInputObject interfaces }
{
These interfaces allow us (or ISVs) to install/update external Internet
Toolbar for IE and the shell. The frame will simply get the CLSID from
registry (to be defined) and CoCreateInstance it.
}
{ IInputObjectSite interface }
{
A site implements this interface so the object can communicate
focus change to it.
[Member functions]
IInputObjectSite::OnFocusChangeIS(punkObj, fSetFocus)
Object (punkObj) is getting or losing the focus.
}
const
IID_IInputObjectSite : TGUID = (
D1:$F1DB8392; D2:$7331; D3:$11D0; D4:($8C,$99,$00,$A0,$C9,$2D,$BF,$E8));
SID_IInputObjectSite = '{F1DB8392-7331-11D0-8C99-00A0C92DBFE8}';
type
IInputObjectSite = interface(IUnknown)
[SID_IInputObjectSite]
function OnFocusChangeIS(punkObj : IUnknown; fSetFocus : BOOL) : HResult; stdcall;
end; { IInputObjectSite }
{ IInputObject interface }
{
An object implements this interface so the site can communicate
activation and accelerator events to it.
[Member functions]
IInputObject::UIActivateIO(fActivate, lpMsg)
Activates or deactivates the object. lpMsg may be NULL. Returns
S_OK if the activation succeeded.
IInputObject::HasFocusIO()
Returns S_OK if the object has the focus, S_FALSE if not.
IInputObject::TranslateAcceleratorIO(lpMsg)
Allow the object to process the message. Returns S_OK if the
message was processed (eaten).
}
const
IID_IInputObject : TGUID = (
D1:$68284FAA; D2:$6A48; D3:$11D0; D4:($8C,$78,$00,$C0,$4F,$D9,$18,$B4));
SID_IInputObject = '{68284FAA-6A48-11D0-8C78-00C04FD918B4}';
type
IInputObject = interface(IUnknown)
[SID_IInputObject]
function UIActivateIO(fActivate : BOOL; var Msg: TMsg {lpMsg : LPMSG}) : HResult; stdcall;
function HasFocusIO : HResult; stdcall;
function TranslateAcceleratorIO(var Msg: TMsg {lpMsg : LPMSG}) : HResult; stdcall;
end; { IInputObject }
{ IDockingWindowSite/IDockingWindow/IDockingWindowFrame Interfaces }
{
These interfaces allow us (or ISVs) to install/update external Internet
Toolbar for IE and the shell. The frame will simply get the CLSID from
registry (to be defined) and CoCreateInstance it.
}
{ IDockingWindowSite Interface }
{
A site implements this interface so the object can negotiate for
and inquire about real estate on the site.
[Member functions]
IDockingWindowSite::GetBorderDW
Site returns the bounding rectangle of the given source object (punkObj).
IDockingWindowSite::RequestBorderSpaceDW
Object requests that the site makes room for it, as specified in
pborderwidths.
IDockingWindowSite::SetBorderSpaceDW
Object requests that the site set the border spacing to the size
specified in pborderwidths.
}
const
IID_IDockingWindowSite : TGUID = (
D1:$2A342FC2; D2:$7B26; D3:$11D0; D4:($8C,$A9,$00,$A0,$C9,$2D,$BF,$E8));
SID_IDockingWindowSite = '{2A342FC2-7B26-11D0-8CA9-00A0C92DBFE8}';
type
IDockingWindowSite = interface(IOLEWindow)
[SID_IDockingWindowSite]
function GetBorderDW(punkObj : IUnknown; prcBorder : PRECT) : HResult; stdcall;
function RequestBorderSpaceDW(punkObj : IUnknown; pborderwidths : PRect) : HResult; stdcall;
function SetBorderSpaceDW(punkObj : IUnknown; pborderwidths : PRect) : HResult; stdcall;
end; { IDockingWindowSite }
{ IDockingWindowFrame Interface }
{
[Member functions]
IDockingWindowFrame::AddToolbar
IDockingWindowFrame::RemoveToolbar
IDockingWindowFrame::FindToolbar
}
const
// flags for RemoveToolbar
DWFRF_NORMAL = $0000;
DWFRF_DELETECONFIGDATA = $0001;
// flags for AddToolbar
DWFAF_HIDDEN = $0001; // add hidden
const
IID_IDockingWindowFrame : TGUID = (
D1:$47D2657A; D2:$7B27; D3:$11D0; D4:($8C,$A9,$00,$A0,$C9,$2D,$BF,$E8));
SID_IDockingWindowFrame = '{47D2657A-7B27-11D0-8CA9-00A0C92DBFE8}';
type
IDockingWindowFrame = interface(IOLEWindow)
[SID_IDockingWindowFrame]
function AddToolbar(punkObj : IUnknown; pwszItem : PWideChar; dwAddFlags : DWORD) : HResult; stdcall;
function RemoveToolbar(punkObj : IUnknown; dwRemoveFlags : DWORD) : HResult; stdcall;
function FindToolbar(pwszItem : PWideChar; riid : TIID {REFIID}; var pvObj : Pointer) : HResult; stdcall;
end; { IDockingWindowFrame }
{ IDockingWindow Interface }
{
An object (docking window) implements this interface so the site can
communicate with it. An example of a docking window is a toolbar.
[Member functions]
IDockingWindow::ShowDW
Shows or hides the docking window.
IDockingWindow::CloseDW
Closes the docking window. dwReserved must be 0.
IDockingWindow::ResizeBorderDW
Resizes the docking window's border to *prcBorder. fReserved must
be 0.
IObjectWithSite::SetSite(punkSite)
IDockingWindow usually paired with IObjectWithSite.
Provides the IUnknown pointer of the site to the docking window.
}
const
IID_IDockingWindow : TGUID = (
D1:$012DD920; D2:$7B26; D3:$11D0; D4:($8C,$A9,$00,$A0,$C9,$2D,$BF,$E8));
SID_IDockingWindow = '{012DD920-7B26-11D0-8CA9-00A0C92DBFE8}';
type
IDockingWindow = interface(IOLEWindow)
[SID_IDockingWindow]
function ShowDW(fShow : BOOL) : HResult; stdcall;
function CloseDW(dwReserved : DWORD) : HResult; stdcall;
function ResizeBorderDW(prcBorder : PRECT; punkToolbarSite : IUnknown; fReserved : BOOL) : HResult; stdcall;
end; { IDockingWindow }
{ IDeskBand Interface }
{
[Member functions]
IDeskBand::GetBandInfo
Returns info on the given band in *pdbi, according to the mask
field in the DESKBANDINFO structure and the given viewmode.
}
const
// Mask values for DESKBANDINFO
DBIM_MINSIZE = $0001;
DBIM_MAXSIZE = $0002;
DBIM_INTEGRAL = $0004;
DBIM_ACTUAL = $0008;
DBIM_TITLE = $0010;
DBIM_MODEFLAGS = $0020;
DBIM_BKCOLOR = $0040;
type
TDeskbandInfo = packed record
dwMask : DWORD;
ptMinSize,
ptMaxSize,
ptIntegral,
ptActual : TPoint;
wszTitle : Array[1..256] of WideChar;
dwModeFlags : DWORD;
crBkgnd : TColorRef;
end; { TDeskbandInfo }
PDeskbandInfo = ^TDeskbandInfo;
const
// DESKBANDINFO dwModeFlags values
DBIMF_NORMAL = $0000;
DBIMF_VARIABLEHEIGHT = $0008;
DBIMF_DEBOSSED = $0020;
DBIMF_BKCOLOR = $0040;
// GetBandInfo view mode values
DBIF_VIEWMODE_NORMAL = $0000;
DBIF_VIEWMODE_VERTICAL = $0001;
DBIF_VIEWMODE_FLOATING = $0002;
DBIF_VIEWMODE_TRANSPARENT = $0004;
const
IID_IDeskBand : TGUID = (
D1:$EB0FE172; D2:$1A3A; D3:$11D0; D4:($89,$B3,$00,$A0,$C9,$0A,$90,$AC));
SID_IDeskBand = '{EB0FE172-1A3A-11D0-89B3-00A0C90A90AC}';
type
IDeskBand = interface(IDockingWindow)
[SID_IDeskBand]
function GetBandInfo(dwBandID, dwViewMode : DWORD; pdbi : PDeskbandInfo) : HResult; stdcall;
end; { IDeskBand }
const
// Command Target IDs
DBID_BANDINFOCHANGED = 0;
DBID_SHOWONLY = 1;
DBID_MAXIMIZEBAND = 2; // Maximize the specified band (VT_UI4 == dwID)
DBID_PUSHCHEVRON = 3;
DBID_DELAYINIT = 4; // Note: _bandsite_ calls _band_ with this code
DBID_FINISHINIT = 5; // Note: _bandsite_ calls _band_ with this code
{ IRunnableTask Interface }
//Shell 4+ only
{
This is a free threaded interface used for putting items on a background
scheduler for execution within the view. It allows a scheduler to start and
stop tasks on as many worker threads as it deems necessary.
Run(), Kill() and Suspend() may be called from different threads.
[Member functions]
IRunnableTask::Run
Initiate the task to run. This should return E_PENDING if the task
has been suspended.
IRunnableTask::Kill
IRunnableTask::Suspend
IRunnableTask::Resume
IRunnableTask::IsRunning
}
const
// Convenient state values
IRTIR_TASK_NOT_RUNNING = 0;
IRTIR_TASK_RUNNING = 1;
IRTIR_TASK_SUSPENDED = 2;
IRTIR_TASK_PENDING = 3;
IRTIR_TASK_FINISHED = 4;
const
IID_IRunnableTask : TGUID = (
D1:$85788D00; D2:$6807; D3:$11D0; D4:($B8,$10,$00,$C0,$4F,$D7,$06,$EC));
SID_IRunnableTask = '{85788D00-6807-11d0-B810-00C04FD706EC}';
type
IRunnableTask = interface(IUnknown)
[SID_IRunnableTask]
function Run : HResult; stdcall;
function Kill(fWait : BOOL) : HResult; stdcall;
function Suspend : HResult; stdcall;
function Resume : HResult; stdcall;
function IsRunning : ULONG; stdcall;
end; { IRunnableTask }
{ IExtractImage Interface }
{
This interface is provided for objects to provide a thumbnail image.
[Member functions]
IExtractImage::GetLocation
Gets a path description of the image that is to be extracted. This is used to
identify the image in the view so that multiple instances of the same image can reuse the
original image. If *pdwFlags == IEIFLAG_ASYNC and the result is E_PENDING, then *pdwPriority
is used to return the priority of the item, this is usually a measure of how long it will take
to perform the extraction. *pdwFlags can return IEIFLAG_CACHE if the view should cache a copy
of the image for future reference and faster access. This flag is use dto tell the difference
between file formats that cache a thumbnail image such as Flashpix or Office documents, and those
that don't cache one.
IExtractImage::Extract
Extract the thumbnail of the specified size. If GetLocation() returned the values indicating
it is free-threaded and can be placed on a background thread. If the object
supports IRunnableTask as well, then long extractions can be started and paused as appropriate.
At this point it is asssumed the object is free-threaded.
If dwRecClrDepth contains a recommended Colour depth
If *phBmpthumbnail is non NULL, then it contains the destination bitmap that should be used.
}
const
//MISSING VALUES
// IEI_PRIORITY_MAX = ITSAT_MAX_PRIORITY; // 99? FF00? FFFF?
// IEI_PRIORITY_MIN = ITSAT_MIN_PRIORITY; // 01?
// IEIT_PRIORITY_NORMAL = ITSAT_DEFAULT_PRIORITY; // 01?
IEIFLAG_ASYNC = $0001; // ask the extractor if it supports ASYNC extract (free threaded)
IEIFLAG_CACHE = $0002; // returned from the extractor if it does NOT cache the thumbnail
IEIFLAG_ASPECT = $0004; // passed to the extractor to beg it to render to the aspect ratio of the supplied rect
IEIFLAG_OFFLINE = $0008; // if the extractor shouldn't hit the net to get any content neede for the rendering
IEIFLAG_GLEAM = $0010; // does the image have a gleam ? this will be returned if it does
IEIFLAG_SCREEN = $0020; // render as if for the screen (this is exlusive with IEIFLAG_ASPECT )
IEIFLAG_ORIGSIZE = $0040; // render to the approx size passed, but crop if neccessary
const
IID_IExtractImage : TGUID = (
D1:$BB2E617C; D2:$0920; D3:$11D1; D4:($9A,$0B,$00,$C0,$4F,$C2,$D6,$C1));
SID_IExtractImage = '{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}';
type
IExtractImage = interface(IUnknown)
[SID_IExtractImage]
function GetLocation(pszPathBuffer : PWideChar; cch : DWORD; var dwPriority : DWORD; var rgSize : TPoint { SIZE }; dwRecClrDepth : DWORD; var dwFlags : DWORD) : HResult; stdcall;
function Extract(var hBmpThumbnail : HBITMAP) : HResult; stdcall;
end; { IExtractImage }
{ IExtractImage2 Interface }
//Shell 5+ only
{
[Member functions]
IExtractImage2::GetDateStamp
Returns the date stamp associated with the image. If this image is already cached,
then it is easy to find out if the image is out of date.
}
const
IID_IExtractImage2 : TGUID = (
D1:$953BB1EE; D2:$93B4; D3:$11D1; D4:($98,$A3,$00,$C0,$4F,$B6,$87,$DA));
SID_IExtractImage2 = '{953BB1EE-93B4-11D1-98A3-00C04FB687DA}';
type
IExtractImage2 = interface(IExtractImage)
[SID_IExtractImage2]
function GetDateStamp(var DateStamp : TFileTime) : HResult; stdcall;
end; { IExtractImage2 }
{ IActiveDesktop Interface }
//Shell 4+ only
{
The COMPONENT structure uses INTERNET_MAX_URL_LENGTH from WinInet.h
Flags and structures used by IActiveDesktop
}
type
TWallpaperOpt = packed record
dwSize, // size of this Structure.
dwStyle : DWORD; // WPSTYLE_* mentioned above
end; { TWallpaperOpt }
PWallpaperOpt = ^TWallpaperOpt;
TComponentsOpt = packed record
dwSize : DWORD; //Size of this structure
fEnableComponents, //Enable components?
fActiveDesktop : BOOL; // Active desktop enabled?
end; { TComponentsOpt }
PComponentsOpt = ^TComponentsOpt;
TCompPos = packed record
dwSize : DWORD; //Size of this structure
iLeft, //Left of top-left corner in screen co-ordinates.
iTop : Integer; //Top of top-left corner in screen co-ordinates.
dwWidth, //Width in pixels.
dwHeight : DWORD; //Height in pixels.
izIndex : Integer; //Indicates the Z-order of the component.
fCanResize, //Is the component resizable?
fCanResizeX, //Resizable in X-direction?
fCanResizeY : BOOL; //Resizable in Y-direction?
iPreferredLeftPercent, //Left of top-left corner as percent of screen width
iPreferredTopPercent : Integer; //Top of top-left corner as percent of screen height
end; { TCompPos }
PCompPos = ^TCompPos;
TCompStateInfo = packed record
dwSize : DWORD; //Size of this structure.
iLeft, //Left of the top-left corner in screen co-ordinates.
iTop : Integer; //Top of top-left corner in screen co-ordinates.
dwWidth, //Width in pixels.
dwHeight, //Height in pixels.
dwItemState : DWORD; //State of the component (full-screen mode or split-screen or normal state.
end; { TCompStateInfo }
PCompStateInfo = ^TCompStateInfo;
const
// COMPONENT_TOP = $7fffffff; // Sep 1998 value
COMPONENT_TOP = $3fffffff; // izOrder value meaning component is at the top
// iCompType values
COMP_TYPE_HTMLDOC = 0;
COMP_TYPE_PICTURE = 1;
COMP_TYPE_WEBSITE = 2;
COMP_TYPE_CONTROL = 3;
COMP_TYPE_CFHTML = 4;
COMP_TYPE_MAX = 4;
// From WinInet.h:
// Maximum field lengths (arbitrary)
INTERNET_MAX_HOST_NAME_LENGTH = 256;
INTERNET_MAX_USER_NAME_LENGTH = 128;
INTERNET_MAX_PASSWORD_LENGTH = 128;
INTERNET_MAX_PORT_NUMBER_LENGTH = 5; // INTERNET_PORT is unsigned short
INTERNET_MAX_PORT_NUMBER_VALUE = 65535; // maximum unsigned short value
INTERNET_MAX_PATH_LENGTH = 2048;
INTERNET_MAX_SCHEME_LENGTH = 32; // longest protocol name length
INTERNET_MAX_URL_LENGTH = (INTERNET_MAX_SCHEME_LENGTH +
SizeOf('://') +
INTERNET_MAX_PATH_LENGTH);
type
// The following is the COMPONENT structure used in IE4.01, IE4.0 and Memphis.
// It is kept here for compatibility reasons.
TIE4Component = packed record
dwSize, //Size of this structure
dwID : DWORD; //Reserved: Set it always to zero
iComponentType : Integer; //One of COMP_TYPE_*
fChecked, // Is this component enabled?
fDirty, // Had the component been modified and not yet saved to disk?
fNoScroll : BOOL; // Is the component scrollable?
cpPos : TCompPos; // Width, height etc.
// Friendly name of component
wszFriendlyName : Array[1..MAX_PATH] of WideChar;
//URL of the component
wszSource,
//Subscribed URL
wszSubscribedURL : Array[1..INTERNET_MAX_URL_LENGTH] of WideChar;
end; { TIE4Component }
PIE4Component = ^TIE4Component;
// The following is the new NT5 component structure. Note that the initial portion of this component exactly
// matches the IE4COMPONENT structure. All new fields are added at the bottom and the dwSize field is used to
// distinguish between IE4COMPONENT and the new COMPONENT structures.
TIE5Component { TComponent! } = packed record
dwSize, //Size of this structure
dwID : DWORD; //Reserved: Set it always to zero
iComponentType : Integer; //One of COMP_TYPE_*
fChecked, // Is this component enabled?
fDirty, // Had the component been modified and not yet saved to disk?
fNoScroll : BOOL; // Is the component scrollable?
cpPos : TCompPos; // Width, height etc.
// Friendly name of component
wszFriendlyName : Array[1..MAX_PATH] of WideChar;
//URL of the component
wszSource,
//Subscribed URL
wszSubscribedURL : Array[1..INTERNET_MAX_URL_LENGTH] of WideChar;
//New fields are added below
dwCurItemState : DWORD; // Current state of the Component
csiOriginal, // Original state of the component when it was first added
csiRestored : TCompStateInfo; // Restored state of the component
end; { TIE5Component }
PIE5Component = ^TIE5Component;
const
// Defines for dwCurItemState
IS_NORMAL = $00000001;
IS_FULLSCREEN = $00000002;
IS_SPLIT = $00000004;
// The set of IS_* state bits which define the "size" of the component
// These bits are mutually exclusive
IS_VALIDSIZESTATEBITS = IS_NORMAL or IS_SPLIT or IS_FULLSCREEN;
// All of the currently defined IS_* bits
IS_VALIDSTATEBITS = IS_NORMAL or IS_SPLIT or IS_FULLSCREEN or $80000000 or $40000000;
// Flags for IActiveDesktop::ApplyChanges
AD_APPLY_SAVE = $00000001;
AD_APPLY_HTMLGEN = $00000002;
AD_APPLY_REFRESH = $00000004;
AD_APPLY_ALL = AD_APPLY_SAVE or AD_APPLY_HTMLGEN or AD_APPLY_REFRESH;
AD_APPLY_FORCE = $00000008;
AD_APPLY_BUFFERED_REFRESH = $00000010;
AD_APPLY_DYNAMICREFRESH = $00000020;
// Flags for IActiveDesktop::GetWallpaperOptions
// IActiveDesktop::SetWallpaperOptions
WPSTYLE_CENTER = 0;
WPSTYLE_TILE = 1;
WPSTYLE_STRETCH = 2;
WPSTYLE_MAX = 3;
// Flags for IActiveDesktop::ModifyComponent
COMP_ELEM_TYPE = $00000001;
COMP_ELEM_CHECKED = $00000002;
COMP_ELEM_DIRTY = $00000004;
COMP_ELEM_NOSCROLL = $00000008;
COMP_ELEM_POS_LEFT = $00000010;
COMP_ELEM_POS_TOP = $00000020;
COMP_ELEM_SIZE_WIDTH = $00000040;
COMP_ELEM_SIZE_HEIGHT = $00000080;
COMP_ELEM_POS_ZINDEX = $00000100;
COMP_ELEM_SOURCE = $00000200;
COMP_ELEM_FRIENDLYNAME = $00000400;
COMP_ELEM_SUBSCRIBEDURL = $00000800;
COMP_ELEM_ORIGINAL_CSI = $00001000;
COMP_ELEM_RESTORED_CSI = $00002000;
COMP_ELEM_CURITEMSTATE = $00004000;
COMP_ELEM_ALL = COMP_ELEM_TYPE or COMP_ELEM_CHECKED or COMP_ELEM_DIRTY or
COMP_ELEM_NOSCROLL or COMP_ELEM_POS_LEFT or COMP_ELEM_SIZE_WIDTH or
COMP_ELEM_SIZE_HEIGHT or COMP_ELEM_POS_ZINDEX or COMP_ELEM_SOURCE or
COMP_ELEM_FRIENDLYNAME or COMP_ELEM_POS_TOP or COMP_ELEM_SUBSCRIBEDURL or
COMP_ELEM_ORIGINAL_CSI or COMP_ELEM_RESTORED_CSI or COMP_ELEM_CURITEMSTATE;
// Flags for IActiveDesktop::AddDesktopItemWithUI
//DTI_ADTIWUI
DTI_ADDUI_DEFAULT = $00000000;
DTI_ADDUI_DISPSUBWIZARD = $00000001;
DTI_ADDUI_POSITIONITEM = $00000002;
// Flags for IActiveDesktop::AddUrl
ADDURL_SILENT = $0001;
// Default positions for ADI
COMPONENT_DEFAULT_LEFT = $FFFF;
COMPONENT_DEFAULT_TOP = $FFFF;
{ IActiveDesktop Interface }
const
IID_IActiveDesktop : TGUID = (
D1:$F490EB00; D2:$1240; D3:$11D1; D4:($98,$88,$00,$60,$97,$DE,$AC,$F9));
SID_IActiveDesktop = '{F490EB00-1240-11D1-9888-006097DEACF9}';
type
IActiveDesktop = interface(IUnknown)
[SID_IActiveDesktop]
function ApplyChanges(dwFlags : DWORD) : HResult; stdcall;
function GetWallpaper(pwszWallpaper : PWideChar; cchWallpaper : UINT; dwReserved : DWORD) : HResult; stdcall;
function SetWallpaper(pwszWallpaper : PWideChar; dwReserved : DWORD) : HResult; stdcall;
function GetWallpaperOptions(pwpo : PWallpaperOpt; dwReserved : DWORD) : HResult; stdcall;
function SetWallpaperOptions(pwpo : PWallpaperOpt; dwReserved : DWORD) : HResult; stdcall;
function GetPattern(pwszPattern : PWideChar; cchPattern : UINT; dwReserved : DWORD) : HResult; stdcall;
function SetPattern(pwszPattern : PWideChar; dwReserved : DWORD) : HResult; stdcall;
function GetDesktopItemOptions(pco : PComponentsOpt; dwReserved : DWORD) : HResult; stdcall;
function SetDesktopItemOptions(pco : PComponentsOpt; dwReserved : DWORD) : HResult; stdcall;
function AddDesktopItem(pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function AddDesktopItemWithUI(hWndOwner : HWND; pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function ModifyDesktopItem(pcomp : PIE5Component; dwFlags : DWORD) : HResult; stdcall;
function RemoveDesktopItem(pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function GetDesktopItemCount(var iCount : Integer; dwReserved : DWORD) : HResult; stdcall;
function GetDesktopItem(nComponent : Integer; pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function GetDesktopItemByID(dwID : DWORD {ULONG_PTR}; pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function GenerateDesktopItemHtml(pwszFileName : PWideChar; pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
function AddUrl(hWndOwner : HWND; pszSource : PWideChar; pcomp : PIE5Component; dwFlags : DWORD) : HResult; stdcall;
function GetDesktopItemBySource(pwszSource : PWideChar; pcomp : PIE5Component; dwReserved : DWORD) : HResult; stdcall;
end; { IActiveDesktop }
//Shell 5+ only
const
MAX_COLUMN_NAME_LEN = 80;
MAX_COLUMN_DESC_LEN = 128;
type
TSHColumnInit = packed record
dwFlags, // initialization flags
dwReserved : ULong; // reserved for future use.
wszFolder : array [1..MAX_PATH] of WideChar; // fully qualified folder path (or empty if multiple folders)
end; { TSHColumnInit }
PSHColumnInit = ^TSHColumnInit;
TSHColumnInfo = packed record
scid : TSHColumnID; // OUT the unique identifier of this column
vt : TVarType; // OUT the native type of the data returned
fmt : DWORD; // OUT this listview format (LVCFMT_LEFT, usually)
cChars : UINT; // OUT the default width of the column, in characters
(*
//Sep 1998 definition
bDefault : BOOL; // OUT is column on by default?
// OUT the title of the column
wszTitle : Array[1..MAX_COLUMN_NAME_LEN] of WideChar;
*)
//Jul 1999 definition
csFlags : DWord; // OUT SHCOLSTATE flags
wszTitle : array [1..MAX_COLUMN_NAME_LEN] of WideChar; // OUT the title of the column
wszDescription : array [1..MAX_COLUMN_DESC_LEN] of WideChar; // OUT full description of this column
end; { TSHColumnInfo }
PSHColumnInfo = ^TSHColumnInfo;
const
SHCDF_UPDATEITEM = $00000001; // this flag is a hint that the file has changed since the last call to GetItemData
type
TSHColumnData = packed record
(*
//Sep 1998 definition
pidl : PItemIDList; // IN the absolute pidl (caller still owns!)
vData : OLEVariant {VARIANT}; // OUT the data for the pidl
*)
//Jul 1999 definition
dwFlags : ULong; // combination of SHCDF_ flags
dwFileAttributes : DWord; // file attributes
dwReserved : ULong; // reserved for future use
pwszExt : PWideChar; // address of file name extension
wszFile : array [1..MAX_PATH] of WideChar; // Absolute path of file
end; { TSHColumnData }
PSHColumnData = ^TSHColumnData;
{ IColumnProvider Interface }
// Note: People who implement this interface must be threadsafe!
// GetItemData _will_ be called simultaneously from multiple threads.
const
IID_IColumnProvider : TGUID = (
D1:$E8025004; D2:$1C42; D3:$11D2; D4:($BE,$2C,$00,$A0,$C9,$A8,$3D,$A1));
SID_IColumnProvider = '{E8025004-1C42-11d2-BE2C-00A0C9A83DA1}';
type
IColumnProvider = interface(IUnknown)
[SID_IColumnProvider]
function GetColumnCount : ULONG; stdcall;
function GetColumnInfo(dwIndex : DWORD; psci : PSHColumnInfo) : HResult; stdcall;
function GetItemData(pscid : PSHColumnID; pscd : PSHColumnData) : HResult; stdcall;
end; { IColumnProvider }
const
//Clipboard formats which may be supported by IDataObject
CFSTR_SHELLURL = 'UniformResourceLocator';
CFSTR_PERFORMEDDROPEFFECT = 'Performed DropEffect';
CFSTR_PASTESUCCEEDED = 'Paste Succeeded';
CFSTR_INDRAGLOOP = 'InShellDragLoop';
CFSTR_DRAGCONTEXT = 'DragContext';
CFSTR_MOUNTEDVOLUME = 'MountedVolume';
//FILEDESCRIPTOR.dwFlags flags
FD_PROGRESSUI = $4000; // Show Progress UI w/Drag and Drop
{ format of CF_FILEGROUPDESCRIPTOR }
type
TFileDescriptorA = 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 AnsiChar;
end;
TFileDescriptorW = 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 WideChar;
end;
TFileDescriptor = TFileDescriptorA;
TFileGroupDescriptorA = record
cItems: UINT;
fgd: array[0..0] of TFileDescriptorA;
end;
TFileGroupDescriptorW = packed record { fgd }
cItems : UINT;
fgd : array[0..0] of TFileDescriptorW;
end; { TFileGroupDescriptorW }
TFileGroupDescriptor = TFileGroupDescriptorA;
PFileGroupDescriptorA = ^TFileGroupDescriptorA;
PFileGroupDescriptorW = ^TFileGroupDescriptorW;
const
//File System Notification flags
SHCNE_EXTENDED_EVENT = $04000000; //Shell 4+ THIS IS A CORRECTION
//Shell 4+ only
SHCNEE_ORDERCHANGED = $00000002; //dwItem2 is the PIDL of the changed folder
SHCNEE_MSI_CHANGE = $00000004; //dwItem2 is the product code
SHCNEE_MSI_UNINSTALL = $00000005; //dwItem2 is the product code
{ IShellChangeNotify Interface }
//Shell 5+ only
{
IShellChangeNotify is used to notify a shell namespace extension when
the ID of an item has changed.
This interface is implemented by all namespace extensions.
You do not call this interface directly. IShellChangeNotify is used by
the operating system only when it has confirmed that your application is
aware of this interface.
[Member Methods]
OnChange Called when an item in the namespace extension changes.
}
const
//MISSING VALUE for IID_/SID_IShellChangeNotify obtained from newsgroups
IID_IShellChangeNotify : TGUID = (
D1:$D82BE2B1; D2:$5764; D3:$11D0; D4:($A9,$6E,$00,$C0,$4F,$D7,$05,$A2));
SID_IShellChangeNotify = '{D82BE2B1-5764-11D0-A96E-00C04FD705A2}';
type
IShellChangeNotify = interface(IUnknown)
[SID_IShellChangeNotify]
function OnChange(lEvent : LongInt {LONG}; pidl1, pidl2 : PItemIDList) : HResult; stdcall;
end; { IShellChangeNotify }
{ IQueryInfo Interface }
const
IID_IQueryInfo : TGUID = (
D1:$00021500; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
SID_IQueryInfo = '{00021500-0000-0000-C000-000000000046}';
type
IQueryInfo = interface(IUnknown)
[SID_IQueryInfo]
function GetInfoTip(dwFlags : DWORD; var pwszTip : PWideChar) : HResult; stdcall;
function GetInfoFlags(var dwFlags : DWORD) : HResult; stdcall;
end; { IQueryInfo }
const
QIF_CACHED = $00000001;
QIF_DONTEXPANDFOLDER = $00000002;
const
// PROPIDs for Internet Shortcuts (FMTID_Intshcut)
// to be used with IPropertySetStorage/IPropertyStorage.
// The known property ids and their variant types are:
PID_IS_URL = 2; // [VT_LPWSTR] URL
PID_IS_NAME = 4; // [VT_LPWSTR] Name of the internet shortcut
PID_IS_WORKINGDIR = 5; // [VT_LPWSTR] Working directory for the shortcut
PID_IS_HOTKEY = 6; // [VT_UI2] Hotkey for the shortcut
PID_IS_SHOWCMD = 7; // [VT_I4] Show command for shortcut
PID_IS_ICONINDEX = 8; // [VT_I4] Index into file that has icon
PID_IS_ICONFILE = 9; // [VT_LPWSTR] File that has the icon
PID_IS_WHATSNEW = 10; // [VT_LPWSTR] What's New text
PID_IS_AUTHOR = 11; // [VT_LPWSTR] Author
PID_IS_DESCRIPTION = 12; // [VT_LPWSTR] Description text of site
PID_IS_COMMENT = 13; // [VT_LPWSTR] User annotated comment
// PROPIDs for Internet Sites (FMTID_InternetSite)
// to be used with IPropertySetStorage/IPropertyStorage.
// The known property ids and their variant types are:
PID_INTSITE_WHATSNEW = 2; // [VT_LPWSTR] What's New text
PID_INTSITE_AUTHOR = 3; // [VT_LPWSTR] Author
PID_INTSITE_LASTVISIT = 4; // [VT_FILETIME] Time site was last visited
PID_INTSITE_LASTMOD = 5; // [VT_FILETIME] Time site was last modified
PID_INTSITE_VISITCOUNT = 6; // [VT_UI4] Number of times user has visited
PID_INTSITE_DESCRIPTION = 7; // [VT_LPWSTR] Description text of site
PID_INTSITE_COMMENT = 8; // [VT_LPWSTR] User annotated comment
PID_INTSITE_FLAGS = 9;
PID_INTSITE_CONTENTLEN = 10;
PID_INTSITE_CONTENTCODE = 11;
PID_INTSITE_RECURSE = 12; // [VT_UI4] Levels to recurse (0-3)
PID_INTSITE_WATCH = 13; // [VT_UI4] PIDISM_ flags
PID_INTSITE_SUBSCRIPTION = 14; // [VT_UI8] Subscription cookie
PID_INTSITE_URL = 15; // [VT_LPWSTR] URL
PID_INTSITE_TITLE = 16; // [VT_LPWSTR] Title
PID_INTSITE_CODEPAGE = 18; // [VT_UI4] Codepage of the document
PID_INTSITE_TRACKING = 19; // [VT_UI4] Tracking
PID_INTSITE_ICONINDEX = 20;
PID_INTSITE_ICONFILE = 21;
// Flags for PID_IS_FLAGS
PIDISF_RECENTLYCHANGED = $00000001;
PIDISF_CACHEDSTICKY = $00000002;
PIDISF_CACHEIMAGES = $00000010;
PIDISF_FOLLOWALLLINKS = $00000020;
// Values for PID_INTSITE_WATCH
PIDISM_GLOBAL = 0; // Monitor based on global setting
PIDISM_WATCH = 1; // User says watch
PIDISM_DONTWATCH = 2; // User says don't watch
// The shell keeps track of some per-user state to handle display
// options that is of major interest to ISVs.
// The key one requested right now is "DoubleClickInWebView".
type
TShellFlag = (fShowAllObjects, fShowExtensions, fNoConfirmRecycle, fShowSysFiles,
fShowCompColor, fDoubleClickInWebView, fDesktopHTML, fWin95Classic,
fDontPrettyPath, fShowAttribCol, fMapNetDrvBtn, fShowInfoTip,
fHideIcons); //13 bits
TShellFlags = set of TShellFlag;
TShellFlagState = packed record
Flags : TShellFlags; //16 bits wide
end; { TShellFlagState }
PShellFlagState = ^TShellFlagState;
const
SSF_SHOWALLOBJECTS = $00000001;
SSF_SHOWEXTENSIONS = $00000002;
SSF_SHOWCOMPCOLOR = $00000008;
SSF_SHOWSYSFILES = $00000020;
SSF_DOUBLECLICKINWEBVIEW = $00000080;
SSF_SHOWATTRIBCOL = $00000100;
SSF_DESKTOPHTML = $00000200;
SSF_WIN95CLASSIC = $00000400;
SSF_DONTPRETTYPATH = $00000800;
SSF_SHOWINFOTIP = $00002000;
SSF_MAPNETDRVBUTTON = $00001000;
SSF_NOCONFIRMRECYCLE = $00008000;
SSF_HIDEICONS = $00004000;
{
Use dwMask to specify the bits you are interested in
and they will be filled out in the lpsfs structure.
When these settings change, a WM_SETTINGCHANGE message is sent
with the string lParam value of "ShellState".
}
procedure SHGetSettings(lpsfs : PShellFlagState; dwMask : DWORD); stdcall;
{ SoftwareUpdateMessageBox }
// From URLMon.h
type
TSoftDistInfo = packed record
cbSize : ULONG;
dwFlags,
dwAdState : DWORD;
szTitle,
szAbstract,
szHREF : PWideChar;
dwInstalledVersionMS,
dwInstalledVersionLS,
dwUpdateVersionMS,
dwUpdateVersionLS,
dwAdvertisedVersionMS,
dwAdvertisedVersionLS,
dwReserved : DWORD;
end; { TSoftDistInfo }
PSoftDistInfo = ^TSoftDistInfo;
{
Provides a standard message box for alerting the user that a software
update is available or installed. No UI will be displayed if there is no
update available or if the available update version is less than or equal
to the Advertised update version.
hWnd - [in] Handle of owner window
szDistUnit - [in] Unique identifier string for a code distribution unit. For
ActiveX controls and Active Setup installed components, this
is typically a GUID string.
dwFlags - [in] Must be 0.
psdi - [in,out] Pointer to SOFTDISTINFO ( see URLMon.h ). May be NULL.
cbSize should be initialized
by the caller to sizeof(SOFTDISTINFO), dwReserved should be set to 0.
RETURNS:
IDNO - The user chose cancel. If *pbRemind is FALSE, the caller should save the
update version from the SOFTDISTINFO and pass it in as the Advertised
version in future calls.
IDYES - The user has selected Update Now/About Update. The caller should navigate to
the SOFTDISTINFO's pszHREF to initiate the install or learn about it.
The caller should save the update version from the SOFTDISTINFO and pass
it in as the Advertised version in future calls.
IDIGNORE - There is no pending software update. Note: There is
no Ignore button in the standard UI. This occurs if the available
version is less than the installed version or is not present or if the
Advertised version is greater than or equal to the update version.
IDABORT - An error occured. Call GetSoftwareUpdateInfo() for a more specific HRESULT.
Note: There is no Abort button in the standard UI.
}
function SoftwareUpdateMessageBox(hWndOwner : HWND; szDistUnit : PWideChar; dwFlags : DWORD; psdi : PSoftDistInfo) : DWORD; stdcall;
function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall;
function SHGetDesktopFolder(var ppshf: IShellFolder): HResult; stdcall;
function SHChangeIconDialog(hOwner: THandle; var FileName: String; var IconIndex: Integer): Boolean;
procedure OleError(ErrorCode: HResult);
procedure OleCheck(Result: HResult);
implementation
uses
SysUtils, ComObj;
const
shell32 = 'Shell32.dll'; //from ShellAPI, ShlObj
function SHGetIconOverlayIndexA; external shell32 name 'SHGetIconOverlayIndexA';
function SHGetIconOverlayIndexW; external shell32 name 'SHGetIconOverlayIndexW';
function SHGetIconOverlayIndex ; external shell32 name 'SHGetIconOverlayIndexA';
function SHCreateDirectoryExA; external shell32 name 'SHCreateDirectoryExA';
function SHCreateDirectoryExW; external shell32 name 'SHCreateDirectoryExW';
function SHCreateDirectoryEx ; external shell32 name 'SHCreateDirectoryExA';
function SHGetSpecialFolderPathA; external shell32 name 'SHGetSpecialFolderPathA';
function SHGetSpecialFolderPathW; external shell32 name 'SHGetSpecialFolderPathW';
function SHGetSpecialFolderPath; external shell32 name 'SHGetSpecialFolderPathA';
function SHGetFolderPathA; external shell32 name 'SHGetFolderPathA';
function SHGetFolderPathW; external shell32 name 'SHGetFolderPathW';
function SHGetFolderPath; external shell32 name 'SHGetFolderPathA';
function SHGetFolderLocation; external shell32 name 'SHGetFolderLocation';
procedure SHGetSettings; external shell32 name 'SHGetSettings';
function SoftwareUpdateMessageBox; external shell32 name 'SoftwareUpdateMessageBox';
function SHGetMalloc; external shell32 name 'SHGetMalloc';
function SHGetDesktopFolder; external shell32 name 'SHGetDesktopFolder';
{ **** UBPFD *********** by delphibase.endimus.com ****
>> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Windows, SysUtils
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Alex Sal'nikov, alex-co@narod.ru, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Copyright: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JVCL
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 15 <20><><EFBFBD><EFBFBD> 2003 <20>.
***************************************************** }
function SHChangeIconDialog(hOwner: THandle; var FileName: String; var IconIndex: Integer): Boolean;
type
TSHChangeIconProc = function(Wnd: HWND; szFileName: PChar; Reserved: Integer;
var lpIconIndex: Integer): DWORD; stdcall;
TSHChangeIconProcW = function(Wnd: HWND; szFileName: PWideChar;Reserved: Integer;
var lpIconIndex: Integer): DWORD; stdcall;
var
ShellHandle: THandle;
SHChangeIcon: TSHChangeIconProc;
SHChangeIconW: TSHChangeIconProcW;
Buf: array[0..MAX_PATH] of Char;
BufW: array[0..MAX_PATH] of WideChar;
begin
Result := False;
SHChangeIcon := nil;
SHChangeIconW := nil;
ShellHandle := Windows.LoadLibrary(PChar(Shell32));
try
if ShellHandle <> 0 then
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
SHChangeIconW := TSHChangeIconProcW(Windows.GetProcAddress(ShellHandle, PChar(62)))
else
SHChangeIcon := TSHChangeIconProc(Windows.GetProcAddress(ShellHandle, PChar(62)));
end;
if Assigned(SHChangeIconW) then
begin
StringToWideChar(FileName, BufW, SizeOf(BufW));
Result := SHChangeIconW(hOwner, BufW, SizeOf(BufW), IconIndex) = 1;
if Result then
FileName := BufW;
end
else if Assigned(SHChangeIcon) then
begin
StrPCopy(Buf, FileName);
Result := SHChangeIcon(hOwner, Buf, SizeOf(Buf), IconIndex) = 1;
if Result then
FileName := Buf;
end
else
begin
IconIndex := 0;
Result := True;
end;
finally
if ShellHandle <> 0 then
FreeLibrary(ShellHandle);
end;
end;
procedure OleError(ErrorCode: HResult);
begin
raise EOleSysError.Create('', ErrorCode, 0);
end;
procedure OleCheck(Result: HResult);
begin
if not Succeeded(Result) then OleError(Result);
end;
end. { ShlObjAdditional }