// // 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 "docobj.idl"; import "shtypes.idl"; import "servprov.idl"; import "comcat.idl"; // for IEnumGUID import "propidl.idl"; import "prsht.idl"; import "msxml.idl"; import "wtypes.idl"; import "propsys.idl"; import "ObjectArray.idl"; import "StructuredQueryCondition.idl"; cpp_quote("#include ") cpp_quote("#ifndef SHSTDAPI") cpp_quote("#if defined(_SHELL32_)") cpp_quote("#define SHSTDAPI STDAPI") cpp_quote("#define SHSTDAPI_(type) STDAPI_(type)") cpp_quote("#else") cpp_quote("#define SHSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE") cpp_quote("#define SHSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE") cpp_quote("#endif") cpp_quote("#endif // SHSTDAPI") cpp_quote("") cpp_quote("//===========================================================================") cpp_quote("//") cpp_quote("// IContextMenu interface") cpp_quote("//") cpp_quote("// [OverView]") cpp_quote("//") cpp_quote("// The shell uses the IContextMenu interface in following three cases.") cpp_quote("//") cpp_quote("// case-1: The shell is loading context menu extensions.") cpp_quote("//") cpp_quote("// When the user clicks the right mouse button on an item within the shell's") cpp_quote("// name space (i.g., file, directory, server, work-group, etc.), it creates") cpp_quote("// the default context menu for its type, then loads context menu extensions") cpp_quote("// that are registered for that type (and its base type) so that they can") cpp_quote("// add extra menu items. Those context menu extensions are registered at") cpp_quote("// HKCR\{ProgID}\shellex\ContextMenuHandlers.") cpp_quote("//") cpp_quote("// case-2: The shell is retrieving a context menu of sub-folders in extended") cpp_quote("// name-space.") cpp_quote("//") cpp_quote("// When the explorer's name space is extended by name space extensions,") cpp_quote("// the shell calls their IShellFolder::GetUIObjectOf to get the IContextMenu") cpp_quote("// objects when it creates context menus for folders under those extended") cpp_quote("// name spaces.") cpp_quote("//") cpp_quote("// case-3: The shell is loading non-default drag and drop handler for directories.") cpp_quote("//") cpp_quote("// When the user performed a non-default drag and drop onto one of file") cpp_quote("// system folders (i.e., directories), it loads shell extensions that are") cpp_quote("// registered at HKCR\{ProgID}\DragDropHandlers.") cpp_quote("//") cpp_quote("//") cpp_quote("// [Member functions]") cpp_quote("//") cpp_quote("//") cpp_quote("// IContextMenu::QueryContextMenu") cpp_quote("//") cpp_quote("// This member function may insert one or more menuitems to the specified") cpp_quote("// menu (hmenu) at the specified location (indexMenu which is never be -1).") cpp_quote("// The IDs of those menuitem must be in the specified range (idCmdFirst and") cpp_quote("// idCmdLast). It returns the maximum menuitem ID offset (ushort) in the") cpp_quote("// 'code' field (low word) of the scode.") cpp_quote("//") cpp_quote("// The uFlags specify the context. It may have one or more of following") cpp_quote("// flags.") cpp_quote("//") cpp_quote("// CMF_DEFAULTONLY: This flag is passed if the user is invoking the default") cpp_quote("// action (typically by double-clicking, case 1 and 2 only). Context menu") cpp_quote("// extensions (case 1) should not add any menu items, and returns S_OK.") cpp_quote("//") cpp_quote("// CMF_VERBSONLY: The explorer passes this flag if it is constructing") cpp_quote("// a context menu for a short-cut object (case 1 and case 2 only). If this") cpp_quote("// flag is passed, it should not add any menu-items that is not appropriate") cpp_quote("// from a short-cut.") cpp_quote("// A good example is the Delete menuitem, which confuses the user") cpp_quote("// because it is not clear whether it deletes the link source item or the") cpp_quote("// link itself.") cpp_quote("//") cpp_quote("// CMF_EXPLORER: The explorer passes this flag if it has the left-side pane") cpp_quote("// (case 1 and 2 only). Context menu extensions should ignore this flag.") cpp_quote("//") cpp_quote("// High word (16-bit) are reserved for context specific communications") cpp_quote("// and the rest of flags (13-bit) are reserved by the system.") cpp_quote("//") cpp_quote("//") cpp_quote("// IContextMenu::InvokeCommand") cpp_quote("//") cpp_quote("// This member is called when the user has selected one of menuitems that") cpp_quote("// are inserted by previous QueryContextMenu member. In this case, the") cpp_quote("// LOWORD(lpici->lpVerb) contains the menuitem ID offset (menuitem ID -") cpp_quote("// idCmdFirst).") cpp_quote("//") cpp_quote("// This member function may also be called programmatically. In such a case,") cpp_quote("// lpici->lpVerb specifies the canonical name of the command to be invoked,") cpp_quote("// which is typically retrieved by GetCommandString member previously.") cpp_quote("//") cpp_quote("// Parameters in lpci:") cpp_quote("// cbSize -- Specifies the size of this structure (sizeof(*lpci))") cpp_quote("// hwnd -- Specifies the owner window for any message/dialog box.") cpp_quote("// fMask -- Specifies whether or not dwHotkey/hIcon paramter is valid.") cpp_quote("// lpVerb -- Specifies the command to be invoked.") cpp_quote("// lpParameters -- Parameters (optional)") cpp_quote("// lpDirectory -- Working directory (optional)") cpp_quote("// nShow -- Specifies the flag to be passed to ShowWindow (SW_*).") cpp_quote("// dwHotKey -- Hot key to be assigned to the app after invoked (optional).") cpp_quote("// hIcon -- Specifies the icon (optional).") cpp_quote("// hMonitor -- Specifies the default monitor (optional).") cpp_quote("//") cpp_quote("//") cpp_quote("// IContextMenu::GetCommandString") cpp_quote("//") cpp_quote("// This member function is called by the explorer either to get the") cpp_quote("// canonical (language independent) command name (uFlags == GCS_VERB) or") cpp_quote("// the help text ((uFlags & GCS_HELPTEXT) != 0) for the specified command.") cpp_quote("// The retrieved canonical string may be passed to its InvokeCommand") cpp_quote("// member function to invoke a command programmatically. The explorer") cpp_quote("// displays the help texts in its status bar; therefore, the length of") cpp_quote("// the help text should be reasonably short (<40 characters).") cpp_quote("//") cpp_quote("// Parameters:") cpp_quote("// idCmd -- Specifies menuitem ID offset (from idCmdFirst)") cpp_quote("// uFlags -- Either GCS_VERB or GCS_HELPTEXT") cpp_quote("// pwReserved -- Reserved (must pass NULL when calling, must ignore when called)") cpp_quote("// pszName -- Specifies the string buffer.") cpp_quote("// cchMax -- Specifies the size of the string buffer.") cpp_quote("//") cpp_quote("//===========================================================================") cpp_quote("") cpp_quote("// QueryContextMenu uFlags") cpp_quote("#define CMF_NORMAL 0x00000000") cpp_quote("#define CMF_DEFAULTONLY 0x00000001") cpp_quote("#define CMF_VERBSONLY 0x00000002") cpp_quote("#define CMF_EXPLORE 0x00000004") cpp_quote("#define CMF_NOVERBS 0x00000008") cpp_quote("#define CMF_CANRENAME 0x00000010") cpp_quote("#define CMF_NODEFAULT 0x00000020") cpp_quote("#if (NTDDI_VERSION < NTDDI_VISTA)") cpp_quote("#define CMF_INCLUDESTATIC 0x00000040") // deprecated - do not use cpp_quote("#endif") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define CMF_ITEMMENU 0x00000080") cpp_quote("#endif") cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100") // rarely used verbs cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define CMF_DISABLEDVERBS 0x00000200") cpp_quote("#endif") cpp_quote("#define CMF_ASYNCVERBSTATE 0x00000400") // the verb state can be evaluated asynchronously cpp_quote("#define CMF_OPTIMIZEFORINVOKE 0x00000800") // Context menu handlers that do not support invoking verb via canonical verb names (lpVerb) // can avoid the work in their QueryContextMenu implementation when this flag is present cpp_quote("#define CMF_SYNCCASCADEMENU 0x00001000") // Populate the cascade menu synchronously cpp_quote("#define CMF_DONOTPICKDEFAULT 0x00002000") // Tell the context menu to not pick default verb if none is explicitly specified cpp_quote("#define CMF_RESERVED 0xffff0000") // View specific cpp_quote("") cpp_quote("// GetCommandString uFlags") cpp_quote("#define GCS_VERBA 0x00000000 // canonical verb") cpp_quote("#define GCS_HELPTEXTA 0x00000001 // help text (for status bar)") cpp_quote("#define GCS_VALIDATEA 0x00000002 // validate command exists") cpp_quote("#define GCS_VERBW 0x00000004 // canonical verb (unicode)") cpp_quote("#define GCS_HELPTEXTW 0x00000005 // help text (unicode version)") cpp_quote("#define GCS_VALIDATEW 0x00000006 // validate command exists (unicode)") cpp_quote("#define GCS_VERBICONW 0x00000014 // icon string (unicode)") cpp_quote("#define GCS_UNICODE 0x00000004 // for bit testing - Unicode string") cpp_quote("") cpp_quote("#ifdef UNICODE") cpp_quote("#define GCS_VERB GCS_VERBW") cpp_quote("#define GCS_HELPTEXT GCS_HELPTEXTW") cpp_quote("#define GCS_VALIDATE GCS_VALIDATEW") cpp_quote("#else") cpp_quote("#define GCS_VERB GCS_VERBA") cpp_quote("#define GCS_HELPTEXT GCS_HELPTEXTA") cpp_quote("#define GCS_VALIDATE GCS_VALIDATEA") cpp_quote("#endif") cpp_quote("") cpp_quote("#define CMDSTR_NEWFOLDERA \"NewFolder\"") cpp_quote("#define CMDSTR_VIEWLISTA \"ViewList\"") cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"") cpp_quote("#define CMDSTR_NEWFOLDERW L\"NewFolder\"") cpp_quote("#define CMDSTR_VIEWLISTW L\"ViewList\"") cpp_quote("#define CMDSTR_VIEWDETAILSW L\"ViewDetails\"") cpp_quote("") cpp_quote("#ifdef UNICODE") cpp_quote("#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERW") cpp_quote("#define CMDSTR_VIEWLIST CMDSTR_VIEWLISTW") cpp_quote("#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSW") cpp_quote("#else") cpp_quote("#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERA") cpp_quote("#define CMDSTR_VIEWLIST CMDSTR_VIEWLISTA") cpp_quote("#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSA") cpp_quote("#endif") cpp_quote("") cpp_quote("#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY") cpp_quote("#define CMIC_MASK_ICON SEE_MASK_ICON") // not used cpp_quote("#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI") cpp_quote("#define CMIC_MASK_UNICODE SEE_MASK_UNICODE") cpp_quote("#define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE") cpp_quote("#if (NTDDI_VERSION < NTDDI_VISTA)") cpp_quote("#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME") cpp_quote("#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE") cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM") cpp_quote("#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define CMIC_MASK_NOASYNC SEE_MASK_NOASYNC") cpp_quote("#endif") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE501)") cpp_quote("#define CMIC_MASK_SHIFT_DOWN 0x10000000") cpp_quote("#define CMIC_MASK_CONTROL_DOWN 0x40000000") cpp_quote("#endif // _WIN32_IE_IE501") cpp_quote("#if (_WIN32_IE >= 0x0560)") cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE") cpp_quote("#define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS") cpp_quote("#endif // (_WIN32_IE >= 0x560)") cpp_quote("") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE40)") cpp_quote("#define CMIC_MASK_PTINVOKE 0x20000000") cpp_quote("#endif // _WIN32_IE_IE40") cpp_quote("") cpp_quote("#include ") cpp_quote("") //NOTE: When SEE_MASK_HMONITOR is set, hIcon is treated as hMonitor typedef struct _CMINVOKECOMMANDINFO { DWORD cbSize; // sizeof(CMINVOKECOMMANDINFO) DWORD fMask; // any combination of CMIC_MASK_* HWND hwnd; // might be NULL (indicating no owner window) LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset) LPCSTR lpParameters; // might be NULL (indicating no parameter) LPCSTR lpDirectory; // might be NULL (indicating no specific directory) int nShow; // one of SW_ values for ShowWindow() API DWORD dwHotKey; HANDLE hIcon; } CMINVOKECOMMANDINFO; typedef CMINVOKECOMMANDINFO *LPCMINVOKECOMMANDINFO; typedef const CMINVOKECOMMANDINFO *PCCMINVOKECOMMANDINFO; cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE40)") typedef struct _CMINVOKECOMMANDINFOEX { DWORD cbSize; // must be sizeof(CMINVOKECOMMANDINFOEX) DWORD fMask; // any combination of CMIC_MASK_* HWND hwnd; // might be NULL (indicating no owner window) LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset) LPCSTR lpParameters; // might be NULL (indicating no parameter) LPCSTR lpDirectory; // might be NULL (indicating no specific directory) int nShow; // one of SW_ values for ShowWindow() API DWORD dwHotKey; HANDLE hIcon; LPCSTR lpTitle; // For CreateProcess-StartupInfo.lpTitle LPCWSTR lpVerbW; // Unicode verb (for those who can use it) LPCWSTR lpParametersW; // Unicode parameters (for those who can use it) LPCWSTR lpDirectoryW; // Unicode directory (for those who can use it) LPCWSTR lpTitleW; // Unicode title (for those who can use it) POINT ptInvoke; // Point where it's invoked } CMINVOKECOMMANDINFOEX; cpp_quote("#else") cpp_quote("typedef struct _PRE_IE4_CMINVOKECOMMANDINFOEX") cpp_quote("{") cpp_quote(" DWORD cbSize; // must be sizeof(CMINVOKECOMMANDINFOEX)") cpp_quote(" DWORD fMask; // any combination of CMIC_MASK_*") cpp_quote(" HWND hwnd; // might be NULL (indicating no owner window)") cpp_quote(" LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset)") cpp_quote(" LPCSTR lpParameters; // might be NULL (indicating no parameter)") cpp_quote(" LPCSTR lpDirectory; // might be NULL (indicating no specific directory)") cpp_quote(" int nShow; // one of SW_ values for ShowWindow() API") cpp_quote(" DWORD dwHotKey;") cpp_quote(" HANDLE hIcon;") cpp_quote(" LPCSTR lpTitle; // For CreateProcess-StartupInfo.lpTitle") cpp_quote(" LPCWSTR lpVerbW; // Unicode verb (for those who can use it)") cpp_quote(" LPCWSTR lpParametersW; // Unicode parameters (for those who can use it)") cpp_quote(" LPCWSTR lpDirectoryW; // Unicode directory (for those who can use it)") cpp_quote(" LPCWSTR lpTitleW; // Unicode title (for those who can use it)") cpp_quote("} CMINVOKECOMMANDINFOEX;") cpp_quote("#endif // _WIN32_IE_IE40") typedef CMINVOKECOMMANDINFOEX *LPCMINVOKECOMMANDINFOEX; typedef const CMINVOKECOMMANDINFOEX *PCCMINVOKECOMMANDINFOEX; cpp_quote("#include ") // IContextMenu [ local, uuid(000214e4-0000-0000-c000-000000000046), // IID_IContextMenu pointer_default(unique), ] interface IContextMenu : IUnknown { HRESULT QueryContextMenu( [in, annotation("__in")] HMENU hmenu, [in, annotation("__in")] UINT indexMenu, [in, annotation("__in")] UINT idCmdFirst, [in, annotation("__in")] UINT idCmdLast, [in, annotation("__in")] UINT uFlags); HRESULT InvokeCommand([in, annotation("__in")] CMINVOKECOMMANDINFO *pici); HRESULT GetCommandString( [in, annotation("__in")] UINT_PTR idCmd, [in, annotation("__in")] UINT uType, [in, annotation("__reserved")] UINT * pReserved, [out, annotation("__out_awcount(!(uType & GCS_UNICODE), cchMax)")] LPSTR pszName, [in, annotation("__in")] UINT cchMax); } typedef IContextMenu *LPCONTEXTMENU; // IContextMenu2 [ local, uuid(000214f4-0000-0000-c000-000000000046), // IID_IContextMenu2 pointer_default(unique), ] interface IContextMenu2 : IContextMenu { HRESULT HandleMenuMsg( [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] LPARAM lParam); } typedef IContextMenu2 * LPCONTEXTMENU2; // IContextMenu3 [ local, uuid(BCFCE0A0-EC17-11d0-8D10-00A0C90F2719), // IID_IContextMenu3 pointer_default(unique), ] interface IContextMenu3 : IContextMenu2 { HRESULT HandleMenuMsg2( [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] LPARAM lParam, [out, annotation("__out_opt")] LRESULT* plResult); } typedef IContextMenu3 * LPCONTEXTMENU3; // IExecuteCommand [ uuid(7F9185B0-CB92-43c5-80A9-92277A4F7B54), object, pointer_default(unique) ] interface IExecuteCommand : IUnknown { // key state values MK_CONTROL & MK_SHIFT HRESULT SetKeyState([in] DWORD grfKeyState); // for context menu invokes this comes from CMINVOKECOMMANDINFO.lpParameters HRESULT SetParameters([in, string] LPCWSTR pszParameters); // default Position = center of default monitor HRESULT SetPosition([in] POINT pt); // default = SW_NORMAL HRESULT SetShowWindow([in] int nShow); // default = FALSE HRESULT SetNoShowUI([in] BOOL fNoShowUI); // default Directory = GetCurrentDirectory() HRESULT SetDirectory([in, string] LPCWSTR pszDirectory); // this is where the work happens! HRESULT Execute(); }; // 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] PCIDLIST_ABSOLUTE pidl); } typedef IPersistFolder *LPPERSISTFOLDER; cpp_quote("#if (_WIN32_IE >= 0x0400)") // IRunnableTask // // object that implement IRunnable must be *free threaded*. It is used for creating // objects to be asynchronously executed on a background thread by a task // scheduler. The task scheduler is free to call any method on the // IRunnable task on any thread as it sees fit (i.e. a task scheduler is not // guaranteed to only have a single background worker thread, nor is it // restricted to not call the IRunnableTask methods on the original queuing // thread). // // Note: // // The Run() member is called by the scheduler to start the task executing. // If the task supports being suspended and has been signalled to do so // (via receiving a call from the scheduler to Suspend()), it should return // from Run() with a value of E_PENDING. The task will then be held and // resumed by the scheduler at a later time by receiving a call to Resume() // (assuming it's not destroyed for some reason first). // IRunnableTask convenient state values cpp_quote("#define IRTIR_TASK_NOT_RUNNING 0") cpp_quote("#define IRTIR_TASK_RUNNING 1") cpp_quote("#define IRTIR_TASK_SUSPENDED 2") cpp_quote("#define IRTIR_TASK_PENDING 3") cpp_quote("#define IRTIR_TASK_FINISHED 4") [ uuid(85788d00-6807-11d0-b810-00c04fd706ec), // IID_IRunnableTask object, local ] interface IRunnableTask : IUnknown { HRESULT Run(); HRESULT Kill([in, annotation("__in")] BOOL bWait); HRESULT Suspend(); HRESULT Resume(); ULONG IsRunning(); } // IShellTaskScheduler::AddTask()/RemoveTasks()/CountTasks() default arguments cpp_quote("#define TOID_NULL GUID_NULL") cpp_quote("#define ITSAT_DEFAULT_LPARAM ((DWORD_PTR)-1)") // IShellTaskScheduler::AddTask() priorities // This depends on the cooperation of tasks currently under execution. // New tasks will be inserted in the queue in priority order. If a task // of a low priority is currently under execution when a higher priority // task is added, the scheduler will attempt to suspend the task // currently under execution. It will be resumed when the other tasks // have been completed. cpp_quote("#define ITSAT_DEFAULT_PRIORITY 0x10000000") cpp_quote("#define ITSAT_MAX_PRIORITY 0x7fffffff") cpp_quote("#define ITSAT_MIN_PRIORITY 0x00000000") // IShellTaskScheduler::Status() flags cpp_quote("#define ITSSFLAG_COMPLETE_ON_DESTROY 0x0000 // wait for the current task to complete before deleting the scheduler") cpp_quote("#define ITSSFLAG_KILL_ON_DESTROY 0x0001 // kill the current task (if there is one) when the task scheduler is deleted") cpp_quote("#define ITSSFLAG_FLAGS_MASK 0x0003") // IShellTaskScheduler::Status() timeouts cpp_quote("#define ITSS_THREAD_DESTROY_DEFAULT_TIMEOUT (10*1000) // default milliseconds until a sleeping worker thread is released") cpp_quote("#define ITSS_THREAD_TERMINATE_TIMEOUT (INFINITE) // set sleeping worker threads to never be released") cpp_quote("#define ITSS_THREAD_TIMEOUT_NO_CHANGE (INFINITE - 1) // no change to the thread timeout") // interface for interacting with and controlling a task scheduler. // This interface is free-threaded (since queued tasks can // interact with the scheduler as well as the main execution // thread on which the task scheduler was created). [ uuid(6CCB7BE0-6807-11d0-B810-00C04FD706EC), object, local ] interface IShellTaskScheduler : IUnknown { // Adds Tasks to the scheduler's background queue. The TASKOWNERID allow particular types // of tasks to be grouped so that they can be counted or removed. The lParam allows the task // to be associated with a particular item (for example an item in a listview). Thus, all // tasks owned by a particular item can be accessed by passing a non default value for this // parameter (i.e. to RemoveTasks()). HRESULT AddTask( [in, annotation("__in")] IRunnableTask *prt, [in, annotation("__in")] REFTASKOWNERID rtoid, [in, annotation("__in")] DWORD_PTR lParam, [in, annotation("__in")] DWORD dwPriority); // Removes tasks from the scheduler's queue. These can be sepcified in terms of their TASKOWNERID // or their LPARAM, or both, or neither (TOID_NULL && ITSAT_DEFAULT_LPARAM results in all tasks being // removed). If a task that matches is currently running and ITaskScheduler::Status() has been // passeed ITSSFLAG_KILL_ON_DESTROY then the scheduler will attempt to kill the current task. The // fWaitIfRunning parameter is then passed to IRunnableTask::Kill(). HRESULT RemoveTasks( [in, annotation("__in")] REFTASKOWNERID rtoid, [in, annotation("__in")] DWORD_PTR lParam, [in, annotation("__in")] BOOL bWaitIfRunning); // returns the count of tasks in the queue depending upon the TASKOWNERID and the LPARAM passed. // pass TOID_NULL to count all tasks in the queue UINT CountTasks([in, annotation("__in")] REFTASKOWNERID rtoid); // This sets the ReleaseStatus for the current task and the background thread timeout. When // ITaskScheduler::RemoveTasks() is called and there is a task currently running that matches // ITSSFLAG_COMPLETE_ON_DESTROY will cause TRUE to be passed to the task's IRunnableTask::Kill(). // The dwThreadTimeout parameter if not set to the default will cause the background thread to // die if no new tasks have been added to the queue in the timeout period. The Thread will be // recreated when the next new task is added. HRESULT Status( [in, annotation("__in")] DWORD dwReleaseStatus, [in, annotation("__in")] DWORD dwThreadTimeout); }; cpp_quote("#define SID_ShellTaskScheduler IID_IShellTaskScheduler") [ object, uuid("C7B236CE-EE80-11D0-985F-006008059382"), pointer_default(unique), local ] interface IQueryCodePage : IUnknown { HRESULT GetCodePage([out, annotation("__out")] UINT *puiCodePage); HRESULT SetCodePage([in, annotation("__in")] UINT uiCodePage); } ; // IPersistFolder2 [ object, uuid(1AC3D9F0-175C-11d1-95BE-00609797EA4F), // IID_IPersistFolder2 pointer_default(unique), ] interface IPersistFolder2 : IPersistFolder { HRESULT GetCurFolder([out] PIDLIST_ABSOLUTE *ppidl); } cpp_quote("#endif") cpp_quote("#if (_WIN32_IE >= 0x0500)") cpp_quote("#define CSIDL_FLAG_PFTI_TRACKTARGET CSIDL_FLAG_DONT_VERIFY") // DESCRIPTION: PERSIST_FOLDER_TARGET_INFO // This stucture is used for Folder Shortcuts which allow the shell to // have a file system folder act like another area in the name space. // One of pidlTargetFolder, szTargetParsingName, or csidl needs to // specify the destination name space. // // pidlTargetFolder: This is a full pidl to the target folder. Can be NULL in the IPersistFolder3::InitializeEx() // call but not in the GetFolderTargetInfo() return structure. // szTargetParsingName: Empty string if not specified. Ortherwise, it is the parsible name // to the target. This name can be parsed by IShellFolder:: // ParsedName() from the desktop. // szNetworkProvider: Can be an empty string. If not empty, it specifies the type of network // provider that will be used when binding to the target. This is used // for performance optimizations for the WNet APIs. // dwAttributes: -1 if not known. These are the SFGAO_ flags for IShellFolder::GetAttributesOf() // csidl: This is -1 if it's not used. This can be used instead of pidlTargetFolder or // szTargetParsingName to indicate the TargetFolder. See the list of CSIDL_ folders // below. CSIDL_FLAG_PFTI_TRACKTARGET means that the IShellFolder's target folder // should change if the user changes the target of the underlying CSIDL value. // You can also pass CSIDL_FLAG_CREATE to indicate that the target folder // should be created if it does not exist. No other CSIDL_FLAG_* values are supported. cpp_quote("#include ") #ifndef MAX_PATH #define MAX_PATH 260 #endif typedef struct _PERSIST_FOLDER_TARGET_INFO { PIDLIST_ABSOLUTE pidlTargetFolder; // pidl for the folder we want to intiailize WCHAR szTargetParsingName[MAX_PATH]; // optional parsing name for the target WCHAR szNetworkProvider[MAX_PATH]; // optional network provider DWORD dwAttributes; // optional FILE_ATTRIBUTES_ flags (-1 if not used) int csidl; // optional folder index (SHGetFolderPath()) -1 if not used } PERSIST_FOLDER_TARGET_INFO; cpp_quote("#include ") // DESCRIPTION: IPersistFolder3 // This interface is implemented by an IShellFolder object that wants non-default // handling of Folder Shortcuts. In general, shell name space extensions should use // pidlRoot (the alias pidl) as their location in the name space and pass it to public // APIs, such as ShellExecute(). The one exception is that pidlTarget should be used // when sending ChangeNotifies or registering to listen for change notifies // (see SFVM_GETNOTIFY). // // InitializeEx: This method initializes an IShellFolder and specifies where // it is rooted in the name space. // pbc: May be NULL. // pidlRoot: This is the same parameter as IPersistFolder::Initialize(). Caller allocates // and frees this parameter. // ppfti: May be NULL, in which case this is the same as a call to IPersistFolder::Initialize(). // Otherwise this is a Folder Shortcut and this structure specifies the target // folder and it's attributes. // GetFolderTargetInfo: This is used by the caller to find information about // the folder shortcut. This structure may not be initialized by the caller, // so the callee needs to initialize every member. The callee allocates // pidlTargetFolder and the caller will free it. Filling in pidlTargetFolder is // ALWAYS required. [ object, uuid(CEF04FDF-FE72-11d2-87A5-00C04F6837CF), // IID_IPersistFolder3 pointer_default(unique), ] interface IPersistFolder3 : IPersistFolder2 { HRESULT InitializeEx( [in, unique] IBindCtx *pbc, [in] PCIDLIST_ABSOLUTE pidlRoot, [in, unique] const PERSIST_FOLDER_TARGET_INFO *ppfti); HRESULT GetFolderTargetInfo([out] PERSIST_FOLDER_TARGET_INFO *ppfti); } cpp_quote("#endif") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP) || (_WIN32_IE >= _WIN32_IE_IE70)") [ 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] PCIDLIST_ABSOLUTE pidl); HRESULT GetIDList([out] PIDLIST_ABSOLUTE *ppidl); } cpp_quote("#endif // NTDDI_WINXP|| (_WIN32_IE >= _WIN32_IE_IE70)") [ uuid(000214F2-0000-0000-C000-000000000046), object, pointer_default(unique) ] interface IEnumIDList : IUnknown { [local] HRESULT Next( [in, annotation("__in")] ULONG celt, [out, size_is(celt), length_is(*pceltFetched), annotation("__out_ecount_part(celt, *pceltFetched)")] PITEMID_CHILD *rgelt, [out, annotation("__out_opt __deref_out_range(0, celt)")] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] PITEMID_CHILD *rgelt, [out] ULONG* pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumIDList **ppenum); } typedef IEnumIDList *LPENUMIDLIST; [ uuid(d0191542-7954-4908-bc06-b2360bbe45ba), object, pointer_default(unique) ] interface IEnumFullIDList : IUnknown { [local] HRESULT Next( [in, annotation("__in")] ULONG celt, [out, size_is(celt), length_is(*pceltFetched), annotation("__out_ecount_part(celt, *pceltFetched)")] PIDLIST_ABSOLUTE *rgelt, [out, annotation("__out_opt __deref_out_range(0, celt)")] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] PIDLIST_ABSOLUTE *rgelt, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumFullIDList **ppenum); } // IShellFolder::GetDisplayNameOf/SetNameOf uFlags [v1_enum] enum _SHGDNF { SHGDN_NORMAL = 0x0000, // default (display purpose) SHGDN_INFOLDER = 0x0001, // displayed under a folder (relative) SHGDN_FOREDITING = 0x1000, // for in-place editing SHGDN_FORADDRESSBAR = 0x4000, // UI friendly parsing name (remove ugly stuff) SHGDN_FORPARSING = 0x8000, // parsing name for ParseDisplayName() }; typedef DWORD SHGDNF; // IShellFolder::EnumObjects grfFlags bits [v1_enum] enum _SHCONTF { SHCONTF_CHECKING_FOR_CHILDREN = 0x00010, // hint that client is checking if (what) child items the folder contains - not all details (e.g. short file name) are needed SHCONTF_FOLDERS = 0x00020, // only want folders enumerated (SFGAO_FOLDER) SHCONTF_NONFOLDERS = 0x00040, // include non folders (items without SFGAO_FOLDER) SHCONTF_INCLUDEHIDDEN = 0x00080, // show items normally hidden (items with SFGAO_HIDDEN) SHCONTF_INIT_ON_FIRST_NEXT = 0x00100, // DEFUNCT - this is always assumed SHCONTF_NETPRINTERSRCH = 0x00200, // hint that client is looking for printers SHCONTF_SHAREABLE = 0x00400, // hint that client is looking sharable resources (local drives or hidden root shares) SHCONTF_STORAGE = 0x00800, // include all items with accessible storage and their ancestors including hidden items SHCONTF_NAVIGATION_ENUM = 0x01000, // mark child folders to indicate that they should provide a "navigation" enumeration by default SHCONTF_FASTITEMS = 0x02000, // hint that client is only interested in items that can be enumerated quickly SHCONTF_FLATLIST = 0x04000, // enumerate items as flat list even if folder is stacked SHCONTF_ENABLE_ASYNC = 0x08000, // inform enumerator that client is listening for change notifications so enumerator does not need to be complete, items can be reported via change notifications SHCONTF_INCLUDESUPERHIDDEN = 0x10000, // show system items that are hidden }; typedef DWORD SHCONTF; // IShellFolder::CompareIDs lParam flags // *these should only be used if the folder supports IShellFolder2* // // SHCIDS_ALLFIELDS // // only be used in conjunction with SHCIDS_CANONCALONLY or column 0. // This flag requests that the folder test for *pidl identity*, that is // “are these pidls logically the same”. This implies that cached fields // in the pidl that would distinguish them should be tested. // Without this flag, you are comparing the *object* s the pidls refer to. // // SHCIDS_CANONICALONLY // // This indicates that the sort should be *the most efficient sort possible*, the implication // being that the result will not be displayed to the UI: the SHCIDS_COLUMNMASK portion // of the lParam can be ignored. (Before we had SHCIDS_CANONICALONLY // we assumed column 0 was the "efficient" sort column.) // // 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 cpp_quote("#define SFGAO_SYSTEM 0x00001000L // System object") 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 (may be slow)") cpp_quote("#define SFGAO_CONTENTSMASK 0x80000000L") cpp_quote("#define SFGAO_VALIDATE 0x01000000L // Invalidate cached information (may be slow)") 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 (should be hidden)") cpp_quote("#define SFGAO_NEWCONTENT 0x00200000L // Should show bold in explorer tree") cpp_quote("#define SFGAO_CANMONIKER 0x00400000L // Obsolete") cpp_quote("#define SFGAO_HASSTORAGE 0x00400000L // Obsolete") 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") cpp_quote("#define SFGAO_PKEYSFGAOMASK 0x81044000L // Attributes that are masked out for PKEY_SFGAOFlags because they are considered to cause slow calculations or lack context (SFGAO_VALIDATE | SFGAO_ISSLOW | SFGAO_HASSUBFOLDER and others)") typedef ULONG SFGAOF; // passed to ISF::BindToObject() via IBindCtx::RegisterObjectParam() // * no interface support required on object param // If this param is passed to CFolderShortcut, IShellLink::Resolve will be invoked on the shortcut // during the bind operation. This will result in slowness for shortcuts pointing to network paths. cpp_quote("#define STR_BIND_FORCE_FOLDER_SHORTCUT_RESOLVE L\"Force Folder Shortcut Resolve\"") // passed to ISF::BindToObject() via IBindCtx::RegisterObjectParam() // * no interface support required on object param // If this param is passed to CFSFolder, CFSFolder::_CheckDriveRestriction will not check to see // if the drive it is on is restricted by SHRestriction(REST_NOVIEWONDRIVE) when someone tries // to CreateViewObject() on it. This is utilized when this folder is being used as a CD burning staging area // folder, and is not meant to be restricted because of this policy being applied to the drive that // the staging area folder happens to reside on. This policy is NOT a security policy, and thus this // is not a security breach. This flag is only sent by the CD folder when creating the IShellFolder for // the staging area part of the merged folder view, and thus this parameter's existence will not prevent // the policy from being implemented correctly when the CD drive itself has the group policy applied to it. cpp_quote("#define STR_AVOID_DRIVE_RESTRICTION_POLICY L\"Avoid Drive Restriction Policy\"") // passed to ISF::BindToObject() via IBindCtx::RegisterObjectParam() // * no interface support required on object param // If this param is passed to CFSFolder, CFSFolder::_CheckDriveRestriction will not check to see // if the drive it is on is restricted by SHRestriction(REST_NOVIEWONDRIVE) when someone tries // to CreateViewObject() on it. This is utilized when this folder is being used as a CD burning staging area // folder, and is not meant to be restricted because of this policy being applied to the drive that // the staging area folder happens to reside on. This policy is NOT a security policy, and thus this // is not a security breach. This flag is only sent by the CD folder when creating the IShellFolder for // the staging area part of the merged folder view, and thus this parameter's existence will not prevent // the policy from being implemented correctly when the CD drive itself has the group policy applied to it. cpp_quote("#define STR_AVOID_DRIVE_RESTRICTION_POLICY L\"Avoid Drive Restriction Policy\"") // 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\"") // passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam() // to disable the cache of network resources when parsing a name. The cache is still // populated with the results of the parse, however we skip the initial query. cpp_quote("#define STR_PARSE_SKIP_NET_CACHE L\"Skip Net Resource Cache\"") // * no interface support required on object param // instructing to allow shell: parsing to non-SFGAO_FOLDER objects. // Safe to set this for strings an end-user types, but do not set this in any binding // path where untrusted callers control the contents of the string cpp_quote("#define STR_PARSE_SHELL_PROTOCOL_TO_FILE_OBJECTS L\"Parse Shell Protocol To File Objects\"") cpp_quote("#if (_WIN32_IE >= 0x0700)") // passed to IPersistFolder3->Initialize() via IBindCtx::RegisterObjectParam() // Instructs the folder to track the location of the CLSID. Currently dbfolder uses this to track the pivot of the // regitem folder that aggregates it. cpp_quote("#define STR_TRACK_CLSID L\"Track the CLSID\"") // passed to IPersistHistory::LoadHistory() to enable loading the history from a stream // for an internal navigaton. An internal navigation is a navigation within the same view. cpp_quote("#define STR_INTERNAL_NAVIGATE L\"Internal Navigation\"") // used to passed parsed properties to IShellFolder::ParseDisplayName for a delegate namespace. // the namespace can use this instead of attempting to parse the name itself cpp_quote("#define STR_PARSE_PROPERTYSTORE L\"DelegateNamedProperties\"") // passed to IShellFolder::ParseDisplayName() via IBindCtx::RegisterObjectParam() // instructing to not fail parsing filenames with invalid characters. // Meaningful only in conjunction with STR_FILE_SYS_BIND_DATA // * no interface support required on object param cpp_quote("#define STR_NO_VALIDATE_FILENAME_CHARS L\"NoValidateFilenameChars\"") // passed to ISF::BindToObject via IBindCtx::RegisterObjectParam() // registered object must either implement ICreateObject or ISafeCreateObject cpp_quote("#define STR_BIND_DELEGATE_CREATE_OBJECT L\"Delegate Object Creation\"") cpp_quote("#define STR_PARSE_ALLOW_INTERNET_SHELL_FOLDERS L\"Allow binding to Internet shell folder handlers and negate STR_PARSE_PREFER_WEB_BROWSING\"") cpp_quote("#define STR_PARSE_PREFER_WEB_BROWSING L\"Do not bind to Internet shell folder handlers\"") // passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam() // Instructs folders that manipulate network paths to show the network diagnostics UI when they // encounter diagnosable failures. If diagnosis succeeds, then the folder will try to parse the // path again. If parsing fails even after diagnosis, an appropriate error value will be returned. // * no interface support required on object param cpp_quote("#define STR_PARSE_SHOW_NET_DIAGNOSTICS_UI L\"Show network diagnostics UI\"") // deprecated cpp_quote("#define STR_PARSE_DONT_REQUIRE_VALIDATED_URLS L\"Do not require validated URLs\"") // This should be used when STR_PARSE_PREFER_FOLDER_BROWSING is included in the BindCtx // and the client desires the Internet shell folder handlers to generate an IDList for any valid URL // if a DAV-type folder cannot be created for the given URL. Specifically used by the common dialog // to support opening files on the internet. // This does not ensure that the URL actually exists. It only checks the syntax of the URL and // that it has a registered protocol handler. // * no interface support required on object param cpp_quote("#define STR_INTERNETFOLDER_PARSE_ONLY_URLMON_BINDABLE L\"Validate URL\"") cpp_quote("#endif // _WIN32_IE >= 0x0700") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") // Passed to IShellFolder::ParseDisplayName along with STR_FILE_SYS_BIND_DATA. This forces simple // parsing while also probing for desktop.ini files along the path to get a localized name string // if there's any. The advantage is not probing for folders along the path. A folder might be a // server or a share, so it may be very expensive. On the other hand, desktop.inis are cached in // at least some locations, so it will be as cheap or cheaper than probling for folders attribs and // then probing for desktop.ini if hte folder is read only. cpp_quote("#define STR_BIND_FOLDERS_READ_ONLY L\"Folders As Read Only\"") // Passed to IShellFolder::ParseDisplayName with an FOLDER_ENUM_MODE value to control // the enumeration mode of the parsed item. The FOLDER_ENUM_MODE is passed in the bind // context via an object that implements IObjectWithFolderEnumMode. // // Items with different enumeration modes compare canonically (SHCIDS_CANONICALONLY) different // because they enumerate different sets of items. // // If an item doesn't support the enumeration mode value (because it isn't a folder or it doesn't // provide the enumeration mode) then it is created in the default enumeration mode. cpp_quote("#define STR_BIND_FOLDER_ENUM_MODE L\"Folder Enum Mode\"") typedef [v1_enum] enum FOLDER_ENUM_MODE { FEM_VIEWRESULT = 0, // main enumeration mode. default enumeration for a folder view, etc. FEM_NAVIGATION = 1, // alternate enumeration mode for navigating folder's content. default enumeration for a navigation pane, etc. } FOLDER_ENUM_MODE; [ uuid(6a9d9026-0e6e-464c-b000-42ecc07de673), object, pointer_default(unique) ] interface IObjectWithFolderEnumMode : IUnknown { HRESULT SetMode([in] FOLDER_ENUM_MODE feMode); HRESULT GetMode([out] FOLDER_ENUM_MODE *pfeMode); } // Passed to IShellFolder::ParseDisplayName // The IDList returned should be bound to the provided Progid's association handler. cpp_quote("#define STR_PARSE_WITH_EXPLICIT_PROGID L\"ExplicitProgid\"") // pass to IShellFolder::ParseDisplayName // The IDList returned should be bound to the provided Application's association handler. cpp_quote("#define STR_PARSE_WITH_EXPLICIT_ASSOCAPP L\"ExplicitAssociationApp\"") // returned from IShellFolder::ParseDisplayName // The returned IDList was bound to the Progid specified with STR_PARSE_WITH_EXPLICIT_PROGID or the application specified // with STR_PARSE_WITH_EXPLICIT_ASSOCAPP. When absent, the Progid or Application was not bound into the IDList. cpp_quote("#define STR_PARSE_EXPLICIT_ASSOCIATION_SUCCESSFUL L\"ExplicitAssociationSuccessful\"") // IShellFolder IBindCtx parameter: "ParseAndCreateItem" // // The IUnknown for this is accessed through IBindCtx::RegisterObjectParam/GetObjectParam. // // Data sources should support this bind context parameter in their IShellFolder::ParseDisplayName // implementations, in order to optimize the behavior of SHCreateItemFromParsingName(). Normally, // SHCreateItemFromParsingName must perform two binds to the name that is parsed: one to parse via // IShellFolder::ParseDisplayName(), and a subsequent bind to create the ShellItem. // Supporting this bind context parameter in the data source avoids the second bind. It does so // because the first bind (during ParseDisplayName) will create the ShellItem at the same time and // stash it away via IParseAndCreateItem::SetItem. SHCreateItemFromParsingName() then uses that ShellItem // instead of creating one via SHCreateItemFromIDList(). // // This parameter applies to the last element of the name that is parsed (c:\foo\bar.txt, // data applies to bar.txt). cpp_quote("#define STR_PARSE_AND_CREATE_ITEM L\"ParseAndCreateItem\"") interface IShellItem; [ object, uuid(67efed0e-e827-4408-b493-78f3982b685c), pointer_default(unique), local ] interface IParseAndCreateItem : IUnknown { HRESULT SetItem([in] IShellItem *psi); HRESULT GetItem([in] REFIID riid, [out, iid_is(riid)] void **ppv); // Returns IShellItem }; // IShellFolder IBindCtx parameter: "ItemCacheContext" // // The IUnknown for this is accessed through IBindCtx::RegisterObjectParam/GetObjectParam. // The implementation should be a separate BindContext object. // // Data sources should support this bind context parameter in their IShellFolder::ParseDisplayName // and IPersistFolder3::InitializeEx implementations, in order to cache expensive // helper objects that can live across instantiations of shell items (instead of re-creating these // internal objects each time a shell item is created). // // A caller must opt-in to this behavior by providing this bind context parameter when calling // SHCreateItemFromParsingName(), to optimize the behavior of binding to multiple parsing // names in succession. The lifetime of this object should span across multiple instances // of shell items and their individual bind contexts. cpp_quote("#define STR_ITEM_CACHE_CONTEXT L\"ItemCacheContext\"") cpp_quote("#endif // NTDDI_VERSION >= NTDDI_WIN7") interface IShellFolder; [ uuid(000214E6-0000-0000-C000-000000000046), object, pointer_default(unique) ] interface IShellFolder : IUnknown { midl_pragma warning (disable: 2495) // annotation is allowed on local interface and local methods only HRESULT ParseDisplayName( [in, unique] HWND hwnd, [in, unique] IBindCtx *pbc, [in, string] LPWSTR pszDisplayName, [in, out, unique, annotation("__reserved")] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes); midl_pragma warning (default: 2495) HRESULT EnumObjects( [in, unique] HWND hwnd, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList); // returns an instance of a sub-folder which is specified by the IDList (pidl). // IShellFolder or derived interfaces HRESULT BindToObject( [in] PCUIDLIST_RELATIVE pidl, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // produces the same result as BindToObject() HRESULT BindToStorage( [in] PCUIDLIST_RELATIVE pidl, [in, unique] IBindCtx *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. // use the macro ResultFromShort() to extract the result comparison // it deals with the casting and type conversion issues for you HRESULT CompareIDs( [in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE 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. // returns IShellView derived interface HRESULT CreateViewObject( [in, unique] 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), unique] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF * rgfInOut); midl_pragma warning (disable: 2495) // annotation is allowed on local interface and local methods only // 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 // and many other interfaces HRESULT GetUIObjectOf( [in, unique] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl), unique] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique, annotation("__reserved")] UINT * rgfReserved, [out, iid_is(riid)] void **ppv); midl_pragma warning (default: 2495) // 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. // use the helper APIS StrRetToStr() or StrRetToBuf() to deal with the different // forms of the STRRET structure HRESULT GetDisplayNameOf( [in, unique] PCUITEMID_CHILD 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. [local] HRESULT SetNameOf( [in, unique, annotation("__in_opt")] HWND hwnd, [in, annotation("__in")] PCUITEMID_CHILD pidl, [in, string, annotation("__in")] LPCWSTR pszName, [in, annotation("__in")] SHGDNF uFlags, [out, annotation("__deref_opt_out")] PITEMID_CHILD *ppidlOut); [call_as(SetNameOf)] HRESULT RemoteSetNameOf( [in, unique] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCWSTR pszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut); } typedef IShellFolder * LPSHELLFOLDER; typedef struct EXTRASEARCH { GUID guidSearch; WCHAR wszFriendlyName[80]; WCHAR wszUrl[2084]; } EXTRASEARCH, *LPEXTRASEARCH; [ 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); } typedef IEnumExtraSearch *LPENUMEXTRASEARCH; // IShellFolder2::GetDefaultColumnState values [ 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); // PCUITEMID_CHILD should have been annotated as [in]. // Changing the annotation will break compatibility, but GetDetailsEx should never be called with a null pidl. HRESULT GetDetailsEx( [in, unique] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv); HRESULT GetDetailsOf( [in, unique] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd); HRESULT MapColumnToSCID( [in] UINT iColumn, [out] SHCOLUMNID *pscid); } // 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; typedef [v1_enum] enum FOLDERFLAGS { // XP flags FWF_NONE = 0x00000000, FWF_AUTOARRANGE = 0x00000001, FWF_ABBREVIATEDNAMES = 0x00000002, // not supported FWF_SNAPTOGRID = 0x00000004, FWF_OWNERDATA = 0x00000008, // not supported FWF_BESTFITWINDOW = 0x00000010, FWF_DESKTOP = 0x00000020, // implies NOCLIENTEDGE/NOSCROLL FWF_SINGLESEL = 0x00000040, FWF_NOSUBFOLDERS = 0x00000080, FWF_TRANSPARENT = 0x00000100, FWF_NOCLIENTEDGE = 0x00000200, // not supported, this is always assumed to be true FWF_NOSCROLL = 0x00000400, FWF_ALIGNLEFT = 0x00000800, FWF_NOICONS = 0x00001000, FWF_SHOWSELALWAYS = 0x00002000, FWF_NOVISIBLE = 0x00004000, FWF_SINGLECLICKACTIVATE = 0x00008000, // not supported FWF_NOWEBVIEW = 0x00010000, // not supported FWF_HIDEFILENAMES = 0x00020000, FWF_CHECKSELECT = 0x00040000, // check boxes with 2 modes { unchecked, SVSI_CHECK } // Vista Flags FWF_NOENUMREFRESH = 0x00080000, FWF_NOGROUPING = 0x00100000, FWF_FULLROWSELECT = 0x00200000, FWF_NOFILTERS = 0x00400000, FWF_NOCOLUMNHEADER = 0x00800000, // don't show column header FWF_NOHEADERINALLVIEWS = 0x01000000, // don't show column header if not in details mode FWF_EXTENDEDTILES = 0x02000000, FWF_TRICHECKSELECT = 0x04000000, // checks boxes have 3 modes { unchecked, SVSI_CHECK, SVSI_CHECK2 } FWF_AUTOCHECKSELECT = 0x08000000, // check boxes to change item selection state FWF_NOBROWSERVIEWSTATE = 0x10000000, FWF_SUBSETGROUPS = 0x20000000, FWF_USESEARCHFOLDER = 0x40000000, // Use the search folder for stacking and searching FWF_ALLOWRTLREADING = 0x80000000, // Do not use WS_EX_RTLREADING when WS_EX_LAYOUTRTL is set (thereby keeping RTL reading) } FOLDERFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(FOLDERFLAGS)") // some bits are flags, others are not typedef [v1_enum] enum FOLDERVIEWMODE { FVM_AUTO = -1, 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_CONTENT = 8, FVM_LAST = 8, } FOLDERVIEWMODE; cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") typedef [v1_enum] enum FOLDERLOGICALVIEWMODE { FLVM_UNSPECIFIED = -1, FLVM_FIRST = 1, FLVM_DETAILS = 1, FLVM_TILES = 2, FLVM_ICONS = 3, FLVM_LIST = 4, FLVM_CONTENT = 5, FLVM_LAST = 5, } FOLDERLOGICALVIEWMODE; cpp_quote("#endif // NTDDI_VISTA") typedef struct FOLDERSETTINGS { UINT /* FOLDERVIEWMODE */ ViewMode; // View mode UINT /* FOLDERFLAGS */ fFlags; // View options } FOLDERSETTINGS; typedef FOLDERSETTINGS *LPFOLDERSETTINGS; typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS; typedef FOLDERSETTINGS *PFOLDERSETTINGS; [ uuid(3cc974d2-b302-4d36-ad3e-06d93f695d3f), object, pointer_default(unique) ] interface IFolderViewOptions : IUnknown { typedef [v1_enum] enum FOLDERVIEWOPTIONS { FVO_DEFAULT = 0x00000000, // default needs none of these options and will use Itemsview FVO_VISTALAYOUT = 0x00000001, // always use listview to maintain vista parity FVO_CUSTOMPOSITION = 0x00000002, // requires the custom positioning of items within the X,Y space of the view FVO_CUSTOMORDERING = 0x00000004, // requires the custom reordering feature of the view FVO_SUPPORTHYPERLINKS = 0x00000008, // requires the use of hyperlinks in tiles and details modes FVO_NOANIMATIONS = 0x00000010, // turn off animations within the view FVO_NOSCROLLTIPS = 0x00000020, // turn off scroll tips } FOLDERVIEWOPTIONS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(FOLDERVIEWOPTIONS)") HRESULT SetFolderViewOptions( [in] FOLDERVIEWOPTIONS fvoMask, [in] FOLDERVIEWOPTIONS fvoFlags); HRESULT GetFolderViewOptions( [out] FOLDERVIEWOPTIONS *pfvoFlags); } // // 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. typedef [v1_enum] enum _SVSIF // Shell View Select Item Flags (SVSIF) { SVSI_DESELECT = 0x00000000, SVSI_SELECT = 0x00000001, SVSI_EDIT = 0x00000003, // includes SVSI_SELECT SVSI_DESELECTOTHERS = 0x00000004, SVSI_ENSUREVISIBLE = 0x00000008, SVSI_FOCUSED = 0x00000010, SVSI_TRANSLATEPT = 0x00000020, SVSI_SELECTIONMARK = 0x00000040, SVSI_POSITIONITEM = 0x00000080, SVSI_CHECK = 0x00000100, SVSI_CHECK2 = 0x00000200, SVSI_KEYBOARDSELECT = 0x00000401, // includes SVSI_SELECT SVSI_NOTAKEFOCUS = 0x40000000, } _SVSIF; cpp_quote("#define SVSI_NOSTATECHANGE ((UINT)0x80000000) // work around the use of the high bit that results in 4245: signed/unsigned mismatch") typedef UINT SVSIF; // Shell View Select Item Flags (SVSIF), values from _SVSIF typedef [v1_enum] enum _SVGIO // Shell View Get Item Object flags (SVGIO), used with IShellView::GetItemObject() and other methods { SVGIO_BACKGROUND = 0x00000000, // riid == IID_IDispatch -> view automation object, implements supports connection point container for DIID_DShellFolderViewEvents // riid == IID_IContextMenu -> backgroud context menu object // riid == IID_IPersistHistory -> persist history object for the view SVGIO_SELECTION = 0x00000001, // the selected items in the view SVGIO_ALLVIEW = 0x00000002, // all of the items in the view SVGIO_CHECKED = 0x00000003, // if the view is in check select mode the checked items SVGIO_TYPE_MASK = 0x0000000F, // mask for above values SVGIO_FLAG_VIEWORDER = 0x80000000, // request items in view order } _SVGIO; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(_SVGIO)") typedef int SVGIO; // Shell View Get Item Object flags (SVGIO), values from _SVGIO // uState values for IShellView::UIActivate typedef [v1_enum] enum SVUIA_STATUS { 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 ") cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;") cpp_quote("#endif //_NEVER_") interface IShellBrowser; [ 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 /* SVUIA_STATUS */ uState); HRESULT Refresh(); HRESULT CreateViewWindow( [in, unique] IShellView *psvPrevious, [in] LPCFOLDERSETTINGS pfs, [in] IShellBrowser *psb, [in] RECT *prcView, [out] HWND *phWnd); HRESULT DestroyViewWindow(); HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS pfs); [local] HRESULT AddPropertySheetPages( [in, annotation("__in")] DWORD dwReserved, [in, annotation("__in")] LPFNSVADDPROPSHEETPAGE pfn, [in, annotation("__in")] LPARAM lparam); HRESULT SaveViewState(); HRESULT SelectItem( [in, unique] PCUITEMID_CHILD pidlItem, [in] SVSIF uFlags); HRESULT GetItemObject( [in] UINT /* SVGIO */ uItem, [in] REFIID riid, [out, iid_is(riid)] void **ppv); typedef IShellView *LPSHELLVIEW; } [ 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 ") 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 ") // Return to byte packing HRESULT GetView( [in, out] SHELLVIEWID* pvid, [in] ULONG uView); HRESULT CreateViewWindow2( [in] LPSV2CVW2_PARAMS lpParams); HRESULT HandleRename( [in, unique] PCUITEMID_CHILD pidlNew); HRESULT SelectAndPositionItem( [in, unique] PCUITEMID_CHILD pidlItem, [in] UINT /* SVSIF */ uFlags, [in, unique] POINT *ppt); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ uuid(ec39fa88-f8af-41c5-8421-38bed28f4673), object, pointer_default(unique) ] interface IShellView3 : IShellView2 { [v1_enum] enum _SV3CVW3_FLAGS { SV3CVW3_DEFAULT = 0x00000000, SV3CVW3_NONINTERACTIVE = 0x00000001, // Instead of bringing up UI, fail silently. SV3CVW3_FORCEVIEWMODE = 0x00000002, // Prefer view mode set by CreateViewWindow3 over saved view state SV3CVW3_FORCEFOLDERFLAGS = 0x00000004, // Prefer folder flags set by CreateViewWindow3 over saved view state }; typedef DWORD SV3CVW3_FLAGS; HRESULT CreateViewWindow3( [in] IShellBrowser *psbOwner, [in, unique] IShellView *psvPrev, [in] SV3CVW3_FLAGS dwViewFlags, [in] FOLDERFLAGS dwMask, [in] FOLDERFLAGS dwFlags, [in] FOLDERVIEWMODE fvMode, [in, unique] const SHELLVIEWID *pvid, [in] const RECT *prcView, [out] HWND *phwndView); } cpp_quote("#endif // NTDDI_VISTA") // this is to handle name collisions cpp_quote("#ifdef _FIX_ENABLEMODELESS_CONFLICT") cpp_quote("#undef EnableModeless ") cpp_quote("#endif") [ uuid(cde725b0-ccc9-4519-917e-325d72fab4ce), object, pointer_default(unique) ] interface IFolderView : IUnknown { HRESULT GetCurrentViewMode([out] UINT /* FOLDERVIEWMODE */ *pViewMode); HRESULT SetCurrentViewMode([in] UINT /* FOLDERVIEWMODE */ ViewMode); // the folder for the view, returns IShellFolder and related interfaces // also supports IShellItemArray that returns an array with a single item for the folder HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT Item( [in] int iItemIndex, [out] PITEMID_CHILD *ppidl); // get the count of items for selection, total, etc HRESULT ItemCount( [in] UINT /* SVGIO */ uFlags, [out] int *pcItems); // get the items in the view in the form of IShellItemArray, IDataObject, etc HRESULT Items( [in] UINT /* SVGIO */ uFlags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetSelectionMarkedItem([out] int *piItem); HRESULT GetFocusedItem([out] int *piItem); HRESULT GetItemPosition( [in] PCUITEMID_CHILD pidl, [out] POINT* ppt); HRESULT GetSpacing([in, out, unique] POINT* ppt); HRESULT GetDefaultSpacing([out] POINT* ppt); // returns S_OK if AutoArrange is on, S_FALSE if off HRESULT GetAutoArrange(); // like IShellView::SelectItem() by index, SVSI_ flags HRESULT SelectItem( [in] int iItem, [in] DWORD /* SVSIF */ dwFlags); #ifdef ALLOW_DISABLE_CONSISTENCY_CHECK HRESULT SelectAndPositionItems( [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [disable_consistency_check, in, unique, size_is(cidl)] POINT* apt, [in] DWORD /* SVSIF */ dwFlags); #else HRESULT SelectAndPositionItems( [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, unique, size_is(cidl)] POINT* apt, [in] DWORD /* SVSIF */ dwFlags); #endif } cpp_quote("#define SID_SFolderView IID_IFolderView // folder view, usually IFolderView") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") // to discover the search box, use IServiceProvider::QueryService() using SID_SSearchBoxInfo on a site pointer within the explorer window [ uuid(6af6e03f-d664-4ef4-9626-f7e0ed36755e), object ] interface ISearchBoxInfo : IUnknown { HRESULT GetCondition( [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetText([out, string] LPWSTR *ppsz); } cpp_quote("#endif // (NTDDI_VERSION >= NTDDI_WIN7)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA) || (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#ifndef NO_SHOBJIDL_SORTDIRECTION") [v1_enum] enum tagSORTDIRECTION { SORT_DESCENDING = -1, SORT_ASCENDING = 1 }; cpp_quote("#endif // NO_SHOBJIDL_SORTDIRECTION") typedef int SORTDIRECTION; typedef struct SORTCOLUMN { PROPERTYKEY propkey; SORTDIRECTION direction; } SORTCOLUMN; typedef [v1_enum] enum FVTEXTTYPE { FVST_EMPTYTEXT = 0, } FVTEXTTYPE; interface IShellItemArray; typedef HRESULT DEPRECATED_HRESULT; cpp_quote("#if defined(__cplusplus)") cpp_quote("#define DEPRECATED_HRESULT HRESULT DECLSPEC_DEPRECATED") cpp_quote("#endif") [ uuid(1af3a467-214f-4298-908e-06b03e0b39f9), object, pointer_default(unique) ] interface IFolderView2 : IFolderView { // Sets the group by property and starts a grouping operation HRESULT SetGroupBy( [in] REFPROPERTYKEY key, [in] BOOL fAscending); [local] HRESULT GetGroupBy( [out, annotation("__out")] PROPERTYKEY* pkey, [out, annotation("__out_opt")] BOOL *pfAscending); [call_as(GetGroupBy)] HRESULT RemoteGetGroupBy( [out] PROPERTYKEY* pkey, [out] BOOL *pfAscending); // Setting and Getting per item view properties is not possible for Libraries or Search results views. // Consider using existing item properties instead. DEPRECATED_HRESULT SetViewProperty( [in] PCUITEMID_CHILD pidl, [in] REFPROPERTYKEY propkey, [in] REFPROPVARIANT propvar); // Setting and Getting per item view properties is not possible for Libraries or Search results views. // Consider using existing item properties instead. DEPRECATED_HRESULT GetViewProperty( [in] PCUITEMID_CHILD pidl, [in] REFPROPERTYKEY propkey, [out] PROPVARIANT *ppropvar); // Setting per item Tile view properties is not possible for Libraries or Search results views. // Consider setting property lists for your item types instead (see PKEY_PropList_TileInfo) DEPRECATED_HRESULT SetTileViewProperties( [in] PCUITEMID_CHILD pidl, [in, string] LPCWSTR pszPropList); // Setting per item Extended Tile view properties is not possible for Libraries or Search results views. // Consider setting property lists for your item types instead (see PKEY_PropList_ExtendedTileInfo) DEPRECATED_HRESULT SetExtendedTileViewProperties( [in] PCUITEMID_CHILD pidl, [in, string] LPCWSTR pszPropList); HRESULT SetText( [in] FVTEXTTYPE iType, [in] LPCWSTR pwszText); HRESULT SetCurrentFolderFlags( [in] DWORD /* FOLDERFLAGS */ dwMask, [in] DWORD /* FOLDERFLAGS */ dwFlags); HRESULT GetCurrentFolderFlags([out] DWORD /* FOLDERFLAGS */ *pdwFlags); HRESULT GetSortColumnCount([out] int *pcColumns); // Sets the sort by property and starts a sort operation HRESULT SetSortColumns( [in, size_is(cColumns)] const SORTCOLUMN *rgSortColumns, [in] int cColumns); HRESULT GetSortColumns( [out, size_is(cColumns)] SORTCOLUMN *rgSortColumns, [in] int cColumns); // return IShellItem for an item based on its index HRESULT GetItem( [in] int iItem, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetVisibleItem( [in] int iStart, [in] BOOL fPrevious, [out] int *piItem); HRESULT GetSelectedItem( [in] int iStart, [out] int *piItem); HRESULT GetSelection( [in] BOOL fNoneImpliesFolder, [out] IShellItemArray **ppsia); // Gets the selection state including check state. Same as the flags for IFolderView::SelectAndPositionItems HRESULT GetSelectionState( [in] PCUITEMID_CHILD pidl, [out] DWORD /* SVSIF */ *pdwFlags); // If pszVerb is NULL, then the default verb is invoked. HRESULT InvokeVerbOnSelection([in, unique, string] LPCSTR pszVerb); // Sets default icon size if iImageSize == -1 HRESULT SetViewModeAndIconSize( [in] FOLDERVIEWMODE uViewMode, [in] int iImageSize); HRESULT GetViewModeAndIconSize( [out] FOLDERVIEWMODE *puViewMode, [out] int *piImageSize); HRESULT SetGroupSubsetCount([in] UINT cVisibleRows); HRESULT GetGroupSubsetCount([out] UINT *pcVisibleRows); HRESULT SetRedraw([in] BOOL fRedrawOn); // S_OK means this view sourced the current drag drop or cut/paste operation (used by drop target objects) HRESULT IsMoveInSameFolder(); HRESULT DoRename(); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ uuid(ae8c987d-8797-4ed3-be72-2a47dd938db0), object ] interface IFolderViewSettings : IUnknown { // GetColumnPropertyList - returns IPropertyDescriptionList. Ordered list of columns that must correspond to column enumerated // via ISF::GetDetailsOf. Any column from ISF::GetDetailsOf not included in this list will be marked SHCOLSTATE_SECONDARYUI // (or maintain SHCOLSTATE_HIDDEN) HRESULT GetColumnPropertyList( [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetGroupByProperty( [out] PROPERTYKEY *pkey, [out] BOOL *pfGroupAscending); HRESULT GetViewMode( [out] FOLDERLOGICALVIEWMODE *plvm); HRESULT GetIconSize( [out] UINT *puIconSize); HRESULT GetFolderFlags( [out] FOLDERFLAGS *pfolderMask, [out] FOLDERFLAGS *pfolderFlags); HRESULT GetSortColumns( [out, size_is(cColumnsIn), length_is(*pcColumnsOut)] SORTCOLUMN *rgSortColumns, [in] UINT cColumnsIn, [out] UINT *pcColumnsOut); HRESULT GetGroupSubsetCount([out] UINT *pcVisibleRows); }; cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ object, uuid(196bf9a5-b346-4ef0-aa1e-5dcdb76768b1), pointer_default(unique) ] interface IPreviewHandlerVisuals : IUnknown { HRESULT SetBackgroundColor([in] COLORREF color); HRESULT SetFont([in] const LOGFONTW *plf); HRESULT SetTextColor([in] COLORREF color); }; [ uuid(e693cf68-d967-4112-8763-99172aee5e5a), object, pointer_default(unique) ] interface IVisualProperties : IUnknown { typedef [v1_enum] enum VPWATERMARKFLAGS { VPWF_DEFAULT = 0x00000000, // Windows XP behavior VPWF_ALPHABLEND = 0x00000001, // alpha blend the bitmap, assumed 24-bit color + 8-bit alpha } VPWATERMARKFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(VPWATERMARKFLAGS)") HRESULT SetWatermark([in, unique] HBITMAP hbmp, [in] VPWATERMARKFLAGS vpwf); typedef [v1_enum] enum VPCOLORFLAGS { VPCF_TEXT = 1, VPCF_BACKGROUND = 2, VPCF_SORTCOLUMN = 3, VPCF_SUBTEXT = 4, VPCF_TEXTBACKGROUND = 5, } VPCOLORFLAGS; // misnamed, this is not a flags type HRESULT SetColor( [in] VPCOLORFLAGS vpcf, [in] COLORREF cr); HRESULT GetColor( [in] VPCOLORFLAGS vpcf, [out] COLORREF *pcr); HRESULT SetItemHeight([in] int cyItemInPixels); HRESULT GetItemHeight([out] int *cyItemInPixels); HRESULT SetFont( [in] const LOGFONTW* plf, [in] BOOL bRedraw); HRESULT GetFont([out] LOGFONTW* plf); HRESULT SetTheme( [in, unique, string] LPCWSTR pszSubAppName, [in, unique, string] LPCWSTR pszSubIdList); } cpp_quote("#endif // _WIN32_IE_IE70") //------------------------------------------------------------------------- // ICommDlgBrowser interface // // ICommDlgBrowser interface is the interface that is provided by the new // common dialog window to hook and modify the behavior of IShellView. When // a default view is created, it queries its parent IShellBrowser for the // ICommDlgBrowser interface. If supported, it calls out to that interface // in several cases that need to behave differently in a dialog. // // Member functions: // // ICommDlgBrowser::OnDefaultCommand() // Called when the user double-clicks in the view or presses Enter. The // browser should return S_OK if it processed the action itself, S_FALSE // to let the view perform the default action. // // ICommDlgBrowser::OnStateChange(ULONG uChange) // Called when some states in the view change. 'uChange' is one of the // CDBOSC_* values. This call is made after the state (selection, focus, // etc) has changed. There is no return value. // // ICommDlgBrowser::IncludeObject(PCUITEMID_CHILD pidl) // Called when the view is enumerating objects. 'pidl' is a relative // IDLIST. The browser should return S_OK to include the object in the // view, S_FALSE to hide it // //------------------------------------------------------------------------- cpp_quote("#define CDBOSC_SETFOCUS 0x00000000") cpp_quote("#define CDBOSC_KILLFOCUS 0x00000001") cpp_quote("#define CDBOSC_SELCHANGE 0x00000002") cpp_quote("#define CDBOSC_RENAME 0x00000003") cpp_quote("#define CDBOSC_STATECHANGE 0x00000004") [ uuid(000214F1-0000-0000-C000-000000000046), object, pointer_default(unique) ] interface ICommDlgBrowser : IUnknown { HRESULT OnDefaultCommand([in] IShellView *ppshv); HRESULT OnStateChange( [in] IShellView *ppshv, [in] ULONG uChange); HRESULT IncludeObject( [in, unique] IShellView *ppshv, [in] PCUITEMID_CHILD pidl); } typedef ICommDlgBrowser * LPCOMMDLGBROWSER; // This is for frames that may host an ExplorerBrowser (which implements ICommDlgBrowser3), and yet need to implement // some ICommDlgBrowser methods themselves. ExplorerBrowser will do some default processing if necessary, and then // allow responders to SID_SExplorerBrowserFrame to provide additional processing of these calls, when appropriate. cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser") //------------------------------------------------------------------------- // ICommDlgBrowser2 interface // // Member functions: // // ICommDlgBrowser2::Notify(IShellView *pshv, DWORD dwNotfyType) // Called when the view is wants to notify common dialog when an event // occurrs. // // CDB2N_CONTEXTMENU_START indicates the context menu has started. // CDB2N_CONTEXTMENU_DONE indicates the context menu has completed. // // ICommDlgBrowser2::GetDefaultMenuText(IShellView *pshv, // WCHAR *pszText, INT cchMax) // Called when the view wants to get the default context menu text. // pszText points to buffer and cchMax specifies the size of the // buffer in characters. The browser on return has filled the buffer // with the default context menu text. The Shell will call this method // with at least a buffer size of MAX_PATH. The browser should return // S_OK if it returned a new default menu text, S_FALSE to let the view // to use the normal default menu text. // // ICommDlgBrowser2::GetViewFlags(DWORD *pdwFlags) // Called when the view wants to determine if special customization needs to // be done for the common dialog browser. For example View calls this function to // determin if all files(hidden and system)needs to be shown. If the GetViewFlags returns a DWORD with // CDB2GVF_SHOWALLFILES flag set then it will show all the files. //------------------------------------------------------------------------- cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN2K)") cpp_quote("#define CDB2N_CONTEXTMENU_DONE 0x00000001") cpp_quote("#define CDB2N_CONTEXTMENU_START 0x00000002") //GetViewFlags cpp_quote("#define CDB2GVF_SHOWALLFILES 0x00000001") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define CDB2GVF_ISFILESAVE 0x00000002 // is file save, else file open") cpp_quote("#define CDB2GVF_ALLOWPREVIEWPANE 0x00000004") cpp_quote("#define CDB2GVF_NOSELECTVERB 0x00000008") cpp_quote("#define CDB2GVF_NOINCLUDEITEM 0x00000010") cpp_quote("#define CDB2GVF_ISFOLDERPICKER 0x00000020") cpp_quote("#define CDB2GVF_ADDSHIELD 0x00000040 // when CDB2GVF_NOSELECTVERB is not specified this flag controls the display of a LUA shield on the Select menu item") cpp_quote("#endif // NTDDI_VISTA") [ uuid(10339516-2894-11d2-9039-00C04F8EEB3E), object, pointer_default(unique) ] interface ICommDlgBrowser2 : ICommDlgBrowser { HRESULT Notify( [in] IShellView *ppshv, [in] DWORD dwNotifyType); HRESULT GetDefaultMenuText( [in] IShellView *ppshv, [out, string, size_is(cchMax)] LPWSTR pszText, [in] int cchMax); // returns CDB2GVF_XXX values to control the behavior of the view when in common dialog mode HRESULT GetViewFlags([out] DWORD *pdwFlags); } typedef ICommDlgBrowser2 * LPCOMMDLGBROWSER2; cpp_quote("#endif // NTDDI_WIN2K") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ uuid(c8ad25a1-3294-41ee-8165-71174bd01c57), object, pointer_default(unique) ] interface ICommDlgBrowser3 : ICommDlgBrowser2 { HRESULT OnColumnClicked( [in] IShellView *ppshv, [in] int iColumn); HRESULT GetCurrentFilter( [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec, [in] int cchFileSpec); HRESULT OnPreViewCreated([in] IShellView *ppshv); } //-------------------------------------------------------------------------- // // Interface: IColumnManager // // IColumnManager is an interfaced provided by defview to // allow the manipulation of columns in details view. // typedef [v1_enum] enum CM_MASK { CM_MASK_WIDTH = 0x00000001, CM_MASK_DEFAULTWIDTH = 0x00000002, CM_MASK_IDEALWIDTH = 0x00000004, CM_MASK_NAME = 0x00000008, CM_MASK_STATE = 0x00000010, } CM_MASK; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CM_MASK)") typedef [v1_enum] enum CM_STATE { CM_STATE_NONE = 0x00000000, CM_STATE_VISIBLE = 0x00000001, // The column is visible CM_STATE_FIXEDWIDTH = 0x00000002, // Can't resize the column CM_STATE_NOSORTBYFOLDERNESS = 0x00000004, // Do not sort folders seperately CM_STATE_ALWAYSVISIBLE = 0x00000008, // readonly. column cannot be hidden } CM_STATE; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CM_STATE)") typedef [v1_enum] enum CM_ENUM_FLAGS { CM_ENUM_ALL = 0x00000001, CM_ENUM_VISIBLE = 0x00000002, } CM_ENUM_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CM_ENUM_FLAGS)") typedef [v1_enum] enum CM_SET_WIDTH_VALUE { CM_WIDTH_USEDEFAULT = -1, CM_WIDTH_AUTOSIZE = -2, } CM_SET_WIDTH_VALUE; #define MAX_COLUMN_NAME_LEN 80 typedef struct CM_COLUMNINFO { DWORD cbSize; // size in bytes of struct DWORD dwMask; // CM_MASK DWORD dwState; // CM_STATE UINT uWidth; // CM_MASK_WIDTH, for SetColumnInfo it can be a CM_SET_WIDTH_VALUE UINT uDefaultWidth; // CM_MASK_DEFAULTWIDTH UINT uIdealWidth; // CM_MASK_IDEALWIDTH WCHAR wszName[MAX_COLUMN_NAME_LEN]; } CM_COLUMNINFO; [ uuid(d8ec27bb-3f3b-4042-b10a-4acfd924d453), object, pointer_default(unique) ] interface IColumnManager : IUnknown { HRESULT SetColumnInfo( [in] REFPROPERTYKEY propkey, [in] const CM_COLUMNINFO *pcmci); HRESULT GetColumnInfo( [in] REFPROPERTYKEY propkey, [out] CM_COLUMNINFO *pcmci); HRESULT GetColumnCount( [in] CM_ENUM_FLAGS dwFlags, [out] UINT *puCount); HRESULT GetColumns( [in] CM_ENUM_FLAGS dwFlags, [out, size_is(cColumns)] PROPERTYKEY *rgkeyOrder, [in] UINT cColumns); HRESULT SetColumns( [in, size_is(cVisible)] const PROPERTYKEY *rgkeyOrder, [in] UINT cVisible); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") [ uuid(C0A651F5-B48B-11d2-B5ED-006097C686F6), // IID_IFolderFilterSite object, pointer_default(unique) ] interface IFolderFilterSite : IUnknown { HRESULT SetFilter([in]IUnknown* punk); } [ uuid(9CC22886-DC8E-11d2-B1D0-00C04F8EEB3E), // IID_IFolderFilter object, pointer_default(unique) ] interface IFolderFilter : IUnknown { HRESULT ShouldShow( [in] IShellFolder* psf, [in, unique] PCIDLIST_ABSOLUTE pidlFolder, [in] PCUITEMID_CHILD pidlItem); HRESULT GetEnumFlags( [in] IShellFolder* psf, [in] PCIDLIST_ABSOLUTE pidlFolder, [out] HWND *phwnd, [in, out] DWORD *pgrfFlags); } //cpp_quote("#endif // NTDDI_WINXP") //========================================================================== // IInputObjectSite/IInputObject interfaces // // These interfaces allow us (or ISVs) to install/update external Internet // Toolbar for IE and the shell. The frame will simply get the CLSID from // registry (to be defined) and CoCreateInstance it. // //========================================================================== // A site implements this interface so the object can communicate // focus change to it. [ object, uuid(F1DB8392-7331-11D0-8C99-00A0C92DBFE8), pointer_default(unique), ] interface IInputObjectSite: IUnknown { // Object (punkObj) is getting or losing the focus. HRESULT OnFocusChangeIS([in, unique] IUnknown* punkObj, [in] BOOL fSetFocus); } [ object, uuid(68284fAA-6A48-11D0-8c78-00C04fd918b4), pointer_default(unique) ] interface IInputObject: IUnknown { // Activates or deactivates the object. lpMsg may be NULL. Returns // S_OK if the activation succeeded. HRESULT UIActivateIO([in] BOOL fActivate, [in, unique] MSG *pMsg); // Returns S_OK if the object has the focus, S_FALSE if not. HRESULT HasFocusIO(); // Allow the object to process the message. Returns S_OK if the // message was processed (eaten). HRESULT TranslateAcceleratorIO([in] MSG *pMsg); } // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(6915C085-510B-44cd-94AF-28DFA56CF92B), pointer_default(unique), local ] interface IInputObject2 : IInputObject { // Called to handle global accelerators, so that input objects can // respond to keyboard even when they are not UI active. // // Note that pMsg is not const, to allow implementors to forward to the // Win32 TranslateAccelerator without having to cast away const-ness. HRESULT TranslateAcceleratorGlobal([in, annotation("__in")] MSG *pMsg); } //cpp_quote("#endif // NTDDI_VISTA") //=========================================================================== // // IShellIcon Interface // // used to get a icon index for a IShellFolder object. // // this interface can be implemented by a IShellFolder, as a quick way to // return the icon for a object in the folder. // // a instance of this interface is only created once for the folder, unlike // IExtractIcon witch is created once for each object. // // if a ShellFolder does not implement this interface, the standard // GetUIObject(....IExtractIcon) method will be used to get a icon // for all objects. // // the following standard imagelist indexs can be returned: // // 0 document (blank page) (not associated) // 1 document (with stuff on the page) // 2 application (exe, com, bat) // 3 folder (plain) // 4 folder (open) // // IShellIcon:GetIconOf(pidl, flags, lpIconIndex) // // pidl object to get icon for. // flags GIL_* input flags (GIL_OPEN, ...) // lpIconIndex place to return icon index. // // returns: // S_OK, if lpIconIndex contains the correct system imagelist index. // S_FALSE, if unable to get icon for this object, go through // GetUIObject, IExtractIcon, methods. // //=========================================================================== [ uuid(000214E5-0000-0000-C000-000000000046), // IID_IShellIcon object, pointer_default(unique) ] interface IShellIcon : IUnknown { HRESULT GetIconOf( [in] PCUITEMID_CHILD pidl, [in] UINT flags, [out] int *pIconIndex); } //-------------------------------------------------------------------------- // // 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. // //------------------------------------------------------------------------- // // flag values to be combined for the Flags parameter of IShellBrowser::BrowseObject() method // 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") 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 0x00010000") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define SBSP_KEEPSAMETEMPLATE 0x00020000") cpp_quote("#define SBSP_KEEPWORDWHEELTEXT 0x00040000") cpp_quote("#define SBSP_ACTIVATE_NOFOCUS 0x00080000") cpp_quote("#define SBSP_CREATENOHISTORY 0x00100000") cpp_quote("#define SBSP_PLAYNOSOUND 0x00200000") cpp_quote("#endif // (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60SP2)") cpp_quote("#define SBSP_CALLERUNTRUSTED 0x00800000") cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD 0x01000000") cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD 0x02000000") cpp_quote("#endif // _WIN32_IE_IE60SP2") cpp_quote("#define SBSP_NOAUTOSELECT 0x04000000") cpp_quote("#define SBSP_WRITENOHISTORY 0x08000000") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60SP2)") cpp_quote("#define SBSP_TRUSTEDFORACTIVEX 0x10000000") cpp_quote("#endif // _WIN32_IE_IE60SP2") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#define SBSP_FEEDNAVIGATION 0x20000000") cpp_quote("#endif // _WIN32_IE_IE70") 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") cpp_quote("#if (_WIN32_IE >= 0x0700)") cpp_quote("#endif") // // 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 ") cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;") cpp_quote("#endif //_NEVER_") [ 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, unique] HMENU hmenuShared, [in, unique] HOLEMENU holemenuRes, [in, unique] HWND hwndActiveObject); HRESULT RemoveMenusSB([in] HMENU hmenuShared); HRESULT SetStatusTextSB([in, unique] LPCWSTR pszStatusText); HRESULT EnableModelessSB([in] BOOL fEnable); HRESULT TranslateAcceleratorSB([in] MSG *pmsg, [in] WORD wID); // IShellBrowser HRESULT BrowseObject( [in, unique] PCUIDLIST_RELATIVE pidl, [in] UINT wFlags); HRESULT GetViewStateStream( [in] DWORD grfMode, [out] IStream **ppStrm); HRESULT GetControlWindow( [in] UINT id, [out] HWND * phwnd); [local] HRESULT SendControlMsg( [in, annotation("__in")] UINT id, [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] LPARAM lParam, [out, annotation("__out_opt")] LRESULT *pret); HRESULT QueryActiveShellView([out] IShellView **ppshv); HRESULT OnViewWindowActive([in] IShellView *pshv); [local] HRESULT SetToolbarItems( [in, annotation("__in_ecount_opt(nButtons)")] LPTBBUTTONSB lpButtons, [in, annotation("__in")] UINT nButtons, [in, annotation("__in")] UINT uFlags); } typedef IShellBrowser * LPSHELLBROWSER; [ uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0), // IID_IProfferService object, pointer_default(unique) ] interface IProfferService : IUnknown { HRESULT ProfferService( [in] REFGUID guidService, [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") // Tells an IShellItem not to resolve the link target obtained // when using the BHID_LinkTargetItem GUID in BindToHandler. cpp_quote("#define STR_DONT_RESOLVE_LINK L\"Don't Resolve Link\"") // The handler is being retrieved on the UI thread. Avoid any expensive work that touches the disk, network, etc. cpp_quote("#define STR_GET_ASYNC_HANDLER L\"GetAsyncHandler\"") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") // 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_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") // Shell Namespace helper [ uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe), object, pointer_default(unique) ] interface IShellItem : IUnknown { typedef [v1_enum] enum _SIGDN { // lower word (& with 0xFFFF) SIGDN_NORMALDISPLAY = 0x00000000, // SHGDN_NORMAL SIGDN_PARENTRELATIVEPARSING = (int) 0x80018001, // SHGDN_INFOLDER | SHGDN_FORPARSING SIGDN_DESKTOPABSOLUTEPARSING = (int) 0x80028000, // SHGDN_FORPARSING SIGDN_PARENTRELATIVEEDITING = (int) 0x80031001, // SHGDN_INFOLDER | SHGDN_FOREDITING SIGDN_DESKTOPABSOLUTEEDITING = (int) 0x8004c000, // SHGDN_FORPARSING | SHGDN_FORADDRESSBAR SIGDN_FILESYSPATH = (int) 0x80058000, // SHGDN_FORPARSING SIGDN_URL = (int) 0x80068000, // SHGDN_FORPARSING SIGDN_PARENTRELATIVEFORADDRESSBAR = (int) 0x8007c001, // SHGDN_INFOLDER | SHGDN_FORPARSING | SHGDN_FORADDRESSBAR SIGDN_PARENTRELATIVE = (int) 0x80080001, // SHGDN_INFOLDER } SIGDN; // 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 _SICHINTF { SICHINT_DISPLAY = 0x00000000, SICHINT_ALLFIELDS = (int) 0x80000000, SICHINT_CANONICAL = 0x10000000, SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000, }; typedef DWORD SICHINTF; HRESULT BindToHandler( [in, unique] IBindCtx *pbc, [in] REFGUID bhid, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetParent([out] IShellItem **ppsi); HRESULT GetDisplayName( [in] SIGDN sigdnName, [out, string] LPWSTR *ppszName); HRESULT GetAttributes( [in] SFGAOF sfgaoMask, [out] SFGAOF *psfgaoAttribs); HRESULT Compare( [in] IShellItem *psi, [in] SICHINTF hint, [out] int *piOrder); } //cpp_quote("#endif // NTDDI_WINXP") cpp_quote("SHSTDAPI_(PIDLIST_ABSOLUTE) SHSimpleIDListFromPath(LPCWSTR pszPath);") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("// CLSID_ShellItem create and init helper APIs. produce IShellItem derived interfaces from these different expressions of an item") cpp_quote("SHSTDAPI SHCreateItemFromIDList(__in PCIDLIST_ABSOLUTE pidl, __in REFIID riid, __deref_out void **ppv);") cpp_quote("SHSTDAPI SHCreateItemFromParsingName(__in PCWSTR pszPath, __in_opt IBindCtx *pbc, __in REFIID riid, __deref_out void **ppv);") cpp_quote("SHSTDAPI SHCreateItemWithParent(__in_opt PCIDLIST_ABSOLUTE pidlParent, __in_opt IShellFolder *psfParent, __in PCUITEMID_CHILD pidl, __in REFIID riid, __deref_out void **ppvItem);") cpp_quote("SHSTDAPI SHCreateItemFromRelativeName(__in IShellItem *psiParent, __in PCWSTR pszName, __in_opt IBindCtx* pbc, __in REFIID riid, __deref_out void **ppv);") cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("SHSTDAPI SHCreateItemInKnownFolder(REFKNOWNFOLDERID kfid, DWORD dwKFFlags, __in_opt PCWSTR pszItem, REFIID riid, __deref_out void **ppv);") cpp_quote("// get the IDList expression from an object, works with objects that support IPersistIDlist or IPersistIDlist like CLSID_ShellItem and most shell folders") cpp_quote("SHSTDAPI SHGetIDListFromObject(__in IUnknown *punk, __deref_out PIDLIST_ABSOLUTE *ppidl);") cpp_quote("// similar to SHGetIDListFromObject but returns an IShellItem-based object (preferred for performance if the IDList is already bound to a folder)") cpp_quote("SHSTDAPI SHGetItemFromObject(__in IUnknown *punk, __in REFIID riid, __deref_out void **ppv);") cpp_quote("// these APIs return object that support IPropertyStore or related interfaces") cpp_quote("SHSTDAPI SHGetPropertyStoreFromIDList(__in PCIDLIST_ABSOLUTE pidl, __in GETPROPERTYSTOREFLAGS flags, __in REFIID riid, __deref_out void **ppv);") cpp_quote("SHSTDAPI SHGetPropertyStoreFromParsingName(__in PCWSTR pszPath, __in_opt IBindCtx *pbc, __in GETPROPERTYSTOREFLAGS flags, __in REFIID riid, __deref_out void **ppv);") cpp_quote("SHSTDAPI SHGetNameFromIDList(__in PCIDLIST_ABSOLUTE pidl, __in SIGDN sigdnName, __deref_out PWSTR *ppszName);") cpp_quote("#endif // (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") typedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS { DOGIF_DEFAULT = 0x0000, DOGIF_TRAVERSE_LINK = 0x0001, // if the item is a link get the target DOGIF_NO_HDROP = 0x0002, // don't fallback and use CF_HDROP clipboard format DOGIF_NO_URL = 0x0004, // don't fallback and use URL clipboard format DOGIF_ONLY_IF_ONE = 0x0008, // only return the item if there is one item in the array } DATAOBJ_GET_ITEM_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)") // returns IShellItem and other interfaces that CLSID_ShellItem implements cpp_quote("STDAPI SHGetItemFromDataObject(__in IDataObject *pdtobj, __in DATAOBJ_GET_ITEM_FLAGS dwFlags, __in REFIID riid, __deref_out void **ppv);") cpp_quote("#endif // (NTDDI_VERSION >= NTDDI_WIN7)") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // // When requesting a property store through IShellFolder, you can specify the equivalent of // GPS_DEFAULT by passing in a null IBindCtx parameter. // // You can specify the equivalent of GPS_READWRITE by passing a mode of STGM_READWRITE | STGM_EXCLUSIVE // in the bind context // // Here are the string versions of GPS_ flags, passed to IShellFolder::BindToObject() via IBindCtx::RegisterObjectParam() // These flags are valid when requesting an IPropertySetStorage or IPropertyStore handler // // The meaning of these flags are described above. // // There is no STR_ equivalent for GPS_TEMPORARY because temporary property stores // are provided by IShellItem2 only -- not by the underlying IShellFolder. // cpp_quote("#define STR_GPS_HANDLERPROPERTIESONLY L\"GPS_HANDLERPROPERTIESONLY\"") cpp_quote("#define STR_GPS_FASTPROPERTIESONLY L\"GPS_FASTPROPERTIESONLY\"") cpp_quote("#define STR_GPS_OPENSLOWITEM L\"GPS_OPENSLOWITEM\"") cpp_quote("#define STR_GPS_DELAYCREATION L\"GPS_DELAYCREATION\"") cpp_quote("#define STR_GPS_BESTEFFORT L\"GPS_BESTEFFORT\"") cpp_quote("#define STR_GPS_NO_OPLOCK L\"GPS_NO_OPLOCK\"") // Shell Namespace helper 2 [ uuid(7e9fb0d3-919f-4307-ab2e-9b1860310c93), object, pointer_default(unique) ] interface IShellItem2 : IShellItem { HRESULT GetPropertyStore( [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyStoreWithCreateObject( [in] GETPROPERTYSTOREFLAGS flags, [in] IUnknown *punkCreateObject, // factory for low-rights creation of type ICreateObject [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyStoreForKeys( [in, size_is(cKeys)] const PROPERTYKEY *rgKeys, [in] UINT cKeys, [in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyDescriptionList( [in] REFPROPERTYKEY keyType, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // Ensures any cached information in this item is up to date, or returns __HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) if the item does not exist. HRESULT Update([in, unique] IBindCtx *pbc); HRESULT GetProperty( [in] REFPROPERTYKEY key, [out] PROPVARIANT *ppropvar); HRESULT GetCLSID( [in] REFPROPERTYKEY key, [out] CLSID *pclsid); HRESULT GetFileTime( [in] REFPROPERTYKEY key, [out] FILETIME *pft); HRESULT GetInt32( [in] REFPROPERTYKEY key, [out] int *pi); HRESULT GetString( [in] REFPROPERTYKEY key, [out, string] LPWSTR *ppsz); HRESULT GetUInt32( [in] REFPROPERTYKEY key, [out] ULONG *pui); HRESULT GetUInt64( [in] REFPROPERTYKEY key, [out] ULONGLONG *pull); HRESULT GetBool( [in] REFPROPERTYKEY key, [out] BOOL *pf); } //cpp_quote("#endif // NTDDI_VISTA") [v1_enum] enum _SIIGBF { SIIGBF_RESIZETOFIT = 0x00000000, // if necessary, stretch down the bitmap (preserving aspect ratio) so width and height fit size given; width or height or both may be smaller if natural size is smaller SIIGBF_BIGGERSIZEOK = 0x00000001, // a larger bitmap than requested may be returned, the caller will manage scaling down (inverse of SIIGBF_RESIZETOFIT) SIIGBF_MEMORYONLY = 0x00000002, // do not hit the disk, even if cached SIIGBF_ICONONLY = 0x00000004, // return only the icon, never the thumbnail SIIGBF_THUMBNAILONLY = 0x00000008, // return only the thumbnail, never the icon SIIGBF_INCACHEONLY = 0x00000010, // ok to touch the disk, but only to retrieve an already cached item }; typedef int SIIGBF; [ uuid(bcc18b79-ba16-442f-80c4-8a59c30c463b), object, pointer_default(unique) ] interface IShellItemImageFactory : IUnknown { // bitmap returned is a DIB; color format is RGB24, RGB32 or PARGB32 HRESULT GetImage( [in] SIZE size, [in] SIIGBF flags, [out] HBITMAP *phbm); } // Notification callback for changes to user accounts [ object, uuid(a561e69a-b4b8-4113-91a5-64c6bcca3430), version(1.0) ] interface IUserAccountChangeCallback : IUnknown { HRESULT OnPictureChange( [in, string] LPCWSTR pszUserName); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") // Shell Namespace enumerator [ uuid(70629033-e363-4a28-a567-0db78006e6d7), object, pointer_default(unique) ] interface IEnumShellItems : IUnknown { [local] HRESULT Next( [in, annotation("__in")] ULONG celt, [out, size_is(celt), length_is(*pceltFetched), annotation("__out_ecount_part(celt, *pceltFetched)")] IShellItem **rgelt, [out, annotation("__out_opt __deref_out_range(0, celt)")] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumShellItems **ppenum); } typedef GUID STGTRANSCONFIRMATION, *LPSTGTRANSCONFIRMATION; // Storage operations typedef [v1_enum] enum STGOP { STGOP_MOVE = 1, STGOP_COPY = 2, STGOP_SYNC = 3, STGOP_REMOVE = 5, STGOP_RENAME = 6, STGOP_APPLYPROPERTIES = 8, // _WIN32_WINNT >= 0x0600 STGOP_NEW = 10, // _WIN32_WINNT >= 0x0600 } STGOP; cpp_quote("#endif // NTDDI_WINXP") // ITransferSource/ITransferDestination flag values use for OpenItem/MoveItem/RecycleItem/RemoveItem/etc [v1_enum] enum _TRANSFER_SOURCE_FLAGS { TSF_NORMAL = 0x0000, TSF_FAIL_EXIST = 0x0000, // Fail if destination already exists TSF_RENAME_EXIST = 0x0001, // Rename with auto-name generation if destination already exists TSF_OVERWRITE_EXIST = 0x0002, // Overwrite/Merge with destination TSF_ALLOW_DECRYPTION = 0x0004, // Allow creation of decrypted destination TSF_NO_SECURITY = 0x0008, // Without DACL/SACL/Owner TSF_COPY_CREATION_TIME = 0x0010, // Copy the creation time as part of the copy (useful for move as copy/delete) TSF_COPY_WRITE_TIME = 0x0020, // Copy the last write time as part of the copy TSF_USE_FULL_ACCESS = 0x0040, // Open a file with write, read, or delete as share mode TSF_DELETE_RECYCLE_IF_POSSIBLE = 0x0080, // Recycle if possible TSF_COPY_HARD_LINK = 0x0100, // Hard link desired (not required) TSF_COPY_LOCALIZED_NAME = 0x0200, // Copy localized name TSF_MOVE_AS_COPY_DELETE = 0x0400, // We are doing a move operation, but we are doing it as a copy/delete TSF_SUSPEND_SHELLEVENTS = 0x0800, // suspend shell events }; typedef DWORD TRANSFER_SOURCE_FLAGS; cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ uuid(d594d0d8-8da7-457b-b3b4-ce5dbaac0b88), pointer_default(unique), local ] interface ITransferAdviseSink : IUnknown { [v1_enum] enum _TRANSFER_ADVISE_STATE { TS_NONE = 0x00000000, TS_PERFORMING = 0x00000001, // Transfer is being performed TS_PREPARING = 0x00000002, // Preparing to perform transfer - calculating space needed, etc. TS_INDETERMINATE = 0x00000004, // The length of the transfer is indeterminate }; typedef DWORD TRANSFER_ADVISE_STATE; // UpdateProgress // // Updates the sink as to current progress of an operation. // // Implementers of this function should return an error code when the operation needs to terminate early (e.g. the user clicked on the cancel button). // If all parameters are 0, UpdateProgress should not change any of its progress data but should can still return an error code // to halt the operation. // If all the total parameters are 0 but some of the current parameters are non-zero, UpdateProgress should update it's current progress but shouldn't change // it's total progress. // // Callers should regularly query for a cancel request by calling this function with all parameters set to 0 even if no measurable progress occured. // // Parameters: // // ullSizeTotal, nFilesTotal, nFoldersTotal // Total size in bytes, number of files and number of folders. This includes what has been processed and what will be processed. // Setting all three to 0 indicates that the totals have not changed since the last call to UpdateProgress. // // ullSizeCurrent, nFilesCurrent, nFoldersCurrent // Number of bytes, files and folders processed since the start of the operation. // Setting all six parameters to zero indicates that progress has not changed since the last call to UpdateProgress. // // Return values: // COPYENGINE_E_USER_CANCELLED // The user has cancelled the operation and the caller should halt execution of the operation as soon as possible. // // Any other error: // The caller should halt execution of the operation as soon as possible. HRESULT UpdateProgress( [in, annotation("__in")] ULONGLONG ullSizeCurrent, [in, annotation("__in")] ULONGLONG ullSizeTotal, [in, annotation("__in")] int nFilesCurrent, [in, annotation("__in")] int nFilesTotal, [in, annotation("__in")] int nFoldersCurrent, [in, annotation("__in")] int nFoldersTotal); HRESULT UpdateTransferState([in, annotation("__in")] TRANSFER_ADVISE_STATE ts); // ConfirmOverwrite // // Parameters: // psiSource // Source IShellItem. // psiDestParent // Destination's parent folder's IShellItem. // pszName // Pointer to wide-string containing the name of the item. If NULL, // the name is the same as the psiSource's. // // Return Values from Confirmations // COPYENGINE_S_USER_IGNORED // Continue operation // COPYENGINE_E_USER_CANCELLED // is a user-interaction cancel. The user clicked "Cancel" somewhere. // // Any other HRESULT should be passed up. // Confirm that the operation is ok to actually overwrite an existing item HRESULT ConfirmOverwrite( [in, annotation("__in")] IShellItem *psiSource, [in, annotation("__in")] IShellItem *psiDestParent, [in, string, annotation("__in")] LPCWSTR pszName); // Confirm that the operation is ok to lose encryption (disclosure) HRESULT ConfirmEncryptionLoss([in, annotation("__in")] IShellItem *psiSource); // Parameters: // psi // The IShellItem that is reporting the failure. // pszItem // If NULL, the "psi"'s display name will be used. // If not NULL, this should be a pointer to a string that is the // name of the item. // hrError // The error that is being reported. // pszRename // A buffer that the caller passes if it wants to be able to // retry the operation with a new destination name. If this // parameter is NULL, no option to rename will be available. // cchRename // Size of the buffer pointed to be pszRename. // // Return Values: // COPYENGINE_S_USER_RETRY // The handler should retry the file operation. // COPYENGINE_S_USER_IGNORED // The handler should skip creating the item and return this code // back to the copy engine. // COPYENGINE_E_USERCANCELLED // The user clicked "Cancel" somewhere. The entire copy job is // being aborted. The handler should return this code back to the // copy engine. // // Any other HRESULT should be passed up. If failure not handled, // the return value should be the same as hrError. HRESULT FileFailure( [in, annotation("__in")] IShellItem *psi, [in, unique, string, annotation("__in_opt")] LPCWSTR pszItem, [in, annotation("__in")] HRESULT hrError, [out, unique, size_is(cchRename), annotation("__out_ecount_opt(cchRename)")] LPWSTR pszRename, [in, annotation("__in")] ULONG cchRename); HRESULT SubStreamFailure( [in, annotation("__in")] IShellItem *psi, [in, string, annotation("__in")] LPCWSTR pszStreamName, [in, annotation("__in")] HRESULT hrError); HRESULT PropertyFailure( [in, annotation("__in")] IShellItem *psi, [in, unique, annotation("__in_opt")] const PROPERTYKEY* pkey, // (pkey == NULL) indicates loss of all properties [in, annotation("__in")] HRESULT hrError); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(00adb003-bde9-45c6-8e29-d09f9353e108), pointer_default(unique), local ] interface ITransferSource : IUnknown { // Description: // Do an advise before calling anything so the handler can callback for // any errors that might occur. If not set, the handler should consider // it an indication that no feedback is available and to do the "default" // operation. // // Parameters: // psink // ITransferAdviseSink interface to be used for status and // failures. // pdwCookie // Pointer to a returned token that uniquely identifies this // connection. The caller uses this token later to delete the // connection by passing it to the Unadvise method. If the // connection was not successfully established, this value is zero. // // Return Values: // S_OK // Interface successfully associated. // E_UNEXPECTED // The handler can only handle one sink interface. // // other HRESULTs indicate a failure. HRESULT Advise( [in, annotation("__in")] ITransferAdviseSink *psink, [out, annotation("__out")] DWORD *pdwCookie); // Description: // Terminates an advisory connection previously established through // Advise method. The dwCookie parameter identifies the connection // to terminate // // Parameters: // dwCookie // Connection token previously returned from Advise. // // Return Values: // S_OK // The connection was successfully terminated. // CONNECT_E_NOCONNECTION // The value in dwCookie does not represent a valid connection. // // other HRESULTs indicate a failure. HRESULT Unadvise([in, annotation("__in")] DWORD dwCookie); // Description: // Set properties that should be applied to an item // // Parameters: // pproparray // Contains a list of changes // // Return Values: // S_OK // Properties set successfully // other HRESULTs indicate a failure. HRESULT SetProperties([in, annotation("__in")] IPropertyChangeArray *pproparray); // Open the item for copying, returning an object that can be enumerated // for resources (IShellItemResources). HRESULT OpenItem( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags, [in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_out")] void **ppv); // Move the item within the volume/namespace, returning the shell item // in its new location. // returns: // FAILED() codes with special meaning for // HRESULT_FROM_WIN32(ERROR_NOT_SAME_DEVICE) -> caller should convert move into a copy/delete // E_NOINTERFACE -> caller should convert move into a copy/delete // in the case of moving a folder // HRESULT_FROM_WIN32(ERROR_FILE_EXISTS) or HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) // indicates // to convert to a copy/delete the destination item must support ITransferDestination // // SUCCEEDED() code with special meaning for // S_OK - move succeeded, *ppsiNew contains the new item that is the target of the move // COPYENGINE_S_USER_IGNORED -> *ppsiNew is NULL, the destination item already exists and // has not been overwritten. caller should complete the "move" by deleting the /// source item // COPYENGINE_S_MERGE -> *ppsiNew is NULL, the destination folder already exists // and the user has chosen to proceed merging the folder, the caller should complete // the "move" of the folder by deleting the source HRESULT MoveItem( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] IShellItem *psiParentDst, [in, string, annotation("__in")] LPCWSTR pszNameDst, [in] TRANSFER_SOURCE_FLAGS flags, [out, annotation("__deref_out")] IShellItem **ppsiNew); // Recycle the item into the provided recycle location, returning the new // recycled item in that location. HRESULT RecycleItem( [in, annotation("__in")] IShellItem *psiSource, [in, annotation("__in")] IShellItem *psiParentDest, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags, [out, annotation("__deref_out")] IShellItem **ppsiNewDest); // Removed the item (without recycle support) HRESULT RemoveItem( [in, annotation("__in")] IShellItem *psiSource, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags); // Change the name of an item, returing the shell item in its new location HRESULT RenameItem( [in, annotation("__in")] IShellItem *psiSource, [in, string, annotation("__in")] LPCWSTR pszNewName, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags, [out, annotation("__deref_out")] IShellItem **ppsiNewDest); // not used or supported, return E_NOTIMPL HRESULT LinkItem( [in, annotation("__in")] IShellItem *psiSource, [in, annotation("__in")] IShellItem *psiParentDest, [in, unique, string, annotation("__in_opt")] LPCWSTR pszNewName, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags, [out, annotation("__deref_out")] IShellItem **ppsiNewDest); // Apply a set of property changes to an item, return the modified shell item. HRESULT ApplyPropertiesToItem( [in, annotation("__in")] IShellItem *psiSource, [out, annotation("__deref_out")] IShellItem **ppsiNew); // Return the default name, if different from the items parsing name. HRESULT GetDefaultDestinationName( [in, annotation("__in")] IShellItem *psiSource, [in, annotation("__in")] IShellItem *psiParentDest, [out, string, annotation("__deref_out")] LPWSTR *ppszDestinationName); // Description: // These are called after a destination folder item has been created. // EnterFolder() will be called before the children objects will be // created. // // Expected the order of operations to be: // DoCopyItem( psiParentSource, psiParentFolderDest, pszChildName ) // { // psiParentSource->BindToHandler( ..., &ptsParentFolderSource) // ptsParentSource->Advise( psink, &dwCookie ) // ptsParentSource->CopyItem( psiParentFolderDest, pszChildName, 0, &psiFolderDest ) // if ( psiParentSource.HasChildren() ) // { // ptsParentSource->EnterFolder( psiFolderDest ) // for each child in psiParentSource // { // psiParentSource->"GetChild"( &psiChildSource ); <-- a little more complicated // DoCopyItem( psiChildSource , psiFolderDest ) // } // ptsParentSource->LeaveFolder( psiFolderDest ) // } // ptsParentSource->Unadvise( dwCookie ) // } // // Parameters: // psiChildFolderDest // IShellItem of the folder being entered. // // Return Values: // S_OK // Operation successful. // // other HRESULTs indicate failure. HRESULT EnterFolder([in, annotation("__in")] IShellItem *psiChildFolderDest); HRESULT LeaveFolder([in, annotation("__in")] IShellItem *psiChildFolderDest); } cpp_quote("#endif // _WIN32_IE_IE70") typedef struct SHELL_ITEM_RESOURCE { GUID guidType; WCHAR szName[260 /*MAX_PATH*/]; } SHELL_ITEM_RESOURCE; [ object, uuid(2dd81fe3-a83c-4da9-a330-47249d345ba1), pointer_default(unique) ] interface IEnumResources : IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] SHELL_ITEM_RESOURCE *psir, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumResources **ppenumr); } [ object, uuid(ff5693be-2ce0-4d48-b5c5-40817d1acdb9), pointer_default(unique) ] interface IShellItemResources : IUnknown { HRESULT GetAttributes([out] DWORD *pdwAttributes); HRESULT GetSize([out] ULONGLONG *pullSize); HRESULT GetTimes( [out] FILETIME *pftCreation, [out] FILETIME *pftWrite, [out] FILETIME *pftAccess); HRESULT SetTimes( [in, unique] const FILETIME *pftCreation, [in, unique] const FILETIME *pftWrite, [in, unique] const FILETIME *pftAccess); HRESULT GetResourceDescription( [in] const SHELL_ITEM_RESOURCE *pcsir, [out, string] LPWSTR *ppszDescription); HRESULT EnumResources([out] IEnumResources **ppenumr); HRESULT SupportsResource([in] const SHELL_ITEM_RESOURCE *pcsir); HRESULT OpenResource( [in] const SHELL_ITEM_RESOURCE *pcsir, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT CreateResource( [in] const SHELL_ITEM_RESOURCE *pcsir, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT MarkForDelete(); } [ object, uuid(48addd32-3ca5-4124-abe3-b5a72531b207), pointer_default(unique), local ] interface ITransferDestination : IUnknown { // *** 1: advise *** // Do an advise before calling anything so the object can callback for // any errors that might occur. If not set, the object should consider // it an indication that no feedback is available and to do the "default" // for the operation. HRESULT Advise( [in, annotation("__in")] ITransferAdviseSink * psink, [out, annotation("__out")] DWORD * pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); // returns: // SUCCEEDED() code with special meaning for // S_OK - move succeeded, *ppvItem and *ppvResources contains the new item and resources object // that should be copied to // COPYENGINE_S_USER_IGNORED -> *ppvItem and *ppvResources are NULL, the destination item already exists and // has not been overwritten. if the caller is implemeting "move" as copy/delete it should complete // the "move" by deleting the source item HRESULT CreateItem( [in, string, annotation("__in")] LPCWSTR pszName, // FILE_ATTRIBUTE_XXX values, most important being FILE_ATTRIBUTE_DIRECTORY indicating that // a folder should be created [in, annotation("__in")] DWORD dwAttributes, // the size of the item being copied or zero if unknow [in, annotation("__in")] ULONGLONG ullSize, [in, annotation("__in")] TRANSFER_SOURCE_FLAGS flags, // ppvItem should be an IShellItem or derived interface [in, annotation("__in")] REFIID riidItem, [out, iid_is(riidItem), annotation("__deref_out")] void **ppvItem, // ppvResources should be an IShellItemResources or derived interface [in, annotation("__in")] REFIID riidResources, [out, iid_is(riidResources), annotation("__deref_out")] void **ppvResources); } // This structure is defined in winbase.h or winternl.h which is not visible to idl files, // so we redeclare it here. cpp_quote("#ifdef MIDL_PASS") typedef struct _OVERLAPPED { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; }; PVOID Pointer; }; HANDLE hEvent; } OVERLAPPED, *LPOVERLAPPED; cpp_quote("#endif // MIDL_PASS") [ object, uuid(fe0b6665-e0ca-49b9-a178-2b5cb48d92a5), pointer_default(unique), local ] interface IStreamAsync : IStream { HRESULT ReadAsync([out, size_is(cb), length_is(*pcbRead), annotation("__out_bcount_part(cb, *pcbRead)")] void *pv, [in] DWORD cb, [out, annotation("__out_opt __deref_out_range(0, cb)")] LPDWORD pcbRead, [in, annotation("__in")] LPOVERLAPPED lpOverlapped); HRESULT WriteAsync([in, size_is(cb), annotation("__in_bcount(cb)")] void const *lpBuffer, [in] DWORD cb, [out, annotation("__out_opt __deref_out_range(0, cb)")] LPDWORD pcbWritten, [in, annotation("__in")] LPOVERLAPPED lpOverlapped); HRESULT OverlappedResult([in, annotation("__in")] LPOVERLAPPED lpOverlapped, [out, annotation("__out")] LPDWORD lpNumberOfBytesTransferred, [in, annotation("__in")] BOOL bWait); HRESULT CancelIo(); } [ object, uuid(8a68fdda-1fdc-4c20-8ceb-416643b5a625), pointer_default(unique), local ] interface IStreamUnbufferedInfo : IUnknown { HRESULT GetSectorSize([out, annotation("__out")] ULONG *pcbSectorSize); } cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ object, uuid(04b0f1a7-9490-44bc-96e1-4296a31252e2), pointer_default(unique), ] interface IFileOperationProgressSink : IUnknown { HRESULT StartOperations(); HRESULT FinishOperations( [in] HRESULT hrResult); HRESULT PreRenameItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in, unique, string] LPCWSTR pszNewName); HRESULT PostRenameItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in, string] LPCWSTR pszNewName, [in] HRESULT hrRename, [in] IShellItem *psiNewlyCreated); HRESULT PreMoveItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostMoveItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in] HRESULT hrMove, [in] IShellItem *psiNewlyCreated); HRESULT PreCopyItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostCopyItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in] HRESULT hrCopy, [in] IShellItem *psiNewlyCreated); HRESULT PreDeleteItem( [in] DWORD dwFlags, [in] IShellItem *psiItem); HRESULT PostDeleteItem( [in] DWORD dwFlags, [in] IShellItem *psiItem, [in] HRESULT hrDelete, [in] IShellItem *psiNewlyCreated); HRESULT PreNewItem( [in] DWORD dwFlags, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName); HRESULT PostNewItem( [in] DWORD dwFlags, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in, unique, string] LPCWSTR pszTemplateName, [in] DWORD dwFileAttributes, [in] HRESULT hrNew, [in] IShellItem *psiNewItem); HRESULT UpdateProgress( [in] UINT iWorkTotal, [in] UINT iWorkSoFar); HRESULT ResetTimer(); HRESULT PauseTimer(); HRESULT ResumeTimer(); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // Shell Item Container [ uuid(b63ea76d-1f85-456f-a19c-48159efa858b), object, pointer_default(unique) ] interface IShellItemArray : IUnknown { typedef [v1_enum] enum SIATTRIBFLAGS { SIATTRIBFLAGS_AND = 0x00000001, // if multiple items and the attirbutes together. SIATTRIBFLAGS_OR = 0x00000002, // if multiple items or the attributes together. SIATTRIBFLAGS_APPCOMPAT = 0x00000003, // Call GetAttributes directly on the ShellFolder for multiple attributes SIATTRIBFLAGS_MASK = 0x00000003, // for the AND/OR/APPCOMPAT value SIATTRIBFLAGS_ALLITEMS = 0x00004000, // normally only the first few items are used to compute the attributes, pass this to force all of them // doing all will result in poor performance for large arrays so use this carefuly } SIATTRIBFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)") // some bits are flags, others are not // bhid values supported for the handler type are defined in shlguid.h // BHID_DataObject - IDataObject, only works for flat data objects or item arrays produced directly using SHCreateShellItemArrayFromDataObject() // BHID_AssociationArray - IQueryAssociations from the first item in the array // BHID_SFUIObject - only works for flat (items in the same folder) item array HRESULT BindToHandler([in, unique] IBindCtx *pbc, [in] REFGUID bhid, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); HRESULT GetPropertyStore([in] GETPROPERTYSTOREFLAGS flags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPropertyDescriptionList([in] REFPROPERTYKEY keyType, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // get the attributes for the items using different methods defined by SIATTRIBFLAGS HRESULT GetAttributes([in] SIATTRIBFLAGS AttribFlags, [in] SFGAOF sfgaoMask, [out] SFGAOF *psfgaoAttribs); HRESULT GetCount([out] DWORD *pdwNumItems); HRESULT GetItemAt([in] DWORD dwIndex, [out] IShellItem **ppsi); HRESULT EnumItems([out] IEnumShellItems **ppenumShellItems); } //cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("SHSTDAPI SHCreateShellItemArray(__in_opt PCIDLIST_ABSOLUTE pidlParent, __in_opt IShellFolder *psf, __in UINT cidl, __in_ecount_opt(cidl) PCUITEMID_CHILD_ARRAY ppidl, __deref_out IShellItemArray **ppsiItemArray);") cpp_quote("SHSTDAPI SHCreateShellItemArrayFromDataObject(__in IDataObject *pdo, __in REFIID riid, __deref_out void **ppv);") cpp_quote("SHSTDAPI SHCreateShellItemArrayFromIDLists(__in UINT cidl, __in_ecount(cidl) PCIDLIST_ABSOLUTE_ARRAY rgpidl, __deref_out IShellItemArray **ppsiItemArray);") cpp_quote("SHSTDAPI SHCreateShellItemArrayFromShellItem(__in IShellItem *psi, __in REFIID riid, __deref_out void **ppv);") cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") [ uuid(7f73be3f-fb79-493c-a6c7-7ee14e245841), object, pointer_default(unique) ] interface IInitializeWithItem : IUnknown { // grfMode is STGM_ values indicating read/readwrite and sharing modes HRESULT Initialize([in] IShellItem *psi, [in] DWORD grfMode); } [ object, uuid(1c9cd5bb-98e9-4491-a60f-31aacc72b83c), pointer_default(unique) ] interface IObjectWithSelection : IUnknown { HRESULT SetSelection([in] IShellItemArray *psia); HRESULT GetSelection( [in] REFIID riid, [out, iid_is(riid)] void **ppv); } [ object, uuid(321a6a6a-d61f-4bf3-97ae-14be2986bb36), pointer_default(unique) ] interface IObjectWithBackReferences : IUnknown { // This method is used for all tasks associated with freeing/releasing back references held // by an object, and may prepare an object for reuse HRESULT RemoveBackReferences(); } [v1_enum] enum _PROPERTYUI_NAME_FLAGS { PUIFNF_DEFAULT = 0x00000000, PUIFNF_MNEMONIC = 0x00000001, // include mnemonic in display name }; typedef DWORD PROPERTYUI_NAME_FLAGS; [v1_enum] enum _PROPERTYUI_FLAGS { PUIF_DEFAULT = 0x00000000, PUIF_RIGHTALIGN = 0x00000001, // this property should be right aligned PUIF_NOLABELININFOTIP = 0x00000002, // this property should not display a label in the infotip }; typedef DWORD PROPERTYUI_FLAGS; [v1_enum] enum _PROPERTYUI_FORMAT_FLAGS { PUIFFDF_DEFAULT = 0x00000000, PUIFFDF_RIGHTTOLEFT = 0x00000001, // deprecated - do not use 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 }; typedef DWORD PROPERTYUI_FORMAT_FLAGS; // helper service for dealing with properties ala IPropertySetStorage [ uuid(757a7d9f-919a-4118-99d7-dbb208c8cc66), object, pointer_default(unique) ] interface IPropertyUI : IUnknown { HRESULT ParsePropertyName( [in, string] LPCWSTR pszName, [out] FMTID *pfmtid, [out] PROPID *ppid, [in, out] ULONG *pchEaten); HRESULT GetCannonicalName( [in] REFFMTID fmtid, [in] PROPID pid, [out, string, 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 *ppropvar, [in] PROPERTYUI_FORMAT_FLAGS puiff, [out, string, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText); HRESULT GetHelpInfo( [in] REFFMTID fmtid, [in] PROPID pid, [out, string, size_is(cch)] LPWSTR pwszHelpFile, [in] DWORD cch, [out] UINT *puHelpID); } cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("SHSTDAPI SHRemovePersonalPropertyValues(__in IShellItemArray *psia);") cpp_quote("SHSTDAPI SHAddDefaultPropertiesByExt(PCWSTR pszExt, IPropertyStore *pPropStore);") cpp_quote("SHSTDAPI SHCreateDefaultPropertiesOp(IShellItem *psi, __out IFileOperation **ppFileOp);") cpp_quote("SHSTDAPI SHSetDefaultProperties(__in_opt HWND hwnd, IShellItem *psi, DWORD dwFileOpFlags, __in_opt IFileOperationProgressSink *pfops);") cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") //------------------------------------------------------------- // Folder Category Support //------------------------------------------------------------- cpp_quote("#if (_WIN32_IE >= 0x0500)") // Provides a list of catagorizers registered on an IShellFolder [ uuid(9af64809-5864-4c26-a720-c1f78c086ee3), object, pointer_default(unique) ] interface ICategoryProvider : IUnknown { // Returns S_OK if the view should display this column in category selection UI, or S_FALSE to remove it. HRESULT CanCategorizeOnSCID([in] const SHCOLUMNID* pscid); // 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( [out] GUID* pguid, [out] SHCOLUMNID* pscid); // Returns either a GUID that represents the categoizer to use for the specified SHCOLUMNID. HRESULT GetCategoryForSCID( [in] const SHCOLUMNID* pscid, [out] GUID* pguid); // Returns an IEnumGUID that has a list of GUIDs that represent categories. HRESULT EnumCategories([out] IEnumGUID** penum); // Returns the name of the given category. HRESULT GetCategoryName( [in] const GUID* pguid, [out, string, size_is(cch)] LPWSTR pszName, [in] UINT cch); // Creates the category. HRESULT CreateCategory( [in] const GUID* pguid, [in] REFIID riid, [out, iid_is(riid)] void** ppv); } typedef [v1_enum] enum CATEGORYINFO_FLAGS { 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 CATINFO_EXPANDED = 0x00000004, // This category should appear expanded. CATINFO_NOHEADER = 0x00000008, // This category has no header. CATINFO_NOTCOLLAPSIBLE = 0x00000010, // This category can not be collapsed. CATINFO_NOHEADERCOUNT = 0x00000020, // The count of items in the category should not be displayed in the header // Win7 Flags CATINFO_SUBSETTED = 0x00000040, // The category should appear subsetted. } CATEGORYINFO_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CATEGORYINFO_FLAGS)") typedef [v1_enum] enum CATSORT_FLAGS { CATSORT_DEFAULT = 0x00000000, // Default Sort order CATSORT_NAME = 0x00000001, // Sort by name } CATSORT_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CATSORT_FLAGS)") typedef struct CATEGORY_INFO { CATEGORYINFO_FLAGS cif; WCHAR wszName[260]; } CATEGORY_INFO; //------------------------------------------------------------- // ICategorizer //------------------------------------------------------------- // Categorizes items [ uuid(a3b14589-9174-49a8-89a3-06a1ae2b9ba7), object, pointer_default(unique) ] interface ICategorizer : IUnknown { // Returns the description of this category that will be displayed in the UI HRESULT GetDescription( [out, string, size_is(cch)] LPWSTR pszDesc, [in] UINT cch); // 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)] PCUITEMID_CHILD_ARRAY apidl, [out, size_is(cidl)] DWORD* rgCategoryIds); // Returns information about the category, such as default display and the text to display in the UI HRESULT GetCategoryInfo( [in] DWORD dwCategoryId, [out] CATEGORY_INFO* pci); // Returns HRESULTFromShort. -1, 0, 1 indicate the comparison of the IDs. Used for sorting categories in the UI HRESULT CompareCategory( [in] CATSORT_FLAGS csfFlags, [in] DWORD dwCategoryId1, [in] DWORD dwCategoryId2); } cpp_quote("#endif // (_WIN32_IE >= 0x0500)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN2K)") /////////////////////////////////////////////////////// // // Drag and Drop helper // // Purpose: To expose the Shell drag images // // This interface is implemented in the shell by CLSID_DragDropHelper. // // To use: // If you are the source of a drag (i.e. in response to LV_DRAGBEGIN or // equivelent begin drag message) call // IDragSourceHelper::InitializeFromWindow // (, // , // ) // // NOTE: The Data object must support IDataObject::SetData with multiple // data types and GetData must implement data type cloning // (Including HGLOBAL), not just aliasing. // // If you want to adjust the behavior of the drag image by calling // IDragSourceHelper2::SetFlags then that call to SetFlags should be // made before calling InitializeFromWindow or InitializeFromBitmap. // // If you wish to have an image while over your application add the // IDragImages::Dr* calls to your IDropTarget implementation. For Example: // // STDMETHODIMP CUserDropTarget::DragEnter(IDataObject* pDataObject, // DWORD grfKeyState, // POINTL pt, DWORD* pdwEffect) // { // // Process your DragEnter // // Call IDragImages::DragEnter last. // _pDropTargetHelper->DragEnter(_hwndDragOver, pDataObject, // (POINT*)&pt, *pdwEffect); // return hres; // } // // // If you wish to be able to source a drag image from a custom control, // implement a handler for the RegisterWindowMessage(DI_GETDRAGIMAGE). // The LPARAM is a pointer to an SHDRAGIMAGE structure. // // sizeDragImage - Calculate the length and width required to render // the images. // ptOffset - Calculate the offset from the upper left corner to // the mouse cursor within the image // hbmpDragImage - CreateBitmap( sizeDragImage.cx, sizeDragImage.cy, // GetDeviceCaps(hdcScreen, PLANES), // GetDeviceCaps(hdcScreen, BITSPIXEL), // NULL); // // Drag Images will only be displayed on Windows NT 5.0 or later. // // // Note about IDropTargetHelper::Show - This method is provided for // showing/hiding the Drag image in low color depth video modes. When // painting to a window that is currently being dragged over (i.e. For // indicating a selection) you need to hide the drag image by calling this // method passing FALSE. After the window is done painting, Show the image // again by passing TRUE. cpp_quote("#include ") typedef struct SHDRAGIMAGE { SIZE sizeDragImage; // OUT - The length and Width of the rendered image POINT ptOffset; // OUT - The Offset from the mouse cursor to the upper left corner of the image HBITMAP hbmpDragImage; // OUT - The Bitmap containing the rendered drag images COLORREF crColorKey; // OUT - The COLORREF that has been blitted to the background of the images } SHDRAGIMAGE, *LPSHDRAGIMAGE; cpp_quote("#include // Return to byte packing") // This is sent to a window to get the rendered images to a bitmap // Call RegisterWindowMessage to get the ID cpp_quote("#define DI_GETDRAGIMAGE TEXT(\"ShellGetDragImage\")") [ uuid(4657278B-411B-11D2-839A-00C04FD918D0), local, pointer_default(unique) ] interface IDropTargetHelper : IUnknown { HRESULT DragEnter( [in, annotation("__in")] HWND hwndTarget, [in, annotation("__in")] IDataObject* pDataObject, [in, annotation("__in")] POINT* ppt, [in, annotation("__in")] DWORD dwEffect); HRESULT DragLeave(); HRESULT DragOver( [in, annotation("__in")] POINT* ppt, [in, annotation("__in")] DWORD dwEffect); HRESULT Drop( [in, annotation("__in")] IDataObject* pDataObject, [in, annotation("__in")] POINT* ppt, [in, annotation("__in")] DWORD dwEffect); HRESULT Show([in, annotation("__in")] BOOL fShow); } [ uuid(DE5BF786-477A-11D2-839D-00C04FD918D0), local, pointer_default(unique) ] interface IDragSourceHelper: IUnknown { // IDragSourceHelper HRESULT InitializeFromBitmap( [in, annotation("__in")] LPSHDRAGIMAGE pshdi, [in, annotation("__in")] IDataObject* pDataObject); HRESULT InitializeFromWindow( [in, unique, annotation("__in_opt")] HWND hwnd, [in, unique, annotation("__in_opt")] POINT* ppt, [in, annotation("__in")] IDataObject* pDataObject); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // IDragSourceHelper2::SetFlags dwFlags typedef [v1_enum] enum DSH_FLAGS { DSH_ALLOWDROPDESCRIPTIONTEXT = 0x0001, // Allow text specified in DropDescription to be displayed on drag image } DSH_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DSH_FLAGS)") [ uuid(83E07D0D-0C5F-4163-BF1A-60B274051E40), local, pointer_default(unique) ] interface IDragSourceHelper2 : IDragSourceHelper { HRESULT SetFlags( [in, annotation("__in")] DWORD dwFlags); } cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#endif // NTDDI_WIN2K") cpp_quote("#ifdef UNICODE") cpp_quote("#define IShellLink IShellLinkW") cpp_quote("#else") cpp_quote("#define IShellLink IShellLinkA") cpp_quote("#endif") // IShellLink::Resolve fFlags typedef [v1_enum] enum SLR_FLAGS { 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_OFFER_DELETE_WITHOUT_FILE = 0x0200, // offer the option to delete when unable to resolve, even if the shortcut is not file-backed SLR_KNOWNFOLDER = 0x0400, // report dirty if target is known folder and it got redirected -- // this only works if orignal target was a file system path/ID list and not an aliased known folder ID list SLR_MACHINE_IN_LOCAL_TARGET = 0x0800, // resolve machine name in UNC targets pointing to local machine (used with SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET) SLR_UPDATE_MACHINE_AND_SID = 0x1000, // update machine GUID and user SID if necessary } SLR_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SLR_FLAGS)") // IShellLink::GetPath fFlags typedef [v1_enum] enum SLGP_FLAGS { SLGP_SHORTPATH = 0x0001, SLGP_UNCPRIORITY = 0x0002, SLGP_RAWPATH = 0x0004, SLGP_RELATIVEPRIORITY = 0x0008, } SLGP_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SLGP_FLAGS)") [ uuid(000214EE-0000-0000-C000-000000000046), object, pointer_default(unique) ] interface IShellLinkA : IUnknown { HRESULT GetPath( [out, string, size_is(cch)] LPSTR pszFile, [in] int cch, [in, out, unique] WIN32_FIND_DATAA *pfd, [in] DWORD fFlags); HRESULT GetIDList( [out] PIDLIST_ABSOLUTE * ppidl); HRESULT SetIDList( [in] PCIDLIST_ABSOLUTE pidl); HRESULT GetDescription( [out, string, size_is(cch)] LPSTR pszName, [in] int cch); HRESULT SetDescription( [in, string] LPCSTR pszName); HRESULT GetWorkingDirectory( [out, string, size_is(cch)] LPSTR pszDir, [in] int cch); HRESULT SetWorkingDirectory( [in, string] LPCSTR pszDir); HRESULT GetArguments( [out, string, size_is(cch)] LPSTR pszArgs, [in] int cch); HRESULT SetArguments( [in, string] 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, string, size_is(cch)] LPSTR pszIconPath, [in] int cch, [out] int *piIcon); HRESULT SetIconLocation( [in, string] LPCSTR pszIconPath, [in] int iIcon); HRESULT SetRelativePath( [in, string] LPCSTR pszPathRel, [in] DWORD dwReserved); HRESULT Resolve( [in, unique] HWND hwnd, [in] DWORD fFlags); HRESULT SetPath( [in, string] LPCSTR pszFile); } [ uuid(000214F9-0000-0000-C000-000000000046), object, pointer_default(unique) ] interface IShellLinkW : IUnknown { HRESULT GetPath( [out, string, size_is(cch)] LPWSTR pszFile, [in] int cch, [in, out, unique] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags); HRESULT GetIDList( [out] PIDLIST_ABSOLUTE * ppidl); HRESULT SetIDList( [in, unique] PCIDLIST_ABSOLUTE pidl); HRESULT GetDescription( [out, string, size_is(cch)] LPWSTR pszName, int cch); HRESULT SetDescription( [in, string] LPCWSTR pszName); HRESULT GetWorkingDirectory( [out, string, size_is(cch)] LPWSTR pszDir, int cch); HRESULT SetWorkingDirectory( [in, string] LPCWSTR pszDir); HRESULT GetArguments( [out, string, size_is(cch)] LPWSTR pszArgs, [in] int cch); HRESULT SetArguments( [in, string] 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, string, size_is(cch)] LPWSTR pszIconPath, [in] int cch, [out] int *piIcon); HRESULT SetIconLocation( [in, string] LPCWSTR pszIconPath, [in] int iIcon); HRESULT SetRelativePath( [in, string] LPCWSTR pszPathRel, [in] DWORD dwReserved); HRESULT Resolve( [in, unique] HWND hwnd, [in] DWORD fFlags); HRESULT SetPath( [in, string] LPCWSTR pszFile); } [ uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1), object, pointer_default(unique) #ifdef BUILD_SPLIT_AS_IE ,local #endif ] interface IShellLinkDataList : IUnknown { [local] HRESULT AddDataBlock( [in, annotation("__in")] void * pDataBlock); [local] HRESULT CopyDataBlock( [in, annotation("__in")] DWORD dwSig, [out, annotation("__deref_out")] void **ppDataBlock); HRESULT RemoveDataBlock( [in] DWORD dwSig); // flags are SLDF_ values as defined in shlobj.h HRESULT GetFlags( [out] DWORD *pdwFlags); HRESULT SetFlags( [in] DWORD dwFlags); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN2K)") // Link resolution helpers - called when a link is created or needs to be resolved. [ object, uuid(5cd52983-9449-11d2-963a-00c04f79adf0), pointer_default(unique) ] interface IResolveShellLink : IUnknown { HRESULT ResolveShellLink( [in] IUnknown *punkLink, [in] HWND hwnd, [in] DWORD fFlags); } cpp_quote("#endif // NTDDI_WIN2K") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") [ object, uuid(49ff1172-eadc-446d-9285-156453a6431c), pointer_default(unique) ] interface IActionProgressDialog : IUnknown { [v1_enum] enum _SPINITF { 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, unique, string] LPCWSTR pszTitle, [in, unique, string] LPCWSTR pszCancel); HRESULT Stop(); } // HW Event Handler Interface [ object, uuid(C1FB73D0-EC3A-4ba2-B512-8CDB9187B6D1), 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); } // HW Event Handler Interface 2 [ object, uuid(CFCC809F-295D-42e8-9FFC-424B33C487E6), pointer_default(unique) ] interface IHWEventHandler2 : IHWEventHandler { HRESULT HandleEventWithHWND( [in, string] LPCWSTR pszDeviceID, [in, string] LPCWSTR pszAltDeviceID, [in, string] LPCWSTR pszEventType, [in] HWND hwndOwner); } // Do not use 0x1, it was used to indicate cancellation in legacy autoplay. 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 // Any files classified by shell as image. (jpg, bmp, etc.)") cpp_quote("#define ARCONTENT_AUTOPLAYMUSIC 0x00000100 // Any files classified by shell as music. (wma, mp3, etc.)") cpp_quote("#define ARCONTENT_AUTOPLAYVIDEO 0x00000200 // Any files classified by shell as video. (mpg, avi, etc.)") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define ARCONTENT_VCD 0x00000400 // VCD format") cpp_quote("#define ARCONTENT_SVCD 0x00000800 // Super-VCD format") cpp_quote("#define ARCONTENT_DVDAUDIO 0x00001000 // DVD-Audio") cpp_quote("#define ARCONTENT_BLANKBD 0x00002000 // Blank BD-R/BD-RW") cpp_quote("#define ARCONTENT_BLURAY 0x00004000 // Blu-ray Disc") cpp_quote("#define ARCONTENT_NONE 0x00000000 // Empty (but formatted)") cpp_quote("#define ARCONTENT_MASK 0x00007FFE // Bits that denote valid content types") cpp_quote("#define ARCONTENT_PHASE_UNKNOWN 0x00000000 // We can be in any phase. This is XP behavior.") cpp_quote("#define ARCONTENT_PHASE_PRESNIFF 0x10000000 // These are contents we know w/o scanning the media for complete data (e.g. Audio track, DVD Movie).") cpp_quote("#define ARCONTENT_PHASE_SNIFFING 0x20000000 // We are in the middle of searching the media. There could be more contents to be found than currently reported.") cpp_quote("#define ARCONTENT_PHASE_FINAL 0x40000000 // We have finished searching; contents we report are final.") cpp_quote("#define ARCONTENT_PHASE_MASK 0x70000000 // Bits that denote what phase we are in the Autoplay process.") cpp_quote("#endif // NTDDI_VISTA") // HW Event Handler Interface [ object, uuid(DDEFE873-6997-4e68-BE26-39B633ADBE12), pointer_default(unique) ] interface IQueryCancelAutoPlay : IUnknown { HRESULT AllowAutoPlay( [in, string] LPCWSTR pszPath, [in] DWORD dwContentType, [in, string] LPCWSTR pszLabel, [in] DWORD dwSerialNumber); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // // IDynamicHWHandler is a new feature in AutoPlay V3 (Vista) // A handler can register this interface for show/hide itself from the Autoplay prompt dialog. // Additionally, it may specify a different action string than one supplied by the static // handler registration under HKLM. // // params: // [in] pszDeviceID - DevicePath or drive root (e.g. G:\), // [in] dwContentType - bitfield of content types detected so far, similar to the param in IQueryCancelAutoPlay // [out] *ppszAction - if not NULL, use this as the Action string. // if NULL, fallback to default static action string. // // returns: // S_OK = show, S_FALSE = hide, E_xx = error // // Dynamic HW Handler Interface [ object, uuid(DC2601D7-059E-42fc-A09D-2AFD21B6D5F7), pointer_default(unique) ] interface IDynamicHWHandler : IUnknown { HRESULT GetDynamicInfo( [in, string] LPCWSTR pszDeviceID, [in] DWORD dwContentType, [out, string] LPWSTR* ppszAction); } cpp_quote("#endif // NTDDI_VISTA") [ object, uuid(49ff1173-eadc-446d-9285-156453a6431c), pointer_default(unique) ] interface IActionProgress : IUnknown { [v1_enum] enum _SPBEGINF { 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) SPBEGINF_NOCANCELBUTTON = 0x00000040, // no cancel button }; 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_DELETING, // Vista or higher SPACTION_RENAMING, // Vista or higher SPACTION_FORMATTING, // Vista or higher SPACTION_COPY_MOVING, // Move as copy-delete, Windows 7 or higher } SPACTION; typedef [v1_enum] enum _SPTEXT { SPTEXT_ACTIONDESCRIPTION = 1, SPTEXT_ACTIONDETAIL, } SPTEXT; HRESULT Begin( [in] SPACTION action, [in] SPBEGINF flags); HRESULT UpdateProgress( [in] ULONGLONG ulCompleted, [in] ULONGLONG ulTotal); HRESULT UpdateText( [in] SPTEXT sptext, [in, string] LPCWSTR pszText, [in] BOOL fMayCompact); HRESULT QueryCancel([out] BOOL * pfCancelled); HRESULT ResetCancel(); HRESULT End(); } //cpp_quote("#endif // NTDDI_WINXP") // 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. // used to initialize an object on a remote computer (server) [ uuid(000214E8-0000-0000-C000-000000000046), object, local, pointer_default(unique) ] interface IShellExtInit : IUnknown { HRESULT Initialize( [in, unique, annotation("__in_opt")] PCIDLIST_ABSOLUTE pidlFolder, [in, unique, annotation("__in_opt")] IDataObject *pdtobj, [in, unique, annotation("__in_opt")] 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 { [v1_enum] enum _EXPPS { EXPPS_FILETYPES = 0x00000001, }; typedef UINT EXPPS; HRESULT AddPages( [in, annotation("__in")] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in, annotation("__in")] LPARAM lParam); HRESULT ReplacePage( [in, annotation("__in")] EXPPS uPageID, [in, annotation("__in")] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in, annotation("__in")] LPARAM lParam); } typedef IShellPropSheetExt * LPSHELLPROPSHEETEXT; [ 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, string] LPCWSTR pszMachine, [in] BOOL bEnumerating); } [ uuid(7307055c-b24a-486b-9f25-163e597a28a9), object, pointer_default(unique) ] interface IQueryContinue : IUnknown { HRESULT QueryContinue(); // S_OK -> Continue, S_FALSE -> Cancel } // This interface supplies a caller with an event that will be signaled // by the callee to denote cancellation of a task. [ uuid(F279B885-0AE9-4b85-AC06-DDECF9408941), object, local, pointer_default(unique) ] interface IObjectWithCancelEvent : IUnknown { // Call this function to retrieve an event that will be signaled when // the callee cancels the operation it's performing. // The caller is responsible for closing the returned handle. HRESULT GetCancelEvent([out, annotation("__out")] HANDLE *phEvent); } [ uuid(ba9711ba-5893-4787-a7e1-41277151550b), object, pointer_default(unique) ] interface IUserNotification : IUnknown { HRESULT SetBalloonInfo( [in, unique, string] LPCWSTR pszTitle, [in, unique, string] LPCWSTR pszText, [in] DWORD dwInfoFlags); HRESULT SetBalloonRetry( [in] DWORD dwShowTime, // times in msec [in] DWORD dwInterval, [in] UINT cRetryCount); HRESULT SetIconInfo( [in, unique] HICON hIcon, [in, unique, string] LPCWSTR pszToolTip); HRESULT Show( [in, unique] IQueryContinue *pqc, [in] DWORD dwContinuePollInterval); HRESULT PlaySound([in, string] LPCWSTR pszSoundName); } [ uuid(19108294-0441-4AFF-8013-FA0A730B0BEA), object ] interface IUserNotificationCallback : IUnknown { // All of these return S_OK to continue, S_FALSE or other error codes to stop // These are all "fire and forget" callbacks. Dont pump messages during these // callbacks... HRESULT OnBalloonUserClick([in] POINT * pt); HRESULT OnLeftClick([in] POINT * pt); HRESULT OnContextMenu([in] POINT * pt); } [ uuid(215913CC-57EB-4FAB-AB5A-E5FA7BEA2A6C), object, pointer_default(unique) ] interface IUserNotification2 : IUnknown { HRESULT SetBalloonInfo( [in, unique, string] LPCWSTR pszTitle, [in, unique, string] LPCWSTR pszText, [in] DWORD dwInfoFlags); HRESULT SetBalloonRetry( [in] DWORD dwShowTime, // times in msec [in] DWORD dwInterval, [in] UINT cRetryCount); HRESULT SetIconInfo( [in, unique] HICON hIcon, [in, unique, string] LPCWSTR pszToolTip); HRESULT Show( [in, unique] IQueryContinue *pqc, [in] DWORD dwContinuePollInterval, [in, unique] IUserNotificationCallback *pSink); 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, string] LPWSTR *ppwszValidChars, [out, string] LPWSTR *ppwszInvalidChars); HRESULT GetMaxLength( [in, string] LPCWSTR pszName, [out] int *piMaxNameLen); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(a0ffbc28-5482-4366-be27-3e81e78e06c2), pointer_default(unique) ] interface ISearchFolderItemFactory : IUnknown { HRESULT SetDisplayName( [in, string] LPCWSTR pszDisplayName); HRESULT SetFolderTypeID( [in] FOLDERTYPEID ftid); HRESULT SetFolderLogicalViewMode( [in] FOLDERLOGICALVIEWMODE flvm); HRESULT SetIconSize( [in] int iIconSize); HRESULT SetVisibleColumns( [in] UINT cVisibleColumns, [in, size_is(cVisibleColumns)] PROPERTYKEY *rgKey); HRESULT SetSortColumns( [in] UINT cSortColumns, [in, size_is(cSortColumns)] SORTCOLUMN *rgSortColumns); HRESULT SetGroupColumn( [in] REFPROPERTYKEY keyGroup); HRESULT SetStacks( [in] UINT cStackKeys, [in, size_is(cStackKeys)] PROPERTYKEY *rgStackKeys); HRESULT SetScope( [in] IShellItemArray *psiaScope); HRESULT SetCondition( [in] ICondition *pCondition); HRESULT GetShellItem( [in] REFIID riid, [out, iid_is(riid)] void **ppv); // returns IShellItem, navigate to this HRESULT GetIDList( [out] PIDLIST_ABSOLUTE *ppidl); } cpp_quote("#endif // NTDDI_VISTA") 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 // (deprecated) 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") [ uuid(BB2E617C-0920-11d1-9A0B-00C04FC2D6C1), object, pointer_default(unique) ] interface IExtractImage : IUnknown { HRESULT GetLocation( [out, string, 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. [ uuid(953BB1EE-93B4-11d1-98A3-00C04FB687DA), object, pointer_default(unique) ] interface IExtractImage2 : IExtractImage { HRESULT GetDateStamp([out] FILETIME *pDateStamp); } typedef IExtractImage2 * LPEXTRACTIMAGE2; [ uuid(e35b4b2e-00da-4bc1-9f13-38bc11f5d417), object, pointer_default(unique) ] interface IThumbnailHandlerFactory : IUnknown { HRESULT GetThumbnailHandler( [in] PCUITEMID_CHILD pidlChild, [in, unique] IBindCtx *pbc, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } [ uuid(b3a4b685-b685-4805-99d9-5dead2873236), // IID_IParentAndItem object, pointer_default(unique) ] interface IParentAndItem : IUnknown { // 2 ways to init // pidlParent == NULL // psf is folder, pidlChild is child relative to psf HRESULT SetParentAndItem( [in, unique] PCIDLIST_ABSOLUTE pidlParent, [in, unique] IShellFolder *psf, [in] PCUITEMID_CHILD pidlChild); // all params optional // ppidlParent gets full pidl to parent of item // ppsf gets parent folder for item // ppidlChild gets item relitve to psf [local] HRESULT GetParentAndItem( [out, annotation("__deref_opt_out")] PIDLIST_ABSOLUTE *ppidlParent, [out, annotation("__deref_opt_out")] IShellFolder **ppsf, [out, annotation("__deref_opt_out")] PITEMID_CHILD *ppidlChild); [call_as(GetParentAndItem)] HRESULT RemoteGetParentAndItem( [out] PIDLIST_ABSOLUTE *ppidlParent, [out] IShellFolder **ppsf, [out] PITEMID_CHILD *ppidlChild); } cpp_quote("#endif") //------------------------------------------------------------------------- // // 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, unique] LPCRECT prcBorder, [in, unique] 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 ") typedef struct DESKBANDINFO { DWORD dwMask; POINTL ptMinSize; POINTL ptMaxSize; POINTL ptIntegral; POINTL ptActual; WCHAR wszTitle[256]; DWORD dwModeFlags; COLORREF crBkgnd; } DESKBANDINFO; cpp_quote("#include ") // 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") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("#define DBIMF_NOGRIPPER 0x0800") cpp_quote("#define DBIMF_ALWAYSGRIPPER 0x1000") cpp_quote("#define DBIMF_NOMARGINS 0x2000") cpp_quote("#endif // NTDDI_VISTA") // 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 tagDESKBANDCID { 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); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") //------------------------------------------------------------------------- // // IDeskBandInfo interface // // // [Member functions] // // IDeskBandInfo::GetDefaultBandWidth(dwBandID, dwViewMode, puWidth) // Call back by bandsite to get the band width that bandsite uses to set // the default width of the band when the band is first added/docked to // bandsite. // //------------------------------------------------------------------------- [ uuid(77E425FC-CBF9-4307-BA6A-BB5727745661), object, ] interface IDeskBandInfo : IUnknown { HRESULT GetDefaultBandWidth( [in] DWORD dwBandID, [in] DWORD dwViewMode, [out] int *pnWidth); } //------------------------------------------------------------------------- // // IDeskBand2 interface // // // [Member functions] // // IDeskBand2::CanRenderComposited(pfCanRenderComposited) // Does the deskband support composited rendering (glass/translucent)? // // IDeskBand2::SetCompositionState(fCompositionEnabled) // Tell the deskband to render with or without composition. // // IDeskBand2::GetCompositionState(pfCompositionEnabled) // Does the deskband currently render with or without composition? // //------------------------------------------------------------------------- [ uuid(79D16DE4-ABEE-4021-8D9D-9169B261D657), object, ] interface IDeskBand2 : IDeskBand { HRESULT CanRenderComposited([out] BOOL *pfCanRenderComposited); HRESULT SetCompositionState([in] BOOL fCompositionEnabled); HRESULT GetCompositionState([out] BOOL *pfCompositionEnabled); } cpp_quote("#endif // NTDDI_VISTA") //------------------------------------------------------------------------- // // 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); } cpp_quote("#ifdef MIDL_PASS") typedef IUnknown* HIMAGELIST; cpp_quote("#endif") typedef [v1_enum] enum THUMBBUTTONFLAGS { THBF_ENABLED = 0x00000000, THBF_DISABLED = 0x00000001, THBF_DISMISSONCLICK = 0x00000002, THBF_NOBACKGROUND = 0x00000004, THBF_HIDDEN = 0x00000008, THBF_NONINTERACTIVE = 0x00000010, } THUMBBUTTONFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)") typedef [v1_enum] enum THUMBBUTTONMASK { THB_BITMAP = 0x00000001, THB_ICON = 0x00000002, THB_TOOLTIP = 0x00000004, THB_FLAGS = 0x00000008, } THUMBBUTTONMASK; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)") cpp_quote("#include ") typedef struct THUMBBUTTON { THUMBBUTTONMASK dwMask; UINT iId; UINT iBitmap; HICON hIcon; WCHAR szTip[260]; THUMBBUTTONFLAGS dwFlags; } THUMBBUTTON, *LPTHUMBBUTTON; cpp_quote("#include ") cpp_quote("#define THBN_CLICKED 0x1800") [ uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf), object, ] interface ITaskbarList3 : ITaskbarList2 { // Flags for Setting Taskbar Progress state typedef [v1_enum] enum TBPFLAG { TBPF_NOPROGRESS = 0x00000000, TBPF_INDETERMINATE = 0x00000001, TBPF_NORMAL = 0x00000002, TBPF_ERROR = 0x00000004, TBPF_PAUSED = 0x00000008, } TBPFLAG; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)") HRESULT SetProgressValue( [in] HWND hwnd, [in] ULONGLONG ullCompleted, [in] ULONGLONG ullTotal); HRESULT SetProgressState( [in] HWND hwnd, [in] TBPFLAG tbpFlags); HRESULT RegisterTab( [in] HWND hwndTab, [in] HWND hwndMDI); HRESULT UnregisterTab( [in] HWND hwndTab); HRESULT SetTabOrder( [in] HWND hwndTab, [in] HWND hwndInsertBefore); HRESULT SetTabActive( [in] HWND hwndTab, [in] HWND hwndMDI, [in] DWORD dwReserved); HRESULT ThumbBarAddButtons( [in] HWND hwnd, [in] UINT cButtons, [in, size_is(cButtons)] LPTHUMBBUTTON pButton); HRESULT ThumbBarUpdateButtons( [in] HWND hwnd, [in] UINT cButtons, [in, size_is(cButtons)] LPTHUMBBUTTON pButton); HRESULT ThumbBarSetImageList( [in] HWND hwnd, [in] HIMAGELIST himl); HRESULT SetOverlayIcon( [in] HWND hwnd, [in] HICON hIcon, [in, unique, string] LPCWSTR pszDescription); HRESULT SetThumbnailTooltip( [in] HWND hwnd, [in, unique, string] LPCWSTR pszTip); HRESULT SetThumbnailClip( [in] HWND hwnd, [in] RECT *prcClip); } [ uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a), object, ] interface ITaskbarList4 : ITaskbarList3 { // Flags for Setting Tab Properties typedef [v1_enum] enum STPFLAG { STPF_NONE = 0x00000000, STPF_USEAPPTHUMBNAILALWAYS = 0x00000001, STPF_USEAPPTHUMBNAILWHENACTIVE = 0x00000002, STPF_USEAPPPEEKALWAYS = 0x00000004, STPF_USEAPPPEEKWHENACTIVE = 0x00000008, } STPFLAG; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)") HRESULT SetTabProperties( [in] HWND hwndTab, [in] STPFLAG stpFlags); } [ uuid(4CD19ADA-25A5-4A32-B3B7-347BEE5BE36B), object, ] interface IStartMenuPinnedList : IUnknown { // if pitem is not pinned, return S_OK // if pitem is pinned, the pitem is successfully removed from pinned list, return S_OK // if pitem is pinned, the pitem fail to be removed from pinned list, return error HRESULT HRESULT RemoveFromList([in] IShellItem *pitem); } [ object, uuid(3d73a659-e5d0-4d42-afc0-5121ba425c8d), // IID_ICDBurn pointer_default(unique) ] interface ICDBurn : IUnknown { HRESULT GetRecorderDriveLetter( [out, string, 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. // Wizard Extension Site [ uuid(88960f5b-422f-4e7b-8013-73415381c3c3), local ] interface IWizardSite : IUnknown { HRESULT GetPreviousPage([out, annotation("__out")] HPROPSHEETPAGE *phpage); HRESULT GetNextPage([out, annotation("__out")] HPROPSHEETPAGE *phpage); HRESULT GetCancelledPage([out, annotation("__out")] HPROPSHEETPAGE *phpage); } cpp_quote("#define SID_WizardSite IID_IWizardSite") // 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. // Wizard Extension [ uuid(c02ea696-86cc-491e-9b23-74394a0444a8), local ] interface IWizardExtension : IUnknown { HRESULT AddPages( [out, size_is(cPages), annotation("__out_ecount_part(cPages, *pnPagesAdded)")] HPROPSHEETPAGE* aPages, [in, annotation("__in")] UINT cPages, [out, annotation("__out __deref_out_range(0, cPages)")] UINT *pnPagesAdded); HRESULT GetFirstPage([out, annotation("__out")] HPROPSHEETPAGE *phpage); HRESULT GetLastPage([out, annotation("__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. // Web Wizard Page Extension [ uuid(0e6b3f66-98d1-48c0-a222-fbde74e2fbc5), local, pointer_default(unique) ] interface IWebWizardExtension : IWizardExtension { HRESULT SetInitialURL([in, string, annotation("__in")] LPCWSTR pszURL); HRESULT SetErrorURL([in, string, annotation("__in")] 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_USEMRU 0x00000008 // For OPW. Use the Most-Recently-Used Print Provider") cpp_quote ("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote ("#define SHPWHF_ANYLOCATION 0x00000100 // allow publishing to any location") cpp_quote ("#endif // NTDDI_VISTA") cpp_quote ("#define SHPWHF_VALIDATEVIAWEBFOLDERS 0x00010000 // enable web folders to validate network places (ANP support)") // Web Publishing Wizard [ uuid(aa9198bb-ccec-472d-beed-19a4f6733f7a), local, pointer_default(unique) ] interface IPublishingWizard : IWizardExtension { HRESULT Initialize( [in, unique, annotation("__in_opt")] IDataObject *pdo, [in, annotation("__in")] DWORD dwOptions, [in, string, annotation("__in")] LPCWSTR pszServiceScope); HRESULT GetTransferManifest( [out, annotation("__out_opt")] HRESULT *phrFromTransfer, [out, annotation("__deref_opt_out")] IXMLDOMDocument **pdocManifest); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP) || (_WIN32_IE >= _WIN32_IE_IE70)") // Object to host an IFolderView in a window. This is used to build check mark selection // UI for files. // Shell Folder Host [ uuid(1ea58f02-d55a-411d-b09e-9e65ac21605b), local, ] interface IFolderViewHost : IUnknown { HRESULT Initialize( [in, annotation("__in")] HWND hwndParent, [in, annotation("__in")] IDataObject *pdo, [in, annotation("__in")] RECT *prc); }; cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") // Event sink interface for IExplorerBrowser events [ uuid(361bbdc7-e6ee-4e13-be58-58e2240c810f), // IID_IExplorerBrowserEvents object ] interface IExplorerBrowserEvents : IUnknown { // Returning failure from this will cancel the navigation. HRESULT OnNavigationPending([in] PCIDLIST_ABSOLUTE pidlFolder); // Called once the view window has been created. Do any last minute modifcations // to the view here before it is shown (set view modes, folder flags, etc...) HRESULT OnViewCreated([in] IShellView *psv); // Called once the navigation has succeeded (after OnViewCreated). HRESULT OnNavigationComplete([in] PCIDLIST_ABSOLUTE pidlFolder); // Called if a navigation failed, despite the call to IShellBrowser::BrowseObject succeeding. HRESULT OnNavigationFailed([in] PCIDLIST_ABSOLUTE pidlFolder); } // IExplorerBrowser::SetOptions() flags typedef [v1_enum] enum EXPLORER_BROWSER_OPTIONS { EBO_NONE = 0x00000000, // No options EBO_NAVIGATEONCE = 0x00000001, // Don't navigate after initial navigation EBO_SHOWFRAMES = 0X00000002, // Show with frame module manager on - otherwise, single view object EBO_ALWAYSNAVIGATE = 0x00000004, // Always navigate, even if you are attempting to navigate to the current folder EBO_NOTRAVELLOG = 0x00000008, // do not update travel log EBO_NOWRAPPERWINDOW = 0x00000010, // For legacy clients that need the browser parented directly on themselves EBO_HTMLSHAREPOINTVIEW = 0x00000020, // Show WebView for sharepoint sites } EXPLORER_BROWSER_OPTIONS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(EXPLORER_BROWSER_OPTIONS)") // IExplorerBrowser::FillFromObject() flags // Cannot conflict with SBSP_... flags from IShellBrowser::BrowseObject() typedef [v1_enum] enum EXPLORER_BROWSER_FILL_FLAGS { EBF_NONE = 0x0000000, // No flags // Causes FillFromObject to populate the ResultsFolder with the // contents of the parent folders of the items in the DataObject // and then check-selects only the items that are in the DataObject EBF_SELECTFROMDATAOBJECT = 0x0000100, // don't regsiter a drop target for the view, this enables apps to register their own drop target // that they can use to receive the drops EBF_NODROPTARGET = 0x0000200, } EXPLORER_BROWSER_FILL_FLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(EXPLORER_BROWSER_FILL_FLAGS)") // // This allows you to host a simple browser (CLSID_ExplorerBrowser) that can be navigated // or host a view of a data object. Use either BrowseToIDList or BrowseToObject to navigate // the browser or use FillWithDataObject to create the view on the data object. // [ uuid(dfd3b6b5-c10c-4be9-85f6-a66969f402f6), object, ] interface IExplorerBrowser : IUnknown { // to clean up this object you must call ::Destroy. [local] HRESULT Initialize( [in, annotation("__in")] HWND hwndParent, [in, annotation("__in")] const RECT *prc, [in, unique, annotation("__in_opt")] const FOLDERSETTINGS *pfs); HRESULT Destroy(); [local] HRESULT SetRect( [in, out, unique, annotation("__inout_opt")] HDWP *phdwp, [in, annotation("__in")] RECT rcBrowser); // relative to hwndParent HRESULT SetPropertyBag([in, string] LPCWSTR pszPropertyBag); // Property bag for view state persistence HRESULT SetEmptyText([in, string] LPCWSTR pszEmptyText); // Displayed when view is empty HRESULT SetFolderSettings([in] const FOLDERSETTINGS *pfs); // Sets how view displays / operates HRESULT Advise([in] IExplorerBrowserEvents *psbe, [out] DWORD *pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); HRESULT SetOptions([in] EXPLORER_BROWSER_OPTIONS dwFlag); HRESULT GetOptions([out] EXPLORER_BROWSER_OPTIONS *pdwFlag); // navigate the browser to a particular location // uFlags contains SBSP_ flag values HRESULT BrowseToIDList([in] PCUIDLIST_RELATIVE pidl, [in] UINT uFlags); // punk is a shell item (IShellItem) or any object that can produce an IDList // using SHGetIDListFromObject() // uFlags contains SBSP_ flag values HRESULT BrowseToObject([in] IUnknown *punk, [in] UINT uFlags); // populate from a given data source // punk can be an IDataObject or anything that can be used with INamespaceWalk HRESULT FillFromObject([in, unique] IUnknown *punk, [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags); HRESULT RemoveAll(); // return the current view object on IShellView or IFolderView or related interface HRESULT GetCurrentView([in] REFIID riid, [out, iid_is(riid)] void **ppv); } // // This allows you to set the accessible name on COM objects that function as UI elements // [ uuid(95A391C5-9ED4-4c28-8401-AB9E06719E11), object, ] interface IAccessibleObject : IUnknown { HRESULT SetAccessibleName([in, string] LPCWSTR pszName); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(96E5AE6D-6AE1-4b1c-900C-C6480EAA8828), pointer_default(unique) ] interface IResultsFolder : IUnknown { HRESULT AddItem([in] IShellItem *psi); [local] HRESULT AddIDList( [in, annotation("__in")] PCIDLIST_ABSOLUTE pidl, [out, annotation("__deref_opt_out")] PITEMID_CHILD *ppidlAdded); [call_as(AddIDList)] HRESULT RemoteAddIDList( [in] PCIDLIST_ABSOLUTE pidl, [out] PITEMID_CHILD *ppidlAdded); HRESULT RemoveItem([in] IShellItem *psi); HRESULT RemoveIDList([in] PCIDLIST_ABSOLUTE pidl); HRESULT RemoveAll(); } //cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") // Unknown Object Enumerator [ uuid(2c1c7e2e-2d0e-4059-831e-1e6f82335c2e), object, pointer_default(unique) ] interface IEnumObjects : IUnknown { [local] HRESULT Next( [in, annotation("__in")] ULONG celt, [in, annotation("__in")] REFIID riid, [out, size_is(celt), length_is(*pceltFetched), iid_is(riid), annotation("__out_ecount_part(celt, *pceltFetched)")] void **rgelt, [out, annotation("__out_opt __deref_out_range(0, celt)")] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [in] REFIID riid, [out, size_is(celt), length_is(*pceltFetched), iid_is(riid)] void **rgelt, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumObjects **ppenum); } [v1_enum] enum _OPPROGDLGF { // The flag space includes OPPROGDLG_ and PROGDLG_ values // please guarantee they don't conflict. See shlobj.w for PROGDLG_* OPPROGDLG_DEFAULT = 0x00000000, OPPROGDLG_ENABLEPAUSE = 0x00000080, // Add a pause button (operation can be paused) OPPROGDLG_ALLOWUNDO = 0x00000100, // The operation can be undone in the dialog. (The Stop button becomes Undo) OPPROGDLG_DONTDISPLAYSOURCEPATH = 0x00000200, // Don't display the path of source file in progress dialog OPPROGDLG_DONTDISPLAYDESTPATH = 0x00000400, // Don't display the path of destination file in progress dialog OPPROGDLG_NOMULTIDAYESTIMATES = 0x00000800, // deprecated - progress dialog no longer displays > 1 day estimates OPPROGDLG_DONTDISPLAYLOCATIONS = 0x00001000, // Don't display the location line in the progress dialog }; typedef DWORD OPPROGDLGF; // Shell Operations Engine Progress Dialog [ uuid(0C9FB851-E5C9-43EB-A370-F0677B13874C), object, pointer_default(unique) ] interface IOperationsProgressDialog : IUnknown { [v1_enum] enum _PDMODE { PDM_DEFAULT = 0x00000000, PDM_RUN = 0x00000001, // Operation is running PDM_PREFLIGHT = 0x00000002, // Pre-flight mode, calculating operation time, etc PDM_UNDOING = 0x00000004, // Operation is rolling back, undo has been selected PDM_ERRORSBLOCKING = 0x00000008, // Only errors remain, error dialogs are blocking progress from completing PDM_INDETERMINATE = 0x00000010, // The length of the operation is indeterminate, don't show a timer, progressbar is in marquee mode }; typedef DWORD PDMODE; typedef [v1_enum] enum PDOPSTATUS { PDOPS_RUNNING = 1, // Operation is running, no user intervention PDOPS_PAUSED = 2, // Operation has been paused by the user PDOPS_CANCELLED = 3, // Operation has been cancelled by the user - now go undo PDOPS_STOPPED = 4, // Operation has been stopped by the user - terminate completely PDOPS_ERRORS = 5, // Operation has gone as far as it can without throwing error dialogs } PDOPSTATUS; HRESULT StartProgressDialog([in, unique] HWND hwndOwner, [in] OPPROGDLGF flags); HRESULT StopProgressDialog(); // Sets which operation is occuring, and whether we are in pre-flight or undo mode - sets animations, text, etc. HRESULT SetOperation([in] SPACTION action); HRESULT SetMode([in] PDMODE mode); HRESULT UpdateProgress( [in] ULONGLONG ullPointsCurrent, // Progress (in points) we are currently at [in] ULONGLONG ullPointsTotal, // Progress (in points) to go to timer [in] ULONGLONG ullSizeCurrent, // Progress (in bytes) we are currently at [in] ULONGLONG ullSizeTotal, // Progress (in bytes) total [in] ULONGLONG ullItemsCurrent, // Progress (in # of items) we are currently at [in] ULONGLONG ullItemsTotal); // Progress (in # of items) total // Used to generate display for "from to ", etc. HRESULT UpdateLocations( [in, unique] IShellItem *psiSource, [in, unique] IShellItem *psiTarget, [in, unique] IShellItem *psiItem); HRESULT ResetTimer(); HRESULT PauseTimer(); HRESULT ResumeTimer(); HRESULT GetMilliseconds([out] ULONGLONG *pullElapsed, [out] ULONGLONG *pullRemaining); // Returns running/paused/cancelled, etc. HRESULT GetOperationStatus([out] PDOPSTATUS *popstatus); } // Handles the thread ID and message information used after cancelling progress UI [ uuid(f5b0bf81-8cb5-4b1b-9449-1a159e0c733c), object, pointer_default(unique), local ] interface IIOCancelInformation : IUnknown { // When the progress UI is cancled by the user, dwThreadID will have // 1) any pending or future IO requests canceled using CancelSynchronousIo() // 2) uMsgCancel will be posted to the thread to tell it to // exit a wait that it might be in waiting for async IO to complete HRESULT SetCancelInformation([in] DWORD dwThreadID, [in] UINT uMsgCancel); HRESULT GetCancelInformation([out, annotation("__out_opt")] DWORD *pdwThreadID, [out, annotation("__out_opt")] UINT *puMsgCancel); } // Extended FOF_ flags passed to IFileOperation::SetOperationFlags() // These flags only work with IFileOperation not SHFileOperation. // other posible FOF_ flags are specified in shellapi.h cpp_quote("#define FOFX_NOSKIPJUNCTIONS 0x00010000 // Don't avoid binding to junctions (like Task folder, Recycle-Bin)") cpp_quote("#define FOFX_PREFERHARDLINK 0x00020000 // Create hard link if possible") cpp_quote("#define FOFX_SHOWELEVATIONPROMPT 0x00040000 // Show elevation prompts when error UI is disabled (use with FOF_NOERRORUI)") cpp_quote("#define FOFX_EARLYFAILURE 0x00100000 // Fail operation as soon as a single error occurs rather than trying to process other items (applies only when using FOF_NOERRORUI)") cpp_quote("#define FOFX_PRESERVEFILEEXTENSIONS 0x00200000 // Rename collisions preserve file extns (use with FOF_RENAMEONCOLLISION)") cpp_quote("#define FOFX_KEEPNEWERFILE 0x00400000 // Keep newer file on naming conflicts") cpp_quote("#define FOFX_NOCOPYHOOKS 0x00800000 // Don't use copy hooks") cpp_quote("#define FOFX_NOMINIMIZEBOX 0x01000000 // Don't allow minimizing the progress dialog") cpp_quote("#define FOFX_MOVEACLSACROSSVOLUMES 0x02000000 // Copy security information when performing a cross-volume move operation") cpp_quote("#define FOFX_DONTDISPLAYSOURCEPATH 0x04000000 // Don't display the path of source file in progress dialog") cpp_quote("#define FOFX_DONTDISPLAYDESTPATH 0x08000000 // Don't display the path of destination file in progress dialog") cpp_quote("#define FOFX_REQUIREELEVATION 0x10000000 // User expects the elevation; don't show a dialog to confirm") cpp_quote("#define FOFX_COPYASDOWNLOAD 0x40000000 // Show Downloading instead of Copying") cpp_quote("#define FOFX_DONTDISPLAYLOCATIONS 0x80000000 // Hides the locations line in the progress dialog") // Shell Copy/Move/Rename/Delete/Link/ApplyProperties Operation Handler [ uuid(947aab5f-0a5c-4c13-b4d6-4bf7836fc9f8), object, pointer_default(unique) ] interface IFileOperation : IUnknown { // 1) (Optional) Set up your event sink. HRESULT Advise([in] IFileOperationProgressSink *pfops, [out] DWORD *pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); // 2) Set operation state // FOF_ flags (defined in shellapi.h) and FOFX_ flags are passed here // if not specified the default flags are FOF_ALLOWUNDO | FOF_NOCONFIRMMKDIR HRESULT SetOperationFlags([in] DWORD dwOperationFlags); HRESULT SetProgressMessage([in, string] LPCWSTR pszMessage); HRESULT SetProgressDialog([in] IOperationsProgressDialog *popd); HRESULT SetProperties([in] IPropertyChangeArray *pproparray); HRESULT SetOwnerWindow([in] HWND hwndOwner); // 3) Specify operations to take on given items. // FooItem takes an IShellItem*. // FooItems takes an IShellItem*, an IEnumShellItems* or an IDataObject*. HRESULT ApplyPropertiesToItem([in] IShellItem *psiItem); HRESULT ApplyPropertiesToItems([in] IUnknown *punkItems); HRESULT RenameItem( [in] IShellItem *psiItem, [in, string] LPCWSTR pszNewName, [in, unique] IFileOperationProgressSink *pfopsItem); HRESULT RenameItems( [in] IUnknown *pUnkItems, [in, string] LPCWSTR pszNewName); HRESULT MoveItem( [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszNewName, [in, unique] IFileOperationProgressSink *pfopsItem); HRESULT MoveItems( [in] IUnknown *punkItems, [in] IShellItem *psiDestinationFolder); HRESULT CopyItem( [in] IShellItem *psiItem, [in] IShellItem *psiDestinationFolder, [in, unique, string] LPCWSTR pszCopyName, [in, unique] IFileOperationProgressSink *pfopsItem); HRESULT CopyItems( [in] IUnknown *punkItems, [in] IShellItem *psiDestinationFolder); HRESULT DeleteItem( [in] IShellItem *psiItem, [in, unique] IFileOperationProgressSink *pfopsItem); HRESULT DeleteItems([in] IUnknown *punkItems); HRESULT NewItem( [in] IShellItem *psiDestinationFolder, [in] DWORD dwFileAttributes, [in, unique, string] LPCWSTR pszName, [in, unique, string] LPCWSTR pszTemplateName, [in, unique] IFileOperationProgressSink *pfopsItem); // 4) Perform operations. HRESULT PerformOperations(); // 5) Were any operations aborted? HRESULT GetAnyOperationsAborted([out] BOOL *pfAnyOperationsAborted); } [ uuid(a6087428-3be3-4d73-b308-7c04a540bf1a), object, pointer_default(unique) ] interface IObjectProvider : IUnknown { // IObjectProvider is similar to IServiceProvider except that it // does not imply that unhandled/unknown requests should be forwarded, // as IServiceProvider does. the object being queired for is identified // by guidObject, usually named as OID_XXX HRESULT QueryObject([in] REFGUID guidObject, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // shell name space walking callback interface"), [ uuid(d92995f8-cf5e-4a76-bf59-ead39ea2b97e), ] interface INamespaceWalkCB : IUnknown { // called for every non folder item found in the folder. these items are reported // before any of the folders are returned via EnterFolder(). this is a bredth first // walk of the name space HRESULT FoundItem([in] IShellFolder *psf, [in] PCUITEMID_CHILD pidl); // this is called for ever sub folder found below the punkToWalk input // it is not called for any folders specified directly in the input // // for every folder this is called after all of the items in the folder have // been reported via FoundItem() // // return: // S_OK to continue recursing // S_FALSE to skip this folder but continue // FAILED() (HRESULT_FROM_WIN32(ERROR_CANCELLED)) to stop the whole walk HRESULT EnterFolder([in] IShellFolder *psf, [in] PCUITEMID_CHILD pidl); // matches the EnterFolder() calls, but since folders can nest this // other folders may be entered and left before the matching call is made HRESULT LeaveFolder([in] IShellFolder *psf, [in] PCUITEMID_CHILD pidl); HRESULT InitializeProgressDialog([out, string] LPWSTR *ppszTitle, [out, string] LPWSTR *ppszCancel); } cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ uuid(7ac7492b-c38e-438a-87db-68737844ff70), ] interface INamespaceWalkCB2 : INamespaceWalkCB { HRESULT WalkComplete([in] HRESULT hr); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // shell name space walk, used to expand data objects, views or recurse folders [ uuid(57ced8a7-3f4a-432c-9350-30f24483f74f), ] interface INamespaceWalk : IUnknown { typedef [v1_enum] enum { NSWF_DEFAULT = 0x00000000, NSWF_NONE_IMPLIES_ALL = 0x00000001, NSWF_ONE_IMPLIES_ALL = 0x00000002, NSWF_DONT_TRAVERSE_LINKS = 0x00000004, // don't traverse the targets of link items (items with SFGAO_LINK) NSWF_DONT_ACCUMULATE_RESULT = 0x00000008, // don't store the results of the walk, GetIDArrayResult() will fail if called // for items with both SFGAO_FOLDER and SFGAO_STREAM discovered via the walk // (as opposed to those passed as the input) for example .zip, .search-ms and .library-ms files // traverse through them and find the items they reference. this will result in // EnterFolder()/LeaveFolder() callbacks instead of FoundItem() NSWF_TRAVERSE_STREAM_JUNCTIONS = 0x00000010, NSWF_FILESYSTEM_ONLY = 0x00000020, // only return file system items (SFGAO_FILESYSTEM) NSWF_SHOW_PROGRESS = 0x00000040, // display the progress dialog while walking NSWF_FLAG_VIEWORDER = 0x00000080, // order the items based on the view order that might be different from the default sort NSWF_IGNORE_AUTOPLAY_HIDA = 0x00000100, NSWF_ASYNC = 0x00000200, // run the walk on a background thread NSWF_DONT_RESOLVE_LINKS = 0x00000400, // avoid the expense of resolving links, means link targets might not be up to date NSWF_ACCUMULATE_FOLDERS = 0x00000800, NSWF_DONT_SORT = 0x00001000, // Don't maintain sort order of items NSWF_USE_TRANSFER_MEDIUM = 0x00002000, // Use SHCONTF_STORAGE in enumerations // for items with both SFGAO_FOLDER and SFGAO_STREAM passed to the walk // (as opposed to those discovered by walking), for example .zip, .search-ms and .library-ms files // do not traverse them, instead treat them as items. this will result in // FoundItem() callbacks instead of EnterFolder()/LeaveFolder() NSWF_DONT_TRAVERSE_STREAM_JUNCTIONS = 0x00004000, } NAMESPACEWALKFLAG; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NAMESPACEWALKFLAG)") // punkToWalk can be // a punkSite that QueryService(SID_SFolderView, IFolderView) can discover // IShellFolder // IDataObject // IParentAndItem (thus supports CLSID_ShellItem/IShellItem) // IEnumFullIDList // IShellItem // IShellItemArray HRESULT Walk( [in] IUnknown *punkToWalk, [in] DWORD /* NAMESPACEWALKFLAG */ dwFlags, [in] int cDepth, [in, unique] INamespaceWalkCB *pnswcb); HRESULT GetIDArrayResult( [out] UINT *pcItems, [out, size_is( , *pcItems)] PIDLIST_ABSOLUTE **prgpidl); } cpp_quote("#endif // NTDDI_WINXP || (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("__inline void FreeIDListArray(__in_ecount(cItems) PIDLIST_RELATIVE *ppidls, UINT cItems)") cpp_quote("{ ") cpp_quote(" UINT i; ") cpp_quote(" for (i = 0; i < cItems; i++) ") cpp_quote(" { ") cpp_quote(" CoTaskMemFree(ppidls[i]); ") cpp_quote(" } ") cpp_quote(" CoTaskMemFree(ppidls); ") cpp_quote("} ") cpp_quote("#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)") cpp_quote("__inline void FreeIDListArrayFull(__in_ecount(cItems) PIDLIST_ABSOLUTE *ppidls, UINT cItems)") cpp_quote("{ ") cpp_quote(" for (UINT i = 0; i < cItems; i++) ") cpp_quote(" { ") cpp_quote(" CoTaskMemFree(ppidls[i]); ") cpp_quote(" } ") cpp_quote(" CoTaskMemFree(ppidls); ") cpp_quote("} ") cpp_quote("__inline void FreeIDListArrayChild(__in_ecount(cItems) PITEMID_CHILD *ppidls, UINT cItems)") cpp_quote("{ ") cpp_quote(" for (UINT i = 0; i < cItems; i++) ") cpp_quote(" { ") cpp_quote(" CoTaskMemFree(ppidls[i]); ") cpp_quote(" } ") cpp_quote(" CoTaskMemFree(ppidls); ") cpp_quote("} ") cpp_quote("#else // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)") cpp_quote("#define FreeIDListArrayFull FreeIDListArray") cpp_quote("#define FreeIDListArrayChild FreeIDListArray") cpp_quote("#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)") // // 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("#if (_WIN32_IE >= _WIN32_IE_IE40)") //------------------------------------------------------------------------- // // 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 ") typedef struct tagBANDSITEINFO { DWORD dwMask; // BSIM_* flags DWORD dwState; // BSSF_* flags DWORD dwStyle; // BSIS_* flags } BANDSITEINFO; cpp_quote("#include ") // Return to byte packing enum tagBANDSITECID { 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("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#define BSIS_PRESERVEORDERDURINGLAYOUT 0x00000200") cpp_quote("#define BSIS_FIXEDORDER 0x00000400") cpp_quote("#endif // _WIN32_IE_IE70") 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); [local] HRESULT QueryBand( [in, annotation("__in")] DWORD dwBandID, [out, annotation("__deref_opt_out")] IDeskBand** ppstb, [out, annotation("__out_opt")] DWORD* pdwState, [out, string, size_is(cchName), annotation("__out_ecount_opt(cchName)")] LPWSTR pszName, [in, annotation("__in")] int cchName); [call_as(QueryBand)] HRESULT RemoteQueryBand( [in] DWORD dwBandID, [out] IDeskBand** ppstb, [out] DWORD* pdwState, [out, string, 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_IE40") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") // simple interface for showing a window [ uuid(b4db1657-70d7-485e-8e3e-6fcb5a5c1802), object, pointer_default(unique) ] interface IModalWindow : IUnknown { [local] HRESULT Show([in, unique, annotation("__in_opt")] HWND hwndOwner); [call_as(Show)] HRESULT RemoteShow([in, unique] HWND hwndOwner); } // 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 tagCDBURNINGEXTENSIONRET { CDBE_RET_DEFAULT = 0x00000000, CDBE_RET_DONTRUNOTHEREXTS = 0x00000001, CDBE_RET_STOPWIZARD = 0x00000002, }; cpp_quote("#define SID_CDWizardHost IID_ICDBurnExt") [v1_enum] enum _CDBE_ACTIONS { CDBE_TYPE_MUSIC = 0x00000001, CDBE_TYPE_DATA = 0x00000002, CDBE_TYPE_ALL = (int) 0xFFFFFFFF }; typedef DWORD CDBE_ACTIONS; // add-ons for cd burning [ uuid(2271dcca-74fc-4414-8fb7-c56b05ace2d7) ] interface ICDBurnExt : IUnknown { HRESULT GetSupportedActionTypes([out] CDBE_ACTIONS *pdwActions); } cpp_quote("#endif // NTDDI_WINXP") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") [ uuid(0811AEBE-0B87-4C54-9E72-548CF649016B), object, pointer_default(unique) ] interface IContextMenuSite : IUnknown { HRESULT DoContextMenuPopup( [in] IUnknown* punkContextMenu, [in] UINT fFlags, [in] POINT pt); } //cpp_quote("#endif // NTDDI_WINXP") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") [ uuid(61E00D45-8FFF-4e60-924E-6537B61612DD), object, pointer_default(unique), local ] interface IEnumReadyCallback : IUnknown { HRESULT EnumReady(); }; // interface between CDefView and clients like the NSC which will try to share enumeration with the view [ uuid(8C8BF236-1AEC-495f-9894-91D57C3C686F), local ] interface IEnumerableView : IUnknown { HRESULT SetEnumReadyCallback([in, annotation("__in")] IEnumReadyCallback *percb); HRESULT CreateEnumIDListFromContents( [in, annotation("__in")] PCIDLIST_ABSOLUTE pidlFolder, [in, annotation("__in")] DWORD dwEnumFlags, [out, annotation("__deref_out")] IEnumIDList **ppEnumIDList); } // QueryService id find the enumerable view. One case where the QS may fail is if the view is holding on to unrealized items (requires possible I/O to get the real item). cpp_quote("#define SID_EnumerableView IID_IEnumerableView") //cpp_quote("#endif // NTDDI_WINXP") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP) || (_WIN32_IE >= _WIN32_IE_IE70)") // supports inserting an item into a folder [ uuid(D2B57227-3D23-4b95-93C0-492BD454C356), object, local ] interface IInsertItem : IUnknown { HRESULT InsertItem([in, annotation("__in")] PCUIDLIST_RELATIVE pidl); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") //------------------------------------------------------------------------- // // 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 tagMENUBANDHANDLERCID { MBHANDCID_PIDLSELECT = 0, // A PIDL from a menuband was selected }; HRESULT IsMenuMessage([in, annotation("__in")] MSG* pmsg); HRESULT TranslateMenuMessage( [in, out, annotation("__inout")] MSG* pmsg, [out, annotation("__out")] LRESULT* plRet); } [ object, uuid(47c01f95-e185-412c-b5c5-4f27df965aea), // IID_IFolderBandPriv pointer_default(unique) ] interface IFolderBandPriv : IUnknown { HRESULT SetCascade([in] BOOL fCascade); HRESULT SetAccelerators([in] BOOL fAccelerators); HRESULT SetNoIcons([in] BOOL fNoIcons); HRESULT SetNoText([in] BOOL fNoText); } // callback objects for CRegTreeOptions items [ uuid(A9521922-0812-4d44-9EC3-7FD38C726F3D), local ] interface IRegTreeItem : IUnknown { HRESULT GetCheckState([out, annotation("__out")] BOOL *pbCheck); HRESULT SetCheckState([in, annotation("__in")] BOOL bCheck); } // 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. // Image Recompression Object [ uuid(505f1513-6b3e-4892-a272-59f8889a4d3e), pointer_default(unique), object ] interface IImageRecompress : IUnknown { HRESULT RecompressImage( [in] IShellItem *psi, [in] int cx, [in] int cy, [in] int iQuality, [in] IStorage *pstg, [out] IStream **ppstrmOut); } cpp_quote("#endif // NTDDI_WINXP") cpp_quote("#endif // NTDDI_WINXP) || (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60)") [ uuid(EB0FE173-1A3A-11D0-89B3-00A0C90A90AC), object, pointer_default(unique), local ] interface IDeskBar : IOleWindow { HRESULT SetClient([in, annotation("__in")] IUnknown* punkClient); HRESULT GetClient([out, annotation("__deref_out")] IUnknown** ppunkClient); HRESULT OnPosRectChangeDB([in, annotation("__in")] RECT *prc); } //------------------------------------------------------------------------- // // 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. // //------------------------------------------------------------------------- [ uuid(D1E7AFEB-6A2E-11d0-8C78-00C04FD918B4), object, pointer_default(unique), local ] interface IMenuPopup : IDeskBar { // Type values for IMenuPopup::OnSelect enum tagMENUPOPUPSELECT { 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 tagMENUPOPUPPOPUPFLAGS { 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 = (int) 0x80000000, // Popup menu below point MPPF_POS_MASK = (int) 0xE0000000, // Menu Position Mask MPPF_ALIGN_LEFT = 0x02000000, // Default alignment MPPF_ALIGN_RIGHT = 0x04000000 // Popup menu aligned to right of exclude rect }; typedef int MP_POPUPFLAGS; HRESULT Popup( [in, annotation("__in")] POINTL *ppt, [in, unique, annotation("__in_opt")] RECTL *prcExclude, [in, annotation("__in")] MP_POPUPFLAGS dwFlags); HRESULT OnSelect([in, annotation("__in")] DWORD dwSelectType); HRESULT SetSubMenu( [in, annotation("__in")] IMenuPopup* pmp, [in, annotation("__in")] BOOL fSet); } cpp_quote("#endif // _WIN32_IE_IE60") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // Constants for the type of usage of an open file typedef [v1_enum] enum FILE_USAGE_TYPE { FUT_PLAYING, FUT_EDITING, FUT_GENERIC } FILE_USAGE_TYPE; cpp_quote("#define OF_CAP_CANSWITCHTO 0x0001") cpp_quote("#define OF_CAP_CANCLOSE 0x0002") [ uuid(64a1cbf0-3a1a-4461-9158-376969693950), pointer_default(unique) ] interface IFileIsInUse : IUnknown { HRESULT GetAppName([out, string] LPWSTR *ppszName); HRESULT GetUsage([out] FILE_USAGE_TYPE *pfut); HRESULT GetCapabilities([out] DWORD *pdwCapFlags); HRESULT GetSwitchToHWND([out] HWND *phwnd); HRESULT CloseFile(); } interface IFileDialog; typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE { FDEOR_DEFAULT = 0, // The application has not handled the event, and the dialog should put up UI asking the user // whether or not the file should be overwritten and be returned from the dialog FDEOR_ACCEPT = 1, // The application has decided that the file should be returned from the dialog FDEOR_REFUSE = 2, // The application has decided that the file should not be returned from the dialog } FDE_OVERWRITE_RESPONSE; typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE { FDESVR_DEFAULT = 0, // The application has not handled the event. The dialog will put up UI indicating the file // is in use, and a different file must be chosen. FDESVR_ACCEPT = 1, // The application has decided that the file should be returned from the dialog FDESVR_REFUSE = 2, // The application has decided that the file should not be returned from the dialog } FDE_SHAREVIOLATION_RESPONSE; typedef [v1_enum] enum FDAP { FDAP_BOTTOM = 0, // The place is added to the bottom of the default list. FDAP_TOP = 1, // The place is added to the top of the default list. } FDAP; // // Implemented by a client of the common file dialog browser, // for notification of events within the dialog. // [ uuid(973510db-7d7f-452b-8975-74a85828d354), object, pointer_default(unique) ] interface IFileDialogEvents : IUnknown { HRESULT OnFileOk([in] IFileDialog *pfd); HRESULT OnFolderChanging( [in] IFileDialog *pfd, [in] IShellItem *psiFolder); HRESULT OnFolderChange([in] IFileDialog *pfd); HRESULT OnSelectionChange([in] IFileDialog *pfd); // Note: FOS_SHAREAWARE must be set in IFileDialog::SetOptions in order for this method to be called. HRESULT OnShareViolation( [in] IFileDialog *pfd, [in] IShellItem *psi, [out] FDE_SHAREVIOLATION_RESPONSE *pResponse); HRESULT OnTypeChange([in] IFileDialog *pfd); // Note: FOS_OVERWRITEPROMPT must be set in IFileDialog::SetOptions in order for this method to be called. HRESULT OnOverwrite( [in] IFileDialog *pfd, [in] IShellItem *psi, [out] FDE_OVERWRITE_RESPONSE *pResponse); } interface IShellItemFilter; // // Implemented by the common file dialog browser, used by clients to // initialize, show, and get results from the dialog. // [ uuid(42f85136-db7e-439c-85f1-e4075d135fc8), object, pointer_default(unique) ] interface IFileDialog : IModalWindow { [v1_enum] enum _FILEOPENDIALOGOPTIONS { FOS_OVERWRITEPROMPT = 0x00000002, // (on by default in the save dialog) FOS_STRICTFILETYPES = 0x00000004, // In the save dialog, only allow the user to choose a file that has // one of the file extensions provided in SetFileTypes. FOS_NOCHANGEDIR = 0x00000008, // Don't change the current working directory FOS_PICKFOLDERS = 0x00000020, // Invoke the open dialog in folder picking mode. FOS_FORCEFILESYSTEM = 0x00000040, // Ensure that items returned are filesystem items. FOS_ALLNONSTORAGEITEMS = 0x00000080, // Allow choosing items that have no storage. FOS_NOVALIDATE = 0x00000100, FOS_ALLOWMULTISELECT = 0x00000200, FOS_PATHMUSTEXIST = 0x00000800, // (on by default) FOS_FILEMUSTEXIST = 0x00001000, // (on by default in the open dialog and folder picker) FOS_CREATEPROMPT = 0x00002000, FOS_SHAREAWARE = 0x00004000, FOS_NOREADONLYRETURN = 0x00008000, // (on by default in the save dialog) FOS_NOTESTFILECREATE = 0x00010000, // Avoid testing the creation of the chosen file in the save dialog // (specifying this flag will circumvent some useful error handling, such as access denied) FOS_HIDEMRUPLACES = 0x00020000, // (not used in Win7) FOS_HIDEPINNEDPLACES = 0x00040000, // Don't display the standard namespace locations in the navigation pane. // (generally used along with AddPlace) FOS_NODEREFERENCELINKS = 0x00100000, // Don't treat shortcuts as their target files. FOS_DONTADDTORECENT = 0x02000000, // Don't add the chosen file to the recent documents list (SHAddToRecentDocs) FOS_FORCESHOWHIDDEN = 0x10000000, // Show all files including system and hidden files. FOS_DEFAULTNOMINIMODE = 0x20000000, // (not used in Win7) FOS_FORCEPREVIEWPANEON = 0x40000000 }; typedef DWORD FILEOPENDIALOGOPTIONS; HRESULT SetFileTypes( [in] UINT cFileTypes, [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec); HRESULT SetFileTypeIndex([in] UINT iFileType); HRESULT GetFileTypeIndex([out] UINT *piFileType); HRESULT Advise( [in] IFileDialogEvents *pfde, [out] DWORD *pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); HRESULT SetOptions([in] FILEOPENDIALOGOPTIONS fos); HRESULT GetOptions([out] FILEOPENDIALOGOPTIONS *pfos); HRESULT SetDefaultFolder([in] IShellItem *psi); HRESULT SetFolder([in] IShellItem *psi); HRESULT GetFolder([out] IShellItem **ppsi); HRESULT GetCurrentSelection([out] IShellItem **ppsi); HRESULT SetFileName([in, string] LPCWSTR pszName); HRESULT GetFileName([out, string] LPWSTR *pszName); HRESULT SetTitle([in, string] LPCWSTR pszTitle); HRESULT SetOkButtonLabel([in, string] LPCWSTR pszText); HRESULT SetFileNameLabel([in, string] LPCWSTR pszLabel); HRESULT GetResult([out] IShellItem **ppsi); HRESULT AddPlace( [in] IShellItem *psi, [in] FDAP fdap); HRESULT SetDefaultExtension([in, string] LPCWSTR pszDefaultExtension); HRESULT Close([in] HRESULT hr); HRESULT SetClientGuid([in] REFGUID guid); HRESULT ClearClientData(); HRESULT SetFilter([in] IShellItemFilter *pFilter); } // // Additional methods specific to the file save dialog // [ uuid(84bccd23-5fde-4cdb-aea4-af64b83d78ab), object, pointer_default(unique) ] interface IFileSaveDialog : IFileDialog { HRESULT SetSaveAsItem([in] IShellItem *psi); HRESULT SetProperties([in] IPropertyStore *pStore); HRESULT SetCollectedProperties( [in] IPropertyDescriptionList *pList, [in] BOOL fAppendDefault); HRESULT GetProperties([out] IPropertyStore **ppStore); HRESULT ApplyProperties( [in] IShellItem *psi, [in] IPropertyStore *pStore, [in, unique] HWND hwnd, [in, unique] IFileOperationProgressSink *pSink); } // // Additional methods specific to the file open dialog // (adding multiselect capability) // [ uuid(d57c7288-d4ad-4768-be02-9d969532d960), object, pointer_default(unique) ] interface IFileOpenDialog : IFileDialog { HRESULT GetResults([out] IShellItemArray **ppenum); HRESULT GetSelectedItems([out] IShellItemArray **ppsai); } typedef [v1_enum] enum CDCONTROLSTATEF { CDCS_INACTIVE = 0x00000000, CDCS_ENABLED = 0x00000001, CDCS_VISIBLE = 0x00000002, CDCS_ENABLEDVISIBLE = 0x00000003, } CDCONTROLSTATEF; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)") // Some facts: // - Controls are added before the dialog is shown. Their relative layout is implied by the order in which // they are added. Controls may be added below or above the standard set of controls. // Controls can not be removed or added afterwards, but they may be hidden or disabled at any time. // Their labels may be changed at any time. // - Some controls are container controls: combobox, toolsmenu, opendropdown, radiogroup. These may have // items added to them. // - Items with a container control are "immutable", except for their enabled/visible state. They can be // added and removed at will. There is no ability to position items within a container - they appear in the // order they were added. IDs for items are scoped to their parent control. // - Container controls have the notion of a "selected item", with the exception of the toolsmenu. // - radiobuttongroups behave exactly like comboboxes. The radio buttons within the group are treated exactly // like items in a combobox, one of which can be the "selected item". [ uuid(e6fdd21a-163f-4975-9c8c-a69f1ba37034), object, pointer_default(unique) ] interface IFileDialogCustomize : IUnknown { // Methods for adding or enabling controls. All of these can have their // enabled/visible state set, however the default is for them to be enabled and visible, // so this parameter has been left off these methods. HRESULT EnableOpenDropDown([in] DWORD dwIDCtl); HRESULT AddMenu( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT AddPushButton( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT AddComboBox([in] DWORD dwIDCtl); HRESULT AddRadioButtonList([in] DWORD dwIDCtl); HRESULT AddCheckButton( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel, [in] BOOL bChecked); HRESULT AddEditBox( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); HRESULT AddSeparator([in] DWORD dwIDCtl); HRESULT AddText( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); // Getting/setting attributes on controls on the fly HRESULT SetControlLabel( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT GetControlState( [in] DWORD dwIDCtl, [out] CDCONTROLSTATEF *pdwState); HRESULT SetControlState( [in] DWORD dwIDCtl, [in] CDCONTROLSTATEF dwState); HRESULT GetEditBoxText( [in] DWORD dwIDCtl, [out, string] WCHAR **ppszText); HRESULT SetEditBoxText( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszText); HRESULT GetCheckButtonState( [in] DWORD dwIDCtl, [out] BOOL *pbChecked); HRESULT SetCheckButtonState( [in] DWORD dwIDCtl, [in] BOOL bChecked); // Method for adding items to "container controls" (radiogroup, combobox, opendropdown, toolsmenu) HRESULT AddControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in] LPCWSTR pszLabel); // Methods for removing items in the "container controls" HRESULT RemoveControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem); HRESULT RemoveAllControlItems([in] DWORD dwIDCtl); // Getting/setting attributes on control items on the fly // Items are considered immutable once created, except for their state: HRESULT GetControlItemState( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [out] CDCONTROLSTATEF *pdwState); HRESULT SetControlItemState( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in] CDCONTROLSTATEF dwState); // Methods for some "container controls": OpenDropDown, combobox, radiobuttongroup. // These methods don't apply to the tools menu. // These methods can be called after the dialog has closed, to determine the users final choice. // For comboboxes and radiobuttongroups, these methods may also be called while the // dialog is showing (which makes no sense for the OpenDropDown). HRESULT GetSelectedControlItem( [in] DWORD dwIDCtl, [out] DWORD *pdwIDItem); HRESULT SetSelectedControlItem( [in] DWORD dwIDCtl, [in] DWORD dwIDItem); // Not valid for OpenDropDown // Controls can be grouped by wrapping their adds in StartVisualGroup/EndVisualGroup // Groups have control IDs, and can be disabled/hidden, just like other controls. HRESULT StartVisualGroup( [in] DWORD dwIDCtl, [in, string] LPCWSTR pszLabel); HRESULT EndVisualGroup(); // One control may be marked as appearing prominently in the UI HRESULT MakeProminent([in] DWORD dwIDCtl); // Set the text of a control item (RadioButton, or item in an OpenDropDown or Menu) HRESULT SetControlItemText( [in] DWORD dwIDCtl, [in] DWORD dwIDItem, [in, string] LPCWSTR pszLabel); } // Event notifications from the controls, handled by an interface // optionally implemented by the same IFileDialogEvents object supplied by the app. [ uuid(36116642-D713-4b97-9B83-7484A9D00433), object, pointer_default(unique) ] interface IFileDialogControlEvents : IUnknown { // An item in a combobox, toolsmenu, or radiobutton group was selected. // (this notification is *not* sent when an item is chosen from the open dropdown, // as the action here is always the same: close the dialog as if the user clicked open. // At that point, the app will then be able to call GetSelectedItem() for the open dropdown, to // obtain the item that was chosen). HRESULT OnItemSelected( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl, [in] DWORD dwIDItem); // A pushbutton was clicked. HRESULT OnButtonClicked( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl); // A checkbutton was toggled. HRESULT OnCheckButtonToggled( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl, [in] BOOL bChecked); // A combobox, toolsmenu or open dropdown is about to be "dropped down". At this point, // the application may want to update the contents based on the current state of the dialog. HRESULT OnControlActivating( [in] IFileDialogCustomize *pfdc, [in] DWORD dwIDCtl); } [ uuid(61744fc7-85b5-4791-a9b0-272276309b13), object, pointer_default(unique) ] interface IFileDialog2 : IFileDialog { // Changing the text on the Cancel button can be useful for a "basket mode" where IFileDialogEvents::OnFileOk // is used to accumulate items, and Open/Cancel would be changed to Add/Done for example. HRESULT SetCancelButtonLabel([in] LPCWSTR pszLabel); // Replaces any items in the navigation pane with this item instead, to guide the user from navigating outside of // this part of the namespace. HRESULT SetNavigationRoot([in] IShellItem *psi); } typedef [v1_enum] enum ASSOCIATIONLEVEL { AL_MACHINE, AL_EFFECTIVE, AL_USER, } ASSOCIATIONLEVEL; typedef [v1_enum] enum ASSOCIATIONTYPE { AT_FILEEXTENSION, AT_URLPROTOCOL, AT_STARTMENUCLIENT, AT_MIMETYPE, } ASSOCIATIONTYPE; // Application File Extension and URL Protocol Registration [ object, uuid(4e530b0a-e611-4c77-a3ac-9031d022281b), pointer_default(unique) ] interface IApplicationAssociationRegistration : IUnknown { HRESULT QueryCurrentDefault( [in, string] LPCWSTR pszQuery, [in] ASSOCIATIONTYPE atQueryType, [in] ASSOCIATIONLEVEL alQueryLevel, [out, string] LPWSTR* ppszAssociation); HRESULT QueryAppIsDefault( [in, string] LPCWSTR pszQuery, [in] ASSOCIATIONTYPE atQueryType, [in] ASSOCIATIONLEVEL alQueryLevel, [in, string] LPCWSTR pszAppRegistryName, [out] BOOL* pfDefault); HRESULT QueryAppIsDefaultAll( [in] ASSOCIATIONLEVEL alQueryLevel, [in, string] LPCWSTR pszAppRegistryName, [out] BOOL* pfDefault); HRESULT SetAppAsDefault( [in, string] LPCWSTR pszAppRegistryName, [in, string] LPCWSTR pszSet, [in] ASSOCIATIONTYPE atSetType); HRESULT SetAppAsDefaultAll( [in, string] LPCWSTR pszAppRegistryName); HRESULT ClearUserAssociations(); } // SHCreateAssociationRegistration can be used to create an IApplicationAssociationRegistration cpp_quote("SHSTDAPI SHCreateAssociationRegistration(__in REFIID riid, __deref_out void **ppv);") // Application File Extension and URL Protocol Registration UI [ object, uuid(1f76a169-f994-40ac-8fc8-0959e8874710), pointer_default(unique) ] interface IApplicationAssociationRegistrationUI : IUnknown { HRESULT LaunchAdvancedAssociationUI([in, string] LPCWSTR pszAppRegistryName); } cpp_quote("#endif // NTDDI_VISTA") // New for XP, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINXP)") // // 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 ") typedef struct DELEGATEITEMID { 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 ") cpp_quote("typedef const UNALIGNED DELEGATEITEMID *PCDELEGATEITEMID;") cpp_quote("typedef UNALIGNED DELEGATEITEMID *PDELEGATEITEMID;") // shell name space delegate folder interface [ uuid(ADD8BA80-002B-11D0-8F0F-00C04FD7D062), object, local, 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, annotation("__in")] IMalloc *pmalloc); } //cpp_quote("#endif // NTDDI_WINXP") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60)") 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; [v1_enum] enum _BROWSERFRAMEOPTIONS { 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_USE_IE_STATUSBAR = 0x00020000, // Use the persisted IE status bar settings BFO_QUERY_ALL = (int) 0xFFFFFFFF, // Return all values set. }; typedef DWORD BROWSERFRAMEOPTIONS; HRESULT GetFrameOptions( [in, annotation("__in")] BROWSERFRAMEOPTIONS dwMask, [out, annotation("__out")] BROWSERFRAMEOPTIONS * pdwOptions); } cpp_quote("#endif // _WIN32_IE_IE60") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60SP2)") typedef [v1_enum] enum NWMF { NWMF_UNLOADING = 0x00000001, // The query is occuring during onBeforeUnload or onUnload NWMF_USERINITED = 0x00000002, // The query is occuring in the context of what trident considers to be a user initiated action NWMF_FIRST = 0x00000004, // This is the first query since the begining of the last user initiated action NWMF_OVERRIDEKEY = 0x00000008, // The override key was pressed at the time the query was made NWMF_SHOWHELP = 0x00000010, // New window is an HTML help window NWMF_HTMLDIALOG = 0x00000020, // New window is an HTML dialog NWMF_FROMDIALOGCHILD = 0x00000040, // Called from an HTML dialog - do not show UI in parent window NWMF_USERREQUESTED = 0x00000080, // There is no doubt the user requested this window (from RClick->Open in New Window, or Shift+Clicked a link) NWMF_USERALLOWED = 0x00000100, // This popup is the result of the user requesting a replay that resulted in a refresh NWMF_FORCEWINDOW = 0x00010000, // This popup should be forced to open in a new window NWMF_FORCETAB = 0x00020000, // This popup should be forced to open in a new tab NWMF_SUGGESTWINDOW = 0x00040000, // This popup should open in a new window unless user forced pop-ups to a tab NWMF_SUGGESTTAB = 0x00080000, // This popup should open in a new tab unless user forced pop-ups to a window NWMF_INACTIVETAB = 0x00100000, // This popup came from an inactive tab } NWMF; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NWMF)") // Popup manager interface for WebOC hosts and Trident. cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager") [ uuid(D2BC4C84-3F72-4a52-A604-7BCBF3982CBB), object, pointer_default(unique) ] interface INewWindowManager : IUnknown { HRESULT EvaluateNewWindow( [in, string] LPCWSTR pszUrl, [in, string] LPCWSTR pszName, [in, string] LPCWSTR pszUrlContext, [in, string] LPCWSTR pszFeatures, [in] BOOL fReplace, [in] DWORD dwFlags, [in] DWORD dwUserActionTime); } //------------------------------------------------------------------------- // IAttachmentExecute [ object, uuid(73db1241-1e85-4581-8e4f-a81e1d0f8c57), // IID_IAttachmentExecute local, pointer_default(unique), ] interface IAttachmentExecute : IUnknown { typedef [v1_enum] enum ATTACHMENT_PROMPT { ATTACHMENT_PROMPT_NONE = 0x0000, ATTACHMENT_PROMPT_SAVE = 0x0001, ATTACHMENT_PROMPT_EXEC = 0x0002, ATTACHMENT_PROMPT_EXEC_OR_SAVE = 0x0003, } ATTACHMENT_PROMPT; typedef [v1_enum] enum ATTACHMENT_ACTION { ATTACHMENT_ACTION_CANCEL = 0x0000, ATTACHMENT_ACTION_SAVE = 0x0001, ATTACHMENT_ACTION_EXEC = 0x0002, } ATTACHMENT_ACTION; // // IAttachmentExecute - COM object designed to help client applications // safely manage saving and opening attachments for users. // clients are assumed to have some policy/settings already // to determine the support and behavior for attachments. // this API assumes that the client is interactive with the user // // ClientTitle - (optional) caller specific title for the prompt // if unset, the prompts come with a default title of "File Download" HRESULT SetClientTitle([in, string, annotation("__in")] LPCWSTR pszTitle); // ClientGuid - (optional) for storing user specific settings // someprompts are allowed to be avoided in the future if the user // chooses. that choice is stored on per-client basis indexed by the ClientGuid // // Specific Example: In the User Trust Prompt there is a check box that is checked // by default, but may be unchecked by the user. this option is stored under the ClientGuid // based on the file type. // // ClearClientState() will reset any user options stored on the clients behalf. HRESULT SetClientGuid([in, annotation("__in")] REFGUID guid); // EVIDENCE properties // LocalPath - (REQUIRED) path that would be passed to ShellExecute() // if FileName was already used for the Check() and Prompt() calls, // and the LocalPath points to a different handler than predicted, // previous trust may be revoked, and the Policy and User trust re-verified. HRESULT SetLocalPath([in, string, annotation("__in")] LPCWSTR pszLocalPath); // FileName - (optional) proposed name (not path) to be used to construct LocalPath // optionally use this if the caller wants to perform Check() before copying // the file to the LocalPath. (eg, Check() proposed download) HRESULT SetFileName([in, string, annotation("__in")] LPCWSTR pszFileName); // Source - (optional) alternate identity path or URL for a file transfer // used as the primary Zone determinant. if this is NULL default to the Restricted Zone. // may also be used in the Prompt() UI for the "From" field // may also be sent to handlers that can process URLs HRESULT SetSource([in, string, annotation("__in")] LPCWSTR pszSource); // Referrer - (optional) Zone determinant for container or link types // only used for Zone/Policy // container formats like ZIP and OLE packager use the Referrer to // indicate indirect inheritance and avoid Zone elevation. // Shortcuts can also use it to limit elevation based on parameters HRESULT SetReferrer([in, string, annotation("__in")] LPCWSTR pszReferrer); // CheckPolicy() - examines available evidence and checks the resultant policy // * requires FileName or LocalPath // // Returns S_OK for enable // S_FALSE for prompt // FAILURE for disable // HRESULT CheckPolicy(); // Prompt() - application can force UI at an earlier point, // even before the file has been copied to disk // * requires FileName or LocalPath HRESULT Prompt( [in, annotation("__in")] HWND hwnd, [in, annotation("__in")] ATTACHMENT_PROMPT prompt, [out, annotation("__out")] ATTACHMENT_ACTION *paction); // Save() - should always be called if LocalPath is in not in a temp dir // * requires valid LocalPath // * called after the file has been copied to LocalPath // * may run virus scanners or other trust services to validate the file. // these services may delete or alter the file // * may attach evidence to the LocalPath HRESULT Save(); // Execute() - will call Prompt() if necessary, with the EXEC action // * requires valid LocalPath // * called after the file has been copied to LocalPath // * may run virus scanners or other trust services to validate the file. // these services may delete or alter the file // * may attach evidence to the LocalPath // // phProcess - if non-NULL Execute() will be synchronous and return an HPROCESS if available // if null Execute() will be async, implies that you have a message pump and a long lived window // HRESULT Execute( [in, annotation("__in")] HWND hwnd, [in, string, annotation("__in")] LPCWSTR pszVerb, [out, annotation("__out_opt")] HANDLE *phProcess); // SaveWithUI() - superset of Save() that can show modal error UI, but still does not call Prompt() // * requires valid LocalPath // * called after the file has been copied to LocalPath // * may run virus scanners or other trust services to validate the file. // these services may delete or alter the file // * may attach evidence to the LocalPath HRESULT SaveWithUI([in, annotation("__in")] HWND hwnd); // ClearClientState() - removes any state that is stored based on the ClientGuid // * requires SetClientGuid() to be called first HRESULT ClearClientState(); } cpp_quote("#endif // _WIN32_IE_IE60SP2") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60)") cpp_quote("#include ") 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 PIDLIST_ABSOLUTE pidlFolder;// pidl of the ShellFolder portion PUITEMID_CHILD 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 SHCSCHANGENOTIFYSTRUCT { long lEvent; // Change notify Event PCIDLIST_ABSOLUTE pidl1; // Pidl 1 Passed in from the Change notify PCIDLIST_ABSOLUTE pidl2; // Pidl 2 Passed in from the Change notify } SMCSHCHANGENOTIFYSTRUCT, *PSMCSHCHANGENOTIFYSTRUCT; cpp_quote("#include ") /* Return to byte packing */ // Mask flags enum tagSMINFOMASK { SMIM_TYPE = 0x00000001, SMIM_FLAGS = 0x00000002, SMIM_ICON = 0x00000004 }; // Types for mbiinfo.dwType enum tagSMINFOTYPE { SMIT_SEPARATOR = 0x00000001, SMIT_STRING = 0x00000002 }; // Flags for mbiinfo.dwFlags enum tagSMINFOFLAGS { 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.") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#define SMC_SFEXEC_MIDDLE 0x00000031 // Same as SFEXEC, but the middle mouse button caused the exec.") cpp_quote("#define SMC_GETAUTOEXPANDSTATE 0x00000041 // callback returns the default autoexpand state lParam = LPDWORD to recieve flags") cpp_quote("#define SMC_AUTOEXPANDCHANGE 0x00000042 // Notify that the menu is expanding/contracting") cpp_quote("#define SMC_GETCONTEXTMENUMODIFIER 0x00000043 // Used to add items to a context menu") cpp_quote("#define SMC_GETBKCONTEXTMENU 0x00000044 // used to get a context menu to display when user right clicks on the background") cpp_quote("#define SMC_OPEN 0x00000045 // allows client to overwrite open/explore verb action on an item") cpp_quote("// Flags for return value from SMC_GETAUTOEXPANDSTATE and SMC_AUTOEXPANDCHANGE:") cpp_quote("#define SMAE_EXPANDED 0x00000001 // The menu is or should start expanded") cpp_quote("#define SMAE_CONTRACTED 0x00000002 // The menu is or should start contracted") cpp_quote(" // SMAE_EXPANDED and SMAE_CONTRACTED are mutually exclusive") cpp_quote("#define SMAE_USER 0x00000004 // Indicates that the menu expansion/contraction is a reflection") cpp_quote(" // of user choice") cpp_quote("#define SMAE_VALID 0x00000007") cpp_quote("#endif // _WIN32_IE_IE70") [ 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, annotation("__inout")] LPSMDATA psmd, [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] 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") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") cpp_quote("#define SMINIT_AUTOEXPAND 0x00000100 // automatically expand/contract menu band") cpp_quote("#define SMINIT_AUTOTOOLTIP 0x00000200 // regular tooltip support") cpp_quote("#define SMINIT_DROPONCONTAINER 0x00000400 // allow drop on a container") cpp_quote("#endif // _WIN32_IE_IE70") // 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, unique, annotation("__in_opt")] IShellMenuCallback* psmc, [in, annotation("__in")] UINT uId, [in, annotation("__in")] UINT uIdAncestor, [in, annotation("__in")] DWORD dwFlags); HRESULT GetMenuInfo( [out, annotation("__deref_opt_out")] IShellMenuCallback** ppsmc, [out, annotation("__out_opt")] UINT* puId, [out, annotation("__out_opt")] UINT* puIdAncestor, [out, annotation("__out_opt")] DWORD* pdwFlags); HRESULT SetShellFolder( [in, unique, annotation("__in_opt")] IShellFolder* psf, [in, unique, annotation("__in_opt")] PCIDLIST_ABSOLUTE pidlFolder, [in, unique, annotation("__in_opt")] HKEY hKey, [in, annotation("__in")] DWORD dwFlags); HRESULT GetShellFolder( [out, annotation("__out")] DWORD* pdwFlags, [out, annotation("__deref_out")] PIDLIST_ABSOLUTE* ppidl, [in] REFIID riid, [out, iid_is(riid), annotation("__deref_out")] void** ppv); HRESULT SetMenu( [in, unique, annotation("__in_opt")] HMENU hmenu, [in, unique, annotation("__in_opt")] HWND hwnd, [in, annotation("__in")] DWORD dwFlags); HRESULT GetMenu( [out, annotation("__out_opt")] HMENU* phmenu, [out, annotation("__out_opt")] HWND* phwnd, [out, annotation("__out_opt")] DWORD* pdwFlags); HRESULT InvalidateItem( [in, annotation("__in_opt")] LPSMDATA psmd, [in, annotation("__in")] DWORD dwFlags); HRESULT GetState([out, annotation("__out")] LPSMDATA psmd); HRESULT SetMenuToolbar( [in, annotation("__in")] IUnknown* punk, [in, annotation("__in")] DWORD dwFlags); } cpp_quote("#endif // _WIN32_IE_IE60") [ uuid(fce4bde0-4b68-4b80-8e9c-7426315a7388), object, pointer_default(ref), local, ] interface IShellRunDll : IUnknown { HRESULT Run([in, string, annotation("__in")] LPCWSTR pszArgs); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") typedef [v1_enum] enum KF_CATEGORY { KF_CATEGORY_VIRTUAL = 1, // virtual folders, have not file system path KF_CATEGORY_FIXED = 2, // fixed, predefined OS folders, might be different for different users KF_CATEGORY_COMMON = 3, // Public folders shared by all users, can be redirected KF_CATEGORY_PERUSER = 4, // User folders, can be redirected } KF_CATEGORY; [v1_enum] enum _KF_DEFINITION_FLAGS { KFDF_LOCAL_REDIRECT_ONLY = 0x00000002, // Can only be redirected to a local disk KFDF_ROAMABLE = 0x00000004, // Can be roamed via PC to PC sync KFDF_PRECREATE = 0x00000008, // Pre create folder KFDF_STREAM = 0x00000010, // folder is actually a file KFDF_PUBLISHEXPANDEDPATH = 0x00000020, // Expanded path is published in the registry under HKCU }; typedef DWORD KF_DEFINITION_FLAGS; [v1_enum] enum _KF_REDIRECT_FLAGS { KF_REDIRECT_USER_EXCLUSIVE = 0x00000001, // Give user exclusive permission KF_REDIRECT_COPY_SOURCE_DACL = 0x00000002, // Copy the DACL of the source directory to target // Ownership checks for the target folder if the folder exists, by default, the API does not do any ownership checks KF_REDIRECT_OWNER_USER = 0x00000004, // The owner of the folder must be the user itself KF_REDIRECT_SET_OWNER_EXPLICIT = 0x00000008, // The owner of any newly created folder will be set explicitly // by default if user belongs to Administrators group Administrators will be the owner // Check if the redirection is already done, S_OK if yes, S_FALSE if some actions need to be done. KF_REDIRECT_CHECK_ONLY = 0x00000010, // Enable user interaction when redirecting KF_REDIRECT_WITH_UI = 0x00000020, // CSC related settings KF_REDIRECT_UNPIN = 0x00000040, // Unpin the source folder KF_REDIRECT_PIN = 0x00000080, // Pin the target folder KF_REDIRECT_COPY_CONTENTS = 0x00000200, // Copy the contents (both files and subfolders) under the known folder KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400, // Delete source, valid only if KF_REDIRECT_COPY_CONTENTS set KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800, // Exclude all known subfolders from redirection }; typedef DWORD KF_REDIRECT_FLAGS; [v1_enum] enum _KF_REDIRECTION_CAPABILITIES { KF_REDIRECTION_CAPABILITIES_ALLOW_ALL = 0x000000FF, // if any of these flags set this means that // the folder can potentially be redirected unless // any deny flag is set KF_REDIRECTION_CAPABILITIES_REDIRECTABLE = 0x00000001, // the folder can potentially be redirected // currently we only allow redirection for // common and user's folders. // Fixed and virtual can not be redirected KF_REDIRECTION_CAPABILITIES_DENY_ALL = 0x000FFF00, // If any of there flags set then redirection is blocked KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED = 0x00000100, // Folder can not be redirected because it is redirected by group policy KF_REDIRECTION_CAPABILITIES_DENY_POLICY = 0x00000200, // Folder can not be redirected because the policy prohibits redirecting this folder KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS = 0x00000400, // Folder can not be redirected because the caller does not have sufficient permissions }; typedef DWORD KF_REDIRECTION_CAPABILITIES; typedef struct KNOWNFOLDER_DEFINITION { KF_CATEGORY category; LPWSTR pszName; LPWSTR pszDescription; KNOWNFOLDERID fidParent; LPWSTR pszRelativePath; LPWSTR pszParsingName; LPWSTR pszTooltip; LPWSTR pszLocalizedName; LPWSTR pszIcon; LPWSTR pszSecurity; DWORD dwAttributes; KF_DEFINITION_FLAGS kfdFlags; FOLDERTYPEID ftidType; } KNOWNFOLDER_DEFINITION; // Known Folder Interface [ uuid(3AA7AF7E-9B36-420c-A8E3-F77D4674A488), object, version(1.0), pointer_default(ref) ] interface IKnownFolder : IUnknown { HRESULT GetId([out] KNOWNFOLDERID *pkfid); HRESULT GetCategory([out] KF_CATEGORY* pCategory); // get the ShellItem (IShellItem or derived interface) for this known folder HRESULT GetShellItem( [in] DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT GetPath( [in] DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, [out, string] LPWSTR *ppszPath); HRESULT SetPath( [in] DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, [in, string] LPCWSTR pszPath); HRESULT GetIDList( [in] DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, [out] PIDLIST_ABSOLUTE *ppidl); HRESULT GetFolderType([out] FOLDERTYPEID *pftid); HRESULT GetRedirectionCapabilities([out] KF_REDIRECTION_CAPABILITIES * pCapabilities); HRESULT GetFolderDefinition([out] KNOWNFOLDER_DEFINITION *pKFD); } // Known Folder Manager [ uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018), object, version(1.0), pointer_default(ref) ] interface IKnownFolderManager : IUnknown { typedef [v1_enum] enum FFFP_MODE { FFFP_EXACTMATCH, FFFP_NEARESTPARENTMATCH, } FFFP_MODE; HRESULT FolderIdFromCsidl( [in] int nCsidl, [out] KNOWNFOLDERID *pfid); HRESULT FolderIdToCsidl( [in] REFKNOWNFOLDERID rfid, [out] int *pnCsidl); HRESULT GetFolderIds( [out, size_is( , *pCount)] KNOWNFOLDERID ** ppKFId, [in, out] UINT *pCount); HRESULT GetFolder( [in] REFKNOWNFOLDERID rfid, [out] IKnownFolder **ppkf); HRESULT GetFolderByName( [in, string] LPCWSTR pszCanonicalName, [out] IKnownFolder **ppkf); HRESULT RegisterFolder( [in] REFKNOWNFOLDERID rfid, [in] KNOWNFOLDER_DEFINITION const *pKFD); HRESULT UnregisterFolder([in] REFKNOWNFOLDERID rfid); HRESULT FindFolderFromPath( [in, string] LPCWSTR pszPath, [in] FFFP_MODE mode, [out] IKnownFolder **ppkf); HRESULT FindFolderFromIDList( [in] PCIDLIST_ABSOLUTE pidl, [out] IKnownFolder **ppkf); [local] HRESULT Redirect( [in, annotation("__in")] REFKNOWNFOLDERID rfid, [in, unique, annotation("__in_opt")] HWND hwnd, [in, annotation("__in")] KF_REDIRECT_FLAGS flags, [in, unique, string, annotation("__in_opt")] LPCWSTR pszTargetPath, [in, annotation("__in")] UINT cFolders, [in, size_is(cFolders), unique, annotation("__in_ecount_opt(cFolders)")] KNOWNFOLDERID const *pExclusion, [out, string, annotation("__deref_opt_out_opt")] LPWSTR* ppszError); [call_as(Redirect)] HRESULT RemoteRedirect( [in] REFKNOWNFOLDERID rfid, [in, unique] HWND hwnd, [in] KF_REDIRECT_FLAGS flags, [in, unique, string] LPCWSTR pszTargetPath, [in] UINT cFolders, [in, size_is(cFolders), unique] GUID const *pExclusion, [out, string] LPWSTR* ppszError); } // use this to free the allocated fields in the result from IKnownFolderManager::GetFolderDefinition(&kfd) cpp_quote("__inline void FreeKnownFolderDefinitionFields(__in KNOWNFOLDER_DEFINITION *pKFD)") cpp_quote("{") cpp_quote(" CoTaskMemFree(pKFD->pszName);") cpp_quote(" CoTaskMemFree(pKFD->pszDescription);") cpp_quote(" CoTaskMemFree(pKFD->pszRelativePath);") cpp_quote(" CoTaskMemFree(pKFD->pszParsingName);") cpp_quote(" CoTaskMemFree(pKFD->pszTooltip);") cpp_quote(" CoTaskMemFree(pKFD->pszLocalizedName);") cpp_quote(" CoTaskMemFree(pKFD->pszIcon);") cpp_quote(" CoTaskMemFree(pKFD->pszSecurity);") cpp_quote("}") typedef [v1_enum] enum SHARE_ROLE { SHARE_ROLE_INVALID = -1, SHARE_ROLE_READER = 0, SHARE_ROLE_CONTRIBUTOR = 1, SHARE_ROLE_CO_OWNER = 2, SHARE_ROLE_OWNER = 3, SHARE_ROLE_CUSTOM = 4, SHARE_ROLE_MIXED = 5, } SHARE_ROLE; typedef [v1_enum] enum DEF_SHARE_ID { DEFSHAREID_USERS = 1, DEFSHAREID_PUBLIC = 2, } DEF_SHARE_ID; // Sharing Configuration Manager [ object, uuid(B4CD448A-9C86-4466-9201-2E62105B87AE) ] interface ISharingConfigurationManager : IUnknown { HRESULT CreateShare( [in] DEF_SHARE_ID dsid, [in] SHARE_ROLE role); HRESULT DeleteShare([in] DEF_SHARE_ID dsid); // returns S_OK if the share exists, S_FALSE otherwise HRESULT ShareExists([in] DEF_SHARE_ID dsid); HRESULT GetSharePermissions( [in] DEF_SHARE_ID dsid, [out] SHARE_ROLE* pRole); HRESULT SharePrinters(); HRESULT StopSharingPrinters(); HRESULT ArePrintersShared(); } cpp_quote("#endif // NTDDI_VISTA") [ object, uuid(76e54780-ad74-48e3-a695-3ba9a0aff10d), pointer_default(unique), local ] interface IPreviousVersionsInfo : IUnknown { HRESULT AreSnapshotsAvailable( [in, string, annotation("__in")] LPCWSTR pszPath, [in, annotation("__in")] BOOL fOkToBeSlow, [out, annotation("__out")] BOOL *pfAvailable); } cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // Base interface from which to derive "related items" // with specific relationships, and identical method signatures. // // Use with // IShellItem::BindToHandler, BHID_SFObject // IShellFolder::BindToObject [ object, uuid(a73ce67a-8ab1-44f1-8d43-d2fcbf6b1cd0), pointer_default(unique) ] interface IRelatedItem : IUnknown { HRESULT GetItemIDList([out] PIDLIST_ABSOLUTE *ppidl); HRESULT GetItem([out] IShellItem **ppsi); } // Used to obtain the true identity of the item, so it can be // determined if two items actually represent the same item. [ object, uuid(7d903fca-d6f9-4810-8332-946c0177e247), pointer_default(unique) ] interface IIdentityName : IRelatedItem { } // Used to obtain the delegate item of an item, where the // item is delegating to the underlying "delegate" item. // Unlike IIdentityName, IDelegateItem only "unwraps" one // level of aliasing. [ object, uuid(3c5a1c94-c951-4cb7-bb6d-3b93f30cce93), pointer_default(unique) ] interface IDelegateItem : IRelatedItem { } // If an item represents a snapshot of an item taken at a previous time, // ICurrentItem will let you obtain the current version of the item. [ object, uuid(240a7174-d653-4a1d-a6d3-d4943cfbfe3d), pointer_default(unique) ] interface ICurrentItem : IRelatedItem { } // used to find the transfer object. that is the object that should be // queried and enumerated for copy/move/delete. [ object, uuid(77f295d5-2d6f-4e19-b8ae-322f3e721ab5), pointer_default(unique) ] interface ITransferMediumItem : IRelatedItem { } // used to find the item that should be used when browsing to this item (used by pagespace control) [ object, uuid(05edda5c-98a3-4717-8adb-c5e7da991eb1), pointer_default(unique) ] interface IUseToBrowseItem : IRelatedItem { } // IDisplayItem provides the item to show UI on (used by the copy engine dialogs) [ object, uuid(c6fd5997-9f6b-4888-8703-94e80e8cde3f), pointer_default(unique) ] interface IDisplayItem : IRelatedItem { } // IViewStateIdentityItem is used to provide a canonical persistence item // This is item for which view customizations will be remembered // (example: the orignal folder item minus the search query) [ object, uuid(9D264146-A94F-4195-9F9F-3BB12CE0C955), pointer_default(unique) ] interface IViewStateIdentityItem : IRelatedItem { } // IPreviewItem provides an item to show in the preview pane [ object, uuid(36149969-0A8F-49c8-8B00-4AECB20222FB), pointer_default(unique) ] interface IPreviewItem : IRelatedItem { } // and many more to come "related items"... // // "public partner" - like to SharedPics from MyPics // "private partner" - link to MyPics from SharedPics // "recyle bin root" - where (and if) recycle bin is supported // "machine root" - for "open containing machine" cpp_quote("#endif // NTDDI_VISTA") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ uuid(8a87781b-39a7-4a1f-aab3-a39b9c34a7d9), object, pointer_default(unique) ] interface IDestinationStreamFactory : IUnknown { HRESULT GetDestinationStream([out] IStream **ppstm); } //cpp_quote("#endif // NTDDI_VISTA") [v1_enum] enum _NMCII_FLAGS { NMCII_ITEMS = 0x0001, NMCII_FOLDERS = 0x0002, }; typedef int NMCII_FLAGS; [v1_enum] enum _NMCSAEI_FLAGS { NMCSAEI_SELECT = 0x0000, NMCSAEI_EDIT = 0x0001, }; typedef int NMCSAEI_FLAGS; [ uuid(dcb07fdc-3bb5-451c-90be-966644fed7b0), pointer_default(unique) ] interface INewMenuClient : IUnknown { HRESULT IncludeItems([out] NMCII_FLAGS *pflags); HRESULT SelectAndEditItem( [in] PCIDLIST_ABSOLUTE pidlItem, [in] NMCSAEI_FLAGS flags); }; cpp_quote("#define SID_SNewMenuClient IID_INewMenuClient") // SID_SCommandBarState: {B99EAA5C-3850-4400-BC33-2CE534048BF8} cpp_quote("DEFINE_GUID(SID_SCommandBarState, 0xB99EAA5C, 0x3850, 0x4400, 0xBC, 0x33, 0x2C, 0xE5, 0x34, 0x04, 0x8B, 0xF8);") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") [ object, uuid(71c0d2bc-726d-45cc-a6c0-2e31c1db2159), pointer_default(unique) ] interface IInitializeWithBindCtx : IUnknown { HRESULT Initialize([in] IBindCtx *pbc); } [ object, uuid(2659B475-EEB8-48b7-8F07-B378810F48CF), pointer_default(unique) ] interface IShellItemFilter : IUnknown { HRESULT IncludeItem([in] IShellItem *psi); HRESULT GetEnumFlagsForItem( [in] IShellItem *psi, [out] SHCONTF *pgrfFlags); } cpp_quote("#endif // (_WIN32_IE >= _WIN32_IE_IE70)") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(028212A3-B627-47e9-8856-C14265554E4F) ] interface INameSpaceTreeControl : IUnknown { [v1_enum] enum _NSTCSTYLE { NSTCS_HASEXPANDOS = 0x00000001, NSTCS_HASLINES = 0x00000002, NSTCS_SINGLECLICKEXPAND = 0x00000004, NSTCS_FULLROWSELECT = 0x00000008, NSTCS_SPRINGEXPAND = 0x00000010, NSTCS_HORIZONTALSCROLL = 0x00000020, NSTCS_ROOTHASEXPANDO = 0x00000040, NSTCS_SHOWSELECTIONALWAYS = 0x00000080, NSTCS_NOINFOTIP = 0x00000200, NSTCS_EVENHEIGHT = 0x00000400, NSTCS_NOREPLACEOPEN = 0x00000800, NSTCS_DISABLEDRAGDROP = 0x00001000, NSTCS_NOORDERSTREAM = 0x00002000, NSTCS_RICHTOOLTIP = 0x00004000, NSTCS_BORDER = 0x00008000, NSTCS_NOEDITLABELS = 0x00010000, NSTCS_TABSTOP = 0x00020000, NSTCS_FAVORITESMODE = 0x00080000, // temporary NSTCS_AUTOHSCROLL = 0x00100000, NSTCS_FADEINOUTEXPANDOS = 0x00200000, NSTCS_EMPTYTEXT = 0x00400000, // insert empty text when folder is empty NSTCS_CHECKBOXES = 0x00800000, NSTCS_PARTIALCHECKBOXES = 0x01000000, NSTCS_EXCLUSIONCHECKBOXES = 0x02000000, NSTCS_DIMMEDCHECKBOXES = 0x04000000, NSTCS_NOINDENTCHECKS = 0x08000000, NSTCS_ALLOWJUNCTIONS = 0x10000000, NSTCS_SHOWTABSBUTTON = 0x20000000, NSTCS_SHOWDELETEBUTTON = 0x40000000, NSTCS_SHOWREFRESHBUTTON = (int) 0x80000000, }; typedef DWORD NSTCSTYLE; [v1_enum] enum _NSTCROOTSTYLE { NSTCRS_VISIBLE = 0x0000, NSTCRS_HIDDEN = 0x0001, NSTCRS_EXPANDED = 0x0002, }; typedef DWORD NSTCROOTSTYLE; [v1_enum] enum _NSTCITEMSTATE { NSTCIS_NONE = 0x0000, NSTCIS_SELECTED = 0x0001, NSTCIS_EXPANDED = 0x0002, NSTCIS_BOLD = 0x0004, NSTCIS_DISABLED = 0x0008, NSTCIS_SELECTEDNOEXPAND = 0x0010, }; typedef DWORD NSTCITEMSTATE; typedef [v1_enum] enum NSTCGNI { NSTCGNI_NEXT = 0, NSTCGNI_NEXTVISIBLE = 1, NSTCGNI_PREV = 2, NSTCGNI_PREVVISIBLE = 3, NSTCGNI_PARENT = 4, NSTCGNI_CHILD = 5, NSTCGNI_FIRSTVISIBLE = 6, NSTCGNI_LASTVISIBLE = 7, } NSTCGNI; HRESULT Initialize( [in] HWND hwndParent, [in, unique] RECT *prc, [in] NSTCSTYLE nsctsFlags); HRESULT TreeAdvise( [in] IUnknown *punk, [out] DWORD *pdwCookie); HRESULT TreeUnadvise([in] DWORD dwCookie); HRESULT AppendRoot( [in] IShellItem *psiRoot, [in] SHCONTF grfEnumFlags, [in] NSTCROOTSTYLE grfRootStyle, [in, unique] IShellItemFilter *pif); HRESULT InsertRoot( [in] int iIndex, [in] IShellItem *psiRoot, [in] SHCONTF grfEnumFlags, [in] NSTCROOTSTYLE grfRootStyle, [in, unique] IShellItemFilter *pif); HRESULT RemoveRoot([in] IShellItem *psiRoot); HRESULT RemoveAllRoots(); HRESULT GetRootItems([out] IShellItemArray **ppsiaRootItems); HRESULT SetItemState( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcisMask, [in] NSTCITEMSTATE nstcisFlags); HRESULT GetItemState( [in] IShellItem *psi, [in] NSTCITEMSTATE nstcisMask, [out] NSTCITEMSTATE *pnstcisFlags); HRESULT GetSelectedItems([out] IShellItemArray **psiaItems); HRESULT GetItemCustomState( [in] IShellItem *psi, [out] int *piStateNumber); HRESULT SetItemCustomState( [in] IShellItem *psi, [in] int iStateNumber); HRESULT EnsureItemVisible([in] IShellItem *psi); HRESULT SetTheme([in, string] LPCWSTR pszTheme); HRESULT GetNextItem( [in, unique] IShellItem *psi, [in] NSTCGNI nstcgi, [out] IShellItem **ppsiNext); HRESULT HitTest( [in] POINT *ppt, [out] IShellItem **ppsiOut); HRESULT GetItemRect( [in] IShellItem *psi, [out] RECT *prect); HRESULT CollapseAll(); } [ object, uuid(7cc7aed8-290e-49bc-8945-c1401cc9306c), ] interface INameSpaceTreeControl2 : INameSpaceTreeControl { typedef [v1_enum] enum NSTCSTYLE2 { NSTCS2_DEFAULT = 0x00000000, NSTCS2_INTERRUPTNOTIFICATIONS = 0x00000001, NSTCS2_SHOWNULLSPACEMENU = 0x00000002, NSTCS2_DISPLAYPADDING = 0x00000004, NSTCS2_DISPLAYPINNEDONLY = 0x00000008, // Filters items based on PKEY_IsPinnedToNameSpaceTree NTSCS2_NOSINGLETONAUTOEXPAND = 0x00000010, // Prevent auto expansion of singleton nodes in tree NTSCS2_NEVERINSERTNONENUMERATED = 0x00000020, // Don't insert non-enumerated (SFGAO_NONENUMERATED) items } NSTCSTYLE2; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)") HRESULT SetControlStyle( [in] NSTCSTYLE nstcsMask, [in] NSTCSTYLE nstcsStyle); HRESULT GetControlStyle( [in] NSTCSTYLE nstcsMask, [out] NSTCSTYLE *pnstcsStyle); HRESULT SetControlStyle2( [in] NSTCSTYLE2 nstcsMask, [in] NSTCSTYLE2 nstcsStyle); HRESULT GetControlStyle2( [in] NSTCSTYLE2 nstcsMask, [out] NSTCSTYLE2 *pnstcsStyle); } cpp_quote("#define NSTCS2_ALLMASK (NSTCS2_INTERRUPTNOTIFICATIONS | NSTCS2_SHOWNULLSPACEMENU | NSTCS2_DISPLAYPADDING)") cpp_quote("#define SID_SNavigationPane IID_INameSpaceTreeControl // nearest service that you can proffer to") cpp_quote("#define ISLBUTTON(x) (NSTCECT_LBUTTON == ((x) & NSTCECT_BUTTON))") cpp_quote("#define ISMBUTTON(x) (NSTCECT_MBUTTON == ((x) & NSTCECT_BUTTON))") cpp_quote("#define ISRBUTTON(x) (NSTCECT_RBUTTON == ((x) & NSTCECT_BUTTON))") cpp_quote("#define ISDBLCLICK(x) (NSTCECT_DBLCLICK == ((x) & NSTCECT_DBLCLICK))") [ object, uuid(93D77985-B3D8-4484-8318-672CDDA002CE), local ] interface INameSpaceTreeControlEvents : IUnknown { [v1_enum] enum _NSTCEHITTEST { // items up to 0x00ff reflect the TVHITTESTINFO flags NSTCEHT_NOWHERE = 0x0001, NSTCEHT_ONITEMICON = 0x0002, NSTCEHT_ONITEMLABEL = 0x0004, NSTCEHT_ONITEMINDENT = 0x0008, NSTCEHT_ONITEMBUTTON = 0x0010, NSTCEHT_ONITEMRIGHT = 0x0020, NSTCEHT_ONITEMSTATEICON = 0x0040, NSTCEHT_ONITEM = 0x0046, // items below don't reflect the TVHITTESTINFO flags NSTCEHT_ONITEMTABBUTTON = 0x1000, }; typedef DWORD NSTCEHITTEST; [v1_enum] enum _NSTCECLICKTYPE { NSTCECT_LBUTTON = 0x0001, NSTCECT_MBUTTON = 0x0002, NSTCECT_RBUTTON = 0x0003, NSTCECT_BUTTON = 0x0003, NSTCECT_DBLCLICK = 0x0004, }; typedef DWORD NSTCECLICKTYPE; HRESULT OnItemClick( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] NSTCEHITTEST nstceHitTest, [in, annotation("__in")] NSTCECLICKTYPE nstceClickType); HRESULT OnPropertyItemCommit([in, annotation("__in")] IShellItem *psi); HRESULT OnItemStateChanging( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] NSTCITEMSTATE nstcisMask, [in, annotation("__in")] NSTCITEMSTATE nstcisState); HRESULT OnItemStateChanged( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] NSTCITEMSTATE nstcisMask, [in, annotation("__in")] NSTCITEMSTATE nstcisState); HRESULT OnSelectionChanged([in, annotation("__in")] IShellItemArray *psiaSelection); HRESULT OnKeyboardInput( [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] LPARAM lParam); HRESULT OnBeforeExpand([in, annotation("__in")] IShellItem *psi); HRESULT OnAfterExpand([in, annotation("__in")] IShellItem *psi); HRESULT OnBeginLabelEdit([in, annotation("__in")] IShellItem *psi); HRESULT OnEndLabelEdit([in, annotation("__in")] IShellItem *psi); HRESULT OnGetToolTip( [in, annotation("__in")] IShellItem *psi, [out, string, size_is(cchTip), annotation("__out_ecount(cchTip)")] LPWSTR pszTip, [in, annotation("__in")] int cchTip); HRESULT OnBeforeItemDelete([in, annotation("__in")] IShellItem *psi); HRESULT OnItemAdded( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] BOOL fIsRoot); HRESULT OnItemDeleted( [in, annotation("__in")] IShellItem *psi, [in, annotation("__in")] BOOL fIsRoot); HRESULT OnBeforeContextMenu( [in, unique, annotation("__in_opt")] IShellItem *psi, [in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_out")] void **ppv); // psi can only be NULL if NSTCS2_SHOWNULLSPACEMENU is set HRESULT OnAfterContextMenu( [in, annotation("__in_opt")] IShellItem *psi, [in, annotation("__in")] IContextMenu *pcmIn, [in, annotation("__in")] REFIID riid, [out, iid_is(riid), annotation("__deref_out")] void **ppv); HRESULT OnBeforeStateImageChange([in, annotation("__in")] IShellItem *psi); HRESULT OnGetDefaultIconIndex( [in, annotation("__in")] IShellItem *psi, [out, annotation("__out")] int *piDefaultIcon, [out, annotation("__out")] int *piOpenIcon); } cpp_quote("#define NSTCDHPOS_ONTOP -1") [ object, uuid(F9C665D6-C2F2-4c19-BF33-8322D7352F51), local ] interface INameSpaceTreeControlDropHandler : IUnknown { HRESULT OnDragEnter( [in, unique, annotation("__in_opt")] IShellItem *psiOver, [in, annotation("__in")] IShellItemArray *psiaData, [in, annotation("__in")] BOOL fOutsideSource, [in, annotation("__in")] DWORD grfKeyState, [in, out, annotation("__inout")] DWORD *pdwEffect); HRESULT OnDragOver( [in, unique, annotation("__in_opt")] IShellItem *psiOver, [in, annotation("__in")] IShellItemArray *psiaData, [in, annotation("__in")] DWORD grfKeyState, [in, out, annotation("__inout")] DWORD *pdwEffect); HRESULT OnDragPosition( [in, unique, annotation("__in_opt")] IShellItem *psiOver, [in, annotation("__in")] IShellItemArray *psiaData, [in, annotation("__in")] int iNewPosition, [in, annotation("__in")] int iOldPosition); HRESULT OnDrop( [in, unique, annotation("__in_opt")] IShellItem *psiOver, [in, annotation("__in")] IShellItemArray *psiaData, [in, annotation("__in")] int iPosition, [in, annotation("__in")] DWORD grfKeyState, [in, out, annotation("__inout")] DWORD *pdwEffect); HRESULT OnDropPosition( [in, unique, annotation("__in_opt")] IShellItem *psiOver, [in, annotation("__in")] IShellItemArray *psiaData, [in, annotation("__in")] int iNewPosition, [in, annotation("__in")] int iOldPosition); HRESULT OnDragLeave([in, unique, annotation("__in_opt")] IShellItem *psiOver); }; [ object, uuid(71f312de-43ed-4190-8477-e9536b82350b), local ] interface INameSpaceTreeAccessible : IUnknown { HRESULT OnGetDefaultAccessibilityAction( [in, annotation("__in")] IShellItem *psi, [out, annotation("__deref_out")] BSTR *pbstrDefaultAction); HRESULT OnDoDefaultAccessibilityAction([in, annotation("__in")] IShellItem *psi); HRESULT OnGetAccessibilityRole( [in, annotation("__in")] IShellItem *psi, [out, annotation("__out")] VARIANT *pvarRole); } [ object, uuid(2D3BA758-33EE-42d5-BB7B-5F3431D86C78), local ] interface INameSpaceTreeControlCustomDraw : IUnknown { typedef struct NSTCCUSTOMDRAW { IShellItem *psi; UINT uItemState; // CDIS_xxx values NSTCITEMSTATE nstcis; LPCWSTR pszText; int iImage; HIMAGELIST himl; int iLevel; int iIndent; } NSTCCUSTOMDRAW; HRESULT PrePaint( [in, annotation("__in")] HDC hdc, [in, annotation("__in")] RECT *prc, [out, annotation("__out")] LRESULT *plres); HRESULT PostPaint( [in, annotation("__in")] HDC hdc, [in, annotation("__in")] RECT *prc); HRESULT ItemPrePaint( [in, annotation("__in")] HDC hdc, [in, annotation("__in")] RECT *prc, [in, annotation("__in")] NSTCCUSTOMDRAW *pnstccdItem, [in, out, annotation("__inout")] COLORREF *pclrText, [in, out, annotation("__inout")] COLORREF *pclrTextBk, [out, annotation("__out")] LRESULT *plres); HRESULT ItemPostPaint( [in, annotation("__in")] HDC hdc, [in, annotation("__in")] RECT *prc, [in, annotation("__in")] NSTCCUSTOMDRAW *pnstccdItem); } //cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") [ object, uuid(e9701183-e6b3-4ff2-8568-813615fec7be), local ] interface INameSpaceTreeControlFolderCapabilities : IUnknown { typedef [v1_enum] enum NSTCFOLDERCAPABILITIES { NSTCFC_NONE = 0x00000000, NSTCFC_PINNEDITEMFILTERING = 0x00000001, // Supports filtering based on PKEY_IsPinnedToNameSpaceTree NSTCFC_DELAY_REGISTER_NOTIFY = 0x00000002, // Delays registration for change notifications until expanded in navigation pane } NSTCFOLDERCAPABILITIES; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCFOLDERCAPABILITIES)") HRESULT GetFolderCapabilities([in, annotation("__in")] NSTCFOLDERCAPABILITIES nfcMask, [out, annotation("__out")] NSTCFOLDERCAPABILITIES *pnfcValue); } cpp_quote("#endif // NTDDI_VISTA") // New for Vista, but used by downlevel code //cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // IPreviewHandler::DoPreview error codes cpp_quote("#define E_PREVIEWHANDLER_DRM_FAIL _HRESULT_TYPEDEF_(0x86420001L)") // blocked by digital rights management cpp_quote("#define E_PREVIEWHANDLER_NOAUTH _HRESULT_TYPEDEF_(0x86420002L)") // blocked by file permissions cpp_quote("#define E_PREVIEWHANDLER_NOTFOUND _HRESULT_TYPEDEF_(0x86420003L)") // item was not found cpp_quote("#define E_PREVIEWHANDLER_CORRUPT _HRESULT_TYPEDEF_(0x86420004L)") // item was corrupt [ object, uuid(8895b1c6-b41f-4c1c-a562-0d564250836f), ] interface IPreviewHandler : IUnknown { HRESULT SetWindow( [in] HWND hwnd, [in] const RECT *prc); HRESULT SetRect([in] const RECT *prc); HRESULT DoPreview(); HRESULT Unload(); HRESULT SetFocus(); HRESULT QueryFocus([out] HWND* phwnd); HRESULT TranslateAccelerator([in] MSG* pmsg); } [ object, uuid(fec87aaf-35f9-447a-adb7-20234491401a), pointer_default(unique) ] interface IPreviewHandlerFrame: IUnknown { typedef struct { HACCEL haccel; UINT cAccelEntries; } PREVIEWHANDLERFRAMEINFO; HRESULT GetWindowContext([out] PREVIEWHANDLERFRAMEINFO* pinfo); HRESULT TranslateAccelerator([in] MSG* pmsg); }; //cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // // for show/hide deskbands // [ object, uuid(6D67E846-5B9C-4db8-9CBC-DDE12F4254F1), pointer_default(unique) ] interface ITrayDeskBand : IUnknown { HRESULT ShowDeskBand([in] REFCLSID clsid); HRESULT HideDeskBand([in] REFCLSID clsid); HRESULT IsDeskBandShown([in] REFCLSID clsid); HRESULT DeskBandRegistrationChanged(); } [ uuid(B9075C7C-D48E-403f-AB99-D6C77A1084AC), object, pointer_default(unique) ] interface IBandHost : IUnknown { HRESULT CreateBand( [in] REFCLSID rclsidBand, [in] BOOL fAvailable, [in] BOOL fVisible, [in] REFIID riid, [out, iid_is(riid)]void **ppv); HRESULT SetBandAvailability( [in] REFCLSID rclsidBand, [in] BOOL fAvailable); HRESULT DestroyBand([in] REFCLSID rclsidBand); } cpp_quote("#define SID_SBandHost IID_IBandHost") typedef GUID EXPLORERPANE; // identifies panes // these typedefs are used only for the MIDL pass, everyone else gets the cpp_quote stuff cpp_quote("#if 0") typedef EXPLORERPANE *REFEXPLORERPANE; cpp_quote("#endif // 0") cpp_quote("#ifdef __cplusplus") cpp_quote("#define REFEXPLORERPANE const EXPLORERPANE &") cpp_quote("#else // !__cplusplus") cpp_quote("#define REFEXPLORERPANE const EXPLORERPANE * __MIDL_CONST") cpp_quote("#endif // __cplusplus") [ object, uuid(e07010ec-bc17-44c0-97b0-46c7c95b9edc), local, pointer_default(unique) ] interface IExplorerPaneVisibility : IUnknown { [v1_enum] enum _EXPLORERPANESTATE { // ordinals EPS_DONTCARE = 0x0000, // don't impact the pane at all EPS_DEFAULT_ON = 0x0001, // set its default state to "on", however user-modified persisted state is respected. EPS_DEFAULT_OFF = 0x0002, // " " " "off". EPS_STATEMASK = 0xFFFF, // flags // not all ExplorerPanes will necessarily respect these flags EPS_INITIALSTATE = 0x00010000, // ignore persisted state from the user, but user can still modify the state. EPS_FORCE = 0x00020000, // user can't modify the state (i.e. hide affordances for show/hide). implies EPS_INITIALSTATE. }; typedef DWORD EXPLORERPANESTATE; // each pane has its own semantic, for example the NavPane is opt-out, so EPS_DONTCARE means you'll typically have the // NavPane displayed, clients who want it to never show will pass EPS_DEFAULT_OFF | EPS_FORCE. // QueryPane is opt-in, so it will only show for clients who pass EPS_DEFAULT_ON. however its default persisted state // is "off" so if you want to force it on you have to pass EPS_DEFAULT_ON | EPS_INITIALSTATE. // IExplorerPaneVisibility client can provide default states by returning EXPLORERPANESTATE here, // failure of GetPaneState corresponds to EPS_DONTCARE. HRESULT GetPaneState([in, annotation("__in")] REFEXPLORERPANE ep, [out, annotation("__out")] EXPLORERPANESTATE *peps); } cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility") // controls the behavior of the SHCreateDefaultContextMenu() [ object, uuid(3409E930-5A39-11d1-83FA-00A0C90DC849), pointer_default(unique), local ] interface IContextMenuCB : IUnknown { // uMsg is one of DFM_XXX values HRESULT CallBack( [in, unique, annotation("__in_opt")] IShellFolder *psf, [in, unique, annotation("__in_opt")] HWND hwndOwner, [in, unique, annotation("__in_opt")] IDataObject *pdtobj, [in, annotation("__in")] UINT uMsg, [in, annotation("__in")] WPARAM wParam, [in, annotation("__in")] LPARAM lParam); } cpp_quote("#endif // NTDDI_VISTA") [ object, uuid(41ded17d-d6b3-4261-997d-88c60e4b1d58), local, pointer_default(unique) ] interface IDefaultExtractIconInit : IUnknown { // set IExtractIcon GIL_XXX flags HRESULT SetFlags([in, annotation("__in")] UINT uFlags); // set the registry key to load "DefaultIcon" value from HRESULT SetKey([in, annotation("__in")] HKEY hkey); // set the various forms of icons, if pszFile is NULL iIcon is SHSTOCKICONID (SIID_) value HRESULT SetNormalIcon( [in, unique, string, annotation("__in_opt")] LPCWSTR pszFile, [in, annotation("__in")] int iIcon); HRESULT SetOpenIcon( [in, unique, string, annotation("__in_opt")] LPCWSTR pszFile, [in, annotation("__in")] int iIcon); HRESULT SetShortcutIcon( [in, unique, string, annotation("__in_opt")] LPCWSTR pszFile, [in, annotation("__in")] int iIcon); HRESULT SetDefaultIcon( [in, unique, string, annotation("__in_opt")] LPCWSTR pszFile, [in, annotation("__in")] int iIcon); } // "Default" IExtractIcon implementation useful for implementation of ::GetUIObjectOf(IID_IExtractIcon) cpp_quote("STDAPI SHCreateDefaultExtractIcon(__in REFIID riid, __deref_out void **ppv);") interface IEnumExplorerCommand; [ uuid(a08ce4d0-fa25-44ab-b57c-c7b1c323e0b9), pointer_default(unique) ] interface IExplorerCommand : IUnknown { [v1_enum] enum _EXPCMDSTATE { ECS_ENABLED = 0x00, ECS_DISABLED = 0x01, ECS_HIDDEN = 0x02, ECS_CHECKBOX = 0x04, ECS_CHECKED = 0x08, ECS_RADIOCHECK = 0x10, }; typedef DWORD EXPCMDSTATE; [v1_enum] enum _EXPCMDFLAGS { ECF_DEFAULT = 0x00, ECF_HASSUBCOMMANDS = 0x01, ECF_HASSPLITBUTTON = 0x02, ECF_HIDELABEL = 0x04, ECF_ISSEPARATOR = 0x08, ECF_HASLUASHIELD = 0x10, ECF_SEPARATORBEFORE = 0x20, ECF_SEPARATORAFTER = 0x40, ECF_ISDROPDOWN = 0x80, }; typedef DWORD EXPCMDFLAGS; HRESULT GetTitle( [in, unique] IShellItemArray *psiItemArray, [out, string] LPWSTR *ppszName); HRESULT GetIcon( [in, unique] IShellItemArray *psiItemArray, [out, string] LPWSTR *ppszIcon); // we support icon resource strings like: "shell32,-123" HRESULT GetToolTip( [in, unique] IShellItemArray *psiItemArray, [out, string] LPWSTR *ppszInfotip); HRESULT GetCanonicalName([out] GUID* pguidCommandName); HRESULT GetState( [in] IShellItemArray *psiItemArray, [in] BOOL fOkToBeSlow, [out] EXPCMDSTATE *pCmdState); HRESULT Invoke( [in] IShellItemArray *psiItemArray, [in, unique] IBindCtx *pbc); HRESULT GetFlags([out] EXPCMDFLAGS *pFlags); HRESULT EnumSubCommands([out] IEnumExplorerCommand **ppEnum); }; [ uuid(bddacb60-7657-47ae-8445-d23e1acf82ae), object, pointer_default(unique) ] interface IExplorerCommandState : IUnknown { HRESULT GetState([in] IShellItemArray *psiItemArray, [in] BOOL fOkToBeSlow, [out] EXPCMDSTATE *pCmdState); } [ object, uuid(85075acf-231f-40ea-9610-d26b7b58f638), pointer_default(unique) ] interface IInitializeCommand : IUnknown { HRESULT Initialize([in, string] LPCWSTR pszCommandName, [in] IPropertyBag *ppb); } [ uuid(a88826f8-186f-4987-aade-ea0cef8fbfe8), object, pointer_default(unique) ] interface IEnumExplorerCommand : IUnknown { [local] HRESULT Next( [in, annotation("__in")] ULONG celt, [out, size_is(celt), length_is(*pceltFetched), annotation("__out_ecount_part(celt, *pceltFetched)")] IExplorerCommand** pUICommand, [out, annotation("__out_opt __deref_out_range(0, celt)")] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IExplorerCommand** pUICommand, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt); HRESULT Reset(); HRESULT Clone([out] IEnumExplorerCommand **ppenum); }; [ uuid(64961751-0835-43c0-8ffe-d57686530e64), pointer_default(unique) ] interface IExplorerCommandProvider : IUnknown { // IEnumExplorerCommand HRESULT GetCommands( [in] IUnknown *punkSite, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // IExplorerCommand HRESULT GetCommand( [in] REFGUID rguidCommandId, [in] REFIID riid, [out, iid_is(riid)] void **ppv); }; typedef HANDLE HTHEME; [ object, uuid(6e0f9881-42a8-4f2a-97f8-8af4e026d92d), pointer_default(unique) ] interface IInitializeNetworkFolder : IUnknown { HRESULT Initialize( [in, unique] PCIDLIST_ABSOLUTE pidl, [in, unique] PCIDLIST_ABSOLUTE pidlTarget, [in] UINT uDisplayType, // RESOURCEDISPLAYTYPE_ values [in, unique, string] LPCWSTR pszResName, // server or server share name [in, unique, string] LPCWSTR pszProvider); // network provider name }; typedef [v1_enum] enum CPVIEW { CPVIEW_CLASSIC = 0, CPVIEW_ALLITEMS = CPVIEW_CLASSIC, CPVIEW_CATEGORY = 1, CPVIEW_HOME = CPVIEW_CATEGORY, } CPVIEW; [ object, uuid(D11AD862-66DE-4DF4-BF6C-1F5621996AF1), ] interface IOpenControlPanel : IUnknown { HRESULT Open( [in, unique, string] LPCWSTR pszName, [in, unique, string] LPCWSTR pszPage, [in, unique] IUnknown *punkSite); HRESULT GetPath( [in, unique, string] LPCWSTR pszName, [out, string, size_is(cchPath)] LPWSTR pszPath, [in] UINT cchPath); HRESULT GetCurrentView([out] CPVIEW *pView); }; [ object, uuid(0DF60D92-6818-46d6-B358-D66170DDE466), pointer_default(unique) ] interface IComputerInfoChangeNotify : IUnknown { HRESULT ComputerInfoChanged(); }; // IShellFolder IBindCtx parameter: "File System Bind Data". // // The IUnknown for this is accessed through IBindCtx::RegisterObjectParam/GetObjectParam. // // Use this to provide the data needed to create IDLists through IShellFolder::ParseDisplayName(). // // This data applies to the last element of the name that is parsed (c:\foo\bar.txt, // data applies to bar.txt). // // This makes creating these IDLists much faster than supplying the name only. // This is sometimes referred to as "simple parsing". cpp_quote("#define STR_FILE_SYS_BIND_DATA L\"File System Bind Data\"") [ object, uuid(01E18D10-4D8B-11d2-855D-006008059367), pointer_default(unique), local ] interface IFileSystemBindData : IUnknown { HRESULT SetFindData([in] const WIN32_FIND_DATAW *pfd); HRESULT GetFindData([out] WIN32_FIND_DATAW *pfd); }; [ object, uuid(3acf075f-71db-4afa-81f0-3fc4fdf2a5b8), pointer_default(unique), local ] interface IFileSystemBindData2 : IFileSystemBindData { HRESULT SetFileID([in] LARGE_INTEGER liFileID); HRESULT GetFileID([out] LARGE_INTEGER *pliFileID); HRESULT SetJunctionCLSID([in] REFCLSID clsid); HRESULT GetJunctionCLSID([out] CLSID *pclsid); }; cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") // Custom Destination List [ uuid(6332debf-87b5-4670-90c0-5e57b408a49e), object, pointer_default(unique), ] interface ICustomDestinationList : IUnknown { typedef [v1_enum] enum KNOWNDESTCATEGORY { KDC_FREQUENT = 1, KDC_RECENT, } KNOWNDESTCATEGORY; HRESULT SetAppID([in, string] LPCWSTR pszAppID); // Retrieve IObjectArray of IShellItems or IShellLinks that represent removed destinations HRESULT BeginList( [out] UINT *pcMinSlots, [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT AppendCategory( [in, string] LPCWSTR pszCategory, [in] IObjectArray *poa); HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category); HRESULT AddUserTasks([in] IObjectArray *poa); HRESULT CommitList(); // Retrieve IObjectCollection of IShellItems HRESULT GetRemovedDestinations( [in] REFIID riid, [out, iid_is(riid)] void **ppv); HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID); HRESULT AbortList(); }; // Used to remove items from the automatic destination lists created when apps or the system call SHAddToRecentDocs to report usage of a document. [ uuid(12337d35-94c6-48a0-bce7-6a9c69d4d600), object, pointer_default(unique), ] interface IApplicationDestinations : IUnknown { // Set the App User Model ID for the application removing destinations from its list. If an AppID is not provided // via this method, the system will use a heuristically determined ID. This method must be called before // RemoveDestination or RemoveAllDestinations. HRESULT SetAppID([in] LPCWSTR pszAppID); // Remove an IShellItem or an IShellLink from the automatic destination list HRESULT RemoveDestination([in] IUnknown *punk); // Clear the frequent and recent destination lists for this application. HRESULT RemoveAllDestinations(); }; // Allows an application to retrieve the most recent and frequent documents opened in that app, as reported via SHAddToRecentDocs [ uuid(3c594f9f-9f30-47a1-979a-c9e83d3d0a06), object, pointer_default(unique), ] interface IApplicationDocumentLists : IUnknown { typedef [v1_enum] enum APPDOCLISTTYPE { ADLT_RECENT = 0, // The recently used documents list ADLT_FREQUENT, // The frequently used documents list } APPDOCLISTTYPE; // Set the App User Model ID for the application retrieving this list. If an AppID is not provided via this method, // the system will use a heuristically determined ID. This method must be called before GetList. HRESULT SetAppID([in] LPCWSTR pszAppID); // Retrieve an IEnumObjects or IObjectArray for IShellItems and/or IShellLinks. // Items may appear in both the frequent and recent lists. HRESULT GetList([in] APPDOCLISTTYPE listtype, [in] UINT cItemsDesired, [in] REFIID riid, [out, iid_is(riid)] void **ppv); }; // Provides access to the App User Model ID on objects supporting this value [ uuid(36db0196-9665-46d1-9ba7-d3709eecf9ed), object, pointer_default(unique) ] interface IObjectWithAppUserModelID : IUnknown { HRESULT SetAppID([in, string] LPCWSTR pszAppID); HRESULT GetAppID([out, string] LPWSTR *ppszAppID); }; // Provides access to the ProgID associated with an object [ uuid(71e806fb-8dee-46fc-bf8c-7748a8a1ae13), object, pointer_default(unique) ] interface IObjectWithProgID : IUnknown { HRESULT SetProgID([in, string] LPCWSTR pszProgID); HRESULT GetProgID([out, string] LPWSTR *ppszProgID); }; [ uuid(6589b6d2-5f8d-4b9e-b7e0-23cdd9717d8c), local, pointer_default(unique) ] interface IUpdateIDList : IUnknown { // Implemented by an IShellFolder implementation, this method updates the provided child IDList based on the // parameters specified by the provided IBindCtx. If pbc is NULL, or does not contain any parameters that // apply to the current Shell Folder, pidlIn should simply be cloned into ppidlOut. HRESULT Update( [in, unique, annotation("__in_opt")] IBindCtx *pbc, [in, annotation("__in")] PCUITEMID_CHILD pidlIn, [out, annotation("__deref_out")] PITEMID_CHILD *ppidlOut); }; // Sets the User Model AppID for the current process, enabling Windows to retrieve this ID cpp_quote("SHSTDAPI SetCurrentProcessExplicitAppUserModelID(__in PCWSTR AppID);") // Retrieves the User Model AppID that has been explicitly set for the current process via // SetCurrentProcessExplicitAppUserModelID cpp_quote("SHSTDAPI GetCurrentProcessExplicitAppUserModelID(__deref_out PWSTR *AppID);") cpp_quote("#endif // NTDDI_WIN7") [ object, uuid(c1646bc4-f298-4f91-a204-eb2dd1709d1a), ] interface IDesktopGadget : IUnknown { HRESULT RunGadget([in] LPCWSTR gadgetPath); }; cpp_quote("#define HOMEGROUP_SECURITY_GROUP L\"HomeUsers\"") // IHomeGroup [ uuid(7a3bd1d9-35a9-4fb3-a467-f48cac35e2d0), object, local ] interface IHomeGroup : IUnknown { typedef [v1_enum] enum HOMEGROUPSHARINGCHOICES { HGSC_NONE = 0x00000000, HGSC_MUSICLIBRARY = 0x00000001, HGSC_PICTURESLIBRARY = 0x00000002, HGSC_VIDEOSLIBRARY = 0x00000004, HGSC_DOCUMENTSLIBRARY = 0x00000008, HGSC_PRINTERS = 0x00000010, } HOMEGROUPSHARINGCHOICES; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(HOMEGROUPSHARINGCHOICES)") HRESULT IsMember([out] BOOL *member); HRESULT ShowSharingWizard([in] HWND owner, [out] HOMEGROUPSHARINGCHOICES *sharingchoices); }; [ helpstring("Initialize With IPropertyStore"), uuid(C3E12EB5-7D8D-44f8-B6DD-0E77B34D6DE4), object, pointer_default(unique) ] interface IInitializeWithPropertyStore : IUnknown { HRESULT Initialize([in] IPropertyStore *pps); }; [ helpstring("OpenSearch Data Source API"), uuid(F0EE7333-E6FC-479b-9F25-A860C234A38E), object, pointer_default(unique), ] interface IOpenSearchSource : IUnknown { HRESULT GetResults( [in] HWND hwnd, [in] LPCWSTR pszQuery, [in] DWORD dwStartIndex, [in] DWORD dwCount, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // return IStream }; // Library API [ helpstring("Shell Library API"), uuid(11a66efa-382e-451a-9234-1e0e12ef3085), object, pointer_default(unique), ] interface IShellLibrary : IUnknown { typedef [v1_enum] enum LIBRARYFOLDERFILTER { LFF_FORCEFILESYSTEM = 1, // Return only file system items. LFF_STORAGEITEMS = 2, // Return any items that can be bound to an IStorage. (default) LFF_ALLITEMS = 3, // Return all items. } LIBRARYFOLDERFILTER; typedef [v1_enum] enum LIBRARYOPTIONFLAGS { LOF_DEFAULT = 0x00000000, LOF_PINNEDTONAVPANE = 0x00000001, // Specifies that this library is pinned to the navigation pane. LOF_MASK_ALL = 0x00000001, } LIBRARYOPTIONFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(LIBRARYOPTIONFLAGS)") typedef [v1_enum] enum DEFAULTSAVEFOLDERTYPE { DSFT_DETECT = 1, // Specifies the save folder for the current user depending on whether or not they are the owner of the library DSFT_PRIVATE, // Specifies the private save folder for the owner of the library DSFT_PUBLIC, // Specifies the public save folder for non-owners of the library } DEFAULTSAVEFOLDERTYPE; typedef [v1_enum] enum LIBRARYSAVEFLAGS { LSF_FAILIFTHERE = 0x00000000, // if a library with the same name exists fail to save LSF_OVERRIDEEXISTING = 0x00000001, // will override existing library with the same name if there or create a new one if not LSF_MAKEUNIQUENAME = 0x00000002, // if a library with the same name exists create a unique name by adding a number in parenthesis } LIBRARYSAVEFLAGS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(LIBRARYSAVEFLAGS)") HRESULT LoadLibraryFromItem([in] IShellItem *psiLibrary, [in] DWORD grfMode); HRESULT LoadLibraryFromKnownFolder([in] REFKNOWNFOLDERID kfidLibrary, [in] DWORD grfMode); HRESULT AddFolder([in] IShellItem *psiLocation); HRESULT RemoveFolder([in] IShellItem *psiLocation); // may return S_FALSE if some folders were omitted due to errors during enumeration HRESULT GetFolders( [in] LIBRARYFOLDERFILTER lff, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // returns IShellItemArray // returns S_FALSE if no resolution was necessary; resolved folder will not be saved until Save[InKnownFolder] or Commit is called HRESULT ResolveFolder( [in] IShellItem *psiFolderToResolve, [in] DWORD dwTimeout, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // returns IShellItem HRESULT GetDefaultSaveFolder( [in] DEFAULTSAVEFOLDERTYPE dsft, [in] REFIID riid, [out, iid_is(riid)] void **ppv); // returns IShellItem HRESULT SetDefaultSaveFolder([in] DEFAULTSAVEFOLDERTYPE dsft, [in] IShellItem *psi); HRESULT GetOptions([out] LIBRARYOPTIONFLAGS *plofOptions); HRESULT SetOptions([in] LIBRARYOPTIONFLAGS lofMask, [in] LIBRARYOPTIONFLAGS lofOptions); HRESULT GetFolderType([out] FOLDERTYPEID *pftid); HRESULT SetFolderType([in] REFFOLDERTYPEID ftid); HRESULT GetIcon([out, string] LPWSTR *ppszIcon); HRESULT SetIcon([in, string] LPCWSTR pszIcon); HRESULT Commit(); HRESULT Save( [in] IShellItem *psiFolderToSaveIn, [in, string] LPCWSTR pszLibraryName, // name without an extension [in] LIBRARYSAVEFLAGS lsf, [out] IShellItem **ppsiSavedTo); HRESULT SaveInKnownFolder( [in] REFKNOWNFOLDERID kfidToSaveIn, [in, string] LPCWSTR pszLibraryName, // name without an extension [in] LIBRARYSAVEFLAGS lsf, [out] IShellItem **ppsiSavedTo); }; // // NOTE - this typelib is never registered anywhere // objects that want their typelibs to be registered // in shell32 should add their coclass to shldisp.idl // // Microsoft Shell Objects [ uuid(50a7e9b1-70ef-11d1-b75a-00a0c90564fe), // LIBID_ShellObjects lcid(0x0000), version(1.0) ] library ShellObjects { // CLSID_ShellDesktop [ uuid(00021400-0000-0000-C000-000000000046) ] coclass ShellDesktop { interface IShellFolder2; } // CLSID_ShellFSFolder [ uuid(F3364BA0-65B9-11CE-A9BA-00AA004AE837) ] coclass ShellFSFolder { interface IShellFolder2; } // CLSID_NetworkPlaces [ uuid(208D2C60-3AEA-1069-A2D7-08002B30309D) ] coclass NetworkPlaces { interface IShellFolder2; } // CLSID_ShellLink [ uuid(00021401-0000-0000-C000-000000000046) ] coclass ShellLink { interface IShellLinkW; } // 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_PropertiesUI [ uuid(d912f8cf-0396-4915-884e-fb425d32943b) ] coclass PropertiesUI { interface IPropertyUI; } // CLSID_UserNotification [ uuid(0010890e-8789-413c-adbc-48f5b511b3af) ] coclass UserNotification { interface IUserNotification; } // CLSID_CDBurn [ uuid(fbeb8a05-beee-4442-804e-409d6c4515e9) ] coclass CDBurn { interface ICDBurn; } // CLSID_TaskbarList [ uuid(56FDF344-FD6D-11d0-958A-006097C9A090) ] coclass TaskbarList { interface ITaskbarList4; } // CLSID_StartMenuPin [ uuid(a2a9545d-a0c2-42b4-9708-a0b2badd77c8) ] coclass StartMenuPin { interface IStartMenuPinnedList; } // 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_ExplorerBrowser [ uuid(71f96385-ddd6-48d3-a0c1-ae06e8b055fb) ] coclass ExplorerBrowser { interface IExplorerBrowser; } // 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_TrayDeskBand [ uuid(E6442437-6C68-4f52-94DD-2CFED267EFB9) ] coclass TrayDeskBand { interface ITrayDeskBand; } // CLSID_AttachmentServices [ uuid(4125dd96-e03a-4103-8f70-e0597d803b9c) ] coclass AttachmentServices { interface IAttachmentExecute; } // CLSID_DocPropShellExtension [ uuid(883373C3-BF89-11D1-BE35-080036B11A03) ] coclass DocPropShellExtension { interface IShellExtInit; } // CLSID_ShellItem [ uuid(9ac9fbe1-e0a2-4ad6-b4ee-e212013ea917) ] coclass ShellItem { interface IShellItem2; } // CLSID_NamespaceWalker [ uuid(72eb61e0-8672-4303-9175-f2e4c68b2e7c) ] coclass NamespaceWalker { interface INamespaceWalk; } // CLSID_FileOperation [ uuid(3ad05575-8857-4850-9277-11b85bdb8e09) ] coclass FileOperation { interface IFileOperation; } // CLSID_FileOpenDialog [ uuid(DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7) ] coclass FileOpenDialog { interface IFileOpenDialog; } // CLSID_FileSaveDialog [ uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B) ] coclass FileSaveDialog { interface IFileSaveDialog; } // CLSID_KnownFolderManager [ uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a) ] coclass KnownFolderManager { interface IKnownFolderManager; } // CLSID_FSCopyHandler [ uuid(D197380A-0A79-4dc8-A033-ED882C2FA14B) ] coclass FSCopyHandler { interface IUnknown; } // CLSID_SharingConfigurationManager [ uuid(49F371E1-8C5C-4d9c-9A3B-54A6827F513C) ] coclass SharingConfigurationManager { interface ISharingConfigurationManager; } // CLSID_PreviousVersions [ uuid(596AB062-B4D2-4215-9F74-E9109B0A8153) ] coclass PreviousVersions { interface IPreviousVersionsInfo; } // CLSID_NetworkConnections [ uuid(7007ACC7-3202-11D1-AAD2-00805FC1270E) ] coclass NetworkConnections { interface IShellFolder2; } // CLSID_NamespaceTreeControl [ uuid(AE054212-3535-4430-83ED-D501AA6680E6) ] coclass NamespaceTreeControl { interface INameSpaceTreeControl2; } // CLSID_IENamespaceTreeControl [ uuid(ACE52D03-E5CD-4b20-82FF-E71B11BEAE1D) ] coclass IENamespaceTreeControl { interface IUnknown; } // CLSID_ScheduledTasks [ uuid(D6277990-4C6A-11CF-8D87-00AA0060F5BF) ] coclass ScheduledTasks { interface IShellFolder2; } // CLSID_ApplicationAssociationRegistration [ uuid(591209c7-767b-42b2-9fba-44ee4615f2c7) ] coclass ApplicationAssociationRegistration { interface IApplicationAssociationRegistration; } // CLSID_ApplicationAssociationRegistrationUI [ uuid(1968106d-f3b5-44cf-890e-116fcb9ecef1) ] coclass ApplicationAssociationRegistrationUI { interface IApplicationAssociationRegistrationUI; } // CLSID_SearchFolderItemFactory [ uuid(14010e02-bbbd-41f0-88e3-eda371216584) ] coclass SearchFolderItemFactory { interface ISearchFolderItemFactory; } // CLSID_OpenControlPanel [ uuid(06622D85-6856-4460-8DE1-A81921B41C4B) ] coclass OpenControlPanel { interface IOpenControlPanel; } // CLSID_MailRecipient [ uuid(9E56BE60-C50F-11CF-9A2C-00A0C90A90CE) ] coclass MailRecipient { interface IDropTarget; } // CLSID_NetworkExplorerFolder [ uuid(F02C1A0D-BE21-4350-88B0-7367FC96EF3C) ] coclass NetworkExplorerFolder { interface IShellFolder2; } // CLSID_DestinationList [ uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6) ] coclass DestinationList { interface ICustomDestinationList; } // CLSID_ApplicationDestinations [ uuid(86c14003-4d6b-4ef3-a7b4-0506663b2e68) ] coclass ApplicationDestinations { interface IApplicationDestinations; } // CLSID_ApplicationDocumentLists [ uuid(86bec222-30f2-47e0-9f25-60d11cd75c28) ] coclass ApplicationDocumentLists { interface IApplicationDocumentLists; } // CLSID_HomeGroup [ uuid(DE77BA04-3C92-4d11-A1A5-42352A53E0E3) ] coclass HomeGroup { interface IHomeGroup; } // CLSID_ShellLibrary [ uuid(d9b3211d-e57f-4426-aaef-30a806add397) ] coclass ShellLibrary { interface IShellLibrary; } // CLSID_AppStartupLink [ uuid(273eb5e7-88b0-4843-bfef-e2c81d43aae5) ] coclass AppStartupLink { interface IShellLinkW; } // CLSID_EnumerableObjectCollection [ uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a) ] coclass EnumerableObjectCollection { interface IEnumObjects; } // CLSID_DesktopGadget [ uuid(924ccc1b-6562-4c85-8657-d177925222b6) ] coclass DesktopGadget { interface IDesktopGadget; } }; cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") cpp_quote("SHSTDAPI SHGetTemporaryPropertyForItem(__in IShellItem *psi, __in REFPROPERTYKEY propkey, __out PROPVARIANT *ppropvar);") cpp_quote("SHSTDAPI SHSetTemporaryPropertyForItem(__in IShellItem *psi, __in REFPROPERTYKEY propkey, __in REFPROPVARIANT propvar);") cpp_quote("#endif // NTDDI_VISTA") // helper APIs to simplify initializing an instance of IShellLibrary and working with file system paths cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)") typedef [v1_enum] enum LIBRARYMANAGEDIALOGOPTIONS { LMD_DEFAULT = 0x00000000, LMD_ALLOWUNINDEXABLENETWORKLOCATIONS = 0x00000001, // The caller of SHShowManageLibraryUI does not want to show any warning dialogs about network locations that cannot be indexed } LIBRARYMANAGEDIALOGOPTIONS; cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(LIBRARYMANAGEDIALOGOPTIONS)") cpp_quote("SHSTDAPI SHShowManageLibraryUI(__in IShellItem *psiLibrary, __in HWND hwndOwner, __in_opt LPCWSTR pszTitle, __in_opt LPCWSTR pszInstruction, __in LIBRARYMANAGEDIALOGOPTIONS lmdOptions);") cpp_quote("SHSTDAPI SHResolveLibrary(__in IShellItem *psiLibrary);") cpp_quote("#ifdef __cplusplus") cpp_quote("") cpp_quote("__inline HRESULT SHCreateLibrary(__in REFIID riid, __deref_out void **ppv)") cpp_quote("{") cpp_quote(" return CoCreateInstance(CLSID_ShellLibrary, NULL, CLSCTX_INPROC_SERVER, riid, ppv);") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHLoadLibraryFromItem(__in IShellItem *psiLibrary, __in DWORD grfMode, __in REFIID riid, __deref_out void **ppv)") cpp_quote("{") cpp_quote(" *ppv = NULL;") cpp_quote(" IShellLibrary *plib;") cpp_quote(" HRESULT hr = CoCreateInstance(CLSID_ShellLibrary, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&plib));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->LoadLibraryFromItem(psiLibrary, grfMode);") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->QueryInterface(riid, ppv);") cpp_quote(" }") cpp_quote(" plib->Release();") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHLoadLibraryFromKnownFolder(__in REFKNOWNFOLDERID kfidLibrary, __in DWORD grfMode, __in REFIID riid, __deref_out void **ppv)") cpp_quote("{") cpp_quote(" *ppv = NULL;") cpp_quote(" IShellLibrary *plib;") cpp_quote(" HRESULT hr = CoCreateInstance(CLSID_ShellLibrary, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&plib));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->LoadLibraryFromKnownFolder(kfidLibrary, grfMode);") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->QueryInterface(riid, ppv);") cpp_quote(" }") cpp_quote(" plib->Release();") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHLoadLibraryFromParsingName(__in PCWSTR pszParsingName, __in DWORD grfMode, __in REFIID riid, __deref_out void **ppv)") cpp_quote("{") cpp_quote(" *ppv = NULL;") cpp_quote(" IShellItem *psiLibrary;") cpp_quote(" HRESULT hr = SHCreateItemFromParsingName(pszParsingName, NULL, IID_PPV_ARGS(&psiLibrary));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = SHLoadLibraryFromItem(psiLibrary, grfMode, riid, ppv);") cpp_quote(" psiLibrary->Release();") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHAddFolderPathToLibrary(__in IShellLibrary *plib, __in PCWSTR pszFolderPath)") cpp_quote("{") cpp_quote(" IShellItem *psiFolder;") cpp_quote(" HRESULT hr = SHCreateItemFromParsingName(pszFolderPath, NULL, IID_PPV_ARGS(&psiFolder));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->AddFolder(psiFolder);") cpp_quote(" psiFolder->Release();") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHRemoveFolderPathFromLibrary(__in IShellLibrary *plib, __in PCWSTR pszFolderPath)") cpp_quote("{") cpp_quote(" PIDLIST_ABSOLUTE pidlFolder = SHSimpleIDListFromPath(pszFolderPath);") cpp_quote(" HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" IShellItem *psiFolder;") cpp_quote(" hr = SHCreateItemFromIDList(pidlFolder, IID_PPV_ARGS(&psiFolder));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = plib->RemoveFolder(psiFolder);") cpp_quote(" psiFolder->Release();") cpp_quote(" }") cpp_quote(" CoTaskMemFree(pidlFolder);") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHResolveFolderPathInLibrary(__in IShellLibrary *plib, __in PCWSTR pszFolderPath, __in DWORD dwTimeout, __deref_out PWSTR *ppszResolvedPath)") cpp_quote("{") cpp_quote(" *ppszResolvedPath = NULL;") cpp_quote(" PIDLIST_ABSOLUTE pidlFolder = SHSimpleIDListFromPath(pszFolderPath);") cpp_quote(" HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" IShellItem *psiFolder;") cpp_quote(" hr = SHCreateItemFromIDList(pidlFolder, IID_PPV_ARGS(&psiFolder));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" IShellItem *psiResolved;") cpp_quote(" hr = plib->ResolveFolder(psiFolder, dwTimeout, IID_PPV_ARGS(&psiResolved));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" hr = psiResolved->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, ppszResolvedPath);") cpp_quote(" psiResolved->Release();") cpp_quote(" }") cpp_quote(" psiFolder->Release();") cpp_quote(" }") cpp_quote(" CoTaskMemFree(pidlFolder);") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("") cpp_quote("__inline HRESULT SHSaveLibraryInFolderPath(__in IShellLibrary *plib, __in PCWSTR pszFolderPath, __in PCWSTR pszLibraryName, __in LIBRARYSAVEFLAGS lsf, __deref_opt_out PWSTR *ppszSavedToPath)") cpp_quote("{") cpp_quote(" if (ppszSavedToPath)") cpp_quote(" {") cpp_quote(" *ppszSavedToPath = NULL;") cpp_quote(" }") cpp_quote("") cpp_quote(" IShellItem *psiFolder;") cpp_quote(" HRESULT hr = SHCreateItemFromParsingName(pszFolderPath, NULL, IID_PPV_ARGS(&psiFolder));") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" IShellItem *psiSavedTo;") cpp_quote(" hr = plib->Save(psiFolder, pszLibraryName, lsf, &psiSavedTo);") cpp_quote(" if (SUCCEEDED(hr))") cpp_quote(" {") cpp_quote(" if (ppszSavedToPath)") cpp_quote(" {") cpp_quote(" hr = psiSavedTo->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, ppszSavedToPath);") cpp_quote(" }") cpp_quote(" psiSavedTo->Release();") cpp_quote(" }") cpp_quote(" psiFolder->Release();") cpp_quote(" }") cpp_quote(" return hr;") cpp_quote("}") cpp_quote("#endif // __cplusplus") cpp_quote("#endif // _WIN32_IE >= _WIN32_IE_IE70") cpp_quote("#endif // NTDDI_WIN7") cpp_quote("#if (NTDDI_VERSION >= NTDDI_VISTA)") // // SHAssocEnumHandlers returns an IEnumAssocHandlers object. // // Invoke an associated app handler [ uuid(92218CAB-ECAA-4335-8133-807FD234C2EE), object, pointer_default(unique), local ] interface IAssocHandlerInvoker : IUnknown { // Returns S_OK if selection is supported, S_FALSE if not. HRESULT SupportsSelection(); HRESULT Invoke(); }; // Enumerate handlers [ uuid(F04061AC-1659-4a3f-A954-775AA57FC083), object, pointer_default(unique), local ] interface IAssocHandler : IUnknown { HRESULT GetName([string, out, annotation("__deref_out")] LPWSTR *ppsz); HRESULT GetUIName([string, out, annotation("__deref_out")] LPWSTR *ppsz); HRESULT GetIconLocation( [string, out, annotation("__deref_out")] LPWSTR *ppszPath, [out, annotation("__out")] int *pIndex); HRESULT IsRecommended(); HRESULT MakeDefault([in, string, annotation("__in")] LPCWSTR pszDescription); HRESULT Invoke([in, annotation("__in")] IDataObject *pdo); HRESULT CreateInvoker( [in, annotation("__in")] IDataObject *pdo, [out, annotation("__deref_out")] IAssocHandlerInvoker **ppInvoker); }; // Enumerate handlers [ uuid(973810ae-9599-4b88-9e4d-6ee98c9552da), object, pointer_default(unique), local ] interface IEnumAssocHandlers : IUnknown { HRESULT Next( [in, annotation("__in")] ULONG celt, [out, size_is(celt), length_is(*pceltFetched), annotation("__out_ecount_part(celt, *pceltFetched)")] IAssocHandler **rgelt, [out, annotation("__out_range(0,celt) __exceptthat __maybenull")] ULONG *pceltFetched); }; enum _ASSOC_FILTER { ASSOC_FILTER_NONE = 0x0, ASSOC_FILTER_RECOMMENDED = 0x1, }; typedef int ASSOC_FILTER; cpp_quote("SHSTDAPI SHAssocEnumHandlers(__in LPCWSTR pszExtra, __in ASSOC_FILTER afFilter, __deref_out IEnumAssocHandlers **ppEnumHandler);") cpp_quote("#endif // NTDDI_VISTA") cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") cpp_quote("SHSTDAPI SHAssocEnumHandlersForProtocolByApplication(__in PCWSTR protocol, __in REFIID riid, __deref_out void **enumHandlers);") cpp_quote("#endif // NTDDI_WIN7")