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