ShObjIdl.idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:78k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //
  2. //  Microsoft Windows
  3. //  Copyright (c) Microsoft Corporation. All rights reserved.
  4. //
  5. //  File: shobjidl.idl
  6. //
  7. //  Contents: This interface definition contains shell objects that can be remoted
  8. //
  9. import "objidl.idl";
  10. import "oleidl.idl";
  11. import "oaidl.idl";
  12. import "shtypes.idl";
  13. import "servprov.idl";
  14. import "comcat.idl";        // for IEnumGUID
  15. import "propidl.idl";
  16. import "prsht.idl";
  17. import "msxml.idl";
  18. cpp_quote("#ifndef _WINRESRC_")
  19. cpp_quote("#ifndef _WIN32_IE")
  20. cpp_quote("#define _WIN32_IE 0x0501")
  21. cpp_quote("#else")
  22. cpp_quote("#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)")
  23. cpp_quote("#error _WIN32_IE setting conflicts with _WIN32_WINNT setting")
  24. cpp_quote("#endif")
  25. cpp_quote("#endif")
  26. cpp_quote("#endif")
  27. // IPersistFolder
  28. [
  29.     object,
  30.     uuid(000214EA-0000-0000-C000-000000000046),  // IID_IPersistFolder
  31.     pointer_default(unique),
  32. ]
  33. interface IPersistFolder : IPersist
  34. {
  35.     // IShellFolder::BindToObject when it is initializing a shell folder object.")
  36.     // called when the explorer is initializing a shell folder object.
  37.     // pidl -- Specifies the absolute location of the folder
  38.     HRESULT Initialize([in] LPCITEMIDLIST pidl);
  39. };
  40. typedef IPersistFolder *LPPERSISTFOLDER;
  41. cpp_quote("#if (_WIN32_IE >= 0x0400)")
  42. // IPersistFolder2
  43. [
  44.     object,
  45.     uuid(1AC3D9F0-175C-11d1-95BE-00609797EA4F),  // IID_IPersistFolder2
  46.     pointer_default(unique),
  47. ]
  48. interface IPersistFolder2 : IPersistFolder
  49. {
  50.     HRESULT GetCurFolder([out] LPITEMIDLIST *ppidl);
  51. };
  52. typedef IPersistFolder2 *LPPERSISTFOLDER2;
  53. cpp_quote("#endif")
  54. [
  55.     object,
  56.     uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),  // IID_IPersistIDList
  57.     pointer_default(unique),
  58. ]
  59. interface IPersistIDList : IPersist
  60. {
  61.     // sets or gets a fully qualifed idlist for an object
  62.     HRESULT SetIDList([in] LPCITEMIDLIST pidl);
  63.     HRESULT GetIDList([out] LPITEMIDLIST *ppidl);
  64. };
  65.     
  66. [
  67.     helpstring("IEnumIDList "),
  68.     uuid(000214F2-0000-0000-C000-000000000046),
  69.     object,
  70.     pointer_default(unique)
  71. ]
  72. interface IEnumIDList : IUnknown
  73. {
  74.     HRESULT Next(
  75.         [in] ULONG celt,
  76.         [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
  77.         [out] ULONG *pceltFetched);
  78.         
  79.     HRESULT Skip([in] ULONG celt);
  80.     HRESULT Reset();
  81.     HRESULT Clone([out] IEnumIDList **ppenum);
  82. };
  83. typedef IEnumIDList *LPENUMIDLIST;
  84. // IShellFolder::GetDisplayNameOf/SetNameOf uFlags                                      
  85. cpp_quote("typedef enum tagSHGDN")
  86. cpp_quote("{")
  87. cpp_quote("    SHGDN_NORMAL             = 0x0000,  // default (display purpose)")
  88. cpp_quote("    SHGDN_INFOLDER           = 0x0001,  // displayed under a folder (relative)")
  89. cpp_quote("    SHGDN_FOREDITING         = 0x1000,  // for in-place editing")
  90. cpp_quote("    SHGDN_FORADDRESSBAR      = 0x4000,  // UI friendly parsing name (remove ugly stuff)")
  91. cpp_quote("    SHGDN_FORPARSING         = 0x8000,  // parsing name for ParseDisplayName()")
  92. cpp_quote("} SHGNO;")
  93. typedef DWORD SHGDNF;
  94. // IShellFolder::EnumObjects grfFlags bits
  95. cpp_quote("typedef enum tagSHCONTF")
  96. cpp_quote("{")
  97. cpp_quote("    SHCONTF_FOLDERS             = 0x0020,   // only want folders enumerated (SFGAO_FOLDER)")
  98. cpp_quote("    SHCONTF_NONFOLDERS          = 0x0040,   // include non folders")
  99. cpp_quote("    SHCONTF_INCLUDEHIDDEN       = 0x0080,   // show items normally hidden")
  100. cpp_quote("    SHCONTF_INIT_ON_FIRST_NEXT  = 0x0100,   // allow EnumObject() to return before validating enum")
  101. cpp_quote("    SHCONTF_NETPRINTERSRCH      = 0x0200,   // hint that client is looking for printers")
  102. cpp_quote("    SHCONTF_SHAREABLE           = 0x0400,   // hint that client is looking sharable resources (remote shares)")
  103. cpp_quote("    SHCONTF_STORAGE             = 0x0800,   // include all items with accessible storage and their ancestors")
  104. cpp_quote("};")
  105. typedef DWORD SHCONTF;
  106. // IShellFolder::CompareIDs lParam flags
  107. //
  108. //  SHCIDS_ALLFIELDS is a mask for lParam indicating that the shell folder
  109. //  should first compare on the lParam column, and if that proves equal,
  110. //  then perform a full comparison on all fields.  This flag is supported
  111. //  if the IShellFolder supports IShellFolder2.
  112. //
  113. //  SHCIDS_CANONICALONLY is a mask for lParam indicating that the shell folder
  114. //  that the caller doesn't care about proper sort order -- only equality matters.
  115. //  (Most CompareIDs test for equality first, and in the case of inequality do
  116. //  a UI sort.  This bit allows for a more efficient sort in the inequality case.)
  117. //
  118. //
  119. cpp_quote("#define SHCIDS_ALLFIELDS        0x80000000L")
  120. cpp_quote("#define SHCIDS_CANONICALONLY    0x10000000L")
  121. cpp_quote("#define SHCIDS_BITMASK          0xFFFF0000L")
  122. cpp_quote("#define SHCIDS_COLUMNMASK       0x0000FFFFL")
  123. // IShellFolder::GetAttributesOf flags
  124. // SFGAO_CANLINK: If this bit is set on an item in the shell folder, a
  125. //            'Create Shortcut' menu item will be added to the File
  126. //            menu and context menus for the item.  If the user selects
  127. //            that command, your IContextMenu::InvokeCommand() will be called
  128. //            with 'link'.
  129. //                 That flag will also be used to determine if 'Create Shortcut'
  130. //            should be added when the item in your folder is dragged to another
  131. //            folder.
  132. cpp_quote("#define SFGAO_CANCOPY           DROPEFFECT_COPY // Objects can be copied    (0x1)")
  133. cpp_quote("#define SFGAO_CANMOVE           DROPEFFECT_MOVE // Objects can be moved     (0x2)")
  134. cpp_quote("#define SFGAO_CANLINK           DROPEFFECT_LINK // Objects can be linked    (0x4)")
  135. cpp_quote("#define SFGAO_STORAGE           0x00000008L     // supports BindToObject(IID_IStorage)")
  136. cpp_quote("#define SFGAO_CANRENAME         0x00000010L     // Objects can be renamed")
  137. cpp_quote("#define SFGAO_CANDELETE         0x00000020L     // Objects can be deleted")
  138. cpp_quote("#define SFGAO_HASPROPSHEET      0x00000040L     // Objects have property sheets")
  139. //         unused                          0x00000080
  140. cpp_quote("#define SFGAO_DROPTARGET        0x00000100L     // Objects are drop target")
  141. cpp_quote("#define SFGAO_CAPABILITYMASK    0x00000177L")
  142. //         unused                          0x00000200
  143. //         unused                          0x00000400
  144. //         unused                          0x00000800
  145. //         unused                          0x00001000
  146. cpp_quote("#define SFGAO_ENCRYPTED         0x00002000L     // object is encrypted (use alt color)")
  147. cpp_quote("#define SFGAO_ISSLOW            0x00004000L     // 'slow' object")
  148. cpp_quote("#define SFGAO_GHOSTED           0x00008000L     // ghosted icon")
  149. cpp_quote("#define SFGAO_LINK              0x00010000L     // Shortcut (link)")
  150. cpp_quote("#define SFGAO_SHARE             0x00020000L     // shared")
  151. cpp_quote("#define SFGAO_READONLY          0x00040000L     // read-only")
  152. cpp_quote("#define SFGAO_HIDDEN            0x00080000L     // hidden object")
  153. cpp_quote("#define SFGAO_DISPLAYATTRMASK   0x000FC000L")
  154. cpp_quote("#define SFGAO_FILESYSANCESTOR   0x10000000L     // may contain children with SFGAO_FILESYSTEM")
  155. cpp_quote("#define SFGAO_FOLDER            0x20000000L     // support BindToObject(IID_IShellFolder)")
  156. cpp_quote("#define SFGAO_FILESYSTEM        0x40000000L     // is a win32 file system object (file/folder/root)")
  157. cpp_quote("#define SFGAO_HASSUBFOLDER      0x80000000L     // may contain children with SFGAO_FOLDER")
  158. cpp_quote("#define SFGAO_CONTENTSMASK      0x80000000L")
  159. cpp_quote("#define SFGAO_VALIDATE          0x01000000L     // invalidate cached information")
  160. cpp_quote("#define SFGAO_REMOVABLE         0x02000000L     // is this removeable media?")
  161. cpp_quote("#define SFGAO_COMPRESSED        0x04000000L     // Object is compressed (use alt color)")
  162. cpp_quote("#define SFGAO_BROWSABLE         0x08000000L     // supports IShellFolder, but only implements CreateViewObject() (non-folder view)")
  163. cpp_quote("#define SFGAO_NONENUMERATED     0x00100000L     // is a non-enumerated object")
  164. cpp_quote("#define SFGAO_NEWCONTENT        0x00200000L     // should show bold in explorer tree")
  165. cpp_quote("#define SFGAO_CANMONIKER        0x00400000L     // defunct")
  166. cpp_quote("#define SFGAO_HASSTORAGE        0x00400000L     // defunct")
  167. cpp_quote("#define SFGAO_STREAM            0x00400000L     // supports BindToObject(IID_IStream)")
  168. cpp_quote("#define SFGAO_STORAGEANCESTOR   0x00800000L     // may contain children with SFGAO_STORAGE or SFGAO_STREAM")
  169. cpp_quote("#define SFGAO_STORAGECAPMASK    0x70C50008L     // for determining storage capabilities, ie for open/save semantics")
  170. typedef ULONG SFGAOF;
  171. //      passed to ISF::ParseDisplayName() or ISF::BindToObject() via IBindCtx::RegisterObjectParam()
  172. // * IPersist must be supported by the ObjectParam
  173. // the CLSID returned by IPersist::GetCLSID() should be skipped
  174. // in the binding process. used to avoid loops or to allow delegation to
  175. // base name space functionality. see SHSkipJunction()
  176. cpp_quote("#define STR_SKIP_BINDING_CLSID      L"Skip Binding CLSID"")
  177. //      passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
  178. // * no interface support required on object param
  179. // instructing to prefer folder support for URLs.  specifically used by the common
  180. // dialog to make it use the DAV NP when parsing http: URLs.
  181. cpp_quote("#define STR_PARSE_PREFER_FOLDER_BROWSING     L"Parse Prefer Folder Browsing"")
  182. //      passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
  183. // instructing to fail parsing relative paths.  only succeeds for fully qualified paths/urls.
  184. // * no interface support required on object param
  185. // 
  186. //      eg. even if "foo.txt" is a child of the desktop, it will still fail
  187. //  but it will succeed for "C:Documents and SettingsUsernameDesktopfoo.txt"
  188. cpp_quote("#define STR_DONT_PARSE_RELATIVE              L"Don't Parse Relative"")
  189. //      passed to SHGetDesktopFolder()->ParseDisplayName() via IBindCtx::RegisterObjectParam()
  190. // to try translate from a full file system pidl to a alias to that pidl, if available.  
  191. // * no interface support required on object param
  192. //
  193. //      eg.  if you pass the following path "C:Documents and SettingsUsernameDesktopfoo.txt"
  194. // if TRANSLATE is SET result is: [foo.txt] (the alias for the desktop being an empty pidl) 
  195. // if TRANSLATE is NOT SET result is: [CLSID_MyComputer][c:][Documents and Settings][Username][Desktop][foo.txt].
  196. cpp_quote("#define STR_PARSE_TRANSLATE_ALIASES          L"Parse Translate Aliases"")
  197. interface IShellFolder;
  198. [
  199.     helpstring("IShellFolder"),
  200.     uuid(000214E6-0000-0000-C000-000000000046),
  201.     object,
  202.     pointer_default(unique)
  203. ]
  204. interface IShellFolder : IUnknown
  205. {
  206.     HRESULT ParseDisplayName(
  207.         [in] HWND hwnd, 
  208.         [in] LPBC pbc, 
  209.         [in, string] LPOLESTR pszDisplayName,
  210.         [out] ULONG *pchEaten, 
  211.         [out] LPITEMIDLIST *ppidl, 
  212.         [in, out, unique] ULONG *pdwAttributes);
  213.     HRESULT EnumObjects(
  214.         [in] HWND hwnd, 
  215.         [in] SHCONTF grfFlags, 
  216.         [out] IEnumIDList **ppenumIDList);
  217.     //  returns an instance of a sub-folder which is specified by the IDList (pidl).
  218.     HRESULT BindToObject(
  219.         [in] LPCITEMIDLIST pidl, 
  220.         [in] LPBC pbc, 
  221.         [in] REFIID riid, 
  222.         [out, iid_is(riid)] void **ppv);
  223.         
  224.     HRESULT BindToStorage(
  225.         [in] LPCITEMIDLIST pidl, 
  226.         [in] LPBC pbc, 
  227.         [in] REFIID riid, 
  228.         [out, iid_is(riid)] void **ppv);
  229.         
  230.     //  compares two IDLists and returns the result. The shell
  231.     //  explorer always passes 0 as lParam, which indicates 'sort by name'.
  232.     //  It should return 0 (as CODE of the scode), if two id indicates the
  233.     //  same object; negative value if pidl1 should be placed before pidl2;
  234.     //  positive value if pidl2 should be placed before pidl1.
  235.     HRESULT CompareIDs(
  236.         [in] LPARAM lParam, 
  237.         [in] LPCITEMIDLIST pidl1, 
  238.         [in] LPCITEMIDLIST pidl2);
  239.     
  240.     //  creates a view object of the folder itself. The view
  241.     //  object is a difference instance from the shell folder object.
  242.     //   'hwndOwner' can be used  as the owner window of its dialog box or
  243.     //  menu during the lifetime of the view object.
  244.     //  This member function should always create a new
  245.     //  instance which has only one reference count. The explorer may create
  246.     //  more than one instances of view object from one shell folder object
  247.     //  and treat them as separate instances.
  248.     HRESULT CreateViewObject(
  249.         [in] HWND hwndOwner, 
  250.         [in] REFIID riid, 
  251.         [out, iid_is(riid)] void **ppv);
  252.     //  returns the attributes of specified objects in that
  253.     //  folder. 'cidl' and 'apidl' specifies objects. 'apidl' contains only
  254.     //  simple IDLists. The explorer initializes *prgfInOut with a set of
  255.     //  flags to be evaluated. The shell folder may optimize the operation
  256.     //  by not returning unspecified flags.
  257.     HRESULT GetAttributesOf(
  258.         [in] UINT cidl, 
  259.         [in, size_is(cidl)] LPCITEMIDLIST * apidl, 
  260.         [in, out] SFGAOF * rgfInOut);
  261.     //  creates a UI object to be used for specified objects.
  262.     //  The shell explorer passes either IID_IDataObject (for transfer operation)
  263.     //  or IID_IContextMenu (for context menu operation) as riid.
  264.     HRESULT GetUIObjectOf(
  265.         [in] HWND hwndOwner, 
  266.         [in] UINT cidl, 
  267.         [in, size_is(cidl)] LPCITEMIDLIST * apidl,
  268.         [in] REFIID riid, 
  269.         [in, out, unique] UINT * rgfReserved,
  270.         [out, iid_is(riid)] void **ppv);
  271.     //  returns the display name of the specified object.
  272.     //  If the ID contains the display name (in the locale character set),
  273.     //  it returns the offset to the name. Otherwise, it returns a pointer
  274.     //  to the display name string (UNICODE), which is allocated by the
  275.     //  task allocator, or fills in a buffer.
  276.     HRESULT GetDisplayNameOf(
  277.         [in] LPCITEMIDLIST pidl, 
  278.         [in] SHGDNF uFlags, 
  279.         [out] STRRET *pName);
  280.     //  sets the display name of the specified object.
  281.     //  If it changes the ID as well, it returns the new ID which is
  282.     //  alocated by the task allocator.
  283.     HRESULT SetNameOf(
  284.         [in] HWND hwnd, 
  285.         [in] LPCITEMIDLIST pidl, 
  286.         [in, string] LPCOLESTR pszName, 
  287.         [in] SHGDNF uFlags, 
  288.         [out] LPITEMIDLIST *ppidlOut);
  289. };
  290. typedef IShellFolder * LPSHELLFOLDER;
  291. cpp_quote("#if (_WIN32_IE >= 0x0500)")
  292. typedef struct tagEXTRASEARCH
  293. {
  294.     GUID    guidSearch;
  295.     WCHAR   wszFriendlyName[80];
  296.     WCHAR   wszUrl[2084];
  297. }EXTRASEARCH, *LPEXTRASEARCH;
  298. typedef struct IEnumExtraSearch *LPENUMEXTRASEARCH;
  299. interface IShellFolder2;    // forward
  300. [
  301.     helpstring("IEnumExtraSearch"),
  302.     uuid(0E700BE1-9DB6-11d1-A1CE-00C04FD75D13),
  303.     object,
  304.     pointer_default(unique)
  305. ]
  306. interface IEnumExtraSearch : IUnknown
  307. {
  308.     HRESULT Next(
  309.         [in] ULONG celt,
  310.         [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
  311.         [out] ULONG *pceltFetched);
  312.     HRESULT Skip([in] ULONG celt);
  313.     HRESULT Reset();
  314.     HRESULT Clone([out] IEnumExtraSearch **ppenum);
  315. };
  316. // IShellFolder2::GetDefaultColumnState values
  317. typedef [v1_enum] enum {
  318.     SHCOLSTATE_TYPE_STR      = 0x00000001,
  319.     SHCOLSTATE_TYPE_INT      = 0x00000002,
  320.     SHCOLSTATE_TYPE_DATE     = 0x00000003,
  321.     SHCOLSTATE_TYPEMASK      = 0x0000000F,
  322.     SHCOLSTATE_ONBYDEFAULT   = 0x00000010,   // should on by default in details view
  323.     SHCOLSTATE_SLOW          = 0x00000020,   // will be slow to compute, do on a background thread
  324.     SHCOLSTATE_EXTENDED      = 0x00000040,   // provided by a handler, not the folder
  325.     SHCOLSTATE_SECONDARYUI   = 0x00000080,   // not displayed in context menu, but listed in the "More..." dialog
  326.     SHCOLSTATE_HIDDEN        = 0x00000100,   // not displayed in the UI
  327.     SHCOLSTATE_PREFER_VARCMP = 0x00000200,   // VarCmp() (with folderness test) produces same result as CompareIDs()
  328. } SHCOLSTATE;
  329. typedef DWORD SHCOLSTATEF; 
  330. typedef struct {
  331.     GUID fmtid;
  332.     DWORD pid;
  333. } SHCOLUMNID, *LPSHCOLUMNID;
  334. typedef const SHCOLUMNID* LPCSHCOLUMNID;
  335. [
  336.     helpstring("IShellFolder2"),
  337.     uuid(93F2F68C-1D1B-11d3-A30E-00C04F79ABD1),
  338.     object,
  339.     pointer_default(unique)
  340. ]
  341. interface IShellFolder2 : IShellFolder
  342. {
  343.     // Returns the guid of the search that is to be invoked when user clicks 
  344.     // on the search toolbar button
  345.     HRESULT GetDefaultSearchGUID([out] GUID *pguid);
  346.     // gives an enumerator of the searches to be added to the search menu
  347.     HRESULT EnumSearches([out] IEnumExtraSearch **ppenum);
  348.     HRESULT GetDefaultColumn([in] DWORD dwRes, [out] ULONG *pSort, [out] ULONG *pDisplay);
  349.     // return SHCOLSTATE_ values
  350.     HRESULT GetDefaultColumnState([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags);
  351.     HRESULT GetDetailsEx([in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
  352.     HRESULT GetDetailsOf([in] LPCITEMIDLIST pidl, [in]UINT iColumn, [out] SHELLDETAILS *psd);
  353.     HRESULT MapColumnToSCID([in] UINT iColumn, [in] SHCOLUMNID *pscid);
  354. };
  355. cpp_quote("#endif // _WIN32_IE >= 0x0500)")
  356. //--------------------------------------------------------------------------
  357. //
  358. // FOLDERSETTINGS
  359. //
  360. //  FOLDERSETTINGS is a data structure that explorer passes from one folder
  361. // view to another, when the user is browsing. It calls ISV::GetCurrentInfo
  362. // member to get the current settings and pass it to ISV::CreateViewWindow
  363. // to allow the next folder view 'inherit' it. These settings assumes a
  364. // particular UI (which the shell's folder view has), and shell extensions
  365. // may or may not use those settings.
  366. //
  367. //--------------------------------------------------------------------------
  368. typedef char * LPVIEWSETTINGS;
  369. // NB Bitfields.
  370. // FWF_DESKTOP implies FWF_TRANSPARENT/NOCLIENTEDGE/NOSCROLL
  371. typedef [v1_enum] enum
  372.     {
  373.     FWF_AUTOARRANGE =       0x00000001,
  374.     FWF_ABBREVIATEDNAMES =  0x00000002,
  375.     FWF_SNAPTOGRID =        0x00000004,
  376.     FWF_OWNERDATA =         0x00000008,
  377.     FWF_BESTFITWINDOW =     0x00000010,
  378.     FWF_DESKTOP =           0x00000020,
  379.     FWF_SINGLESEL =         0x00000040,
  380.     FWF_NOSUBFOLDERS =      0x00000080,
  381.     FWF_TRANSPARENT  =      0x00000100,
  382.     FWF_NOCLIENTEDGE =      0x00000200,
  383.     FWF_NOSCROLL     =      0x00000400,
  384.     FWF_ALIGNLEFT    =      0x00000800,
  385.     FWF_NOICONS      =      0x00001000,
  386.     FWF_SHOWSELALWAYS =     0x00002000,
  387.     FWF_NOVISIBLE    =      0X00004000,
  388.     FWF_SINGLECLICKACTIVATE=0x00008000,     // TEMPORARY -- NO UI FOR THIS
  389.     FWF_NOWEBVIEW =         0x00010000,
  390.     FWF_HIDEFILENAMES =     0x00020000,
  391.     FWF_CHECKSELECT =       0x00040000,
  392.     } FOLDERFLAGS;
  393. typedef [v1_enum] enum
  394.     {
  395.     FVM_FIRST =             1,
  396.     FVM_ICON =              1,
  397.     FVM_SMALLICON =         2,
  398.     FVM_LIST =              3,
  399.     FVM_DETAILS =           4,
  400.     FVM_THUMBNAIL =         5,
  401.     FVM_TILE =              6,
  402.     FVM_THUMBSTRIP =        7,
  403.     FVM_LAST =              7,
  404.     } FOLDERVIEWMODE;
  405. typedef struct
  406.     {
  407.     UINT ViewMode;       // View mode (FOLDERVIEWMODE values)
  408.     UINT fFlags;         // View options (FOLDERFLAGS bits)
  409.     } FOLDERSETTINGS;
  410. typedef FOLDERSETTINGS *LPFOLDERSETTINGS;                
  411. typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
  412. typedef FOLDERSETTINGS *PFOLDERSETTINGS;                
  413. //==========================================================================
  414. //
  415. // Interface:   IShellView
  416. //
  417. // IShellView::GetWindow(phwnd)
  418. //
  419. //   Inherited from IOleWindow::GetWindow.
  420. //
  421. //
  422. // IShellView::ContextSensitiveHelp(fEnterMode)
  423. //
  424. //   Inherited from IOleWindow::ContextSensitiveHelp.
  425. //
  426. //
  427. // IShellView::TranslateAccelerator(lpmsg)
  428. //
  429. //   Similar to IOleInPlaceActiveObject::TranlateAccelerator. The explorer
  430. //  calls this function BEFORE any other translation. Returning S_OK
  431. //  indicates that the message was translated (eaten) and should not be
  432. //  translated or dispatched by the explorer.
  433. //
  434. //
  435. // IShellView::EnableModeless(fEnable)
  436. //   Similar to IOleInPlaceActiveObject::EnableModeless.
  437. //
  438. //
  439. // IShellView::UIActivate(uState)
  440. //
  441. //   The explorer calls this member function whenever the activation
  442. //  state of the view window is changed by a certain event that is
  443. //  NOT caused by the shell view itself.
  444. //
  445. //   SVUIA_DEACTIVATE will be passed when the explorer is about to
  446. //  destroy the shell view window; the shell view is supposed to remove
  447. //  all the extended UIs (typically merged menu and modeless popup windows).
  448. //
  449. //   SVUIA_ACTIVATE_NOFOCUS will be passsed when the shell view is losing
  450. //  the input focus or the shell view has been just created without the
  451. //  input focus; the shell view is supposed to set menuitems appropriate
  452. //  for non-focused state (no selection specific items should be added).
  453. //
  454. //   SVUIA_ACTIVATE_FOCUS will be passed when the explorer has just
  455. //  created the view window with the input focus; the shell view is
  456. //  supposed to set menuitems appropriate for focused state.
  457. //
  458. //   SVUIA_INPLACEACTIVATE(new) will be passed when the shell view is opened
  459. //  within an ActiveX control, which is not a UI active. In this case,
  460. //  the shell view should not merge menus or put toolbas. To be compatible
  461. //  with Win95 client, we don't pass this value unless the view supports
  462. //  IShellView2.
  463. //
  464. //   The shell view should not change focus within this member function.
  465. //  The shell view should not hook the WM_KILLFOCUS message to remerge
  466. //  menuitems. However, the shell view typically hook the WM_SETFOCUS
  467. //  message, and re-merge the menu after calling IShellBrowser::
  468. //  OnViewWindowActivated.
  469. //
  470. //   One of the ACTIVATE / INPLACEACTIVATE messages will be sent when
  471. //  the view window becomes the currently displayed view.  On Win95 systems,
  472. //  this will happen immediately after the CreateViewWindow call.  On IE4, Win98,
  473. //  and NT5 systems this may happen when the view reports it is ready (if the
  474. //  IShellView supports async creation).  This can be used as a hint as to when
  475. //  to make your view window visible.  Note: the Win95/Win98/NT4 common dialogs
  476. //  do not send either of these on creation.
  477. //
  478. //
  479. // IShellView::Refresh()
  480. //
  481. //   The explorer calls this member when the view needs to refresh its
  482. //  contents (such as when the user hits F5 key).
  483. //
  484. //
  485. // IShellView::CreateViewWindow
  486. //
  487. //   This member creates the view window (right-pane of the explorer or the
  488. //  client window of the folder window).
  489. //
  490. //
  491. // IShellView::DestroyViewWindow
  492. //
  493. //   This member destroys the view window.
  494. //
  495. //
  496. // IShellView::GetCurrentInfo
  497. //
  498. //   This member returns the folder settings.
  499. //
  500. //
  501. // IShellView::AddPropertySHeetPages
  502. //
  503. //   The explorer calls this member when it is opening the option property
  504. //  sheet. This allows the view to add additional pages to it.
  505. //
  506. //
  507. // IShellView::SaveViewState()
  508. //
  509. //   The explorer calls this member when the shell view is supposed to
  510. //  store its view settings. The shell view is supposed to get a view
  511. //  stream by calling IShellBrowser::GetViewStateStream and store the
  512. //  current view state into that stream.
  513. //
  514. //
  515. // IShellView::SelectItem(pidlItem, uFlags)
  516. //
  517. //   The explorer calls this member to change the selection state of
  518. //  item(s) within the shell view window.  If pidlItem is NULL and uFlags
  519. //  is SVSI_DESELECTOTHERS, all items should be deselected.
  520. //
  521. //-------------------------------------------------------------------------
  522. //
  523. // shellview select item flags
  524. //
  525. cpp_quote("#define SVSI_DESELECT       0x00000000")
  526. cpp_quote("#define SVSI_SELECT         0x00000001")
  527. cpp_quote("#define SVSI_EDIT           0x00000003  // includes select")
  528. cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
  529. cpp_quote("#define SVSI_ENSUREVISIBLE  0x00000008")
  530. cpp_quote("#define SVSI_FOCUSED        0x00000010")
  531. cpp_quote("#define SVSI_TRANSLATEPT    0x00000020")
  532. cpp_quote("#define SVSI_SELECTIONMARK  0x00000040")
  533. cpp_quote("#define SVSI_POSITIONITEM   0x00000080")
  534. cpp_quote("#define SVSI_CHECK          0x00000100")
  535. cpp_quote("#define SVSI_NOSTATECHANGE  0x80000000")
  536. typedef UINT SVSIF;
  537. //
  538. // shellview get item object flags
  539. //
  540. typedef [v1_enum] enum {
  541.     SVGIO_BACKGROUND        = 0x00000000,
  542.     SVGIO_SELECTION         = 0x00000001,
  543.     SVGIO_ALLVIEW           = 0x00000002,
  544.     SVGIO_CHECKED           = 0x00000003,
  545.     SVGIO_TYPE_MASK         = 0x0000000F,
  546.     SVGIO_FLAG_VIEWORDER    = 0x80000000,
  547. } SVGIO;
  548. //
  549. // uState values for IShellView::UIActivate
  550. //
  551. typedef [v1_enum] enum {
  552.     SVUIA_DEACTIVATE       = 0,
  553.     SVUIA_ACTIVATE_NOFOCUS = 1,
  554.     SVUIA_ACTIVATE_FOCUS   = 2,
  555.     SVUIA_INPLACEACTIVATE  = 3          // new flag for IShellView2
  556. } SVUIA_STATUS;
  557. //  this is to handle name collisions 
  558. cpp_quote("#ifdef _FIX_ENABLEMODELESS_CONFLICT")
  559. cpp_quote("#define    EnableModeless EnableModelessSV")
  560. cpp_quote("#endif")
  561. //
  562. //  this is so that all the implementations still get the function pointer.
  563. //  and midl wont complain about the data type
  564. //
  565. cpp_quote("#ifdef _NEVER_")
  566. typedef LPARAM LPFNSVADDPROPSHEETPAGE;
  567. cpp_quote("#else //!_NEVER_")
  568. cpp_quote("#include <prsht.h>")
  569. cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
  570. cpp_quote("#endif //_NEVER_")
  571. interface IShellBrowser;
  572. [
  573.     helpstring("IShellView"),
  574.     uuid(000214E3-0000-0000-C000-000000000046),
  575.     object,
  576.     pointer_default(unique)
  577. ]
  578. interface IShellView : IOleWindow
  579. {
  580.     HRESULT TranslateAccelerator([in] MSG *pmsg);
  581.     HRESULT EnableModeless([in] BOOL fEnable);
  582.     HRESULT UIActivate([in] UINT uState);
  583.     HRESULT Refresh();
  584.     HRESULT CreateViewWindow(
  585.         [in] IShellView *psvPrevious,
  586.         [in] LPCFOLDERSETTINGS pfs, 
  587.         [in] IShellBrowser *psb,
  588.         [out] RECT *prcView, 
  589.         [out] HWND *phWnd);
  590.         
  591.     HRESULT DestroyViewWindow();
  592.     
  593.     HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS pfs);
  594.     [local] HRESULT AddPropertySheetPages(
  595.         [in] DWORD dwReserved,
  596.         [in] LPFNSVADDPROPSHEETPAGE pfn, 
  597.         [in] LPARAM lparam);
  598.     HRESULT SaveViewState();
  599.     
  600.     HRESULT SelectItem(
  601.         [in] LPCITEMIDLIST pidlItem, 
  602.         [in] SVSIF uFlags);
  603.         
  604.     HRESULT GetItemObject(
  605.         [in] UINT uItem, 
  606.         [in] REFIID riid,
  607.         [out, iid_is(riid)] void **ppv);
  608. typedef IShellView *LPSHELLVIEW;
  609. };
  610. [
  611.     helpstring("IShellView2"),
  612.     uuid(88E39E80-3578-11CF-AE69-08002B2E1262),
  613.     object,
  614.     pointer_default(unique)
  615. ]
  616. interface IShellView2 :  IShellView
  617. {
  618. typedef GUID SHELLVIEWID;
  619. cpp_quote("#define SV2GV_CURRENTVIEW ((UINT)-1)")
  620. cpp_quote("#define SV2GV_DEFAULTVIEW ((UINT)-2)")
  621. //
  622. //  NOTE if the cbSize param is ever updated,")
  623. //  then there will have to be custom [wire_marshal]")
  624. //  implementation to support it")
  625. //
  626. cpp_quote("#include <pshpack8.h>")
  627. typedef struct _SV2CVW2_PARAMS
  628. {
  629.     DWORD cbSize;
  630.     IShellView *psvPrev;
  631.     LPCFOLDERSETTINGS pfs;
  632.     IShellBrowser *psbOwner;
  633.     RECT *prcView;
  634.     SHELLVIEWID const *pvid;
  635.     HWND hwndView;
  636. } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
  637. cpp_quote("#include <poppack.h>")   // Return to byte packing
  638.     HRESULT GetView(
  639.         [in, out] SHELLVIEWID* pvid, 
  640.         [in] ULONG uView);
  641.         
  642.     HRESULT CreateViewWindow2(
  643.         [in] LPSV2CVW2_PARAMS lpParams);
  644.         
  645.     HRESULT HandleRename(
  646.         [in] LPCITEMIDLIST pidlNew);
  647.         
  648.     HRESULT SelectAndPositionItem(
  649.         [in] LPCITEMIDLIST pidlItem,
  650.         [in] UINT uFlags,
  651.         [in] POINT *ppt);
  652. };
  653. [
  654.     helpstring("IFolderView"),
  655.     uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
  656.     object,
  657.     pointer_default(unique)
  658. ]
  659. interface IFolderView : IUnknown
  660. {
  661.     HRESULT GetCurrentViewMode([in, out] UINT *pViewMode);
  662.     HRESULT SetCurrentViewMode([in] UINT ViewMode);
  663.     HRESULT GetFolder([in] REFIID riid, [out, iid_is(riid)] void **ppv);
  664.     HRESULT Item([in] int iItemIndex, [out] LPITEMIDLIST *ppidl);
  665.     HRESULT ItemCount([in] UINT uFlags,[out] int *pcItems);
  666.     HRESULT Items([in] UINT uFlags,[in] REFIID riid, [out, iid_is(riid)] void **ppv);
  667.     HRESULT GetSelectionMarkedItem([out] int *piItem);
  668.     HRESULT GetFocusedItem([out] int *piItem);
  669.     HRESULT GetItemPosition([in] LPCITEMIDLIST pidl, [out] POINT* ppt);
  670.     HRESULT GetSpacing([in, out, ptr] POINT* ppt);
  671.     HRESULT GetDefaultSpacing([out] POINT* ppt);
  672.     HRESULT GetAutoArrange();
  673.     // like IShellView::SelectItem() by index
  674.     HRESULT SelectItem([in] int iItem, [in] DWORD dwFlags);
  675.     HRESULT SelectAndPositionItems([in] UINT cidl, [in, size_is(cidl)] LPCITEMIDLIST* apidl, [in, ptr, size_is(cidl)] POINT* apt, [in] DWORD dwFlags);
  676. };
  677. cpp_quote("#define SID_SFolderView IID_IFolderView    // folder view, usuaally IFolderView")
  678. //  this is to handle name collisions 
  679. cpp_quote("#ifdef _FIX_ENABLEMODELESS_CONFLICT")
  680. cpp_quote("#undef    EnableModeless ")
  681. cpp_quote("#endif")
  682. [
  683.     helpstring("IFolderFilterSite"),
  684.     uuid(C0A651F5-B48B-11d2-B5ED-006097C686F6), // IID_IFolderFilterSite
  685.     object,
  686.     pointer_default(unique)
  687. ]
  688. interface IFolderFilterSite : IUnknown
  689. {
  690.     HRESULT SetFilter([in]IUnknown* punk);
  691. };
  692. [
  693.     helpstring("IFolderFilter"),
  694.     uuid(9CC22886-DC8E-11d2-B1D0-00C04F8EEB3E), // IID_IFolderFilter
  695.     object,
  696.     pointer_default(unique)
  697. ]
  698. interface IFolderFilter : IUnknown
  699. {
  700.     HRESULT ShouldShow([in] IShellFolder* psf, [in] LPCITEMIDLIST pidlFolder, [in] LPCITEMIDLIST pidlItem);
  701.     HRESULT GetEnumFlags([in] IShellFolder* psf, [in] LPCITEMIDLIST pidlFolder, [in] HWND *phwnd, [out] DWORD *pgrfFlags);
  702. };
  703. //--------------------------------------------------------------------------
  704. //
  705. // Interface:   IShellBrowser
  706. //
  707. //  IShellBrowser interface is the interface that is provided by the shell
  708. // explorer/folder frame window. When it creates the 'contents pane' of
  709. // a shell folder (which provides IShellFolder interface), it calls its
  710. // CreateViewObject member function to create an IShellView object. Then,
  711. // it calls its CreateViewWindow member to create the 'contents pane'
  712. // window. The pointer to the IShellBrowser interface is passed to
  713. // the IShellView object as a parameter to this CreateViewWindow member
  714. // function call.
  715. //
  716. //    +--------------------------+  <-- Explorer window
  717. //    | [] Explorer              |
  718. //    |--------------------------+       IShellBrowser
  719. //    | File Edit View ..        |
  720. //    |--------------------------|
  721. //    |        |                 |
  722. //    |        |              <-------- Content pane
  723. //    |        |                 |
  724. //    |        |                 |       IShellView
  725. //    |        |                 |
  726. //    |        |                 |
  727. //    +--------------------------+
  728. //
  729. //
  730. //
  731. // [Member functions]
  732. //
  733. //
  734. // IShellBrowser::GetWindow(phwnd)
  735. //
  736. //   Inherited from IOleWindow::GetWindow.
  737. //
  738. //
  739. // IShellBrowser::ContextSensitiveHelp(fEnterMode)
  740. //
  741. //   Inherited from IOleWindow::ContextSensitiveHelp.
  742. //
  743. //
  744. // IShellBrowser::InsertMenusSB(hmenuShared, lpMenuWidths)
  745. //
  746. //   Similar to the IOleInPlaceFrame::InsertMenus. The explorer will put
  747. //  'File' and 'Edit' pulldown in the File menu group, 'View' and 'Tools'
  748. //  in the Container menu group and 'Help' in the Window menu group. Each
  749. //  pulldown menu will have a uniqu ID, FCIDM_MENU_FILE/EDIT/VIEW/TOOLS/HELP
  750. //  The view is allowed to insert menuitems into those sub-menus by those
  751. //  IDs must be between FCIDM_SHVIEWFIRST and FCIDM_SHVIEWLAST.
  752. //
  753. //
  754. // IShellBrowser::SetMenuSB(hmenuShared, holemenu, hwndActiveObject)
  755. //
  756. //   Similar to the IOleInPlaceFrame::SetMenu. The explorer ignores the
  757. //  holemenu parameter (reserved for future enhancement)  and performs
  758. //  menu-dispatch based on the menuitem IDs (see the description above).
  759. //  It is important to note that the explorer will add different
  760. //  set of menuitems depending on whether the view has a focus or not.
  761. //  Therefore, it is very important to call ISB::OnViewWindowActivate
  762. //  whenever the view window (or its children) gets the focus.
  763. //
  764. //
  765. // IShellBrowser::RemoveMenusSB(hmenuShared)
  766. //
  767. //   Same as the IOleInPlaceFrame::RemoveMenus.
  768. //
  769. //
  770. // IShellBrowser::SetStatusTextSB(pszStatusText)
  771. //
  772. //   Same as the IOleInPlaceFrame::SetStatusText. It is also possible to
  773. //  send messages directly to the status window via SendControlMsg.
  774. //
  775. //
  776. // IShellBrowser::EnableModelessSB(fEnable)
  777. //
  778. //   Same as the IOleInPlaceFrame::EnableModeless.
  779. //
  780. //
  781. // IShellBrowser::TranslateAcceleratorSB(lpmsg, wID)
  782. //
  783. //   Same as the IOleInPlaceFrame::TranslateAccelerator, but will be
  784. //  never called because we don't support EXEs (i.e., the explorer has
  785. //  the message loop). This member function is defined here for possible
  786. //  future enhancement.
  787. //
  788. //
  789. // IShellBrowser::BrowseObject(pidl, wFlags)")
  790. //
  791. //   The view calls this member to let shell explorer browse to another")
  792. //  folder. The pidl and wFlags specifies the folder to be browsed.")
  793. //
  794. //  Following three flags specifies whether it creates another window or not.
  795. //   SBSP_SAMEBROWSER  -- Browse to another folder with the same window.
  796. //   SBSP_NEWBROWSER   -- Creates another window for the specified folder.
  797. //   SBSP_DEFBROWSER   -- Default behavior (respects the view option).
  798. //
  799. //  Following three flags specifies open, explore, or default mode. These   .
  800. //  are ignored if SBSP_SAMEBROWSER or (SBSP_DEFBROWSER && (single window   .
  801. //  browser || explorer)).                                                  .
  802. //   SBSP_OPENMODE     -- Use a normal folder window
  803. //   SBSP_EXPLOREMODE  -- Use an explorer window
  804. //   SBSP_DEFMODE      -- Use the same as the current window
  805. //
  806. //  Following three flags specifies the pidl.
  807. //   SBSP_ABSOLUTE -- pidl is an absolute pidl (relative from desktop)
  808. //   SBSP_RELATIVE -- pidl is relative from the current folder.
  809. //   SBSP_PARENT   -- Browse the parent folder (ignores the pidl)
  810. //   SBSP_NAVIGATEBACK    -- Navigate back (ignores the pidl)
  811. //   SBSP_NAVIGATEFORWARD -- Navigate forward (ignores the pidl)
  812. //
  813. //  Following two flags control history manipulation as result of navigate
  814. //   SBSP_WRITENOHISTORY -- write no history (shell folder) entry
  815. //   SBSP_NOAUTOSELECT -- suppress selection in history pane
  816. //
  817. // IShellBrowser::GetViewStateStream(grfMode, ppstm)
  818. //
  819. //   The browser returns an IStream interface as the storage for view
  820. //  specific state information.
  821. //
  822. //   grfMode -- Specifies the read/write access (STGM_READ/WRITE/READWRITE)
  823. //   ppstm   -- Specifies the IStream *variable to be filled.
  824. //
  825. //
  826. // IShellBrowser::GetControlWindow(id, phwnd)
  827. //
  828. //   The shell view may call this member function to get the window handle
  829. //  of Explorer controls (toolbar or status winodw -- FCW_TOOLBAR or
  830. //  FCW_STATUS).
  831. //
  832. //
  833. // IShellBrowser::SendControlMsg(id, uMsg, wParam, lParam, pret)
  834. //
  835. //   The shell view calls this member function to send control messages to
  836. //  one of Explorer controls (toolbar or status window -- FCW_TOOLBAR or
  837. //  FCW_STATUS).
  838. //
  839. //
  840. // IShellBrowser::QueryActiveShellView(IShellView * ppshv)
  841. //
  842. //   This member returns currently activated (displayed) shellview object.
  843. //  A shellview never need to call this member function.
  844. //
  845. //
  846. // IShellBrowser::OnViewWindowActive(pshv)
  847. //
  848. //   The shell view window calls this member function when the view window
  849. //  (or one of its children) got the focus. It MUST call this member before
  850. //  calling IShellBrowser::InsertMenus, because it will insert different
  851. //  set of menu items depending on whether the view has the focus or not.
  852. //
  853. //
  854. // IShellBrowser::SetToolbarItems(lpButtons, nButtons, uFlags)
  855. //
  856. //   The view calls this function to add toolbar items to the exporer's
  857. //  toolbar. 'lpButtons' and 'nButtons' specifies the array of toolbar
  858. //  items. 'uFlags' must be one of FCT_MERGE, FCT_CONFIGABLE, FCT_ADDTOEND.
  859. //
  860. //-------------------------------------------------------------------------
  861. //
  862. // Values for wFlags parameter of ISB::BrowseObject() member.
  863. //
  864. cpp_quote("#define SBSP_DEFBROWSER         0x0000")
  865. cpp_quote("#define SBSP_SAMEBROWSER        0x0001")
  866. cpp_quote("#define SBSP_NEWBROWSER         0x0002")
  867. cpp_quote("#define SBSP_DEFMODE            0x0000")
  868. cpp_quote("#define SBSP_OPENMODE           0x0010")
  869. cpp_quote("#define SBSP_EXPLOREMODE        0x0020")
  870. cpp_quote("#define SBSP_HELPMODE           0x0040 // IEUNIX : Help window uses this.")
  871. cpp_quote("#define SBSP_NOTRANSFERHIST     0x0080")
  872. cpp_quote("#define SBSP_ABSOLUTE           0x0000")
  873. cpp_quote("#define SBSP_RELATIVE           0x1000")
  874. cpp_quote("#define SBSP_PARENT             0x2000")
  875. cpp_quote("#define SBSP_NAVIGATEBACK       0x4000")
  876. cpp_quote("#define SBSP_NAVIGATEFORWARD    0x8000")
  877. cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE 0x10000")
  878. cpp_quote("#define SBSP_NOAUTOSELECT       0x04000000")
  879. cpp_quote("#define SBSP_WRITENOHISTORY     0x08000000")
  880. cpp_quote("#define SBSP_REDIRECT                     0x40000000")
  881. cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME        0x80000000")
  882. //
  883. // Values for id parameter of ISB::GetWindow/SendControlMsg members.
  884. //
  885. // WARNING:
  886. //  Any shell extensions which sends messages to those control windows
  887. // might not work in the future version of windows. If you really need
  888. // to send messages to them, (1) don't assume that those control window
  889. // always exist (i.e. GetControlWindow may fail) and (2) verify the window
  890. // class of the window before sending any messages.
  891. //
  892. cpp_quote("#define FCW_STATUS      0x0001")
  893. cpp_quote("#define FCW_TOOLBAR     0x0002")
  894. cpp_quote("#define FCW_TREE        0x0003")
  895. cpp_quote("#define FCW_INTERNETBAR 0x0006")
  896. cpp_quote("#define FCW_PROGRESS    0x0008")
  897. //
  898. // Values for uFlags paremeter of ISB::SetToolbarItems member.
  899. //
  900. cpp_quote("#define FCT_MERGE       0x0001")
  901. cpp_quote("#define FCT_CONFIGABLE  0x0002")
  902. cpp_quote("#define FCT_ADDTOEND    0x0004")
  903. cpp_quote("#ifdef _NEVER_")
  904. typedef LPARAM LPTBBUTTONSB;
  905. cpp_quote("#else //!_NEVER_")
  906. cpp_quote("#include <commctrl.h>")
  907. cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
  908. cpp_quote("#endif //_NEVER_")
  909. [
  910.     helpstring("IShellBrowser"),
  911.     uuid(000214E2-0000-0000-C000-000000000046),
  912.     object,
  913.     pointer_default(unique)
  914. ]
  915. interface IShellBrowser : IOleWindow
  916. {
  917.     // same as IOleInPlaceFrame
  918.     HRESULT InsertMenusSB(
  919.         [in] HMENU hmenuShared, 
  920.         [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
  921.         
  922.     HRESULT SetMenuSB(
  923.         [in] HMENU hmenuShared, 
  924.         [in] HOLEMENU holemenuRes, 
  925.         [in] HWND hwndActiveObject);
  926.         
  927.     HRESULT RemoveMenusSB([in] HMENU hmenuShared);
  928.     HRESULT SetStatusTextSB([in, unique] LPCOLESTR pszStatusText);
  929.     HRESULT EnableModelessSB([in] BOOL fEnable);
  930.     HRESULT TranslateAcceleratorSB([in] MSG *pmsg, [in] WORD wID);
  931.     // IShellBrowser
  932.     HRESULT BrowseObject(
  933.         [in] LPCITEMIDLIST pidl, 
  934.         [in] UINT wFlags);
  935.         
  936.     HRESULT GetViewStateStream(
  937.         [in] DWORD grfMode, 
  938.         [out] IStream **ppStrm);
  939.         
  940.     HRESULT GetControlWindow(
  941.         [in] UINT id, 
  942.         [out] HWND * phwnd);
  943.         
  944.     [local] HRESULT SendControlMsg(
  945.         [in] UINT id, 
  946.         [in] UINT uMsg, 
  947.         [in] WPARAM wParam, 
  948.         [in] LPARAM lParam, 
  949.         [in] LRESULT *pret);
  950.         
  951.     HRESULT QueryActiveShellView([out] IShellView **ppshv);
  952.     HRESULT OnViewWindowActive([in] IShellView *pshv);
  953.     [local] HRESULT SetToolbarItems(
  954.         [in] LPTBBUTTONSB lpButtons, 
  955.         [in] UINT nButtons, 
  956.         [in] UINT uFlags);
  957. };
  958. typedef IShellBrowser * LPSHELLBROWSER;
  959. [
  960.     helpstring("IProfferService"),
  961.     uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0), // IID_IProfferService
  962.     object,
  963.     pointer_default(unique)
  964. ]
  965. interface IProfferService : IUnknown
  966. {
  967.     HRESULT ProfferService([in]REFGUID rguidService, [in] IServiceProvider *psp, [out] DWORD *pdwCookie);
  968.     HRESULT RevokeService([in]DWORD dwCookie);
  969. }
  970. cpp_quote("#define SID_SProfferService IID_IProfferService    // nearest service that you can proffer to")
  971. typedef [v1_enum] enum
  972. {
  973.     PUIFNF_DEFAULT          = 0x00000000,
  974.     PUIFNF_MNEMONIC         = 0x00000001,   // include mnemonic in display name
  975. } PROPERTYUI_NAME_FLAGS;
  976. typedef [v1_enum] enum
  977. {
  978.     PUIF_DEFAULT            = 0x00000000,
  979.     PUIF_RIGHTALIGN         = 0x00000001,   // this property should be right alligned
  980.     PUIF_NOLABELININFOTIP   = 0x00000002,   // this property should not display a label in the infotip
  981. } PROPERTYUI_FLAGS;
  982. typedef [v1_enum] enum
  983. {
  984.     PUIFFDF_DEFAULT         = 0x00000000,
  985.     PUIFFDF_RIGHTTOLEFT     = 0x00000001,   // BIDI support, right to left caller
  986.     PUIFFDF_SHORTFORMAT     = 0x00000002,   // short format version of string
  987.     PUIFFDF_NOTIME          = 0x00000004,   // truncate time to days, not hours/mins/sec
  988.     PUIFFDF_FRIENDLYDATE    = 0x00000008,   // "Today", "Yesterday", etc
  989.     PUIFFDF_NOUNITS         = 0x00000010,   // don't do "KB", "MB", "KHz"
  990. } PROPERTYUI_FORMAT_FLAGS;
  991. [
  992.     helpstring("IPropertyUI - helper for dealing with properties ala IPropertySetStorage"),
  993.     uuid(757a7d9f-919a-4118-99d7-dbb208c8cc66),
  994.     object,
  995.     pointer_default(unique)
  996. ]
  997. interface IPropertyUI : IUnknown
  998. {
  999.     HRESULT ParsePropertyName([in] LPCWSTR pszName, [out] FMTID *pfmtid, [out] PROPID *ppid, [in, out] ULONG *pchEaten);
  1000.     HRESULT GetCannonicalName([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
  1001.     HRESULT GetDisplayName([in] REFFMTID fmtid, [in] PROPID pid, [in] PROPERTYUI_NAME_FLAGS flags, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
  1002.     HRESULT GetPropertyDescription([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cchText)] LPWSTR pwszText, [in] DWORD cchText);
  1003.     HRESULT GetDefaultWidth([in] REFFMTID fmtid, [in] PROPID pid, [out] ULONG *pcxChars);
  1004.     HRESULT GetFlags([in] REFFMTID fmtid, [in] PROPID pid, [out] PROPERTYUI_FLAGS *pFlags);
  1005.     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);
  1006.     HRESULT GetHelpInfo([in] REFFMTID fmtid, [in] PROPID pid, [out, size_is(cch)] LPWSTR pwszHelpFile, [in] DWORD cch, [out] UINT *puHelpID);
  1007. };
  1008. cpp_quote("#if (_WIN32_IE >= 0x0500)")
  1009. // Folder Category Support
  1010. [
  1011.     helpstring("ICategoryProvider - Provides a list of catagorizers registered on an IShellFolder"),
  1012.     uuid(9af64809-5864-4c26-a720-c1f78c086ee3),
  1013.     object,
  1014.     pointer_default(unique)
  1015. ]
  1016. interface ICategoryProvider : IUnknown
  1017. {
  1018.     [helpstring("Returns S_OK if the view should display this column in category selection UI, or S_FALSE to remove it.")]
  1019.     HRESULT CanCategorizeOnSCID(SHCOLUMNID* pscid);
  1020.     [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.")]
  1021.     HRESULT GetDefaultCategory(GUID* pguid, SHCOLUMNID* pscid);
  1022.     [helpstring("Returns either a GUID that represents the categoizer to use for the specified SHCOLUMNID.")]
  1023.     HRESULT GetCategoryForSCID(SHCOLUMNID* pscid, GUID* pguid);
  1024.     [helpstring("Returns an IEnumGUID that has a list of GUIDs that represent categories.")]
  1025.     HRESULT EnumCategories(IEnumGUID** penum);
  1026.     [helpstring("Returns the name of the given category.")]
  1027.     HRESULT GetCategoryName(GUID* pguid, LPWSTR pszName, UINT cch);
  1028.     [helpstring("Creates the category.")]
  1029.     HRESULT CreateCategory(GUID* pguid, REFIID riid, [iid_is(riid)]void** ppv);
  1030. }
  1031. typedef [v1_enum] enum
  1032. {
  1033.     CATINFO_NORMAL      = 0x00000000,   // Apply default properties to this category
  1034.     CATINFO_COLLAPSED   = 0x00000001,   // This category should appear collapsed. useful for the "None" category. 
  1035.     CATINFO_HIDDEN      = 0x00000002,   // This category should follow the "Hidden" files setting for being displayed
  1036. } CATEGORYINFO_FLAGS;
  1037. typedef [v1_enum] enum
  1038. {
  1039.     CATSORT_DEFAULT     = 0x00000000,   // Default Sort order
  1040.     CATSORT_NAME        = 0x00000001,   // Sort by name
  1041. } CATSORT_FLAGS;
  1042. typedef struct
  1043. {
  1044.     CATEGORYINFO_FLAGS cif;
  1045.     WCHAR wszName[260];
  1046. } CATEGORY_INFO;
  1047. [
  1048.     helpstring("ICategorizer - Categorizes pidls"),
  1049.     uuid(a3b14589-9174-49a8-89a3-06a1ae2b9ba7),
  1050.     object,
  1051.     pointer_default(unique)
  1052. ]
  1053. interface ICategorizer : IUnknown
  1054. {
  1055.     [helpstring("Returns the description of this category that will be displayed in the UI")]
  1056.     HRESULT GetDescription(LPWSTR pszDesc, UINT cch);
  1057.     [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")]
  1058.     HRESULT GetCategory([in] UINT cidl, 
  1059.                         [in, size_is(cidl)] LPCITEMIDLIST * apidl, 
  1060.                         [in, out, size_is(cidl)] DWORD* rgCategoryIds);
  1061.     [helpstring("Returns information about the category, such as default display and the text to display in the UI")]
  1062.     HRESULT GetCategoryInfo(DWORD dwCategoryId, CATEGORY_INFO* pci);
  1063.     [helpstring("Returns HRESULTFromShort. -1, 0, 1 indicate the comparison of the IDs. Used for sorting categories in the UI")]
  1064.     HRESULT CompareCategory(CATSORT_FLAGS csfFlags, DWORD dwCategoryId1, DWORD dwCategoryId2);
  1065. };
  1066. cpp_quote("#endif // (_WIN32_IE >= 0x0500)")
  1067. cpp_quote("#ifdef UNICODE")
  1068. cpp_quote("#define IShellLink      IShellLinkW")
  1069. cpp_quote("#else")
  1070. cpp_quote("#define IShellLink      IShellLinkA")
  1071. cpp_quote("#endif")
  1072. // IShellLink::Resolve fFlags
  1073. typedef enum 
  1074. {
  1075.     SLR_NO_UI               = 0x0001,   // don't post any UI durring the resolve operation, not msgs are pumped
  1076.     SLR_ANY_MATCH           = 0x0002,   // no longer used
  1077.     SLR_UPDATE              = 0x0004,   // save the link back to it's file if the track made it dirty
  1078.     SLR_NOUPDATE            = 0x0008,
  1079.     SLR_NOSEARCH            = 0x0010,   // don't execute the search heuristics
  1080.     SLR_NOTRACK             = 0x0020,   // don't use NT5 object ID to track the link
  1081.     SLR_NOLINKINFO          = 0x0040,   // don't use the net and volume relative info
  1082.     SLR_INVOKE_MSI          = 0x0080,   // if we have a darwin link, then call msi to fault in the applicaion
  1083.     SLR_NO_UI_WITH_MSG_PUMP = 0x0101,   // SLR_NO_UI + requires an enable modeless site or HWND
  1084. } SLR_FLAGS;
  1085. // IShellLink::GetPath fFlags
  1086. typedef enum 
  1087. {
  1088.     SLGP_SHORTPATH      = 0x0001,
  1089.     SLGP_UNCPRIORITY    = 0x0002,
  1090.     SLGP_RAWPATH        = 0x0004,
  1091. } SLGP_FLAGS;
  1092. [
  1093.     uuid(000214EE-0000-0000-C000-000000000046),
  1094.     object,
  1095.     pointer_default(unique)
  1096. ]
  1097. interface IShellLinkA : IUnknown
  1098. {
  1099.     HRESULT GetPath([out, size_is(cch)] LPSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAA *pfd, [in] DWORD fFlags);
  1100.     HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
  1101.     HRESULT SetIDList([in] LPCITEMIDLIST pidl);
  1102.     HRESULT GetDescription([out, size_is(cch)] LPSTR pszName, [in] int cch);
  1103.     HRESULT SetDescription([in] LPCSTR pszName);
  1104.     HRESULT GetWorkingDirectory([out, size_is(cch)] LPSTR pszDir, [in] int cch);
  1105.     HRESULT SetWorkingDirectory([in] LPCSTR pszDir);
  1106.     HRESULT GetArguments([out, size_is(cch)] LPSTR pszArgs, [in] int cch);
  1107.     HRESULT SetArguments([in] LPCSTR pszArgs);
  1108.     HRESULT GetHotkey([out] WORD *pwHotkey);
  1109.     HRESULT SetHotkey([in] WORD wHotkey);
  1110.     HRESULT GetShowCmd([out] int *piShowCmd);
  1111.     HRESULT SetShowCmd([in] int iShowCmd);
  1112.     HRESULT GetIconLocation([out, size_is(cch)] LPSTR pszIconPath, [in] int cch, [out] int *piIcon);
  1113.     HRESULT SetIconLocation([in] LPCSTR pszIconPath, [in] int iIcon);
  1114.     HRESULT SetRelativePath([in] LPCSTR pszPathRel, [in] DWORD dwReserved);
  1115.     HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
  1116.     HRESULT SetPath([in] LPCSTR pszFile);
  1117. };
  1118. [
  1119.     uuid(000214F9-0000-0000-C000-000000000046),
  1120.     object,
  1121.     pointer_default(unique)
  1122. ]
  1123. interface IShellLinkW : IUnknown
  1124. {
  1125.     HRESULT GetPath([out, size_is(cch)] LPWSTR pszFile, [in] int cch, [in, out, ptr] WIN32_FIND_DATAW *pfd, [in] DWORD fFlags);
  1126.     HRESULT GetIDList([out] LPITEMIDLIST * ppidl);
  1127.     HRESULT SetIDList([in] LPCITEMIDLIST pidl);
  1128.     HRESULT GetDescription([out, size_is(cch)] LPWSTR pszName, int cch);
  1129.     HRESULT SetDescription([in] LPCWSTR pszName);
  1130.     HRESULT GetWorkingDirectory([out, size_is(cch)] LPWSTR pszDir, int cch);
  1131.     HRESULT SetWorkingDirectory([in] LPCWSTR pszDir);
  1132.     HRESULT GetArguments([out, size_is(cch)] LPWSTR pszArgs, int cch);
  1133.     HRESULT SetArguments([in] LPCWSTR pszArgs);
  1134.     HRESULT GetHotkey([out] WORD *pwHotkey);
  1135.     HRESULT SetHotkey([in] WORD wHotkey);
  1136.     HRESULT GetShowCmd([out] int *piShowCmd);
  1137.     HRESULT SetShowCmd([in] int iShowCmd);
  1138.     HRESULT GetIconLocation([out, size_is(cch)] LPWSTR pszIconPath, [in] int cch, [out] int *piIcon);
  1139.     HRESULT SetIconLocation([in] LPCWSTR pszIconPath, [in] int iIcon);
  1140.     HRESULT SetRelativePath([in] LPCWSTR pszPathRel, [in] DWORD dwReserved);
  1141.     HRESULT Resolve([in] HWND hwnd, [in] DWORD fFlags);
  1142.     HRESULT SetPath([in] LPCWSTR pszFile);
  1143. };
  1144. [
  1145.     object,
  1146.     uuid(49ff1172-eadc-446d-9285-156453a6431c),
  1147.     helpstring("IActionProgressDialog Interface"),
  1148.     pointer_default(unique)
  1149. ]
  1150. interface IActionProgressDialog : IUnknown
  1151. {
  1152.     [v1_enum] enum {
  1153.         SPINITF_NORMAL         = 0x00000000,      // default normal progress behavior
  1154.         SPINITF_MODAL          = 0x00000001,      // call punkSite->EnableModeless() or EnableWindow()
  1155.         SPINITF_NOMINIMIZE     = 0x00000008,      // Do not have a minimize button in the caption bar.
  1156.     };
  1157.     typedef DWORD SPINITF;
  1158.     
  1159.     HRESULT Initialize(
  1160.         [in] SPINITF flags, 
  1161.         [in, string] LPCWSTR pszTitle, 
  1162.         [in, string] LPCWSTR pszCancel);
  1163.     HRESULT Stop();
  1164. };
  1165. [
  1166.     object,
  1167.     uuid(C1FB73D0-EC3A-4ba2-B512-8CDB9187B6D1),
  1168.     helpstring("HW Event Handler Interface"),
  1169.     pointer_default(unique)
  1170. ]
  1171. interface IHWEventHandler : IUnknown
  1172. {
  1173.     HRESULT Initialize([in, string] LPCWSTR pszParams);
  1174.     HRESULT HandleEvent([in, string] LPCWSTR pszDeviceID,
  1175.         [in, string] LPCWSTR pszAltDeviceID,
  1176.         [in, string] LPCWSTR pszEventType);
  1177.     HRESULT HandleEventWithContent([in, string] LPCWSTR pszDeviceID,
  1178.         [in, string] LPCWSTR pszAltDeviceID,
  1179.         [in, string] LPCWSTR pszEventType,
  1180.         [in, string] LPCWSTR pszContentTypeHandler,
  1181.         [in] IDataObject* pdataobject);
  1182. };
  1183. cpp_quote("#define ARCONTENT_AUTORUNINF         0x00000002") // That's the one we have today, and always had 
  1184. cpp_quote("#define ARCONTENT_AUDIOCD         0x00000004") // Audio CD (not MP3 and the like, the stuff you buy at the store) 
  1185. cpp_quote("#define ARCONTENT_DVDMOVIE        0x00000008") // DVD Movie (not MPEGs, the stuff you buy at the store) 
  1186. cpp_quote("#define ARCONTENT_BLANKCD         0x00000010") // Blank CD-R/CD-RW 
  1187. cpp_quote("#define ARCONTENT_BLANKDVD        0x00000020") // Blank DVD-R/DVD-RW 
  1188. cpp_quote("#define ARCONTENT_UNKNOWNCONTENT     0x00000040") // Whatever files.  Mean that it's formatted.
  1189. cpp_quote("#define ARCONTENT_AUTOPLAYPIX     0x00000080") // Whatever files.  Mean that it's formatted.
  1190. cpp_quote("#define ARCONTENT_AUTOPLAYMUSIC      0x00000100") // Whatever files.  Mean that it's formatted.
  1191. cpp_quote("#define ARCONTENT_AUTOPLAYVIDEO      0x00000200") // Whatever files.  Mean that it's formatted.
  1192. [
  1193.     object,
  1194.     uuid(DDEFE873-6997-4e68-BE26-39B633ADBE12),
  1195.     helpstring("HW Event Handler Interface"),
  1196.     pointer_default(unique)
  1197. ]
  1198. interface IQueryCancelAutoPlay : IUnknown
  1199. {
  1200.     HRESULT AllowAutoPlay([in, string]LPCWSTR pszPath, [in]DWORD dwContentType,
  1201.       [in, string]LPCWSTR pszLabel, [in] DWORD dwSerialNumber);
  1202. };
  1203. [
  1204.     object,
  1205.     uuid(49ff1173-eadc-446d-9285-156453a6431c),
  1206.     helpstring("IActionProgress Interface"),
  1207.     pointer_default(unique)
  1208. ]
  1209. interface IActionProgress : IUnknown
  1210. {
  1211.     [v1_enum] enum {
  1212.         SPBEGINF_NORMAL             = 0x00000000,      // default normal progress behavior
  1213.         SPBEGINF_AUTOTIME           = 0x00000002,      // automatically updates the "time remaining" text 
  1214.         SPBEGINF_NOPROGRESSBAR      = 0x00000010,      // Don't display the progress bar (SetProgress() wont be called)
  1215.         SPBEGINF_MARQUEEPROGRESS    = 0x00000020,      // use marquee progress (comctl32 v6 required)
  1216.     };
  1217.     typedef DWORD SPBEGINF;
  1218.     typedef [v1_enum] enum _SPACTION {
  1219.         SPACTION_NONE            = 0,      
  1220.         SPACTION_MOVING,
  1221.         SPACTION_COPYING,
  1222.         SPACTION_RECYCLING,
  1223.         SPACTION_APPLYINGATTRIBS,
  1224.         SPACTION_DOWNLOADING,
  1225.         SPACTION_SEARCHING_INTERNET,
  1226.         SPACTION_CALCULATING,
  1227.         SPACTION_UPLOADING,
  1228.         SPACTION_SEARCHING_FILES,
  1229.     } SPACTION;
  1230.     
  1231.     HRESULT Begin(
  1232.         [in] SPACTION action,
  1233.         [in] SPBEGINF flags);
  1234.     HRESULT UpdateProgress(
  1235.         [in] ULONGLONG ulCompleted, 
  1236.         [in] ULONGLONG ulTotal);
  1237.     typedef [v1_enum] enum _SPTEXT
  1238.     {
  1239.         SPTEXT_ACTIONDESCRIPTION        = 1,
  1240.         SPTEXT_ACTIONDETAIL,
  1241.     } SPTEXT;
  1242.     
  1243.     HRESULT UpdateText(
  1244.         [in] SPTEXT sptext, 
  1245.         [in, string] LPCWSTR pszText, 
  1246.         [in] BOOL fMayCompact);
  1247.     HRESULT QueryCancel([out] BOOL * pfCancelled);
  1248.     HRESULT ResetCancel();
  1249.     HRESULT End();
  1250. };
  1251. //  The IShellExtInit interface is used by the explorer to initialize shell
  1252. // extension objects. The explorer (1) calls CoCreateInstance (or equivalent)
  1253. // with the registered CLSID and IID_IShellExtInit, (2) calls its Initialize
  1254. // member, then (3) calls its QueryInterface to a particular interface (such
  1255. // as IContextMenu or IPropSheetExt and (4) performs the rest of operation.
  1256. //
  1257. // IShellExtInit::Initialize
  1258. //
  1259. //  This member function is called when the explorer is initializing either
  1260. // context menu extension, property sheet extension or non-default drag-drop
  1261. // extension.
  1262. //
  1263. //  Parameters: (context menu or property sheet extension)
  1264. //   pidlFolder -- Specifies the parent folder
  1265. //   lpdobj -- Spefifies the set of items selected in that folder.
  1266. //   hkeyProgID -- Specifies the type of the focused item in the selection.
  1267. //
  1268. //  Parameters: (non-default drag-and-drop extension)
  1269. //   pidlFolder -- Specifies the target (destination) folder
  1270. //   lpdobj -- Specifies the items that are dropped (see the description
  1271. //    about shell's clipboard below for clipboard formats).
  1272. //   hkeyProgID -- Specifies the folder type.
  1273. [
  1274.     uuid(000214E8-0000-0000-C000-000000000046),
  1275.     object,
  1276.     local,
  1277.     pointer_default(unique)
  1278. ]
  1279. interface IShellExtInit : IUnknown
  1280. {
  1281.     HRESULT Initialize([in] LPCITEMIDLIST pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID);
  1282. }
  1283. typedef IShellExtInit * LPSHELLEXTINIT;
  1284. //  The explorer uses the IShellPropSheetExt to allow property sheet
  1285. // extensions or control panel extensions to add additional property
  1286. // sheet pages.
  1287. //
  1288. // IShellPropSheetExt::AddPages
  1289. //
  1290. //  The explorer calls this member function when it finds a registered
  1291. // property sheet extension for a particular type of object. For each
  1292. // additional page, the extension creates a page object by calling
  1293. // CreatePropertySheetPage API and calls lpfnAddPage.
  1294. //
  1295. //  Parameters:
  1296. //   lpfnAddPage -- Specifies the callback function.
  1297. //   lParam -- Specifies the opaque handle to be passed to the callback function.
  1298. //
  1299. //
  1300. // IShellPropSheetExt::ReplacePage
  1301. //
  1302. //  The explorer never calls this member of property sheet extensions. The
  1303. // explorer calls this member of control panel extensions, so that they
  1304. // can replace some of default control panel pages (such as a page of
  1305. // mouse control panel).
  1306. //
  1307. //  Parameters:
  1308. //   uPageID -- Specifies the page to be replaced.
  1309. //   lpfnReplace Specifies the callback function.
  1310. //   lParam -- Specifies the opaque handle to be passed to the callback function.
  1311. //
  1312. [
  1313.     uuid(000214E9-0000-0000-C000-000000000046),
  1314.     object,
  1315.     local,
  1316.     pointer_default(unique)
  1317. ]
  1318. interface IShellPropSheetExt : IUnknown
  1319. {
  1320.     HRESULT AddPages([in] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in] LPARAM lParam);
  1321.     enum
  1322.     {
  1323.         EXPPS_FILETYPES     = 0x00000001,
  1324.     };
  1325.     typedef UINT EXPPS;
  1326.     HRESULT ReplacePage([in] EXPPS uPageID, [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in] LPARAM lParam);
  1327. }
  1328. typedef IShellPropSheetExt * LPSHELLPROPSHEETEXT;
  1329. [
  1330.     helpstring("used to initialize an object on a remote computer (server)"),
  1331.     uuid(000214FE-0000-0000-C000-000000000046),
  1332.     object,
  1333.     pointer_default(unique)
  1334. ]
  1335. interface IRemoteComputer : IUnknown
  1336. {
  1337.     // function is called when the explorer is initializing or
  1338.     // enumerating the name space extension. If failure is returned during
  1339.     // enumeration, the extension won't appear for this computer. Otherwise,
  1340.     // the extension will appear, and should target the given machine.
  1341.     //
  1342.     // pszMachine       Specifies the name of the machine to target. (\server)
  1343.     // bEnumerationg    test to see if this object should be enumerated
  1344.     //                  on this server
  1345.     HRESULT Initialize([in] LPCWSTR pszMachine, [in] BOOL bEnumerating);
  1346. };
  1347. [
  1348.     uuid(7307055c-b24a-486b-9f25-163e597a28a9), object, pointer_default(unique)
  1349. ]
  1350. interface IQueryContinue : IUnknown
  1351. {
  1352.     HRESULT QueryContinue();    // S_OK -> Continue, other 
  1353. };
  1354. [
  1355.     uuid(ba9711ba-5893-4787-a7e1-41277151550b), object, pointer_default(unique)
  1356. ]
  1357. interface IUserNotification : IUnknown
  1358. {
  1359.     HRESULT SetBalloonInfo([in, string] LPCWSTR pszTitle, [in, string] LPCWSTR pszText, [in] DWORD dwInfoFlags);
  1360.     // times in msec
  1361.     HRESULT SetBalloonRetry([in] DWORD dwShowTime, [in] DWORD dwInterval, [in] UINT cRetryCount);
  1362.     HRESULT SetIconInfo([in] HICON hIcon, [in, string] LPCWSTR pszToolTip);
  1363.     HRESULT Show([in] IQueryContinue *pqc, [in] DWORD dwContinuePollInterval);
  1364.     HRESULT PlaySound([in, string] LPCWSTR pszSoundName);
  1365. };
  1366. // interface for describing the limits placed on a name, used for validation
  1367. // parsing and translation.
  1368. [
  1369.     uuid(1df0d7f1-b267-4d28-8b10-12e23202a5c4)
  1370. ]
  1371. interface IItemNameLimits : IUnknown
  1372. {
  1373.     HRESULT GetValidCharacters([out] LPWSTR *ppwszValidChars, [out] LPWSTR *ppwszInvalidChars);
  1374.     HRESULT GetMaxLength([in] LPCWSTR pszName, [out] int *piMaxNameLen);
  1375. };
  1376. // INetCrawler interface
  1377. //
  1378. // [Member functions]
  1379. //
  1380. //   INetCrawler::Update
  1381. //   Causes an enumeration of the local workgroup and subsequent addition
  1382. //   of folder shortcut and printer objects.   As is a blocking call
  1383. //   which will potentially take a long time (seconds) it should be called
  1384. //   on a seperate thread
  1385. cpp_quote("#define SNCF_REFRESHLIST 0x00000001  // refresh the list (eg. from F5 or opening a folder)")
  1386. [
  1387.     helpstring("INetCrawler"),
  1388.     uuid(49c929ee-a1b7-4c58-b539-e63be392b6f3),
  1389.     object,
  1390.     pointer_default(unique)
  1391. ]
  1392. interface INetCrawler : IUnknown
  1393. {
  1394.     HRESULT Update([in] DWORD dwFlags);
  1395. }
  1396. cpp_quote("#if (_WIN32_IE >= 0x0400)")
  1397. // --- IExtractImage
  1398. // this interface is provided for objects to provide a thumbnail image.
  1399. // IExtractImage::GetLocation()
  1400. //      Gets a path description of the image that is to be extracted. This is used to
  1401. //      identify the image in the view so that multiple instances of the same image can reuse the
  1402. //      original image. If *pdwFlags == IEIFLAG_ASYNC and the result is E_PENDING, then *pdwPriority
  1403. //      is used to return the priority of the item, this is usually a measure of how long it will take
  1404. //      to perform the extraction. *pdwFlags can return IEIFLAG_CACHE if the view should cache a copy
  1405. //      of the image for future reference and faster access. This flag is used to tell the difference
  1406. //      between file formats that cache a thumbnail image such as Flashpix or Office documents, and those
  1407. //      that don't cache one.
  1408. // IExtractImage::Extract()
  1409. //      Extract the thumbnail of the specified size. If GetLocation() returned the values indicating
  1410. //      it is free-threaded and can be placed on a background thread. If the object
  1411. //      supports IRunnableTask as well, then long extractions can be started and paused as appropriate.
  1412. //      At this point it is asssumed the object is free-threaded.
  1413. //      If dwRecClrDepth contains a recommended Colour depth
  1414. //      If *phBmpthumbnail is non NULL, then it contains the destination bitmap that should be used.
  1415. cpp_quote("#define IEI_PRIORITY_MAX        ITSAT_MAX_PRIORITY")
  1416. cpp_quote("#define IEI_PRIORITY_MIN        ITSAT_MIN_PRIORITY")
  1417. cpp_quote("#define IEIT_PRIORITY_NORMAL     ITSAT_DEFAULT_PRIORITY")
  1418. cpp_quote("#define IEIFLAG_ASYNC       0x0001      // ask the extractor if it supports ASYNC extract (free threaded)")
  1419. cpp_quote("#define IEIFLAG_CACHE       0x0002      // returned from the extractor if it does NOT cache the thumbnail")
  1420. cpp_quote("#define IEIFLAG_ASPECT      0x0004      // passed to the extractor to beg it to render to the aspect ratio of the supplied rect")
  1421. cpp_quote("#define IEIFLAG_OFFLINE     0x0008      // if the extractor shouldn't hit the net to get any content neede for the rendering")
  1422. cpp_quote("#define IEIFLAG_GLEAM       0x0010      // does the image have a gleam ? this will be returned if it does")
  1423. cpp_quote("#define IEIFLAG_SCREEN      0x0020      // render as if for the screen  (this is exlusive with IEIFLAG_ASPECT )")
  1424. cpp_quote("#define IEIFLAG_ORIGSIZE    0x0040      // render to the approx size passed, but crop if neccessary")
  1425. cpp_quote("#define IEIFLAG_NOSTAMP     0x0080      // returned from the extractor if it does NOT want an icon stamp on the thumbnail")
  1426. cpp_quote("#define IEIFLAG_NOBORDER    0x0100      // returned from the extractor if it does NOT want an a border around the thumbnail")
  1427. 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")
  1428. [
  1429.     helpstring("IExtractImage"),
  1430.     uuid(BB2E617C-0920-11d1-9A0B-00C04FC2D6C1),
  1431.     object,
  1432.     pointer_default(unique)
  1433. ]
  1434. interface IExtractImage : IUnknown
  1435. {
  1436.     HRESULT GetLocation([out, size_is(cch)] LPWSTR pszPathBuffer,
  1437.                         [in] DWORD cch,
  1438.                         [in, out, unique] DWORD *pdwPriority,
  1439.                         [in] const SIZE * prgSize,
  1440.                         [in] DWORD dwRecClrDepth,
  1441.                         [in] DWORD *pdwFlags);
  1442.    HRESULT Extract([out] HBITMAP *phBmpThumbnail);
  1443. }
  1444. typedef IExtractImage * LPEXTRACTIMAGE;
  1445. cpp_quote("#endif")
  1446. cpp_quote("#if (_WIN32_IE >= 0x0500)")
  1447. // GetDateStamp : returns the date stamp associated with the image. If this image is already cached,
  1448. //                then it is easy to find out if the image is out of date.
  1449. [
  1450.     helpstring("IExtractImage2"),
  1451.     uuid(953BB1EE-93B4-11d1-98A3-00C04FB687DA),
  1452.     object,
  1453.     pointer_default(unique)
  1454. ]
  1455. interface IExtractImage2 : IExtractImage
  1456. {
  1457.     HRESULT GetDateStamp([out] FILETIME *pDateStamp);
  1458. }
  1459. typedef IExtractImage2 * LPEXTRACTIMAGE2;
  1460. cpp_quote("#endif")
  1461. //-------------------------------------------------------------------------
  1462. //
  1463. // IUserEventTimerCallback interface
  1464. //
  1465. //-------------------------------------------------------------------------
  1466. interface IUserEventTimerCallback;
  1467. [
  1468.     helpstring("IUserEventTimerCallback "),
  1469.     uuid(e9ead8e6-2a25-410e-9b58-a9fbef1dd1a2),     // IID_IUserEventTimerCallback
  1470.     object,
  1471.     pointer_default(unique)
  1472. ]
  1473. interface IUserEventTimerCallback : IUnknown
  1474. {
  1475.     HRESULT UserEventTimerProc(
  1476.         [in] ULONG uUserEventTimerID,
  1477.         [in] UINT uTimerElapse); 
  1478. };
  1479. //-------------------------------------------------------------------------
  1480. //
  1481. // IUserEventTimer interface
  1482. //
  1483. //  Timer to keep track of user presence at the machine
  1484. //
  1485. //-------------------------------------------------------------------------
  1486. interface IUserEventTimer;
  1487. [
  1488.     helpstring("IUserEventTimer "),
  1489.     uuid(0F504B94-6E42-42E6-99E0-E20FAFE52AB4),     // IID_IUserEventTimer
  1490.     object,
  1491.     pointer_default(unique)
  1492. ]
  1493. interface IUserEventTimer : IUnknown
  1494. {
  1495.     HRESULT SetUserEventTimer
  1496.     (
  1497.         [in] HWND hWnd,
  1498.         [in] UINT uCallbackMessage,
  1499.         [in] UINT uTimerElapse,
  1500.         [in] IUserEventTimerCallback * pUserEventTimerCallback,
  1501.         [in, out] ULONG * puUserEventTimerID
  1502.     );
  1503.     HRESULT KillUserEventTimer 
  1504.     (    
  1505.         [in] HWND hWnd,
  1506.         [in] ULONG uUserEventTimerID 
  1507.     );
  1508.     HRESULT GetUserEventTimerElapsed
  1509.     (
  1510.         [in] HWND hWnd,
  1511.         [in] ULONG uUserEventTimerID,
  1512.         [out] UINT * puTimerElapsed 
  1513.     );
  1514.     HRESULT InitTimerTickInterval
  1515.     (
  1516.         [in] UINT uTimerTickIntervalMs
  1517.     );                            
  1518. };
  1519. //-------------------------------------------------------------------------
  1520. //
  1521. // IDockingWindow interface
  1522. //
  1523. //   An object (docking window) implements this interface so the site can
  1524. // communicate with it.  An example of a docking window is a toolbar.
  1525. //
  1526. // [Member functions]
  1527. //
  1528. // IDockingWindow::ShowDW(fShow)
  1529. //   Shows or hides the docking window.
  1530. //
  1531. // IDockingWindow::CloseDW(dwReserved)
  1532. //   Closes the docking window.  dwReserved must be 0.
  1533. //
  1534. // IDockingWindow::ResizeBorderDW(prcBorder, punkToolbarSite, fReserved)
  1535. //   Resizes the docking window's border to *prcBorder.  fReserved must
  1536. //   be 0.
  1537. //
  1538. // IObjectWithSite::SetSite(punkSite)
  1539. //   IDockingWindow usually paired with IObjectWithSite.
  1540. //   Provides the IUnknown pointer of the site to the docking window.
  1541. //
  1542. //-------------------------------------------------------------------------
  1543. [
  1544.     uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8),
  1545.     object
  1546. ]
  1547. interface IDockingWindow : IOleWindow
  1548. {
  1549.     HRESULT ShowDW([in] BOOL fShow);
  1550.     HRESULT CloseDW([in] DWORD dwReserved);
  1551.     HRESULT ResizeBorderDW([in] LPCRECT prcBorder, [in] IUnknown* punkToolbarSite, [in] BOOL fReserved);
  1552. };
  1553. //-------------------------------------------------------------------------
  1554. //
  1555. // IDeskBand interface
  1556. //
  1557. //
  1558. // [Member functions]
  1559. //
  1560. // IDeskBand::GetBandInfo(dwBandID, dwViewMode, pdbi)
  1561. //   Returns info on the given band in *pdbi, according to the mask
  1562. //   field in the DESKBANDINFO structure and the given viewmode.
  1563. //
  1564. //-------------------------------------------------------------------------
  1565. // Mask values for DESKBANDINFO
  1566. cpp_quote("#define DBIM_MINSIZE    0x0001")
  1567. cpp_quote("#define DBIM_MAXSIZE    0x0002")
  1568. cpp_quote("#define DBIM_INTEGRAL   0x0004")
  1569. cpp_quote("#define DBIM_ACTUAL     0x0008")
  1570. cpp_quote("#define DBIM_TITLE      0x0010")
  1571. cpp_quote("#define DBIM_MODEFLAGS  0x0020")
  1572. cpp_quote("#define DBIM_BKCOLOR    0x0040")
  1573. cpp_quote("#include <pshpack8.h>")
  1574. typedef struct {
  1575.     DWORD       dwMask;
  1576.     POINTL      ptMinSize;
  1577.     POINTL      ptMaxSize;
  1578.     POINTL      ptIntegral;
  1579.     POINTL      ptActual;
  1580.     WCHAR       wszTitle[256];
  1581.     DWORD       dwModeFlags;
  1582.     COLORREF    crBkgnd;
  1583. } DESKBANDINFO;
  1584. cpp_quote("#include <poppack.h>")   // Return to byte packing
  1585. // DESKBANDINFO dwModeFlags values
  1586. cpp_quote("#define DBIMF_NORMAL            0x0000")
  1587. cpp_quote("#define DBIMF_FIXED             0x0001")
  1588. cpp_quote("#define DBIMF_FIXEDBMP          0x0004   // a fixed background bitmap (if supported)")
  1589. cpp_quote("#define DBIMF_VARIABLEHEIGHT    0x0008")
  1590. cpp_quote("#define DBIMF_UNDELETEABLE      0x0010")
  1591. cpp_quote("#define DBIMF_DEBOSSED          0x0020")
  1592. cpp_quote("#define DBIMF_BKCOLOR           0x0040")
  1593. cpp_quote("#define DBIMF_USECHEVRON        0x0080")
  1594. cpp_quote("#define DBIMF_BREAK             0x0100")
  1595. cpp_quote("#define DBIMF_ADDTOFRONT        0x0200")
  1596. cpp_quote("#define DBIMF_TOPALIGN          0x0400")
  1597. // GetBandInfo view mode values
  1598. cpp_quote("#define DBIF_VIEWMODE_NORMAL         0x0000")
  1599. cpp_quote("#define DBIF_VIEWMODE_VERTICAL       0x0001")
  1600. cpp_quote("#define DBIF_VIEWMODE_FLOATING       0x0002")
  1601. cpp_quote("#define DBIF_VIEWMODE_TRANSPARENT    0x0004")
  1602. // Command Target IDs
  1603. enum {
  1604.     DBID_BANDINFOCHANGED    = 0,
  1605.     DBID_SHOWONLY           = 1,
  1606.     DBID_MAXIMIZEBAND       = 2,      // Maximize the specified band (VT_UI4 == dwID)
  1607.     DBID_PUSHCHEVRON        = 3,
  1608.     DBID_DELAYINIT          = 4,      // Note: _bandsite_ calls _band_ with this code
  1609.     DBID_FINISHINIT         = 5,      // Note: _bandsite_ calls _band_ with this code
  1610.     DBID_SETWINDOWTHEME     = 6,      // Note: _bandsite_ calls _band_ with this code
  1611.     DBID_PERMITAUTOHIDE     = 7,
  1612. };
  1613. cpp_quote("#define DBPC_SELECTFIRST    (DWORD)-1")
  1614. cpp_quote("#define DBPC_SELECTLAST     (DWORD)-2")
  1615. cpp_quote("#define CGID_DeskBand IID_IDeskBand")
  1616. [
  1617.     uuid(EB0FE172-1A3A-11D0-89B3-00A0C90A90AC),
  1618.     object,
  1619. ]
  1620. interface IDeskBand : IDockingWindow
  1621. {
  1622.     HRESULT GetBandInfo([in] DWORD dwBandID, [in] DWORD dwViewMode, [in, out] DESKBANDINFO* pdbi);
  1623. };
  1624. //-------------------------------------------------------------------------
  1625. //
  1626. // ITaskbarList interface
  1627. //
  1628. //
  1629. // [Member functions]
  1630. //
  1631. // ITaskbarList::HrInit()
  1632. //   This function must be called first to validate use of other members.
  1633. //
  1634. // ITaskbarList::AddTab(hwnd)
  1635. //   This function adds a tab for hwnd to the taskbar.
  1636. //
  1637. // ITaskbarList::DeleteTab(hwnd)
  1638. //   This function deletes a tab for hwnd from the taskbar.
  1639. //
  1640. // ITaskbarList::ActivateTab(hwnd)
  1641. //   This function activates the tab associated with hwnd on the taskbar.
  1642. //
  1643. // ITaskbarList::SetActivateAlt(hwnd)
  1644. //   This function marks hwnd in the taskbar as the active tab
  1645. //
  1646. //-------------------------------------------------------------------------
  1647. [
  1648.     uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
  1649.     object,
  1650. ]
  1651. interface ITaskbarList : IUnknown
  1652. {
  1653.     HRESULT HrInit();
  1654.     HRESULT AddTab([in] HWND hwnd);
  1655.     HRESULT DeleteTab([in] HWND hwnd);
  1656.     HRESULT ActivateTab([in] HWND hwnd);
  1657.     HRESULT SetActiveAlt([in] HWND hwnd);
  1658. };
  1659. [
  1660.     uuid(602D4995-B13A-429b-A66E-1935E44F4317),
  1661.     object,
  1662. ]
  1663. interface ITaskbarList2 : ITaskbarList
  1664. {
  1665.     HRESULT MarkFullscreenWindow([in] HWND hwnd, [in] BOOL fFullscreen);
  1666. };
  1667. [
  1668.     object,
  1669.     uuid(3d73a659-e5d0-4d42-afc0-5121ba425c8d),     // IID_ICDBurn
  1670.     pointer_default(unique)
  1671. ]
  1672. interface ICDBurn : IUnknown
  1673. {
  1674.     HRESULT GetRecorderDriveLetter([out, size_is(cch)] LPWSTR pszDrive, [in] UINT cch);
  1675.     HRESULT Burn([in] HWND hwnd);
  1676.     HRESULT HasRecordableDrive([out] BOOL *pfHasRecorder);
  1677. };
  1678. [
  1679.     uuid(C9D81948-443A-40C7-945C-5E171B8C66B4),
  1680.     object,
  1681.     pointer_default(unique)
  1682. ]
  1683. interface IAddressBarParser : IUnknown
  1684. {
  1685.     HRESULT ParseFromOutsideSource([in, string] LPCWSTR pcszUrlIn, [in] DWORD dwParseFlags, [out] BOOL *pfWasCorrected);
  1686.     HRESULT GetUrl([out, size_is(cchUrlOutSize) ] LPWSTR pszUrlOut, [in] DWORD cchUrlOutSize);
  1687.     HRESULT SetUrl([in, string] LPCWSTR pcszUrlIn, [in] DWORD dwGenType);
  1688.     HRESULT GetDisplayName([out, size_is(cchUrlOutSize)] LPWSTR pszUrlOut, [in] DWORD cchUrlOutSize);
  1689.     HRESULT GetPidl([out] LPITEMIDLIST * ppidl);
  1690.     HRESULT SetPidl([in] LPCITEMIDLIST pidl);
  1691.     HRESULT GetArgs([out, size_is(cchArgsOutSize)] LPWSTR pszArgsOut, [in]DWORD cchArgsOutSize);
  1692.     HRESULT AddPath([in] LPCITEMIDLIST pidl);
  1693. };
  1694. // Wizard Extension objects.  These interfaces defined methods for extending 
  1695. // Win32 wizard in a progromatic way.
  1696. // Range of ID's that extensions can used, these mustn't clash with
  1697. // the existing wizards dialog IDS.  (That enables them to still
  1698. // do PropSheet_SetCurSelByID).
  1699. cpp_quote("#define IDD_WIZEXTN_FIRST    0x5000")
  1700. cpp_quote("#define IDD_WIZEXTN_LAST     0x5100")
  1701. // This site object is requested via a QueryService of the objects site,
  1702. // it allows the extension to navigate in/out out itself, eg. when the
  1703. // extension has shown all of its pages and wants to navigate to the
  1704. // next page it would call GetNextPage and select the specified HPAGE.
  1705. [
  1706.     uuid(88960f5b-422f-4e7b-8013-73415381c3c3),
  1707.     helpstring("Wizard Extension Site"),
  1708.     local
  1709. ]
  1710. interface IWizardSite : IUnknown
  1711. {
  1712.     HRESULT GetPreviousPage([out] HPROPSHEETPAGE *phpage);
  1713.     HRESULT GetNextPage([out] HPROPSHEETPAGE *phpage);
  1714.     HRESULT GetCancelledPage([out] HPROPSHEETPAGE *phpage);
  1715. };
  1716. // A wizard extension is implemented using this object, the extension will declare the
  1717. // pages that it supports using the AddPages method, and then when its host needs to navigate
  1718. // into the extenion it will do so via GetFirstPage and selecting that.
  1719. [
  1720.     uuid(c02ea696-86cc-491e-9b23-74394a0444a8),
  1721.     helpstring("Wizard Extension"),
  1722.     local
  1723. ]
  1724. interface IWizardExtension : IUnknown
  1725. {
  1726.     HRESULT AddPages([in, out] HPROPSHEETPAGE* aPages, [in] UINT cPages, [out] UINT *pnPagesAdded);
  1727.     HRESULT GetFirstPage([out] HPROPSHEETPAGE *phpage);
  1728.     HRESULT GetLastPage([out] HPROPSHEETPAGE *phpage);
  1729. };
  1730. // The Web Wizard is a HTML host for wizard pages, it allows you
  1731. // create a HTML wizard starting at the URL defined via SetInitialURL.
  1732. [
  1733.     helpstring("Web Wizard Page Extension"),
  1734.     uuid(0e6b3f66-98d1-48c0-a222-fbde74e2fbc5),
  1735.     object,
  1736.     pointer_default(unique)
  1737. ]
  1738. interface IWebWizardExtension : IWizardExtension
  1739. {
  1740.     HRESULT SetInitialURL([in, string] LPCWSTR pszURL);
  1741.     HRESULT SetErrorURL([in, string] LPCWSTR pszErrorURL);
  1742. };
  1743. cpp_quote("#define SID_WebWizardHost IID_IWebWizardExtension")
  1744. // flags for the host to control the publishing wizard
  1745. cpp_quote ("#define SHPWHF_NORECOMPRESS             0x00000001  // don't allow/prompt for recompress of streams")
  1746. cpp_quote ("#define SHPWHF_NONETPLACECREATE         0x00000002  // don't create a network place when transfer is complete")
  1747. cpp_quote ("#define SHPWHF_NOFILESELECTOR           0x00000004  // don't show the file selector")
  1748. cpp_quote ("#define SHPWHF_VALIDATEVIAWEBFOLDERS    0x00010000  // enable web folders to validate network places (ANP support)")
  1749.     helpstring("Web Publishing Wizard"),
  1750.     uuid(aa9198bb-ccec-472d-beed-19a4f6733f7a),
  1751.     object,
  1752.     pointer_default(unique)
  1753. ]
  1754. interface IPublishingWizard : IWizardExtension
  1755. {
  1756.     HRESULT Initialize([in] IDataObject *pdo, [in] DWORD dwOptions, [in, string] LPCWSTR pszServiceProvider);
  1757.     HRESULT GetTransferManifest([out] HRESULT *phrFromTransfer, [out] IXMLDOMDocument **pdocManifest);
  1758. }
  1759. // Object to host an IFolderView in a window.  This is used to build check mark selection
  1760. // UI for files.
  1761. [
  1762.     uuid(1ea58f02-d55a-411d-b09e-9e65ac21605b),
  1763.     helpstring("Shell Folder Host"),
  1764.     local,
  1765. ]
  1766. interface IFolderViewHost : IUnknown
  1767. {
  1768.     HRESULT Initialize([in] HWND hwndParent, [in] IDataObject *pdo, [in] RECT *prc);
  1769. };
  1770. //
  1771. //  Flags for IAutoCompleteDropDown::GetDropDownStatus
  1772. //
  1773. cpp_quote("#define ACDD_VISIBLE        0x0001")
  1774. [
  1775.     uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
  1776.     object,
  1777.     pointer_default(unique)
  1778. ]
  1779. interface IAutoCompleteDropDown : IUnknown
  1780. {
  1781.     HRESULT GetDropDownStatus([out] DWORD *pdwFlags, [out, string] LPWSTR *ppwszString);
  1782.     HRESULT ResetEnumerator();
  1783. };
  1784. //
  1785. //  NOTE - this typelib is never registered anywhere
  1786. //  objects that want their typelibs to be registered 
  1787. //  in shell32 should add their coclass to shldisp.idl
  1788. //
  1789. [
  1790.     uuid(50a7e9b1-70ef-11d1-b75a-00a0c90564fe), // LIBID_ShellObjects
  1791.     helpstring("Microsoft Shell Objects"),
  1792.     lcid(0x0000),
  1793.     version(1.0)
  1794. ]
  1795. library ShellObjects
  1796. {    
  1797.     // CLSID_QueryCancelAutoPlay
  1798.     [ uuid(331F1768-05A9-4ddd-B86E-DAE34DDC998A) ] coclass QueryCancelAutoPlay { interface IQueryCancelAutoPlay; }
  1799.     // CLSID_DriveSizeCategorizer
  1800.     [ uuid(94357B53-CA29-4b78-83AE-E8FE7409134F) ] coclass DriveSizeCategorizer { interface ICategorizer; }
  1801.     // CLSID_DriveTypeCategorizer
  1802.     [ uuid(B0A8F3CF-4333-4bab-8873-1CCB1CADA48B) ] coclass DriveTypeCategorizer { interface ICategorizer; }
  1803.     // CLSID_FreeSpaceCategorizer
  1804.     [ uuid(B5607793-24AC-44c7-82E2-831726AA6CB7) ] coclass FreeSpaceCategorizer { interface ICategorizer; }
  1805.     // CLSID_TimeCategorizer
  1806.     [ uuid(3bb4118f-ddfd-4d30-a348-9fb5d6bf1afe) ] coclass TimeCategorizer { interface ICategorizer; }
  1807.     // CLSID_SizeCategorizer
  1808.     [ uuid(55d7b852-f6d1-42f2-aa75-8728a1b2d264) ] coclass SizeCategorizer { interface ICategorizer; }
  1809.     // CLSID_AlphabeticalCategorizer
  1810.     [ uuid(3c2654c6-7372-4f6b-b310-55d6128f49d2) ] coclass AlphabeticalCategorizer { interface ICategorizer; }
  1811.     // CLSID_MergedCategorizer
  1812.     [ uuid(8e827c11-33e7-4bc1-b242-8cd9a1c2b304) ] coclass MergedCategorizer { interface ICategorizer; }
  1813.     // CLSID_ImageProperties
  1814.     [ uuid(7ab770c7-0e23-4d7a-8aa2-19bfad479829) ] coclass ImageProperties { interface IPersistFile; }
  1815.     // CLSID_ImageProperties
  1816.     [ uuid(d912f8cf-0396-4915-884e-fb425d32943b) ] coclass PropertiesUI { interface IPropertyUI; }
  1817.     // CLSID_UserNotification
  1818.     [ uuid(0010890e-8789-413c-adbc-48f5b511b3af) ] coclass UserNotification { interface IUserNotification; }
  1819.     // CLSID_UserEventTimerCallback
  1820.     [ uuid(15fffd13-5140-41b8-b89a-c8d5759cd2b2) ] coclass UserEventTimerCallback { interface IUserEventTimerCallback; }
  1821.     // CLSID_UserEventTimer
  1822.     [ uuid(864A1288-354C-4D19-9D68-C2742BB14997) ] coclass UserEventTimer { interface IUserEventTimer; }
  1823.     // CLSID_NetCrawler
  1824.     [ uuid(601ac3dc-786a-4eb0-bf40-ee3521e70bfb) ] coclass NetCrawler { interface INetCrawler; }
  1825.     // CLSID_CDBurn
  1826.     [ uuid(fbeb8a05-beee-4442-804e-409d6c4515e9) ] coclass CDBurn { interface ICDBurn; }
  1827.     // CLSID_AddressBarParser
  1828.     [ uuid(e0e11a09-5cb8-4b6c-8332-e00720a168f2) ] coclass AddressBarParser { interface IAddressBarParser; }
  1829.     // CLSID_TaskbarList
  1830.     [ uuid(56FDF344-FD6D-11d0-958A-006097C9A090) ] coclass TaskbarList { interface ITaskbarList; }
  1831.     // For supporting HTML wizard extensions we provide this object, it implements the IWizardExtenion
  1832.     // and allows the site to specific via an IPropertyBag an URL which should be displayed.  The property
  1833.     // bag is requested from the SID_WebWizardHost, and it used inturn to return parameter information
  1834.     // back to the site (eg. any information that the displayed HTML would like to communicate).
  1835.     
  1836.     // CLSID_WebWizardHost
  1837.     [ uuid(c827f149-55c1-4d28-935e-57e47caed973) ] coclass WebWizardHost { interface IWebWizardExtension; }
  1838.     // CLSID_PublishDropTarget
  1839.     [ uuid(CC6EEFFB-43F6-46c5-9619-51D571967F7D) ] coclass PublishDropTarget { interface IDropTarget; }
  1840.     // CLSID_PublishingWizard
  1841.     [ uuid(6b33163c-76a5-4b6c-bf21-45de9cd503a1) ] coclass PublishingWizard { interface IPublishingWizard; }
  1842.     cpp_quote("#define SID_PublishingWizard CLSID_PublishingWizard")
  1843.     // CLSID_InternetPrintOrdering
  1844.     [ uuid(add36aa8-751a-4579-a266-d66f5202ccbb) ] coclass InternetPrintOrdering { interface IDropTarget; }
  1845.     // CLSID_FolderViewHost
  1846.     [ uuid(20b1cb23-6968-4eb9-b7d4-a66d00d07cee) ] coclass FolderViewHost { interface IFolderViewHost; }
  1847. };