Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2793 lines
107 KiB

//
// Microsoft Windows
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: shobjidl.idl
//
// Contents: This interface definition contains shell objects that can be remoted
//
import "objidl.idl";
import "oleidl.idl";
import "oaidl.idl";
import "shtypes.idl";
import "servprov.idl";
import "comcat.idl"; // for IEnumGUID
import "propidl.idl";
import "prsht.idl";
import "msxml.idl";
cpp_quote("#ifndef _WINRESRC_")
cpp_quote("#ifndef _WIN32_IE")
cpp_quote("#define _WIN32_IE 0x0501")
cpp_quote("#else")
cpp_quote("#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)")
cpp_quote("#error _WIN32_IE setting conflicts with _WIN32_WINNT setting")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
// IPersistFolder
[
object,
uuid(000214EA-0000-0000-C000-000000000046), // IID_IPersistFolder
pointer_default(unique),
]
interface IPersistFolder : IPersist
{
// IShellFolder::BindToObject when it is initializing a shell folder object.")
// called when the explorer is initializing a shell folder object.
// pidl -- Specifies the absolute location of the folder
HRESULT Initialize([in] LPCITEMIDLIST pidl);
};
typedef IPersistFolder *LPPERSISTFOLDER;
cpp_quote("#if (_WIN32_IE >= 0x0400)")
// IPersistFolder2
[
object,
uuid(1AC3D9F0-175C-11d1-95BE-00609797EA4F), // IID_IPersistFolder2
pointer_default(unique),
]
interface IPersistFolder2 : IPersistFolder
{
HRESULT GetCurFolder([out] LPITEMIDLIST *ppidl);
};
typedef IPersistFolder2 *LPPERSISTFOLDER2;
cpp_quote("#endif")
[
object,
uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5), // IID_IPersistIDList
pointer_default(unique),
]
interface IPersistIDList : IPersist
{
// sets or gets a fully qualifed idlist for an object
HRESULT SetIDList([in] LPCITEMIDLIST pidl);
HRESULT GetIDList([out] LPITEMIDLIST *ppidl);
};
[
helpstring("IEnumIDList "),
uuid(000214F2-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IEnumIDList : IUnknown
{
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip([in] ULONG celt);
HRESULT Reset();
HRESULT Clone([out] IEnumIDList **ppenum);
};
typedef IEnumIDList *LPENUMIDLIST;
// IShellFolder::GetDisplayNameOf/SetNameOf uFlags
cpp_quote("typedef enum tagSHGDN")
cpp_quote("{")
cpp_quote(" SHGDN_NORMAL = 0x0000, // default (display purpose)")
cpp_quote(" SHGDN_INFOLDER = 0x0001, // displayed under a folder (relative)")
cpp_quote(" SHGDN_FOREDITING = 0x1000, // for in-place editing")
cpp_quote(" SHGDN_FORADDRESSBAR = 0x4000, // UI friendly parsing name (remove ugly stuff)")
cpp_quote(" SHGDN_FORPARSING = 0x8000, // parsing name for ParseDisplayName()")
cpp_quote("} SHGNO;")
typedef DWORD SHGDNF;
// IShellFolder::EnumObjects grfFlags bits
cpp_quote("typedef enum tagSHCONTF")
cpp_quote("{")
cpp_quote(" SHCONTF_FOLDERS = 0x0020, // only want folders enumerated (SFGAO_FOLDER)")
cpp_quote(" SHCONTF_NONFOLDERS = 0x0040, // include non folders")
cpp_quote(" SHCONTF_INCLUDEHIDDEN = 0x0080, // show items normally hidden")
cpp_quote(" SHCONTF_INIT_ON_FIRST_NEXT = 0x0100, // allow EnumObject() to return before validating enum")
cpp_quote(" SHCONTF_NETPRINTERSRCH = 0x0200, // hint that client is looking for printers")
cpp_quote(" SHCONTF_SHAREABLE = 0x0400, // hint that client is looking sharable resources (remote shares)")
cpp_quote(" SHCONTF_STORAGE = 0x0800, // include all items with accessible storage and their ancestors")
cpp_quote("};")
typedef DWORD SHCONTF;
// IShellFolder::CompareIDs lParam flags
//
// SHCIDS_ALLFIELDS is a mask for lParam indicating that the shell folder
// should first compare on the lParam column, and if that proves equal,
// then perform a full comparison on all fields. This flag is supported
// if the IShellFolder supports IShellFolder2.
//
// SHCIDS_CANONICALONLY is a mask for lParam indicating that the shell folder
// that the caller doesn't care about proper sort order -- only equality matters.
// (Most CompareIDs test for equality first, and in the case of inequality do
// a UI sort. This bit allows for a more efficient sort in the inequality case.)
//
//
cpp_quote("#define SHCIDS_ALLFIELDS 0x80000000L")
cpp_quote("#define SHCIDS_CANONICALONLY 0x10000000L")
cpp_quote("#define SHCIDS_BITMASK 0xFFFF0000L")
cpp_quote("#define SHCIDS_COLUMNMASK 0x0000FFFFL")
// IShellFolder::GetAttributesOf flags
// SFGAO_CANLINK: If this bit is set on an item in the shell folder, a
// 'Create Shortcut' menu item will be added to the File
// menu 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.
cpp_quote("#define SFGAO_CANCOPY DROPEFFECT_COPY // Objects can be copied (0x1)")
cpp_quote("#define SFGAO_CANMOVE DROPEFFECT_MOVE // Objects can be moved (0x2)")
cpp_quote("#define SFGAO_CANLINK DROPEFFECT_LINK // Objects can be linked (0x4)")
cpp_quote("#define SFGAO_STORAGE 0x00000008L // supports BindToObject(IID_IStorage)")
cpp_quote("#define SFGAO_CANRENAME 0x00000010L // Objects can be renamed")
cpp_quote("#define SFGAO_CANDELETE 0x00000020L // Objects can be deleted")
cpp_quote("#define SFGAO_HASPROPSHEET 0x00000040L // Objects have property sheets")
// unused 0x00000080
cpp_quote("#define SFGAO_DROPTARGET 0x00000100L // Objects are drop target")
cpp_quote("#define SFGAO_CAPABILITYMASK 0x00000177L")
// unused 0x00000200
// unused 0x00000400
// unused 0x00000800
// unused 0x00001000
cpp_quote("#define SFGAO_ENCRYPTED 0x00002000L // object is encrypted (use alt color)")
cpp_quote("#define SFGAO_ISSLOW 0x00004000L // 'slow' object")
cpp_quote("#define SFGAO_GHOSTED 0x00008000L // ghosted icon")
cpp_quote("#define SFGAO_LINK 0x00010000L // Shortcut (link)")
cpp_quote("#define SFGAO_SHARE 0x00020000L // shared")
cpp_quote("#define SFGAO_READONLY 0x00040000L // read-only")
cpp_quote("#define SFGAO_HIDDEN 0x00080000L // hidden object")
cpp_quote("#define SFGAO_DISPLAYATTRMASK 0x000FC000L")
cpp_quote("#define SFGAO_FILESYSANCESTOR 0x10000000L // may contain children with SFGAO_FILESYSTEM")
cpp_quote("#define SFGAO_FOLDER 0x20000000L // support BindToObject(IID_IShellFolder)")
cpp_quote("#define SFGAO_FILESYSTEM 0x40000000L // is a win32 file system object (file/folder/root)")
cpp_quote("#define SFGAO_HASSUBFOLDER 0x80000000L // may contain children with SFGAO_FOLDER")
cpp_quote("#define SFGAO_CONTENTSMASK 0x80000000L")
cpp_quote("#define SFGAO_VALIDATE 0x01000000L // invalidate cached information")
cpp_quote("#define SFGAO_REMOVABLE 0x02000000L // is this removeable media?")
cpp_quote("#define SFGAO_COMPRESSED 0x04000000L // Object is compressed (use alt color)")
cpp_quote("#define SFGAO_BROWSABLE 0x08000000L // supports IShellFolder, but only implements CreateViewObject() (non-folder view)")
cpp_quote("#define SFGAO_NONENUMERATED 0x00100000L // is a non-enumerated object")
cpp_quote("#define SFGAO_NEWCONTENT 0x00200000L // should show bold in explorer tree")
cpp_quote("#define SFGAO_CANMONIKER 0x00400000L // defunct")
cpp_quote("#define SFGAO_HASSTORAGE 0x00400000L // defunct")
cpp_quote("#define SFGAO_STREAM 0x00400000L // supports BindToObject(IID_IStream)")
cpp_quote("#define SFGAO_STORAGEANCESTOR 0x00800000L // may contain children with SFGAO_STORAGE or SFGAO_STREAM")
cpp_quote("#define SFGAO_STORAGECAPMASK 0x70C50008L // for determining storage capabilities, ie for open/save semantics")
typedef ULONG SFGAOF;
// passed to ISF::ParseDisplayName() or ISF::BindToObject() via IBindCtx::RegisterObjectParam()
// * IPersist must be supported by the ObjectParam
// the CLSID returned by IPersist::GetCLSID() should be skipped
// in the binding process. used to avoid loops or to allow delegation to
// base name space functionality. see SHSkipJunction()
cpp_quote("#define STR_SKIP_BINDING_CLSID L\"Skip Binding CLSID\"")
// passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
// * no interface support required on object param
// instructing to prefer folder support for URLs. specifically used by the common
// dialog to make it use the DAV NP when parsing http: URLs.
cpp_quote("#define STR_PARSE_PREFER_FOLDER_BROWSING L\"Parse Prefer Folder Browsing\"")
// passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
// instructing to fail parsing relative paths. only succeeds for fully qualified paths/urls.
// * no interface support required on object param
//
// eg. even if "foo.txt" is a child of the desktop, it will still fail
// but it will succeed for "C:\Documents and Settings\Username\Desktop\foo.txt"
cpp_quote("#define STR_DONT_PARSE_RELATIVE L\"Don't Parse Relative\"")
// passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
// to try translate from a full file system pidl to a alias to that pidl, if available.
// * no interface support required on object param
//
// eg. if you pass the following path "C:\Documents and Settings\Username\Desktop\foo.txt"
// if TRANSLATE is SET result is: [foo.txt] (the alias for the desktop being an empty pidl)
// if TRANSLATE is NOT SET result is: [CLSID_MyComputer][c:\][Documents and Settings][Username][Desktop][foo.txt].
cpp_quote("#define STR_PARSE_TRANSLATE_ALIASES L\"Parse Translate Aliases\"")
interface IShellFolder;
[
helpstring("IShellFolder"),
uuid(000214E6-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IShellFolder : IUnknown
{
HRESULT ParseDisplayName(
[in] HWND hwnd,
[in] LPBC pbc,
[in, string] LPOLESTR pszDisplayName,
[out] ULONG *pchEaten,
[out] LPITEMIDLIST *ppidl,
[in, out, unique] ULONG *pdwAttributes);
HRESULT EnumObjects(
[in] HWND hwnd,
[in] SHCONTF grfFlags,
[out] IEnumIDList **ppenumIDList);
// returns an instance of a sub-folder which is specified by the IDList (pidl).
HRESULT BindToObject(
[in] LPCITEMIDLIST pidl,
[in] LPBC pbc,
[in] REFIID riid,
[out, iid_is(riid)] void **ppv);
HRESULT BindToStorage(
[in] LPCITEMIDLIST pidl,
[in] LPBC pbc,
[in] REFIID riid,
[out, iid_is(riid)] void **ppv);
// compares two IDLists and returns the result. The shell
// explorer always passes 0 as lParam, which indicates 'sort by name'.
// It should return 0 (as CODE of the scode), if two id indicates the
// same object; negative value if pidl1 should be placed before pidl2;
// positive value if pidl2 should be placed before pidl1.
HRESULT CompareIDs(
[in] LPARAM lParam,
[in] LPCITEMIDLIST pidl1,
[in] LPCITEMIDLIST pidl2);
// creates a view object of the folder itself. The view
// object is a difference instance from the shell folder object.
// 'hwndOwner' can be used as the owner window of its dialog box or
// menu during the lifetime of the view object.
// This member function should always create a new
// instance which has only one reference count. The explorer may create
// more than one instances of view object from one shell folder object
// and treat them as separate instances.
HRESULT CreateViewObject(
[in] HWND hwndOwner,
[in] REFIID riid,
[out, iid_is(riid)] void **ppv);
// returns the attributes of specified objects in that
// folder. 'cidl' and 'apidl' specifies objects. 'apidl' contains only
// simple IDLists. The explorer initializes *prgfInOut with a set of
// flags to be evaluated. The shell folder may optimize the operation
// by not returning unspecified flags.
HRESULT GetAttributesOf(
[in] UINT cidl,
[in, size_is(cidl)] LPCITEMIDLIST * apidl,
[in, out] SFGAOF * rgfInOut);
// creates a UI object to be used for specified objects.
// The shell explorer passes either IID_IDataObject (for transfer operation)
// or IID_IContextMenu (for context menu operation) as riid.
HRESULT GetUIObjectOf(
[in] HWND hwndOwner,
[in] UINT cidl,
[in, size_is(cidl)] LPCITEMIDLIST * apidl,
[in] REFIID riid,
[in, out, unique] UINT * rgfReserved,
[out, iid_is(riid)] void **ppv);
// returns the display name of the specified object.
// If the ID contains the display name (in the locale character set),
// it returns the offset to the name. Otherwise, it returns a pointer
// to the display name string (UNICODE), which is allocated by the
// task allocator, or fills in a buffer.
HRESULT GetDisplayNameOf(
[in] LPCITEMIDLIST pidl,
[in] SHGDNF uFlags,
[out] STRRET *pName);
// sets the display name of the specified object.
// If it changes the ID as well, it returns the new ID which is
// alocated by the task allocator.
HRESULT SetNameOf(
[in] HWND hwnd,
[in] LPCITEMIDLIST pidl,
[in, string] LPCOLESTR pszName,
[in] SHGDNF uFlags,
[out] LPITEMIDLIST *ppidlOut);
};
typedef IShellFolder * LPSHELLFOLDER;
cpp_quote("#if (_WIN32_IE >= 0x0500)")
typedef struct tagEXTRASEARCH
{
GUID guidSearch;
WCHAR wszFriendlyName[80];
WCHAR wszUrl[2084];
}EXTRASEARCH, *LPEXTRASEARCH;
typedef struct IEnumExtraSearch *LPENUMEXTRASEARCH;
interface IShellFolder2; // forward
[
helpstring("IEnumExtraSearch"),
uuid(0E700BE1-9DB6-11d1-A1CE-00C04FD75D13),
object,
pointer_default(unique)
]
interface IEnumExtraSearch : IUnknown
{
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip([in] ULONG celt);
HRESULT Reset();
HRESULT Clone([out] IEnumExtraSearch **ppenum);
};
// IShellFolder2::GetDefaultColumnState values
typedef [v1_enum] enum {
SHCOLSTATE_TYPE_STR = 0x00000001,
SHCOLSTATE_TYPE_INT = 0x00000002,
SHCOLSTATE_TYPE_DATE = 0x00000003,
SHCOLSTATE_TYPEMASK = 0x0000000F,
SHCOLSTATE_ONBYDEFAULT = 0x00000010, // should on by default in details view
SHCOLSTATE_SLOW = 0x00000020, // will be slow to compute, do on a background thread
SHCOLSTATE_EXTENDED = 0x00000040, // provided by a handler, not the folder
SHCOLSTATE_SECONDARYUI = 0x00000080, // not displayed in context menu, but listed in the "More..." dialog
SHCOLSTATE_HIDDEN = 0x00000100, // not displayed in the UI
SHCOLSTATE_PREFER_VARCMP = 0x00000200, // VarCmp() (with folderness test) produces same result as CompareIDs()
} SHCOLSTATE;
typedef DWORD SHCOLSTATEF;
typedef struct {
GUID fmtid;
DWORD pid;
} SHCOLUMNID, *LPSHCOLUMNID;
typedef const SHCOLUMNID* LPCSHCOLUMNID;
[
helpstring("IShellFolder2"),
uuid(93F2F68C-1D1B-11d3-A30E-00C04F79ABD1),
object,
pointer_default(unique)
]
interface IShellFolder2 : IShellFolder
{
// Returns the guid of the search that is to be invoked when user clicks
// on the search toolbar button
HRESULT GetDefaultSearchGUID([out] GUID *pguid);
// gives an enumerator of the searches to be added to the search menu
HRESULT EnumSearches([out] IEnumExtraSearch **ppenum);
HRESULT GetDefaultColumn([in] DWORD dwRes, [out] ULONG *pSort, [out] ULONG *pDisplay);
// return SHCOLSTATE_ values
HRESULT GetDefaultColumnState([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags);
HRESULT GetDetailsEx([in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
HRESULT GetDetailsOf([in] LPCITEMIDLIST pidl, [in]UINT iColumn, [out] SHELLDETAILS *psd);
HRESULT MapColumnToSCID([in] UINT iColumn, [in] SHCOLUMNID *pscid);
};
cpp_quote("#endif // _WIN32_IE >= 0x0500)")
//--------------------------------------------------------------------------
//
// FOLDERSETTINGS
//
// FOLDERSETTINGS is a data structure that explorer passes from one folder
// view to another, when the user is browsing. It calls ISV::GetCurrentInfo
// member to get the current settings and pass it to ISV::CreateViewWindow
// to allow the next folder view 'inherit' it. These settings assumes a
// particular UI (which the shell's folder view has), and shell extensions
// may or may not use those settings.
//
//--------------------------------------------------------------------------
typedef char * LPVIEWSETTINGS;
// NB Bitfields.
// FWF_DESKTOP implies FWF_TRANSPARENT/NOCLIENTEDGE/NOSCROLL
typedef [v1_enum] enum
{
FWF_AUTOARRANGE = 0x00000001,
FWF_ABBREVIATEDNAMES = 0x00000002,
FWF_SNAPTOGRID = 0x00000004,
FWF_OWNERDATA = 0x00000008,
FWF_BESTFITWINDOW = 0x00000010,
FWF_DESKTOP = 0x00000020,
FWF_SINGLESEL = 0x00000040,
FWF_NOSUBFOLDERS = 0x00000080,
FWF_TRANSPARENT = 0x00000100,
FWF_NOCLIENTEDGE = 0x00000200,
FWF_NOSCROLL = 0x00000400,
FWF_ALIGNLEFT = 0x00000800,
FWF_NOICONS = 0x00001000,
FWF_SHOWSELALWAYS = 0x00002000,
FWF_NOVISIBLE = 0X00004000,
FWF_SINGLECLICKACTIVATE=0x00008000, // TEMPORARY -- NO UI FOR THIS
FWF_NOWEBVIEW = 0x00010000,
FWF_HIDEFILENAMES = 0x00020000,
FWF_CHECKSELECT = 0x00040000,
} FOLDERFLAGS;
typedef [v1_enum] enum
{
FVM_FIRST = 1,
FVM_ICON = 1,
FVM_SMALLICON = 2,
FVM_LIST = 3,
FVM_DETAILS = 4,
FVM_THUMBNAIL = 5,
FVM_TILE = 6,
FVM_THUMBSTRIP = 7,
FVM_LAST = 7,
} FOLDERVIEWMODE;
typedef struct
{
UINT ViewMode; // View mode (FOLDERVIEWMODE values)
UINT fFlags; // View options (FOLDERFLAGS bits)
} FOLDERSETTINGS;
typedef FOLDERSETTINGS *LPFOLDERSETTINGS;
typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
typedef FOLDERSETTINGS *PFOLDERSETTINGS;
//==========================================================================
//
// Interface: IShellView
//
// IShellView::GetWindow(phwnd)
//
// Inherited from IOleWindow::GetWindow.
//
//
// IShellView::ContextSensitiveHelp(fEnterMode)
//
// Inherited from IOleWindow::ContextSensitiveHelp.
//
//
// IShellView::TranslateAccelerator(lpmsg)
//
// Similar to IOleInPlaceActiveObject::TranlateAccelerator. The explorer
// calls this function BEFORE any other translation. Returning S_OK
// indicates that the message was translated (eaten) and should not be
// translated or dispatched by the explorer.
//
//
// IShellView::EnableModeless(fEnable)
// Similar to IOleInPlaceActiveObject::EnableModeless.
//
//
// IShellView::UIActivate(uState)
//
// The explorer calls this member function whenever the activation
// state of the view window is changed by a certain event that is
// NOT caused by the shell view itself.
//
// SVUIA_DEACTIVATE will be passed when the explorer is about to
// destroy the shell view window; the shell view is supposed to remove
// all the extended UIs (typically merged menu and modeless popup windows).
//
// SVUIA_ACTIVATE_NOFOCUS will be passsed when the shell view is losing
// the input focus or the shell view has been just created without the
// input focus; the shell view is supposed to set menuitems appropriate
// for non-focused state (no selection specific items should be added).
//
// SVUIA_ACTIVATE_FOCUS will be passed when the explorer has just
// created the view window with the input focus; the shell view is
// supposed to set menuitems appropriate for focused state.
//
// SVUIA_INPLACEACTIVATE(new) will be passed when the shell view is opened
// within an ActiveX control, which is not a UI active. In this case,
// the shell view should not merge menus or put toolbas. To be compatible
// with Win95 client, we don't pass this value unless the view supports
// IShellView2.
//
// The shell view should not change focus within this member function.
// The shell view should not hook the WM_KILLFOCUS message to remerge
// menuitems. However, the shell view typically hook the WM_SETFOCUS
// message, and re-merge the menu after calling IShellBrowser::
// OnViewWindowActivated.
//
// One of the ACTIVATE / INPLACEACTIVATE messages will be sent when
// the view window becomes the currently displayed view. On Win95 systems,
// this will happen immediately after the CreateViewWindow call. On IE4, Win98,
// and NT5 systems this may happen when the view reports it is ready (if the
// IShellView supports async creation). This can be used as a hint as to when
// to make your view window visible. Note: the Win95/Win98/NT4 common dialogs
// do not send either of these on creation.
//
//
// IShellView::Refresh()
//
// The explorer calls this member when the view needs to refresh its
// contents (such as when the user hits F5 key).
//
//
// IShellView::CreateViewWindow
//
// This member creates the view window (right-pane of the explorer or the
// client window of the folder window).
//
//
// IShellView::DestroyViewWindow
//
// This member destroys the view window.
//
//
// IShellView::GetCurrentInfo
//
// This member returns the folder settings.
//
//
// IShellView::AddPropertySHeetPages
//
// The explorer calls this member when it is opening the option property
// sheet. This allows the view to add additional pages to it.
//
//
// IShellView::SaveViewState()
//
// The explorer calls this member when the shell view is supposed to
// store its view settings. The shell view is supposed to get a view
// stream by calling IShellBrowser::GetViewStateStream and store the
// current view state into that stream.
//
//
// IShellView::SelectItem(pidlItem, uFlags)
//
// The explorer calls this member to change the selection state of
// item(s) within the shell view window. If pidlItem is NULL and uFlags
// is SVSI_DESELECTOTHERS, all items should be deselected.
//
//-------------------------------------------------------------------------
//
// shellview select item flags
//
cpp_quote("#define SVSI_DESELECT 0x00000000")
cpp_quote("#define SVSI_SELECT 0x00000001")
cpp_quote("#define SVSI_EDIT 0x00000003 // includes select")
cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
cpp_quote("#define SVSI_ENSUREVISIBLE 0x00000008")
cpp_quote("#define SVSI_FOCUSED 0x00000010")
cpp_quote("#define SVSI_TRANSLATEPT 0x00000020")
cpp_quote("#define SVSI_SELECTIONMARK 0x00000040")
cpp_quote("#define SVSI_POSITIONITEM 0x00000080")
cpp_quote("#define SVSI_CHECK 0x00000100")
cpp_quote("#define SVSI_NOSTATECHANGE 0x80000000")
typedef UINT SVSIF;
//
// shellview get item object flags
//
typedef [v1_enum] enum {
SVGIO_BACKGROUND = 0x00000000,
SVGIO_SELECTION = 0x00000001,
SVGIO_ALLVIEW = 0x00000002,
SVGIO_CHECKED = 0x00000003,
SVGIO_TYPE_MASK = 0x0000000F,
SVGIO_FLAG_VIEWORDER = 0x80000000,
} SVGIO;
//
// uState values for IShellView::UIActivate
//
typedef [v1_enum] enum {
SVUIA_DEACTIVATE = 0,
SVUIA_ACTIVATE_NOFOCUS = 1,
SVUIA_ACTIVATE_FOCUS = 2,
SVUIA_INPLACEACTIVATE = 3 // new flag for IShellView2
} SVUIA_STATUS;
// this is to handle name collisions
cpp_quote("#ifdef _FIX_ENABLEMODELESS_CONFLICT")
cpp_quote("#define EnableModeless EnableModelessSV")
cpp_quote("#endif")
//
// this is so that all the implementations still get the function pointer.
// and midl wont complain about the data type
//
cpp_quote("#ifdef _NEVER_")
typedef LPARAM LPFNSVADDPROPSHEETPAGE;
cpp_quote("#else //!_NEVER_")
cpp_quote("#include <prsht.h>")
cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
cpp_quote("#endif //_NEVER_")
interface IShellBrowser;
[
helpstring("IShellView"),
uuid(000214E3-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IShellView : IOleWindow
{
HRESULT TranslateAccelerator([in] MSG *pmsg);
HRESULT EnableModeless([in] BOOL fEnable);
HRESULT UIActivate([in] UINT uState);
HRESULT Refresh();
HRESULT CreateViewWindow(
[in] IShellView *psvPrevious,
[in] LPCFOLDERSETTINGS pfs,
[in] IShellBrowser *psb,
[out] RECT *prcView,
[out] HWND *phWnd);
HRESULT DestroyViewWindow();
HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS pfs);
[local] HRESULT AddPropertySheetPages(
[in] DWORD dwReserved,
[in] LPFNSVADDPROPSHEETPAGE pfn,
[in] LPARAM lparam);
HRESULT SaveViewState();
HRESULT SelectItem(
[in] LPCITEMIDLIST pidlItem,
[in] SVSIF uFlags);
HRESULT GetItemObject(
[in] UINT uItem,
[in] REFIID riid,
[out, iid_is(riid)] void **ppv);
typedef IShellView *LPSHELLVIEW;
};
[
helpstring("IShellView2"),
uuid(88E39E80-3578-11CF-AE69-08002B2E1262),
object,
pointer_default(unique)
]
interface IShellView2 : IShellView
{
typedef GUID SHELLVIEWID;
cpp_quote("#define SV2GV_CURRENTVIEW ((UINT)-1)")
cpp_quote("#define SV2GV_DEFAULTVIEW ((UINT)-2)")
//
// NOTE if the cbSize param is ever updated,")
// then there will have to be custom [wire_marshal]")
// implementation to support it")
//
cpp_quote("#include <pshpack8.h>")
typedef struct _SV2CVW2_PARAMS
{
DWORD cbSize;
IShellView *psvPrev;
LPCFOLDERSETTINGS pfs;
IShellBrowser *psbOwner;
RECT *prcView;
SHELLVIEWID const *pvid;
HWND hwndView;
} SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
cpp_quote("#include <poppack.h>") // Return to byte packing
HRESULT GetView(
[in, out] SHELLVIEWID* pvid,
[in] ULONG uView);
HRESULT CreateViewWindow2(
[in] LPSV2CVW2_PARAMS lpParams);
HRESULT HandleRename(
[in] LPCITEMIDLIST pidlNew);
HRESULT SelectAndPositionItem(
[in] LPCITEMIDLIST pidlItem,
[in] UINT uFlags,
[in] POINT *ppt);
};
[
helpstring("IFolderView"),
uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
object,
pointer_default(unique)
]
interface IFolderView : IUnknown
{
HRESULT GetCurrentViewMode([in, out] UINT *pViewMode);
HRESULT SetCurrentViewMode([in] UINT ViewMode);
HRESULT GetFolder([in] REFIID riid, [out, iid_is(riid)] void **ppv);
HRESULT Item([in] int iItemIndex, [out] LPITEMIDLIST *ppidl);
HRESULT ItemCount([in] UINT uFlags,[out] int *pcItems);
HRESULT Items([in] UINT uFlags,[in] REFIID riid, [out, iid_is(riid)] void **ppv);
HRESULT GetSelectionMarkedItem([out] int *piItem);
HRESULT GetFocusedItem([out] int *piItem);
HRESULT GetItemPosition([in] LPCITEMIDLIST pidl, [out] POINT* ppt);
HRESULT GetSpacing([in, out, ptr] POINT* ppt);
HRESULT GetDefaultSpacing([out] POINT* ppt);
HRESULT GetAutoArrange();
// like IShellView::SelectItem() by index
HRESULT SelectItem([in] int iItem, [in] DWORD dwFlags);
HRESULT SelectAndPositionItems([in] UINT cidl, [in, size_is(cidl)] LPCITEMIDLIST* apidl, [in, ptr, size_is(cidl)] POINT* apt, [in] DWORD dwFlags);
};
cpp_quote("#define SID_SFolderView IID_IFolderView // folder view, usuaally IFolderView")
// this is to handle name collisions
cpp_quote("#ifdef _FIX_ENABLEMODELESS_CONFLICT")
cpp_quote("#undef EnableModeless ")
cpp_quote("#endif")
[
helpstring("IFolderFilterSite"),
uuid(C0A651F5-B48B-11d2-B5ED-006097C686F6), // IID_IFolderFilterSite
object,
pointer_default(unique)
]
interface IFolderFilterSite : IUnknown
{
HRESULT SetFilter([in]IUnknown* punk);
};
[
helpstring("IFolderFilter"),
uuid(9CC22886-DC8E-11d2-B1D0-00C04F8EEB3E), // IID_IFolderFilter
object,
pointer_default(unique)
]
interface IFolderFilter : IUnknown
{
HRESULT ShouldShow([in] IShellFolder* psf, [in] LPCITEMIDLIST pidlFolder, [in] LPCITEMIDLIST pidlItem);
HRESULT GetEnumFlags([in] IShellFolder* psf, [in] LPCITEMIDLIST pidlFolder, [in] HWND *phwnd, [out] DWORD *pgrfFlags);
};
//--------------------------------------------------------------------------
//
// Interface: IShellBrowser
//
// IShellBrowser interface is the interface that is provided by the shell
// explorer/folder frame window. When it creates the 'contents pane' of
// a shell folder (which provides IShellFolder interface), it calls its
// CreateViewObject member function to create an IShellView object. Then,
// it calls its CreateViewWindow member to create the 'contents pane'
// window. The pointer to the IShellBrowser interface is passed to
// the IShellView object as a parameter to this CreateViewWindow member
// function call.
//
// +--------------------------+ <-- Explorer window
// | [] Explorer |
// |--------------------------+ IShellBrowser
// | File Edit View .. |
// |--------------------------|
// | | |
// | | <-------- Content pane
// | | |
// | | | IShellView
// | | |
// | | |
// +--------------------------+
//
//
//
// [Member functions]
//
//
// IShellBrowser::GetWindow(phwnd)
//
// Inherited from IOleWindow::GetWindow.
//
//
// IShellBrowser::ContextSensitiveHelp(fEnterMode)
//
// Inherited from IOleWindow::ContextSensitiveHelp.
//
//
// IShellBrowser::InsertMenusSB(hmenuShared, lpMenuWidths)
//
// Similar to the IOleInPlaceFrame::InsertMenus. The explorer will put
// 'File' and 'Edit' pulldown in the File menu group, 'View' and 'Tools'
// in the Container menu group and 'Help' in the Window menu group. Each
// pulldown menu will have a uniqu ID, FCIDM_MENU_FILE/EDIT/VIEW/TOOLS/HELP
// The view is allowed to insert menuitems into those sub-menus by those
// IDs must be between FCIDM_SHVIEWFIRST and FCIDM_SHVIEWLAST.
//
//
// IShellBrowser::SetMenuSB(hmenuShared, holemenu, hwndActiveObject)
//
// Similar to the IOleInPlaceFrame::SetMenu. The explorer ignores the
// holemenu parameter (reserved for future enhancement) and performs
// menu-dispatch based on the menuitem IDs (see the description above).
// It is important to note that the explorer will add different
// set of menuitems depending on whether the view has a focus or not.
// Therefore, it is very important to call ISB::OnViewWindowActivate
// whenever the view window (or its children) gets the focus.
//
//
// IShellBrowser::RemoveMenusSB(hmenuShared)
//
// Same as the IOleInPlaceFrame::RemoveMenus.
//
//
// IShellBrowser::SetStatusTextSB(pszStatusText)
//
// Same as the IOleInPlaceFrame::SetStatusText. It is also possible to
// send messages directly to the status window via SendControlMsg.
//
//
// IShellBrowser::EnableModelessSB(fEnable)
//
// Same as the IOleInPlaceFrame::EnableModeless.
//
//
// IShellBrowser::TranslateAcceleratorSB(lpmsg, wID)
//
// Same as the IOleInPlaceFrame::TranslateAccelerator, but will be
// never called because we don't support EXEs (i.e., the explorer has
// the message loop). This member function is defined here for possible
// future enhancement.
//
//
// IShellBrowser::BrowseObject(pidl, wFlags)")
//
// The view calls this member to let shell explorer browse to another")
// folder. The pidl and wFlags specifies the folder to be browsed.")
//
// Following three flags specifies whether it creates another window or not.
// SBSP_SAMEBROWSER -- Browse to another folder with the same window.
// SBSP_NEWBROWSER -- Creates another window for the specified folder.
// SBSP_DEFBROWSER -- Default behavior (respects the view option).
//
// Following three flags specifies open, explore, or default mode. These .
// are ignored if SBSP_SAMEBROWSER or (SBSP_DEFBROWSER && (single window .
// browser || explorer)). .
// SBSP_OPENMODE -- Use a normal folder window
// SBSP_EXPLOREMODE -- Use an explorer window
// SBSP_DEFMODE -- Use the same as the current window
//
// Following three flags specifies the pidl.
// SBSP_ABSOLUTE -- pidl is an absolute pidl (relative from desktop)
// SBSP_RELATIVE -- pidl is relative from the current folder.
// SBSP_PARENT -- Browse the parent folder (ignores the pidl)
// SBSP_NAVIGATEBACK -- Navigate back (ignores the pidl)
// SBSP_NAVIGATEFORWARD -- Navigate forward (ignores the pidl)
//
// Following two flags control history manipulation as result of navigate
// SBSP_WRITENOHISTORY -- write no history (shell folder) entry
// SBSP_NOAUTOSELECT -- suppress selection in history pane
//
// IShellBrowser::GetViewStateStream(grfMode, ppstm)
//
// The browser returns an IStream interface as the storage for view
// specific state information.
//
// grfMode -- Specifies the read/write access (STGM_READ/WRITE/READWRITE)
// ppstm -- Specifies the IStream *variable to be filled.
//
//
// IShellBrowser::GetControlWindow(id, phwnd)
//
// The shell view may call this member function to get the window handle
// of Explorer controls (toolbar or status winodw -- FCW_TOOLBAR or
// FCW_STATUS).
//
//
// IShellBrowser::SendControlMsg(id, uMsg, wParam, lParam, pret)
//
// The shell view calls this member function to send control messages to
// one of Explorer controls (toolbar or status window -- FCW_TOOLBAR or
// FCW_STATUS).
//
//
// IShellBrowser::QueryActiveShellView(IShellView * ppshv)
//
// This member returns currently activated (displayed) shellview object.
// A shellview never need to call this member function.
//
//
// IShellBrowser::OnViewWindowActive(pshv)
//
// The shell view window calls this member function when the view window
// (or one of its children) got the focus. It MUST call this member before
// calling IShellBrowser::InsertMenus, because it will insert different
// set of menu items depending on whether the view has the focus or not.
//
//
// IShellBrowser::SetToolbarItems(lpButtons, nButtons, uFlags)
//
// The view calls this function to add toolbar items to the exporer's
// toolbar. 'lpButtons' and 'nButtons' specifies the array of toolbar
// items. 'uFlags' must be one of FCT_MERGE, FCT_CONFIGABLE, FCT_ADDTOEND.
//
//-------------------------------------------------------------------------
//
// Values for wFlags parameter of ISB::BrowseObject() member.
//
cpp_quote("#define SBSP_DEFBROWSER 0x0000")
cpp_quote("#define SBSP_SAMEBROWSER 0x0001")
cpp_quote("#define SBSP_NEWBROWSER 0x0002")
cpp_quote("#define SBSP_DEFMODE 0x0000")
cpp_quote("#define SBSP_OPENMODE 0x0010")
cpp_quote("#define SBSP_EXPLOREMODE 0x0020")
cpp_quote("#define SBSP_HELPMODE 0x0040 // IEUNIX : Help window uses this.")
cpp_quote("#define SBSP_NOTRANSFERHIST 0x0080")
cpp_quote("#define SBSP_ABSOLUTE 0x0000")
cpp_quote("#define SBSP_RELATIVE 0x1000")
cpp_quote("#define SBSP_PARENT 0x2000")
cpp_quote("#define SBSP_NAVIGATEBACK 0x4000")
cpp_quote("#define SBSP_NAVIGATEFORWARD 0x8000")
cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE 0x10000")
cpp_quote("#define SBSP_NOAUTOSELECT 0x04000000")
cpp_quote("#define SBSP_WRITENOHISTORY 0x08000000")
cpp_quote("#define SBSP_REDIRECT 0x40000000")
cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000")
//
// Values for id parameter of ISB::GetWindow/SendControlMsg members.
//
// WARNING:
// Any shell extensions which sends messages to those control windows
// might not work in the future version of windows. If you really need
// to send messages to them, (1) don't assume that those control window
// always exist (i.e. GetControlWindow may fail) and (2) verify the window
// class of the window before sending any messages.
//
cpp_quote("#define FCW_STATUS 0x0001")
cpp_quote("#define FCW_TOOLBAR 0x0002")
cpp_quote("#define FCW_TREE 0x0003")
cpp_quote("#define FCW_INTERNETBAR 0x0006")
cpp_quote("#define FCW_PROGRESS 0x0008")
//
// Values for uFlags paremeter of ISB::SetToolbarItems member.
//
cpp_quote("#define FCT_MERGE 0x0001")
cpp_quote("#define FCT_CONFIGABLE 0x0002")
cpp_quote("#define FCT_ADDTOEND 0x0004")
cpp_quote("#ifdef _NEVER_")
typedef LPARAM LPTBBUTTONSB;
cpp_quote("#else //!_NEVER_")
cpp_quote("#include <commctrl.h>")
cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
cpp_quote("#endif //_NEVER_")
[
helpstring("IShellBrowser"),
uuid(000214E2-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IShellBrowser : IOleWindow
{
// same as IOleInPlaceFrame
HRESULT InsertMenusSB(
[in] HMENU hmenuShared,
[in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
HRESULT SetMenuSB(
[in] HMENU hmenuShared,
[in] HOLEMENU holemenuRes,
[in] HWND hwndActiveObject);
HRESULT RemoveMenusSB([in] HMENU hmenuShared);
HRESULT SetStatusTextSB([in, unique] LPCOLESTR pszStatusText);
HRESULT EnableModelessSB([in] BOOL fEnable);
HRESULT TranslateAcceleratorSB([in] MSG *pmsg, [in] WORD wID);
// IShellBrowser
HRESULT BrowseObject(
[in] LPCITEMIDLIST pidl,
[in] UINT wFlags);
HRESULT GetViewStateStream(
[in] DWORD grfMode,
[out] IStream **ppStrm);
HRESULT GetControlWindow(
[in] UINT id,
[out] HWND * phwnd);
[local] HRESULT SendControlMsg(
[in] UINT id,
[in] UINT uMsg,
[in] WPARAM wParam,
[in] LPARAM lParam,
[in] LRESULT *pret);
HRESULT QueryActiveShellView([out] IShellView **ppshv);
HRESULT OnViewWindowActive([in] IShellView *pshv);
[local] HRESULT SetToolbarItems(
[in] LPTBBUTTONSB lpButtons,
[in] UINT nButtons,
[in] UINT uFlags);
};
typedef IShellBrowser * LPSHELLBROWSER;
[
helpstring("IProfferService"),
uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0), // IID_IProfferService
object,
pointer_default(unique)
]
interface IProfferService : IUnknown
{
HRESULT ProfferService([in]REFGUID rguidService, [in] IServiceProvider *psp, [out] DWORD *pdwCookie);
HRESULT RevokeService([in]DWORD dwCookie);
}
cpp_quote("#define SID_SProfferService IID_IProfferService // nearest service that you can proffer to")
typedef [v1_enum] enum
{
PUIFNF_DEFAULT = 0x00000000,
PUIFNF_MNEMONIC = 0x00000001, // include mnemonic in display name
} PROPERTYUI_NAME_FLAGS;
typedef [v1_enum] enum
{
PUIF_DEFAULT = 0x00000000,
PUIF_RIGHTALIGN = 0x00000001, // this property should be right alligned
PUIF_NOLABELININFOTIP = 0x00000002, // this property should not display a label in the infotip
} PROPERTYUI_FLAGS;
typedef [v1_enum] enum
{
PUIFFDF_DEFAULT = 0x00000000,
PUIFFDF_RIGHTTOLEFT = 0x00000001, // BIDI support, right to left caller
PUIFFDF_SHORTFORMAT = 0x00000002, // short format version of string
PUIFFDF_NOTIME = 0x00000004, // truncate time to days, not hours/mins/sec
PUIFFDF_FRIENDLYDATE = 0x00000008, // "Today", "Yesterday", etc
PUIFFDF_NOUNITS = 0x00000010, // don't do "KB", "MB", "KHz"
} PROPERTYUI_FORMAT_FLAGS;
[
helpstring("IPropertyUI - helper for dealing with properties ala IPropertySetStorage"),
uuid(757a7d9f-919a-4118-99d7-dbb208c8cc66),
object,
pointer_default(unique)
]
interface IPropertyUI : IUnknown
{
HRESULT ParsePropertyName([in] LPCWSTR pszName, [out] FMTID *pfmtid, [out] PROPID *ppid, [in, out] ULONG *pchEaten);
HRESULT GetCannonicalName([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
HRESULT GetDisplayName([in] REFFMTID fmtid, [in] PROPID pid, [in] PROPERTYUI_NAME_FLAGS flags, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
HRESULT GetPropertyDescription([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
HRESULT GetDefaultWidth([in] REFFMTID fmtid, [in] PROPID pid, [out] ULONG *pcxChars);
HRESULT GetFlags([in] REFFMTID fmtid, [in] PROPID pid, [out] PROPERTYUI_FLAGS *pFlags);
HRESULT FormatForDisplay([in] REFFMTID fmtid, [in] PROPID pid, [in] const PROPVARIANT *pvar, [in] PROPERTYUI_FORMAT_FLAGS flags, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
HRESULT GetHelpInfo([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cch)] LPWSTR pwszHelpFile, [in] DWORD cch, [out] UINT *puHelpID);
};
cpp_quote("#if (_WIN32_IE >= 0x0500)")
// Folder Category Support
[
helpstring("ICategoryProvider - Provides a list of catagorizers registered on an IShellFolder"),
uuid(9af64809-5864-4c26-a720-c1f78c086ee3),
object,
pointer_default(unique)
]
interface ICategoryProvider : IUnknown
{
[helpstring("Returns S_OK if the view should display this column in category selection UI, or S_FALSE to remove it.")]
HRESULT CanCategorizeOnSCID(SHCOLUMNID* pscid);
[helpstring("Returns either a GUID to create in CreateCategory, or a SHCOLUNNID that is used by the default categorizer. Return S_FALSE if you do not support a default group. GUID_NULL returned in pguid indicates to the client to use pscid as the default category.")]
HRESULT GetDefaultCategory(GUID* pguid, SHCOLUMNID* pscid);
[helpstring("Returns either a GUID that represents the categoizer to use for the specified SHCOLUMNID.")]
HRESULT GetCategoryForSCID(SHCOLUMNID* pscid, GUID* pguid);
[helpstring("Returns an IEnumGUID that has a list of GUIDs that represent categories.")]
HRESULT EnumCategories(IEnumGUID** penum);
[helpstring("Returns the name of the given category.")]
HRESULT GetCategoryName(GUID* pguid, LPWSTR pszName, UINT cch);
[helpstring("Creates the category.")]
HRESULT CreateCategory(GUID* pguid, REFIID riid, [iid_is(riid)]void** ppv);
}
typedef [v1_enum] enum
{
CATINFO_NORMAL = 0x00000000, // Apply default properties to this category
CATINFO_COLLAPSED = 0x00000001, // This category should appear collapsed. useful for the "None" category.
CATINFO_HIDDEN = 0x00000002, // This category should follow the "Hidden" files setting for being displayed
} CATEGORYINFO_FLAGS;
typedef [v1_enum] enum
{
CATSORT_DEFAULT = 0x00000000, // Default Sort order
CATSORT_NAME = 0x00000001, // Sort by name
} CATSORT_FLAGS;
typedef struct
{
CATEGORYINFO_FLAGS cif;
WCHAR wszName[260];
} CATEGORY_INFO;
[
helpstring("ICategorizer - Categorizes pidls"),
uuid(a3b14589-9174-49a8-89a3-06a1ae2b9ba7),
object,
pointer_default(unique)
]
interface ICategorizer : IUnknown
{
[helpstring("Returns the description of this category that will be displayed in the UI")]
HRESULT GetDescription(LPWSTR pszDesc, UINT cch);
[helpstring("Returns a list of categories associated with a list of ID Lists. NOTE: -1 is an invalid Category ID, and they cannot be persisted")]
HRESULT GetCategory([in] UINT cidl,
[in, size_is(cidl)] LPCITEMIDLIST * apidl,
[in, out, size_is(cidl)] DWORD* rgCategoryIds);
[helpstring("Returns information about the category, such as default display and the text to display in the UI")]
HRESULT GetCategoryInfo(DWORD dwCategoryId, CATEGORY_INFO* pci);
[helpstring("Returns HRESULTFromShort. -1, 0, 1 indicate the comparison of the IDs. Used for sorting categories in the UI")]
HRESULT CompareCategory(CATSORT_FLAGS csfFlags, DWORD dwCategoryId1, DWORD dwCategoryId2);
};
cpp_quote("#endif // (_WIN32_IE >= 0x0500)")
cpp_quote("#ifdef UNICODE")
cpp_quote("#define IShellLink IShellLinkW")
cpp_quote("#else")
cpp_quote("#define IShellLink IShellLinkA")
cpp_quote("#endif")
// IShellLink::Resolve fFlags
typedef enum
{
SLR_NO_UI = 0x0001, // don't post any UI durring the resolve operation, not msgs are pumped
SLR_ANY_MATCH = 0x0002, // no longer used
SLR_UPDATE = 0x0004, // save the link back to it's file if the track made it dirty
SLR_NOUPDATE = 0x0008,
SLR_NOSEARCH = 0x0010, // don't execute the search heuristics
SLR_NOTRACK = 0x0020, // don't use NT5 object ID to track the link
SLR_NOLINKINFO = 0x0040, // don't use the net and volume relative info
SLR_INVOKE_MSI = 0x0080, // if we have a darwin link, then call msi to fault in the applicaion
SLR_NO_UI_WITH_MSG_PUMP = 0x0101, // SLR_NO_UI + requires an enable modeless site or HWND
} SLR_FLAGS;
// IShellLink::GetPath fFlags
typedef enum
{
SLGP_SHORTPATH = 0x0001,
SLGP_UNCPRIORITY = 0x0002,
SLGP_RAWPATH = 0x0004,
} SLGP_FLAGS;
[
uuid(000214EE-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IShellLinkA : IUnknown
{
HRESULT GetPath([out, size_is(cch)] LPSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAA *pfd, [in] DWORD fFlags);
HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
HRESULT SetIDList([in] LPCITEMIDLIST pidl);
HRESULT GetDescription([out, size_is(cch)] LPSTR pszName, [in] int cch);
HRESULT SetDescription([in] LPCSTR pszName);
HRESULT GetWorkingDirectory([out, size_is(cch)] LPSTR pszDir, [in] int cch);
HRESULT SetWorkingDirectory([in] LPCSTR pszDir);
HRESULT GetArguments([out, size_is(cch)] LPSTR pszArgs, [in] int cch);
HRESULT SetArguments([in] LPCSTR pszArgs);
HRESULT GetHotkey([out] WORD *pwHotkey);
HRESULT SetHotkey([in] WORD wHotkey);
HRESULT GetShowCmd([out] int *piShowCmd);
HRESULT SetShowCmd([in] int iShowCmd);
HRESULT GetIconLocation([out, size_is(cch)] LPSTR pszIconPath, [in] int cch, [out] int *piIcon);
HRESULT SetIconLocation([in] LPCSTR pszIconPath, [in] int iIcon);
HRESULT SetRelativePath([in] LPCSTR pszPathRel, [in] DWORD dwReserved);
HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
HRESULT SetPath([in] LPCSTR pszFile);
};
[
uuid(000214F9-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IShellLinkW : IUnknown
{
HRESULT GetPath([out, size_is(cch)] LPWSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags);
HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
HRESULT SetIDList([in] LPCITEMIDLIST pidl);
HRESULT GetDescription([out, size_is(cch)] LPWSTR pszName, int cch);
HRESULT SetDescription([in] LPCWSTR pszName);
HRESULT GetWorkingDirectory([out, size_is(cch)] LPWSTR pszDir, int cch);
HRESULT SetWorkingDirectory([in] LPCWSTR pszDir);
HRESULT GetArguments([out, size_is(cch)] LPWSTR pszArgs, int cch);
HRESULT SetArguments([in] LPCWSTR pszArgs);
HRESULT GetHotkey([out] WORD *pwHotkey);
HRESULT SetHotkey([in] WORD wHotkey);
HRESULT GetShowCmd([out] int *piShowCmd);
HRESULT SetShowCmd([in] int iShowCmd);
HRESULT GetIconLocation([out, size_is(cch)] LPWSTR pszIconPath, [in] int cch, [out] int *piIcon);
HRESULT SetIconLocation([in] LPCWSTR pszIconPath, [in] int iIcon);
HRESULT SetRelativePath([in] LPCWSTR pszPathRel, [in] DWORD dwReserved);
HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
HRESULT SetPath([in] LPCWSTR pszFile);
};
[
object,
uuid(49ff1172-eadc-446d-9285-156453a6431c),
helpstring("IActionProgressDialog Interface"),
pointer_default(unique)
]
interface IActionProgressDialog : IUnknown
{
[v1_enum] enum {
SPINITF_NORMAL = 0x00000000, // default normal progress behavior
SPINITF_MODAL = 0x00000001, // call punkSite->EnableModeless() or EnableWindow()
SPINITF_NOMINIMIZE = 0x00000008, // Do not have a minimize button in the caption bar.
};
typedef DWORD SPINITF;
HRESULT Initialize(
[in] SPINITF flags,
[in, string] LPCWSTR pszTitle,
[in, string] LPCWSTR pszCancel);
HRESULT Stop();
};
[
object,
uuid(C1FB73D0-EC3A-4ba2-B512-8CDB9187B6D1),
helpstring("HW Event Handler Interface"),
pointer_default(unique)
]
interface IHWEventHandler : IUnknown
{
HRESULT Initialize([in, string] LPCWSTR pszParams);
HRESULT HandleEvent([in, string] LPCWSTR pszDeviceID,
[in, string] LPCWSTR pszAltDeviceID,
[in, string] LPCWSTR pszEventType);
HRESULT HandleEventWithContent([in, string] LPCWSTR pszDeviceID,
[in, string] LPCWSTR pszAltDeviceID,
[in, string] LPCWSTR pszEventType,
[in, string] LPCWSTR pszContentTypeHandler,
[in] IDataObject* pdataobject);
};
cpp_quote("#define ARCONTENT_AUTORUNINF 0x00000002") // That's the one we have today, and always had
cpp_quote("#define ARCONTENT_AUDIOCD 0x00000004") // Audio CD (not MP3 and the like, the stuff you buy at the store)
cpp_quote("#define ARCONTENT_DVDMOVIE 0x00000008") // DVD Movie (not MPEGs, the stuff you buy at the store)
cpp_quote("#define ARCONTENT_BLANKCD 0x00000010") // Blank CD-R/CD-RW
cpp_quote("#define ARCONTENT_BLANKDVD 0x00000020") // Blank DVD-R/DVD-RW
cpp_quote("#define ARCONTENT_UNKNOWNCONTENT 0x00000040") // Whatever files. Mean that it's formatted.
cpp_quote("#define ARCONTENT_AUTOPLAYPIX 0x00000080") // Whatever files. Mean that it's formatted.
cpp_quote("#define ARCONTENT_AUTOPLAYMUSIC 0x00000100") // Whatever files. Mean that it's formatted.
cpp_quote("#define ARCONTENT_AUTOPLAYVIDEO 0x00000200") // Whatever files. Mean that it's formatted.
[
object,
uuid(DDEFE873-6997-4e68-BE26-39B633ADBE12),
helpstring("HW Event Handler Interface"),
pointer_default(unique)
]
interface IQueryCancelAutoPlay : IUnknown
{
HRESULT AllowAutoPlay([in, string]LPCWSTR pszPath, [in]DWORD dwContentType,
[in, string]LPCWSTR pszLabel, [in] DWORD dwSerialNumber);
};
[
object,
uuid(49ff1173-eadc-446d-9285-156453a6431c),
helpstring("IActionProgress Interface"),
pointer_default(unique)
]
interface IActionProgress : IUnknown
{
[v1_enum] enum {
SPBEGINF_NORMAL = 0x00000000, // default normal progress behavior
SPBEGINF_AUTOTIME = 0x00000002, // automatically updates the "time remaining" text
SPBEGINF_NOPROGRESSBAR = 0x00000010, // Don't display the progress bar (SetProgress() wont be called)
SPBEGINF_MARQUEEPROGRESS = 0x00000020, // use marquee progress (comctl32 v6 required)
};
typedef DWORD SPBEGINF;
typedef [v1_enum] enum _SPACTION {
SPACTION_NONE = 0,
SPACTION_MOVING,
SPACTION_COPYING,
SPACTION_RECYCLING,
SPACTION_APPLYINGATTRIBS,
SPACTION_DOWNLOADING,
SPACTION_SEARCHING_INTERNET,
SPACTION_CALCULATING,
SPACTION_UPLOADING,
SPACTION_SEARCHING_FILES,
} SPACTION;
HRESULT Begin(
[in] SPACTION action,
[in] SPBEGINF flags);
HRESULT UpdateProgress(
[in] ULONGLONG ulCompleted,
[in] ULONGLONG ulTotal);
typedef [v1_enum] enum _SPTEXT
{
SPTEXT_ACTIONDESCRIPTION = 1,
SPTEXT_ACTIONDETAIL,
} SPTEXT;
HRESULT UpdateText(
[in] SPTEXT sptext,
[in, string] LPCWSTR pszText,
[in] BOOL fMayCompact);
HRESULT QueryCancel([out] BOOL * pfCancelled);
HRESULT ResetCancel();
HRESULT End();
};
// The IShellExtInit interface is used by the explorer to initialize shell
// extension objects. The explorer (1) calls CoCreateInstance (or equivalent)
// with the registered CLSID and IID_IShellExtInit, (2) calls its Initialize
// member, then (3) calls its QueryInterface to a particular interface (such
// as IContextMenu or IPropSheetExt and (4) performs the rest of operation.
//
// IShellExtInit::Initialize
//
// This member function is called when the explorer is initializing either
// context menu extension, property sheet extension or non-default drag-drop
// extension.
//
// Parameters: (context menu or property sheet extension)
// pidlFolder -- Specifies the parent folder
// lpdobj -- Spefifies the set of items selected in that folder.
// hkeyProgID -- Specifies the type of the focused item in the selection.
//
// Parameters: (non-default drag-and-drop extension)
// pidlFolder -- Specifies the target (destination) folder
// lpdobj -- Specifies the items that are dropped (see the description
// about shell's clipboard below for clipboard formats).
// hkeyProgID -- Specifies the folder type.
[
uuid(000214E8-0000-0000-C000-000000000046),
object,
local,
pointer_default(unique)
]
interface IShellExtInit : IUnknown
{
HRESULT Initialize([in] LPCITEMIDLIST pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID);
}
typedef IShellExtInit * LPSHELLEXTINIT;
// The explorer uses the IShellPropSheetExt to allow property sheet
// extensions or control panel extensions to add additional property
// sheet pages.
//
// IShellPropSheetExt::AddPages
//
// The explorer calls this member function when it finds a registered
// property sheet extension for a particular type of object. For each
// additional page, the extension creates a page object by calling
// CreatePropertySheetPage API and calls lpfnAddPage.
//
// Parameters:
// lpfnAddPage -- Specifies the callback function.
// lParam -- Specifies the opaque handle to be passed to the callback function.
//
//
// IShellPropSheetExt::ReplacePage
//
// The explorer never calls this member of property sheet extensions. The
// explorer calls this member of control panel extensions, so that they
// can replace some of default control panel pages (such as a page of
// mouse control panel).
//
// Parameters:
// uPageID -- Specifies the page to be replaced.
// lpfnReplace Specifies the callback function.
// lParam -- Specifies the opaque handle to be passed to the callback function.
//
[
uuid(000214E9-0000-0000-C000-000000000046),
object,
local,
pointer_default(unique)
]
interface IShellPropSheetExt : IUnknown
{
HRESULT AddPages([in] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in] LPARAM lParam);
enum
{
EXPPS_FILETYPES = 0x00000001,
};
typedef UINT EXPPS;
HRESULT ReplacePage([in] EXPPS uPageID, [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in] LPARAM lParam);
}
typedef IShellPropSheetExt * LPSHELLPROPSHEETEXT;
[
helpstring("used to initialize an object on a remote computer (server)"),
uuid(000214FE-0000-0000-C000-000000000046),
object,
pointer_default(unique)
]
interface IRemoteComputer : IUnknown
{
// 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.
//
// pszMachine Specifies the name of the machine to target. (\\server)
// bEnumerationg test to see if this object should be enumerated
// on this server
HRESULT Initialize([in] LPCWSTR pszMachine, [in] BOOL bEnumerating);
};
[
uuid(7307055c-b24a-486b-9f25-163e597a28a9), object, pointer_default(unique)
]
interface IQueryContinue : IUnknown
{
HRESULT QueryContinue(); // S_OK -> Continue, other
};
[
uuid(ba9711ba-5893-4787-a7e1-41277151550b), object, pointer_default(unique)
]
interface IUserNotification : IUnknown
{
HRESULT SetBalloonInfo([in, string] LPCWSTR pszTitle, [in, string] LPCWSTR pszText, [in] DWORD dwInfoFlags);
// times in msec
HRESULT SetBalloonRetry([in] DWORD dwShowTime, [in] DWORD dwInterval, [in] UINT cRetryCount);
HRESULT SetIconInfo([in] HICON hIcon, [in, string] LPCWSTR pszToolTip);
HRESULT Show([in] IQueryContinue *pqc, [in] DWORD dwContinuePollInterval);
HRESULT PlaySound([in, string] LPCWSTR pszSoundName);
};
// interface for describing the limits placed on a name, used for validation
// parsing and translation.
[
uuid(1df0d7f1-b267-4d28-8b10-12e23202a5c4)
]
interface IItemNameLimits : IUnknown
{
HRESULT GetValidCharacters([out] LPWSTR *ppwszValidChars, [out] LPWSTR *ppwszInvalidChars);
HRESULT GetMaxLength([in] LPCWSTR pszName, [out] int *piMaxNameLen);
};
// INetCrawler interface
//
// [Member functions]
//
// INetCrawler::Update
// Causes an enumeration of the local workgroup and subsequent addition
// of folder shortcut and printer objects. As is a blocking call
// which will potentially take a long time (seconds) it should be called
// on a seperate thread
cpp_quote("#define SNCF_REFRESHLIST 0x00000001 // refresh the list (eg. from F5 or opening a folder)")
[
helpstring("INetCrawler"),
uuid(49c929ee-a1b7-4c58-b539-e63be392b6f3),
object,
pointer_default(unique)
]
interface INetCrawler : IUnknown
{
HRESULT Update([in] DWORD dwFlags);
}
cpp_quote("#if (_WIN32_IE >= 0x0400)")
// --- IExtractImage
// this interface is provided for objects to provide a thumbnail image.
// 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 used to 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.
cpp_quote("#define IEI_PRIORITY_MAX ITSAT_MAX_PRIORITY")
cpp_quote("#define IEI_PRIORITY_MIN ITSAT_MIN_PRIORITY")
cpp_quote("#define IEIT_PRIORITY_NORMAL ITSAT_DEFAULT_PRIORITY")
cpp_quote("#define IEIFLAG_ASYNC 0x0001 // ask the extractor if it supports ASYNC extract (free threaded)")
cpp_quote("#define IEIFLAG_CACHE 0x0002 // returned from the extractor if it does NOT cache the thumbnail")
cpp_quote("#define IEIFLAG_ASPECT 0x0004 // passed to the extractor to beg it to render to the aspect ratio of the supplied rect")
cpp_quote("#define IEIFLAG_OFFLINE 0x0008 // if the extractor shouldn't hit the net to get any content neede for the rendering")
cpp_quote("#define IEIFLAG_GLEAM 0x0010 // does the image have a gleam ? this will be returned if it does")
cpp_quote("#define IEIFLAG_SCREEN 0x0020 // render as if for the screen (this is exlusive with IEIFLAG_ASPECT )")
cpp_quote("#define IEIFLAG_ORIGSIZE 0x0040 // render to the approx size passed, but crop if neccessary")
cpp_quote("#define IEIFLAG_NOSTAMP 0x0080 // returned from the extractor if it does NOT want an icon stamp on the thumbnail")
cpp_quote("#define IEIFLAG_NOBORDER 0x0100 // returned from the extractor if it does NOT want an a border around the thumbnail")
cpp_quote("#define IEIFLAG_QUALITY 0x0200 // passed to the Extract method to indicate that a slower, higher quality image is desired, re-compute the thumbnail")
cpp_quote("#define IEIFLAG_REFRESH 0x0400 // returned from the extractor if it would like to have Refresh Thumbnail available")
[
helpstring("IExtractImage"),
uuid(BB2E617C-0920-11d1-9A0B-00C04FC2D6C1),
object,
pointer_default(unique)
]
interface IExtractImage : IUnknown
{
HRESULT GetLocation([out, size_is(cch)] LPWSTR pszPathBuffer,
[in] DWORD cch,
[in, out, unique] DWORD *pdwPriority,
[in] const SIZE * prgSize,
[in] DWORD dwRecClrDepth,
[in, out] DWORD *pdwFlags);
HRESULT Extract([out] HBITMAP *phBmpThumbnail);
}
typedef IExtractImage * LPEXTRACTIMAGE;
cpp_quote("#endif")
cpp_quote("#if (_WIN32_IE >= 0x0500)")
// 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.
[
helpstring("IExtractImage2"),
uuid(953BB1EE-93B4-11d1-98A3-00C04FB687DA),
object,
pointer_default(unique)
]
interface IExtractImage2 : IExtractImage
{
HRESULT GetDateStamp([out] FILETIME *pDateStamp);
}
typedef IExtractImage2 * LPEXTRACTIMAGE2;
cpp_quote("#endif")
//-------------------------------------------------------------------------
//
// IUserEventTimerCallback interface
//
//-------------------------------------------------------------------------
interface IUserEventTimerCallback;
[
helpstring("IUserEventTimerCallback "),
uuid(e9ead8e6-2a25-410e-9b58-a9fbef1dd1a2), // IID_IUserEventTimerCallback
object,
pointer_default(unique)
]
interface IUserEventTimerCallback : IUnknown
{
HRESULT UserEventTimerProc(
[in] ULONG uUserEventTimerID,
[in] UINT uTimerElapse);
};
//-------------------------------------------------------------------------
//
// IUserEventTimer interface
//
// Timer to keep track of user presence at the machine
//
//-------------------------------------------------------------------------
interface IUserEventTimer;
[
helpstring("IUserEventTimer "),
uuid(0F504B94-6E42-42E6-99E0-E20FAFE52AB4), // IID_IUserEventTimer
object,
pointer_default(unique)
]
interface IUserEventTimer : IUnknown
{
HRESULT SetUserEventTimer
(
[in] HWND hWnd,
[in] UINT uCallbackMessage,
[in] UINT uTimerElapse,
[in] IUserEventTimerCallback * pUserEventTimerCallback,
[in, out] ULONG * puUserEventTimerID
);
HRESULT KillUserEventTimer
(
[in] HWND hWnd,
[in] ULONG uUserEventTimerID
);
HRESULT GetUserEventTimerElapsed
(
[in] HWND hWnd,
[in] ULONG uUserEventTimerID,
[out] UINT * puTimerElapsed
);
HRESULT InitTimerTickInterval
(
[in] UINT uTimerTickIntervalMs
);
};
//-------------------------------------------------------------------------
//
// 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(fShow)
// Shows or hides the docking window.
//
// IDockingWindow::CloseDW(dwReserved)
// Closes the docking window. dwReserved must be 0.
//
// IDockingWindow::ResizeBorderDW(prcBorder, punkToolbarSite, fReserved)
// 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.
//
//-------------------------------------------------------------------------
[
uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8),
object
]
interface IDockingWindow : IOleWindow
{
HRESULT ShowDW([in] BOOL fShow);
HRESULT CloseDW([in] DWORD dwReserved);
HRESULT ResizeBorderDW([in] LPCRECT prcBorder, [in] IUnknown* punkToolbarSite, [in] BOOL fReserved);
};
//-------------------------------------------------------------------------
//
// IDeskBand interface
//
//
// [Member functions]
//
// IDeskBand::GetBandInfo(dwBandID, dwViewMode, pdbi)
// Returns info on the given band in *pdbi, according to the mask
// field in the DESKBANDINFO structure and the given viewmode.
//
//-------------------------------------------------------------------------
// Mask values for DESKBANDINFO
cpp_quote("#define DBIM_MINSIZE 0x0001")
cpp_quote("#define DBIM_MAXSIZE 0x0002")
cpp_quote("#define DBIM_INTEGRAL 0x0004")
cpp_quote("#define DBIM_ACTUAL 0x0008")
cpp_quote("#define DBIM_TITLE 0x0010")
cpp_quote("#define DBIM_MODEFLAGS 0x0020")
cpp_quote("#define DBIM_BKCOLOR 0x0040")
cpp_quote("#include <pshpack8.h>")
typedef struct {
DWORD dwMask;
POINTL ptMinSize;
POINTL ptMaxSize;
POINTL ptIntegral;
POINTL ptActual;
WCHAR wszTitle[256];
DWORD dwModeFlags;
COLORREF crBkgnd;
} DESKBANDINFO;
cpp_quote("#include <poppack.h>") // Return to byte packing
// DESKBANDINFO dwModeFlags values
cpp_quote("#define DBIMF_NORMAL 0x0000")
cpp_quote("#define DBIMF_FIXED 0x0001")
cpp_quote("#define DBIMF_FIXEDBMP 0x0004 // a fixed background bitmap (if supported)")
cpp_quote("#define DBIMF_VARIABLEHEIGHT 0x0008")
cpp_quote("#define DBIMF_UNDELETEABLE 0x0010")
cpp_quote("#define DBIMF_DEBOSSED 0x0020")
cpp_quote("#define DBIMF_BKCOLOR 0x0040")
cpp_quote("#define DBIMF_USECHEVRON 0x0080")
cpp_quote("#define DBIMF_BREAK 0x0100")
cpp_quote("#define DBIMF_ADDTOFRONT 0x0200")
cpp_quote("#define DBIMF_TOPALIGN 0x0400")
// GetBandInfo view mode values
cpp_quote("#define DBIF_VIEWMODE_NORMAL 0x0000")
cpp_quote("#define DBIF_VIEWMODE_VERTICAL 0x0001")
cpp_quote("#define DBIF_VIEWMODE_FLOATING 0x0002")
cpp_quote("#define DBIF_VIEWMODE_TRANSPARENT 0x0004")
// Command Target IDs
enum {
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
DBID_SETWINDOWTHEME = 6, // Note: _bandsite_ calls _band_ with this code
DBID_PERMITAUTOHIDE = 7,
};
cpp_quote("#define DBPC_SELECTFIRST (DWORD)-1")
cpp_quote("#define DBPC_SELECTLAST (DWORD)-2")
cpp_quote("#define CGID_DeskBand IID_IDeskBand")
[
uuid(EB0FE172-1A3A-11D0-89B3-00A0C90A90AC),
object,
]
interface IDeskBand : IDockingWindow
{
HRESULT GetBandInfo([in] DWORD dwBandID, [in] DWORD dwViewMode, [in, out] DESKBANDINFO* pdbi);
};
//-------------------------------------------------------------------------
//
// ITaskbarList interface
//
//
// [Member functions]
//
// ITaskbarList::HrInit()
// This function must be called first to validate use of other members.
//
// ITaskbarList::AddTab(hwnd)
// This function adds a tab for hwnd to the taskbar.
//
// ITaskbarList::DeleteTab(hwnd)
// This function deletes a tab for hwnd from the taskbar.
//
// ITaskbarList::ActivateTab(hwnd)
// This function activates the tab associated with hwnd on the taskbar.
//
// ITaskbarList::SetActivateAlt(hwnd)
// This function marks hwnd in the taskbar as the active tab
//
//-------------------------------------------------------------------------
[
uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
object,
]
interface ITaskbarList : IUnknown
{
HRESULT HrInit();
HRESULT AddTab([in] HWND hwnd);
HRESULT DeleteTab([in] HWND hwnd);
HRESULT ActivateTab([in] HWND hwnd);
HRESULT SetActiveAlt([in] HWND hwnd);
};
[
uuid(602D4995-B13A-429b-A66E-1935E44F4317),
object,
]
interface ITaskbarList2 : ITaskbarList
{
HRESULT MarkFullscreenWindow([in] HWND hwnd, [in] BOOL fFullscreen);
};
[
object,
uuid(3d73a659-e5d0-4d42-afc0-5121ba425c8d), // IID_ICDBurn
pointer_default(unique)
]
interface ICDBurn : IUnknown
{
HRESULT GetRecorderDriveLetter([out, size_is(cch)] LPWSTR pszDrive, [in] UINT cch);
HRESULT Burn([in] HWND hwnd);
HRESULT HasRecordableDrive([out] BOOL *pfHasRecorder);
};
// Wizard Extension objects. These interfaces defined methods for extending
// Win32 wizard in a progromatic way.
// Range of ID's that extensions can used, these mustn't clash with
// the existing wizards dialog IDS. (That enables them to still
// do PropSheet_SetCurSelByID).
cpp_quote("#define IDD_WIZEXTN_FIRST 0x5000")
cpp_quote("#define IDD_WIZEXTN_LAST 0x5100")
// This site object is requested via a QueryService of the objects site,
// it allows the extension to navigate in/out out itself, eg. when the
// extension has shown all of its pages and wants to navigate to the
// next page it would call GetNextPage and select the specified HPAGE.
[
uuid(88960f5b-422f-4e7b-8013-73415381c3c3),
helpstring("Wizard Extension Site"),
local
]
interface IWizardSite : IUnknown
{
HRESULT GetPreviousPage([out] HPROPSHEETPAGE *phpage);
HRESULT GetNextPage([out] HPROPSHEETPAGE *phpage);
HRESULT GetCancelledPage([out] HPROPSHEETPAGE *phpage);
};
// A wizard extension is implemented using this object, the extension will declare the
// pages that it supports using the AddPages method, and then when its host needs to navigate
// into the extenion it will do so via GetFirstPage and selecting that.
[
uuid(c02ea696-86cc-491e-9b23-74394a0444a8),
helpstring("Wizard Extension"),
local
]
interface IWizardExtension : IUnknown
{
HRESULT AddPages([in, out] HPROPSHEETPAGE* aPages, [in] UINT cPages, [out] UINT *pnPagesAdded);
HRESULT GetFirstPage([out] HPROPSHEETPAGE *phpage);
HRESULT GetLastPage([out] HPROPSHEETPAGE *phpage);
};
// The Web Wizard is a HTML host for wizard pages, it allows you
// create a HTML wizard starting at the URL defined via SetInitialURL.
[
helpstring("Web Wizard Page Extension"),
uuid(0e6b3f66-98d1-48c0-a222-fbde74e2fbc5),
object,
pointer_default(unique)
]
interface IWebWizardExtension : IWizardExtension
{
HRESULT SetInitialURL([in, string] LPCWSTR pszURL);
HRESULT SetErrorURL([in, string] LPCWSTR pszErrorURL);
};
cpp_quote("#define SID_WebWizardHost IID_IWebWizardExtension")
// flags for the host to control the publishing wizard
cpp_quote ("#define SHPWHF_NORECOMPRESS 0x00000001 // don't allow/prompt for recompress of streams")
cpp_quote ("#define SHPWHF_NONETPLACECREATE 0x00000002 // don't create a network place when transfer is complete")
cpp_quote ("#define SHPWHF_NOFILESELECTOR 0x00000004 // don't show the file selector")
cpp_quote ("#define SHPWHF_VALIDATEVIAWEBFOLDERS 0x00010000 // enable web folders to validate network places (ANP support)")
[
helpstring("Web Publishing Wizard"),
uuid(aa9198bb-ccec-472d-beed-19a4f6733f7a),
object,
pointer_default(unique)
]
interface IPublishingWizard : IWizardExtension
{
HRESULT Initialize([in] IDataObject *pdo, [in] DWORD dwOptions, [in, string] LPCWSTR pszServiceProvider);
HRESULT GetTransferManifest([out] HRESULT *phrFromTransfer, [out] IXMLDOMDocument **pdocManifest);
}
// Object to host an IFolderView in a window. This is used to build check mark selection
// UI for files.
[
uuid(1ea58f02-d55a-411d-b09e-9e65ac21605b),
helpstring("Shell Folder Host"),
local,
]
interface IFolderViewHost : IUnknown
{
HRESULT Initialize([in] HWND hwndParent, [in] IDataObject *pdo, [in] RECT *prc);
};
//
// Flags for IAutoCompleteDropDown::GetDropDownStatus
//
cpp_quote("#define ACDD_VISIBLE 0x0001")
[
uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
object,
pointer_default(unique)
]
interface IAutoCompleteDropDown : IUnknown
{
HRESULT GetDropDownStatus([out] DWORD *pdwFlags, [out, string] LPWSTR *ppwszString);
HRESULT ResetEnumerator();
};
cpp_quote("#define PPW_LAUNCHEDBYUSER 0x00000001 // The wizard was launch explicitly by the user, not on demand by the key manager")
[
helpstring("Passport Wizard"),
uuid(a09db586-9180-41ac-9114-460a7f362b76),
object,
pointer_default(unique)
]
interface IPassportWizard : IModalWindow
{
HRESULT SetOptions([in] DWORD dwOptions);
};
// the cd burning wizard extension sets return codes through a property bag
// to tell the main wizard whether it should stop or keep going
cpp_quote("#define PROPSTR_EXTENSIONCOMPLETIONSTATE L\"ExtensionCompletionState\"")
enum
{
CDBE_RET_DEFAULT = 0x00000000,
CDBE_RET_DONTRUNOTHEREXTS = 0x00000001,
CDBE_RET_STOPWIZARD = 0x00000002,
};
cpp_quote("#define SID_CDWizardHost IID_ICDBurnExt")
[
uuid(2271dcca-74fc-4414-8fb7-c56b05ace2d7),
helpstring("add-ons for cd burning"),
]
interface ICDBurnExt : IUnknown
{
enum
{
CDBE_TYPE_MUSIC = 0x00000001,
CDBE_TYPE_DATA = 0x00000002,
CDBE_TYPE_ALL = 0xFFFFFFFF
};
HRESULT GetSupportedActionTypes([out] DWORD *pdwActions);
}
typedef void (*PFDVENUMREADYBALLBACK)(LPVOID pvData);
//
// interface for communication between the view and the Explorer band treeview control
//
[
uuid(70F55181-5FEA-4900-B6B8-7343CB0A348C),
helpstring("Private interface between CDefView and Explorer band"),
local
]
interface IDVGetEnum : IUnknown
{
HRESULT SetEnumReadyCallback([in] PFDVENUMREADYBALLBACK pfn, [in] LPVOID pvData);
HRESULT CreateEnumIDListFromContents([in] LPCITEMIDLIST pidlFolder, [in] DWORD dwEnumFlags, [out] IEnumIDList **ppEnumIDList);
};
[
helpstring("Interface to allow items to be inserted in FolderItems"),
uuid(D2B57227-3D23-4b95-93C0-492BD454C356),
object,
local
]
interface IInsertItem : IUnknown
{
HRESULT InsertItem([in] LPCITEMIDLIST pidl);
}
///// IDeskBar
[
uuid(EB0FE173-1A3A-11D0-89B3-00A0C90A90AC),
object,
pointer_default(unique),
local
]
interface IDeskBar : IOleWindow
{
HRESULT SetClient([in] IUnknown* punkClient);
HRESULT GetClient([out] IUnknown** ppunkClient);
HRESULT OnPosRectChangeDB([in] LPRECT prc);
};
//-------------------------------------------------------------------------
//
// IMenuBand interface
//
// This interface provides methods the menuband (CLSID_MenuBand)
// to receive pertinent messages.
//
// [Member functions]
//
// IMenuBand::IsMenuMessage(pmsg)
// A message pump calls this function to see if any messages need
// to be redirected to this object. If this returns S_OK, the
// message loop should not call TranslateMessage or DispatchMessage.
// If this returns E_FAIL, the menu has exited menu mode and is ready
// to be destroyed.
//
// IMenuBand::TranslateMenuMessage(pmsg, plRet)
// Offers the object an opportunity to translate messages. The
// parent window proc must call this method for every message (not
// the message pump). The message, wParam, and lParam should be
// delivered to this method in *pmsg. This method may change the
// values of pmsg->wParam or pmsg->lParam, in which case these changes
// should be forwarded on.
//
// This method is required because some modal message pumps (like the one
// in TrackPopupMenu) do not give an opportunity to call a custom
// TranslateAccelerator method like IInputObject::TranslateAcceleratorIO.
//
// TranslateMenuMessage returns S_OK if the message was handled and
// should be eaten. *plRet is not touched if this returns S_FALSE.
//
//
//-------------------------------------------------------------------------
[
uuid(568804CD-CBD7-11d0-9816-00C04FD91972),
object,
pointer_default(unique),
local
]
interface IMenuBand : IUnknown
{
// CmdIDs for the IOleCommandTarget Group: CGID_MenuBandHandler (defined in shguidp.h)
enum {
MBHANDCID_PIDLSELECT = 0, // A PIDL from a menuband was selected
};
HRESULT IsMenuMessage([in] MSG * pmsg);
HRESULT TranslateMenuMessage([in,out] MSG * pmsg, [out] LRESULT * plRet);
};
[
object,
uuid(47c01f95-e185-412c-b5c5-4f27df965aea), // IID_IFolderBandPriv
pointer_default(unique)
]
interface IFolderBandPriv : IUnknown
{
HRESULT SetCascade([in] BOOL f);
HRESULT SetAccelerators([in] BOOL f);
HRESULT SetNoIcons([in] BOOL f);
HRESULT SetNoText([in] BOOL f);
};
cpp_quote("#if _WIN32_IE >= 0x0400")
//-------------------------------------------------------------------------
//
// IBandSite interface
//
// This interface provides methods to get or set bandsite information.
//
// [Member functions]
//
// IBandSite::AddBand(punk)
// Add a band to the bandsite. Returns the band ID in ShortFromResult(hres).
//
// IBandSite::EnumBands(uBand, *pdwBandID)
// Enumerate the bands. If uBand is -1, pdwBandID is ignored and this
// method returns the count of bands in the bandsite. Call this method
// with uBand starting at 0 to begin enumerating. Returns S_OK and the
// band ID in *pdwBandID of the next band.
//
// IBandSite::QueryBand(dwBandID, ppstb, pdwState, pszName, cchName)
// Get info about a band.
//
// IBandSite::SetBandState(dwBandID, dwState)
// Set the band's state.
//
// IBandSite::RemoveBand(dwBandID)
// Remove the band.
//
// IBandSite::GetBandObject(dwBandID, riid, ppv)
// Get an object that support riid for the band.
//
// IBandSite::GetBandSiteInfo(pbsinfo)
// Get info about the bandsite.
//
// IBandSite::SetBandSiteInfo(pbsinfo)
// Set info about the bandsite.
//
//-------------------------------------------------------------------------
cpp_quote("#include <pshpack8.h>")
typedef struct tagBANDSITEINFO {
DWORD dwMask; // BSIM_* flags
DWORD dwState; // BSSF_* flags
DWORD dwStyle; // BSIS_* flags
} BANDSITEINFO;
cpp_quote("#include <poppack.h>") // Return to byte packing
enum {
BSID_BANDADDED,
BSID_BANDREMOVED,
};
// Field mask
cpp_quote("#define BSIM_STATE 0x00000001")
cpp_quote("#define BSIM_STYLE 0x00000002")
// State flags
cpp_quote("#define BSSF_VISIBLE 0x00000001")
cpp_quote("#define BSSF_NOTITLE 0x00000002")
cpp_quote("#define BSSF_UNDELETEABLE 0x00001000")
// Style flags
cpp_quote("#define BSIS_AUTOGRIPPER 0x00000000")
cpp_quote("#define BSIS_NOGRIPPER 0x00000001")
cpp_quote("#define BSIS_ALWAYSGRIPPER 0x00000002")
cpp_quote("#define BSIS_LEFTALIGN 0x00000004")
cpp_quote("#define BSIS_SINGLECLICK 0x00000008")
cpp_quote("#define BSIS_NOCONTEXTMENU 0x00000010")
cpp_quote("#define BSIS_NODROPTARGET 0x00000020")
cpp_quote("#define BSIS_NOCAPTION 0x00000040")
cpp_quote("#define BSIS_PREFERNOLINEBREAK 0x00000080")
cpp_quote("#define BSIS_LOCKED 0x00000100")
cpp_quote("#define SID_SBandSite IID_IBandSite")
cpp_quote("#define CGID_BandSite IID_IBandSite")
[
object,
uuid(4CF504B0-DE96-11D0-8B3F-00A0C911E8E5)
]
interface IBandSite : IUnknown
{
HRESULT AddBand([in] IUnknown* punk);
HRESULT EnumBands([in] UINT uBand, [out] DWORD* pdwBandID);
HRESULT QueryBand([in] DWORD dwBandID, [out] IDeskBand** ppstb, [out] DWORD* pdwState, [out, size_is(cchName)] LPWSTR pszName, [in] int cchName);
HRESULT SetBandState([in] DWORD dwBandID, [in] DWORD dwMask, [in] DWORD dwState);
HRESULT RemoveBand([in] DWORD dwBandID);
HRESULT GetBandObject([in] DWORD dwBandID, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
HRESULT SetBandSiteInfo([in] const BANDSITEINFO *pbsinfo);
HRESULT GetBandSiteInfo([in, out] BANDSITEINFO *pbsinfo);
};
cpp_quote("#endif // _WIN32_IE >= 0x0400")
[
uuid(d92995f8-cf5e-4a76-bf59-ead39ea2b97e),
helpstring("shell name space walking callback interface"),
]
interface INamespaceWalkCB : IUnknown
{
HRESULT FoundItem([in] IShellFolder *psf, [in] LPCITEMIDLIST pidl);
HRESULT EnterFolder([in] IShellFolder *psf, [in] LPCITEMIDLIST pidl);
HRESULT LeaveFolder([in] IShellFolder *psf, [in] LPCITEMIDLIST pidl);
HRESULT InitializeProgressDialog([out, string] LPWSTR *ppszTitle, [out, string] LPWSTR *ppszCancel);
};
[
uuid(57ced8a7-3f4a-432c-9350-30f24483f74f),
helpstring("shell name space walk, used to expand data objects, views or recurse folders"),
]
interface INamespaceWalk : IUnknown
{
enum
{
NSWF_NONE_IMPLIES_ALL = 0x00000001,
NSWF_ONE_IMPLIES_ALL = 0x00000002,
NSWF_DONT_TRAVERSE_LINKS = 0x00000004,
NSWF_DONT_ACCUMULATE_RESULT = 0x00000008,
NSWF_TRAVERSE_STREAM_JUNCTIONS = 0x00000010,
NSWF_FILESYSTEM_ONLY = 0x00000020,
NSWF_SHOW_PROGRESS = 0x00000040,
NSWF_FLAG_VIEWORDER = 0x00000080,
NSWF_IGNORE_AUTOPLAY_HIDA = 0x00000100,
};
// punkToWalk can be an IShellView site, IShellFolder or IDataObject
HRESULT Walk([in] IUnknown *punkToWalk, [in] DWORD dwFlags, [in] int cDepth, [in] INamespaceWalkCB *pnswcb);
HRESULT GetIDArrayResult([out] UINT *pcItems, [out, size_is(sizeof(LPITEMIDLIST *)), length_is(*pcItems)] LPITEMIDLIST **pppidl);
};
[
uuid(A9521922-0812-4d44-9EC3-7FD38C726F3D),
helpstring("callback objects for CRegTreeOptions items"),
local
]
interface IRegTreeItem : IUnknown
{
HRESULT GetCheckState([out] BOOL *pbCheck);
HRESULT SetCheckState([in] BOOL bCheck);
};
//-------------------------------------------------------------------------
//
// IMenuPopup interface
//
// This interface provides methods to navigate thru a menu.
//
// [Member functions]
//
// IMenuPopup::Popup(ppt, prcExclude, dwFlags)
// Invoke the menu, located at the point *ppt (in screen coordinates).
// The optional prcExclude points to the rectangle to exclude when
// positioning the menu, otherwise it should be NULL. dwFlags may be:
//
// MDBPU_SETFOCUS: the menu can take the focus.
//
// Returns S_OK if the object implements the popup menu as a modeless
// menu. Otherwise it returns S_FALSE, and the menu is finished.
//
// IMenuPopup::OnSelect(dwSelectType)
// This method handles selection notifications.
//
// IMenuPopup::SetSubMenu(pmp, fSet)
// Sets the given menu bar interface to be the submenu of this
// object's interface. Set fSet == FALSE to remove the submenu.
//
//-------------------------------------------------------------------------
// Type values for IMenuPopup::OnSelect
enum
{
MPOS_EXECUTE = 0, // Execute the selected menu item
MPOS_FULLCANCEL, // Cancel the entire menu
MPOS_CANCELLEVEL, // Cancel the current cascaded menu
MPOS_SELECTLEFT, // select one to the left of the cur selection
MPOS_SELECTRIGHT, // select one to the right of the cur selection
MPOS_CHILDTRACKING // the child got a tracking select (mouse moved over)
};
// Flags for IMenuPopup::Popup
enum
{
MPPF_SETFOCUS = 0x00000001, // Menu can take the focus
MPPF_INITIALSELECT = 0x00000002, // Select the first item
MPPF_NOANIMATE = 0x00000004, // Do not animate this show
MPPF_KEYBOARD = 0x00000010, // The menu is activated by keyboard
MPPF_REPOSITION = 0x00000020, // Resposition the displayed bar.
MPPF_FORCEZORDER = 0x00000040, // internal: Tells menubar to ignore Submenu positions
MPPF_FINALSELECT = 0x00000080, // Select the last item
MPPF_TOP = 0x20000000, // Popup menu up from point
MPPF_LEFT = 0x40000000, // Popup menu left from point
MPPF_RIGHT = 0x60000000, // Popup menu right from point
MPPF_BOTTOM = 0x80000000, // Popup menu below point
MPPF_POS_MASK = 0xE0000000 // Menu Position Mask
};
[
uuid(D1E7AFEB-6A2E-11d0-8C78-00C04FD918B4),
object,
pointer_default(unique),
local
]
interface IMenuPopup : IDeskBar
{
HRESULT Popup([in] POINTL *ppt, [in] RECTL *prcExclude, DWORD dwFlags);
HRESULT OnSelect(DWORD dwSelectType);
HRESULT SetSubMenu([in] IMenuPopup* pmp, BOOL fSet);
};
// BindHandler GUIDs for IShellItem::BindToHandler (defined in shlguid.h)")
// BHID_SFObject restricts usage to IShellFolder::BindToObject()")
// BHID_SFUIObject restricts usage to IShellFolder::GetUIObjectOf()")
// BHID_SFViewObject restricts usage to IShellFolder::CreateViewObject()")
// BHID_LocalCopyHelper creates and initializes CLSID_LocalCopyHelper")
// BHID_LinkTargetItem CLSID_ShellItem initialized with the target this item (SFGAO_LINK only)")
// BHID_Storage attempts to get the stg/stm riid from BTO, but defaults to shell implementations on failure")
[
helpstring("Shell Namespace helper"),
uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),
object,
pointer_default(unique)
]
interface IShellItem : IUnknown
{
HRESULT BindToHandler(
[in] IBindCtx *pbc,
[in] REFGUID rbhid,
[in] REFIID riid,
[out, iid_is(riid)] void **ppvOut);
HRESULT GetParent([out] IShellItem **ppsi);
typedef [v1_enum] enum
{
SIGDN_NORMALDISPLAY = 0x00000000,
SIGDN_PARENTRELATIVEPARSING = 0x80018001,
SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8001c001,
SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000,
SIGDN_PARENTRELATIVEEDITING = 0x80031001,
SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000,
SIGDN_FILESYSPATH = 0x80058000,
SIGDN_URL = 0x80068000,
} SIGDN;
HRESULT GetDisplayName(
[in] SIGDN sigdnName,
[out, string] LPOLESTR *ppszName);
HRESULT GetAttributes(
[in] SFGAOF sfgaoMask,
[out] SFGAOF *psfgaoAttribs);
// SICHINT_DISPLAY iOrder based on display in a folder view
// SICHINT_ALLFIELDS exact instance compare
// SICHINT_CANONICAL iOrder based on canonical name (better performance)
[v1_enum] enum
{
SICHINT_DISPLAY = 0x00000000,
SICHINT_ALLFIELDS = 0x80000000,
SICHINT_CANONICAL = 0x10000000,
};
typedef DWORD SICHINTF;
HRESULT Compare(
[in] IShellItem *psi,
[in] SICHINTF hint,
[out] int *piOrder);
};
// image recompression object, given the cx, cy and a quality that we need go through the steps
// of creating a stream that we can give to somebody containing an image that size. if the
// image is < that size then return S_FALSE.
[
uuid(505f1513-6b3e-4892-a272-59f8889a4d3e),
helpstring("Image Recompression Object"),
pointer_default(unique),
object
]
interface IImageRecompress : IUnknown
{
HRESULT RecompressImage(IShellItem *psi, int cx, int cy, int iQuality, IStorage *pstg, IStream **ppstrmOut);
}
[
helpstring("IDefViewSafety"),
uuid(9A93B3FB-4E75-4c74-871A-2CDA667F39A5),
object,
pointer_default(unique)
]
interface IDefViewSafety : IUnknown
{
HRESULT IsSafePage();
};
[
uuid(0811AEBE-0B87-4C54-9E72-548CF649016B),
object,
pointer_default(unique)
]
interface IContextMenuSite : IUnknown
{
HRESULT DoContextMenuPopup([in] IUnknown* punkContextMenu, [in] UINT fFlags, [in] POINT pt);
};
[
helpstring("Modal Window"),
uuid(b4db1657-70d7-485e-8e3e-6fcb5a5c1802),
object,
pointer_default(unique)
]
interface IModalWindow : IUnknown
{
HRESULT Show([in] HWND hwndParent);
};
//
// Delegate Item IDs are in a partially known format so the delegate (inner) and
// delgating (outer) folders share the pidl contents. the inner folder allocates
// its pidls using the IMalloc provided by the outer folder via SetItemAlloc()
// that pidl must conform to the delegate item format.
//
cpp_quote("#include <pshpack1.h>")
typedef struct tagDELEGATEITEMID
{
WORD cbSize; // size of entire item ID (points to the NULL or next item)
WORD wOuter; // Private data owned by the outer folder
WORD cbInner; // Size of delegate's data
BYTE rgb[1]; // Inner folder's data (opaque to outer folder)
// followed by outer folder's data.
} DELEGATEITEMID;
cpp_quote("#include <poppack.h>")
cpp_quote("typedef const UNALIGNED DELEGATEITEMID *PCDELEGATEITEMID;")
cpp_quote("typedef UNALIGNED DELEGATEITEMID *PDELEGATEITEMID;")
[
helpstring("shell name space delegate folder interface"),
uuid(ADD8BA80-002B-11D0-8F0F-00C04FD7D062),
object,
pointer_default(unique)
]
interface IDelegateFolder : IUnknown
{
// use to give the delegate folder the IMalloc interface that it
// needs to use to alloc and free item IDs.
// These IDs are in the form of DELEGATEITEMIDs
// and it is the delegates job to pack its data into the pidl
// in the delegate format
HRESULT SetItemAlloc([in] IMalloc *pmalloc);
};
cpp_quote("// INTERFACE: IBrowserFrameOptions")
cpp_quote("//")
cpp_quote("// This interface was implemented so a browser or host can ask a ShellView/ShelNameSpace what")
cpp_quote("// kind of 'Behavior' is appropriate for that view.")
cpp_quote("//")
cpp_quote("// IBrowserFrameOptions::GetBrowserOptions()")
cpp_quote("// dwMask is the logical OR of bits to look for. pdwOptions is not optional and")
cpp_quote("// it's return value will always equal or will be a subset of dwMask.")
cpp_quote("// If the function succeeds, the return value must be S_OK and pdwOptions needs to be filled in.")
cpp_quote("// If the function fails, pdwOptions needs to be filled in with BFO_NONE.")
cpp_quote("//")
[
uuid(10DF43C8-1DBE-11d3-8B34-006097DF5BD4),
object,
local
]
interface IBrowserFrameOptions : IUnknown
{
typedef [unique] IBrowserFrameOptions * LPBROWSERFRAMEOPTIONS;
enum
{
BFO_NONE = 0x00000000, // Do nothing.
BFO_BROWSER_PERSIST_SETTINGS = 0x00000001, // Does this item want the browser stream? (Same window position as IE browser windows?)
BFO_RENAME_FOLDER_OPTIONS_TOINTERNET = 0x00000002, // Rename "Folder Options" to "Internet Options" in the Tools or View menu?
BFO_BOTH_OPTIONS = 0x00000004, // Keep both "Folder Options" and "Internet Options" in the Tools or View menu?
BIF_PREFER_INTERNET_SHORTCUT = 0x00000008, // NSE would prefer a .url shortcut over a .lnk shortcut
BFO_BROWSE_NO_IN_NEW_PROCESS = 0x00000010, // Specify this flag if you don't want the "Browse in New Process" via invoking a shortcut.
BFO_ENABLE_HYPERLINK_TRACKING = 0x00000020, // Does this NSE want it's display name tracked to determine when hyperlinks should be tagged as previously used?
BFO_USE_IE_OFFLINE_SUPPORT = 0x00000040, // Use "Internet Explorer"'s offline support?
BFO_SUBSTITUE_INTERNET_START_PAGE = 0x00000080, // Does this NSE want to use the Start Page support?
BFO_USE_IE_LOGOBANDING = 0x00000100, // Use the Brand block in the Toolbar. (Spinning globe or whatever it is this year)
BFO_ADD_IE_TOCAPTIONBAR = 0x00000200, // Should " - Internet Explorer" be appended to display name in the Captionbar
BFO_USE_DIALUP_REF = 0x00000400, // Should the DialUp ref count get a ref while the browse is navigated to this location? This will also enable the ICW and Software update.
BFO_USE_IE_TOOLBAR = 0x00000800, // Should the IE toolbar be used?
BFO_NO_PARENT_FOLDER_SUPPORT = 0x00001000, // Can you NOT navigate to a parent folder? Used for Backspace button to parent folder or the View.GoTo.ParentFolder feature.
BFO_NO_REOPEN_NEXT_RESTART = 0x00002000, // Browser windows are NOT reopened the next time the shell boots if the windows were left open on the previous logoff. Does this NSE want the same feature?
BFO_GO_HOME_PAGE = 0x00004000, // Add "Home Page" to menu (Go).
BFO_PREFER_IEPROCESS = 0x00008000, // prefers to use IEXPLORE.EXE over EXPLORER.EXE
BFO_SHOW_NAVIGATION_CANCELLED = 0x00010000, // If navigation is aborted, show the "Action Cancelled" HTML page.
BFO_QUERY_ALL = 0xFFFFFFFF, // Return all values set.
};
typedef DWORD BROWSERFRAMEOPTIONS;
HRESULT GetFrameOptions([in] BROWSERFRAMEOPTIONS dwMask, [out] BROWSERFRAMEOPTIONS * pdwOptions);
}
cpp_quote("#include <pshpack8.h>")
typedef struct tagSMDATA
{
DWORD dwMask; // SMDM_* values
DWORD dwFlags; // Not used
HMENU hmenu; // Static HMENU portion.
HWND hwnd; // HWND owning the HMENU
UINT uId; // Id of the item in the menu (-1 for menu itself)
UINT uIdParent; // Id of the item spawning this menu
UINT uIdAncestor; // Id of the very top item in the chain of ShellFolders
IUnknown* punk; // IUnkown of the menuband
LPITEMIDLIST pidlFolder; // pidl of the ShellFolder portion
LPITEMIDLIST pidlItem; // pidl of the item in the ShellFolder portion
IShellFolder* psf; // IShellFolder for the shell folder portion
void* pvUserData; // User defined Data associated with a pane.
} SMDATA, *LPSMDATA;
cpp_quote("// Mask")
cpp_quote("#define SMDM_SHELLFOLDER 0x00000001 // This is for an item in the band")
cpp_quote("#define SMDM_HMENU 0x00000002 // This is for the Band itself")
cpp_quote("#define SMDM_TOOLBAR 0x00000004 // Plain toolbar, not associated with a shell folder or hmenu")
cpp_quote("// Flags (bitmask)")
typedef struct tagSMINFO
{
DWORD dwMask; // SMIM_*
DWORD dwType; // SMIT_*
DWORD dwFlags; // SMIF_*
int iIcon;
} SMINFO, * PSMINFO;
typedef struct tagSHCSCHANGENOTIFYSTRUCT
{
LONG lEvent; // Change notify Event
LPCITEMIDLIST pidl1; // Pidl 1 Passed in from the Change notify
LPCITEMIDLIST pidl2; // Pidl 2 Passed in from the Change notify
} SMCSHCHANGENOTIFYSTRUCT, *PSMCSHCHANGENOTIFYSTRUCT;
cpp_quote("#include <poppack.h>") /* Return to byte packing */
// Mask flags
enum
{
SMIM_TYPE = 0x00000001,
SMIM_FLAGS = 0x00000002,
SMIM_ICON = 0x00000004
};
// Types for mbiinfo.dwType
enum
{
SMIT_SEPARATOR = 0x00000001,
SMIT_STRING = 0x00000002
};
// Flags for mbiinfo.dwFlags
enum
{
SMIF_ICON = 0x00000001, // Show an icon
SMIF_ACCELERATOR = 0x00000002, // Underline the character marked w/ '&'
SMIF_DROPTARGET = 0x00000004, // Item is a drop target
SMIF_SUBMENU = 0x00000008, // Item has a submenu
SMIF_CHECKED = 0x00000020, // Item has a Checkmark
SMIF_DROPCASCADE = 0x00000040, // Item can cascade out during drag/drop
SMIF_HIDDEN = 0x00000080, // Don't display item
SMIF_DISABLED = 0x00000100, // Should be unselectable. Gray.
SMIF_TRACKPOPUP = 0x00000200, // Should be unselectable. Gray.
SMIF_DEMOTED = 0x00000400, // Display item in "Demoted" state.
SMIF_ALTSTATE = 0x00000800, // Displayed in "Altered State"
SMIF_DRAGNDROP = 0x00001000, // If item that is being dragged hovers over an item for long enough then it SMC_EXECs that item
SMIF_NEW = 0x00002000, // Item is newly-installed or otherwise attractive (XP)
};
cpp_quote("#define SMC_INITMENU 0x00000001 // The callback is called to init a menuband")
cpp_quote("#define SMC_CREATE 0x00000002")
cpp_quote("#define SMC_EXITMENU 0x00000003 // The callback is called when menu is collapsing")
cpp_quote("#define SMC_GETINFO 0x00000005 // The callback is called to return DWORD values")
cpp_quote("#define SMC_GETSFINFO 0x00000006 // The callback is called to return DWORD values")
cpp_quote("#define SMC_GETOBJECT 0x00000007 // The callback is called to get some object")
cpp_quote("#define SMC_GETSFOBJECT 0x00000008 // The callback is called to get some object")
cpp_quote("#define SMC_SFEXEC 0x00000009 // The callback is called to execute an shell folder item")
cpp_quote("#define SMC_SFSELECTITEM 0x0000000A // The callback is called when an item is selected")
cpp_quote("#define SMC_REFRESH 0x00000010 // Menus have completely refreshed. Reset your state.")
cpp_quote("#define SMC_DEMOTE 0x00000011 // Demote an item")
cpp_quote("#define SMC_PROMOTE 0x00000012 // Promote an item, wParam = SMINV_* flag")
cpp_quote("#define SMC_DEFAULTICON 0x00000016 // Returns Default icon location in wParam, index in lParam")
cpp_quote("#define SMC_NEWITEM 0x00000017 // Notifies item is not in the order stream.")
cpp_quote("#define SMC_CHEVRONEXPAND 0x00000019 // Notifies of a expansion via the chevron")
cpp_quote("#define SMC_DISPLAYCHEVRONTIP 0x0000002A // S_OK display, S_FALSE not.")
cpp_quote("#define SMC_SETSFOBJECT 0x0000002D // Called to save the passed object")
cpp_quote("#define SMC_SHCHANGENOTIFY 0x0000002E // Called when a Change notify is received. lParam points to SMCSHCHANGENOTIFYSTRUCT")
cpp_quote("#define SMC_CHEVRONGETTIP 0x0000002F // Called to get the chevron tip text. wParam = Tip title, Lparam = TipText Both MAX_PATH")
cpp_quote("#define SMC_SFDDRESTRICTED 0x00000030 // Called requesting if it's ok to drop. wParam = IDropTarget.")
[
uuid(4CA300A1-9B8D-11d1-8B22-00C04FD918D0),
object,
pointer_default(unique),
local // cannot marshal because method has polymorphic parameters
]
interface IShellMenuCallback : IUnknown
{
// psmd is [in,out] because SMC_MAPACCELERATOR returns a value in uId
HRESULT CallbackSM([in,out] LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
//-------------------------------------------------------------------------
//
// IShellMenu interface
//
//-------------------------------------------------------------------------
cpp_quote("#define SMINIT_DEFAULT 0x00000000 // No Options")
cpp_quote("#define SMINIT_RESTRICT_DRAGDROP 0x00000002 // Don't allow Drag and Drop")
cpp_quote("#define SMINIT_TOPLEVEL 0x00000004 // This is the top band.")
cpp_quote("#define SMINIT_CACHED 0x00000010")
// These are mutually Exclusive
cpp_quote("#define SMINIT_VERTICAL 0x10000000 // This is a vertical menu")
cpp_quote("#define SMINIT_HORIZONTAL 0x20000000 // This is a horizontal menu (does not inherit)")
cpp_quote("#define ANCESTORDEFAULT (UINT)-1")
cpp_quote("#define SMSET_TOP 0x10000000 // Bias this namespace to the top of the menu")
cpp_quote("#define SMSET_BOTTOM 0x20000000 // Bias this namespace to the bottom of the menu")
cpp_quote("#define SMSET_DONTOWN 0x00000001 // The Menuband doesn't own the non-ref counted object")
// and should not destroy it.
cpp_quote("#define SMINV_REFRESH 0x00000001")
cpp_quote("#define SMINV_ID 0x00000008")
[
uuid(EE1F7637-E138-11d1-8379-00C04FD918D0),
object,
pointer_default(unique), /* some of our pointers can be NULL (as noted) */
local
]
interface IShellMenu : IUnknown
{
HRESULT Initialize([in] IShellMenuCallback* psmc, UINT uId, UINT uIdAncestor, DWORD dwFlags);
HRESULT GetMenuInfo([out] IShellMenuCallback** ppsmc, [out] UINT* puId, [out] UINT* puIdAncestor, [out] DWORD* pdwFlags);
HRESULT SetShellFolder(IShellFolder* psf, [in] LPCITEMIDLIST pidlFolder, HKEY hKey, DWORD dwFlags);
HRESULT GetShellFolder([out] DWORD* pdwFlags, [out] LPITEMIDLIST* ppidl, [in] REFIID riid, [out, iid_is(riid)] void** ppv);
HRESULT SetMenu([in] HMENU hmenu, [in] HWND hwnd, DWORD dwFlags);
HRESULT GetMenu([out /* can be null */] HMENU* phmenu, [out /* can be null */] HWND* phwnd, [out /* can be null */] DWORD* pdwFlags);
HRESULT InvalidateItem([in /* can be null */] LPSMDATA psmd, DWORD dwFlags);
HRESULT GetState([out] LPSMDATA psmd);
HRESULT SetMenuToolbar([in] IUnknown* punk, DWORD dwFlags);
};
//
// NOTE - this typelib is never registered anywhere
// objects that want their typelibs to be registered
// in shell32 should add their coclass to shldisp.idl
//
[
uuid(50a7e9b1-70ef-11d1-b75a-00a0c90564fe), // LIBID_ShellObjects
helpstring("Microsoft Shell Objects"),
lcid(0x0000),
version(1.0)
]
library ShellObjects
{
// CLSID_QueryCancelAutoPlay
[ uuid(331F1768-05A9-4ddd-B86E-DAE34DDC998A) ] coclass QueryCancelAutoPlay { interface IQueryCancelAutoPlay; }
// CLSID_DriveSizeCategorizer
[ uuid(94357B53-CA29-4b78-83AE-E8FE7409134F) ] coclass DriveSizeCategorizer { interface ICategorizer; }
// CLSID_DriveTypeCategorizer
[ uuid(B0A8F3CF-4333-4bab-8873-1CCB1CADA48B) ] coclass DriveTypeCategorizer { interface ICategorizer; }
// CLSID_FreeSpaceCategorizer
[ uuid(B5607793-24AC-44c7-82E2-831726AA6CB7) ] coclass FreeSpaceCategorizer { interface ICategorizer; }
// CLSID_TimeCategorizer
[ uuid(3bb4118f-ddfd-4d30-a348-9fb5d6bf1afe) ] coclass TimeCategorizer { interface ICategorizer; }
// CLSID_SizeCategorizer
[ uuid(55d7b852-f6d1-42f2-aa75-8728a1b2d264) ] coclass SizeCategorizer { interface ICategorizer; }
// CLSID_AlphabeticalCategorizer
[ uuid(3c2654c6-7372-4f6b-b310-55d6128f49d2) ] coclass AlphabeticalCategorizer { interface ICategorizer; }
// CLSID_MergedCategorizer
[ uuid(8e827c11-33e7-4bc1-b242-8cd9a1c2b304) ] coclass MergedCategorizer { interface ICategorizer; }
// CLSID_ImageProperties
[ uuid(7ab770c7-0e23-4d7a-8aa2-19bfad479829) ] coclass ImageProperties { interface IPersistFile; }
// CLSID_ImageProperties
[ uuid(d912f8cf-0396-4915-884e-fb425d32943b) ] coclass PropertiesUI { interface IPropertyUI; }
// CLSID_UserNotification
[ uuid(0010890e-8789-413c-adbc-48f5b511b3af) ] coclass UserNotification { interface IUserNotification; }
// CLSID_UserEventTimerCallback
[ uuid(15fffd13-5140-41b8-b89a-c8d5759cd2b2) ] coclass UserEventTimerCallback { interface IUserEventTimerCallback; }
// CLSID_UserEventTimer
[ uuid(864A1288-354C-4D19-9D68-C2742BB14997) ] coclass UserEventTimer { interface IUserEventTimer; }
// CLSID_NetCrawler
[ uuid(601ac3dc-786a-4eb0-bf40-ee3521e70bfb) ] coclass NetCrawler { interface INetCrawler; }
// CLSID_CDBurn
[ uuid(fbeb8a05-beee-4442-804e-409d6c4515e9) ] coclass CDBurn { interface ICDBurn; }
// CLSID_TaskbarList
[ uuid(56FDF344-FD6D-11d0-958A-006097C9A090) ] coclass TaskbarList { interface ITaskbarList; }
// For supporting HTML wizard extensions we provide this object, it implements the IWizardExtenion
// and allows the site to specific via an IPropertyBag an URL which should be displayed. The property
// bag is requested from the SID_WebWizardHost, and it used inturn to return parameter information
// back to the site (eg. any information that the displayed HTML would like to communicate).
// CLSID_WebWizardHost
[ uuid(c827f149-55c1-4d28-935e-57e47caed973) ] coclass WebWizardHost { interface IWebWizardExtension; }
// CLSID_PublishDropTarget
[ uuid(CC6EEFFB-43F6-46c5-9619-51D571967F7D) ] coclass PublishDropTarget { interface IDropTarget; }
// CLSID_PublishingWizard
[ uuid(6b33163c-76a5-4b6c-bf21-45de9cd503a1) ] coclass PublishingWizard { interface IPublishingWizard; }
cpp_quote("#define SID_PublishingWizard CLSID_PublishingWizard")
// CLSID_InternetPrintOrdering
[ uuid(add36aa8-751a-4579-a266-d66f5202ccbb) ] coclass InternetPrintOrdering { interface IDropTarget; }
// CLSID_FolderViewHost
[ uuid(20b1cb23-6968-4eb9-b7d4-a66d00d07cee) ] coclass FolderViewHost { interface IFolderViewHost; }
// CLSID_NamespaceWalker
[ uuid(72eb61e0-8672-4303-9175-f2e4c68b2e7c) ] coclass NamespaceWalker { interface INamespaceWalk; }
// CLSID_ImageRecompress
[ uuid(6e33091c-d2f8-4740-b55e-2e11d1477a2c) ] coclass ImageRecompress { interface IImageRecompress; }
// CLSID_TrayBandSiteService
[ uuid(F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934) ] coclass TrayBandSiteService { interface IBandSite; }
// CLSID_PassportWizard
[ uuid(58f1f272-9240-4f51-b6d4-fd63d1618591) ] coclass PassportWizard { interface IPassportWizard; }
};