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

模拟服务器

开发平台:

C/C++

  1. SHFOLDERAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
  2. SHFOLDERAPI SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
  3. #ifdef UNICODE
  4. #define SHGetFolderPath  SHGetFolderPathW
  5. #else
  6. #define SHGetFolderPath  SHGetFolderPathA
  7. #endif // !UNICODE
  8. SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPITEMIDLIST *ppidl);
  9. SHFOLDERAPI SHGetFolderPathAndSubDirA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPCSTR pszSubDir, LPSTR pszPath);
  10. SHFOLDERAPI SHGetFolderPathAndSubDirW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubDir, LPWSTR pszPath);
  11. #ifdef UNICODE
  12. #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirW
  13. #else
  14. #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirA
  15. #endif // !UNICODE
  16. #endif      // _WIN32_IE >= 0x0500
  17. #endif      // _WIN32_IE >= 0x0400
  18. //-------------------------------------------------------------------------
  19. //
  20. // SHBrowseForFolder API
  21. //
  22. //
  23. //-------------------------------------------------------------------------
  24. typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
  25. #include <pshpack8.h>
  26. typedef struct _browseinfoA {
  27.     HWND        hwndOwner;
  28.     LPCITEMIDLIST pidlRoot;
  29.     LPSTR        pszDisplayName;        // Return display name of item selected.
  30.     LPCSTR       lpszTitle;                     // text to go in the banner over the tree.
  31.     UINT         ulFlags;                       // Flags that control the return stuff
  32.     BFFCALLBACK  lpfn;
  33.     LPARAM       lParam;                        // extra info that's passed back in callbacks
  34.     int          iImage;                        // output var: where to return the Image index.
  35. } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
  36. typedef struct _browseinfoW {
  37.     HWND        hwndOwner;
  38.     LPCITEMIDLIST pidlRoot;
  39.     LPWSTR       pszDisplayName;        // Return display name of item selected.
  40.     LPCWSTR      lpszTitle;                     // text to go in the banner over the tree.
  41.     UINT         ulFlags;                       // Flags that control the return stuff
  42.     BFFCALLBACK  lpfn;
  43.     LPARAM       lParam;                        // extra info that's passed back in callbacks
  44.     int          iImage;                        // output var: where to return the Image index.
  45. } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
  46. #include <poppack.h>        /* Return to byte packing */
  47. #ifdef UNICODE
  48. #define BROWSEINFO      BROWSEINFOW
  49. #define PBROWSEINFO     PBROWSEINFOW
  50. #define LPBROWSEINFO    LPBROWSEINFOW
  51. #else
  52. #define BROWSEINFO      BROWSEINFOA
  53. #define PBROWSEINFO     PBROWSEINFOA
  54. #define LPBROWSEINFO    LPBROWSEINFOA
  55. #endif
  56. // Browsing for directory.
  57. #define BIF_RETURNONLYFSDIRS   0x0001  // For finding a folder to start document searching
  58. #define BIF_DONTGOBELOWDOMAIN  0x0002  // For starting the Find Computer
  59. #define BIF_STATUSTEXT         0x0004   // Top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle and one line if
  60.                                         // this flag is set.  Passing the message BFFM_SETSTATUSTEXTA to the hwnd can set the
  61.                                         // rest of the text.  This is not used with BIF_USENEWUI and BROWSEINFO.lpszTitle gets
  62.                                         // all three lines of text.
  63. #define BIF_RETURNFSANCESTORS  0x0008
  64. #define BIF_EDITBOX            0x0010   // Add an editbox to the dialog
  65. #define BIF_VALIDATE           0x0020   // insist on valid result (or CANCEL)
  66. #define BIF_NEWDIALOGSTYLE     0x0040   // Use the new dialog layout with the ability to resize
  67.                                         // Caller needs to call OleInitialize() before using this API
  68. #define BIF_USENEWUI           (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
  69. #define BIF_BROWSEINCLUDEURLS  0x0080   // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
  70. #define BIF_UAHINT             0x0100   // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX
  71. #define BIF_NONEWFOLDERBUTTON  0x0200   // Do not add the "New Folder" button to the dialog.  Only applicable with BIF_NEWDIALOGSTYLE.
  72. #define BIF_NOTRANSLATETARGETS 0x0400   // don't traverse target as shortcut
  73. #define BIF_BROWSEFORCOMPUTER  0x1000  // Browsing for Computers.
  74. #define BIF_BROWSEFORPRINTER   0x2000  // Browsing for Printers
  75. #define BIF_BROWSEINCLUDEFILES 0x4000  // Browsing for Everything
  76. #define BIF_SHAREABLE          0x8000  // sharable resources displayed (remote shares, requires BIF_USENEWUI)
  77. // message from browser
  78. #define BFFM_INITIALIZED        1
  79. #define BFFM_SELCHANGED         2
  80. #define BFFM_VALIDATEFAILEDA    3   // lParam:szPath ret:1(cont),0(EndDialog)
  81. #define BFFM_VALIDATEFAILEDW    4   // lParam:wzPath ret:1(cont),0(EndDialog)
  82. #define BFFM_IUNKNOWN           5   // provides IUnknown to client. lParam: IUnknown*
  83. // messages to browser
  84. #define BFFM_SETSTATUSTEXTA     (WM_USER + 100)
  85. #define BFFM_ENABLEOK           (WM_USER + 101)
  86. #define BFFM_SETSELECTIONA      (WM_USER + 102)
  87. #define BFFM_SETSELECTIONW      (WM_USER + 103)
  88. #define BFFM_SETSTATUSTEXTW     (WM_USER + 104)
  89. #define BFFM_SETOKTEXT          (WM_USER + 105) // Unicode only
  90. #define BFFM_SETEXPANDED        (WM_USER + 106) // Unicode only
  91. SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderA(LPBROWSEINFOA lpbi);
  92. SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderW(LPBROWSEINFOW lpbi);
  93. #ifdef UNICODE
  94. #define SHBrowseForFolder   SHBrowseForFolderW
  95. #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTW
  96. #define BFFM_SETSELECTION   BFFM_SETSELECTIONW
  97. #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW
  98. #else
  99. #define SHBrowseForFolder   SHBrowseForFolderA
  100. #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTA
  101. #define BFFM_SETSELECTION   BFFM_SETSELECTIONA
  102. #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA
  103. #endif
  104. //-------------------------------------------------------------------------
  105. //
  106. // SHLoadInProc
  107. //
  108. //   When this function is called, the shell calls CoCreateInstance
  109. //  (or equivalent) with CLSCTX_INPROC_SERVER and the specified CLSID
  110. //  from within the shell's process and release it immediately.
  111. //
  112. //-------------------------------------------------------------------------
  113. SHSTDAPI SHLoadInProc(REFCLSID rclsid);
  114. #if _WIN32_IE >= 0x0600
  115. //-------------------------------------------------------------------------
  116. //
  117. // SHEnableServiceObject
  118. //
  119. //   Like SHLoadInProc, but gives control over the object's lifetime
  120. //  via fEnable parameter.  TRUE tells the shell to create the object
  121. //  and hold onto it, FALSE tells the shell to look for the previously
  122. //  created instance of the object and release it.
  123. //
  124. //-------------------------------------------------------------------------
  125. SHSTDAPI SHEnableServiceObject(REFCLSID rclsid, BOOL fEnable);
  126. #endif
  127. //-------------------------------------------------------------------------
  128. //
  129. // Internet Shortcut Object
  130. //
  131. //-------------------------------------------------------------------------
  132. // Cmds for CGID_ShortCut
  133. enum {
  134.     ISHCUTCMDID_DOWNLOADICON  = 0,
  135.     ISHCUTCMDID_INTSHORTCUTCREATE = 1,
  136. };
  137. #define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE
  138. //
  139. //  Helper function which returns a IShellFolder interface to the desktop
  140. // folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop.
  141. //
  142. //  CoCreateInstance(CLSID_Desktop, NULL,
  143. //                   CLSCTX_INPROC, IID_IShellFolder, &pshf);
  144. //
  145. SHSTDAPI SHGetDesktopFolder(IShellFolder **ppshf);
  146. // IShellFolder IBindCtx* parameters. the IUnknown for these are
  147. // accessed through IBindCtx::RegisterObjectParam/GetObjectParam
  148. // use this to provide the data needed create IDLists through
  149. // IShellFolder::ParseDisplayName(). this data applies to the last element
  150. // of the name that is parsed (c:foobar.txt, data applies to bar.txt)
  151. // this makes creating these IDLists much faster that suppling the name only
  152. #define STR_FILE_SYS_BIND_DATA      L"File System Bind Data"
  153. #undef  INTERFACE
  154. #define INTERFACE   IFileSystemBindData
  155. DECLARE_INTERFACE_(IFileSystemBindData, IUnknown)
  156. {
  157.     // *** IUnknown methods ***
  158.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  159.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  160.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  161.     // *** IFileSystemBindData methods ***
  162.     STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW *pfd) PURE;
  163.     STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW *pfd) PURE;
  164. };
  165. #undef  INTERFACE
  166. #define INTERFACE   IShellDetails
  167. DECLARE_INTERFACE_(IShellDetails, IUnknown)
  168. {
  169.     // *** IUnknown methods ***
  170.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  171.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  172.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  173.     // *** IShellDetails methods ***
  174.     STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;
  175.     STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
  176. };
  177. //-------------------------------------------------------------------------
  178. //
  179. // IObjMgr interface
  180. //
  181. //
  182. // [Member functions]
  183. //
  184. // IObjMgr::Append(punk)
  185. //   This function adds an object to the end of a list of objects.
  186. //
  187. // IObjMgr::Remove(punk)
  188. //   This function removes an object from a list of objects.
  189. //
  190. // This is implemented by CLSID_ACLMulti so each AutoComplete List
  191. // (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added.
  192. // CLSID_ACLMulti's IEnumString will then be the union of the results
  193. // from the COM Objects added.
  194. //-------------------------------------------------------------------------
  195. #undef INTERFACE
  196. #define INTERFACE IObjMgr
  197. DECLARE_INTERFACE_(IObjMgr, IUnknown)
  198. {
  199.     // *** IUnknown methods ***
  200.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  201.     STDMETHOD_(ULONG, AddRef) (THIS) PURE;
  202.     STDMETHOD_(ULONG, Release) (THIS) PURE;
  203.     // *** IObjMgr specific methods ***
  204.     STDMETHOD(Append) (THIS_ IUnknown *punk) PURE;
  205.     STDMETHOD(Remove) (THIS_ IUnknown *punk) PURE;
  206. };
  207. //-------------------------------------------------------------------------
  208. //
  209. // ICurrentWorkingDirectory interface
  210. //
  211. //
  212. // [Member functions]
  213. //
  214. // ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize)
  215. //   This function gets the Current Working Directory from a COM object that
  216. //   stores such state.
  217. //
  218. // ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath)
  219. //   This function sets the Current Working Directory of a COM object that
  220. //   stores such state.
  221. //
  222. // This function can be used generically.  One COM object that implements it
  223. // is CLSID_ACListISF so that the AutoComplete engine can complete relative
  224. // paths.  SetDirectory() will set the "Current Working Directory" and
  225. // AutoComplete with then complete both absolute and relative paths.
  226. // For Example, if ::SetDirectory(L"C:Program Files") is called, then
  227. // the user can AutoComplete "..winnt".  In order to set the current
  228. // working directory for non-file system paths, "ftp://ftp.microsoft.com/" or
  229. // "Control Panel" for example, use IPersistFolder.
  230. //-------------------------------------------------------------------------
  231. #undef INTERFACE
  232. #define INTERFACE ICurrentWorkingDirectory
  233. DECLARE_INTERFACE_(ICurrentWorkingDirectory, IUnknown)
  234. {
  235.     // *** IUnknown methods ***
  236.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  237.     STDMETHOD_(ULONG, AddRef) (THIS) PURE;
  238.     STDMETHOD_(ULONG, Release) (THIS) PURE;
  239.     // *** ICurrentWorkingDirectory specific methods ***
  240.     STDMETHOD(GetDirectory) (THIS_ LPWSTR pwzPath, DWORD cchSize) PURE;
  241.     STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE;
  242. };
  243. //-------------------------------------------------------------------------
  244. //
  245. // IACList interface
  246. //
  247. //
  248. // [Member functions]
  249. //
  250. // IObjMgr::Expand(LPCOLESTR)
  251. //   This function tells an autocomplete list to expand a specific string.
  252. //
  253. // If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete)
  254. // will use this interface to tell the "AutoComplete Lists" where to expand
  255. // the results.
  256. //
  257. // For Example, if the user enters "C:Program FilesMicros", AutoComplete
  258. // first completely enumerate the "AutoComplete Lists" via IEnumString.  Then it
  259. // will call the "AutoComplete Lists" with IACList::Expand(L"C:Program Files").
  260. // It will then enumerate the IEnumString interface again to get results in
  261. // that directory.
  262. //-------------------------------------------------------------------------
  263. #undef INTERFACE
  264. #define INTERFACE IACList
  265. DECLARE_INTERFACE_(IACList, IUnknown)
  266. {
  267.     // *** IUnknown methods ***
  268.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  269.     STDMETHOD_(ULONG, AddRef) (THIS) PURE;
  270.     STDMETHOD_(ULONG, Release) (THIS) PURE;
  271.     // *** IACList specific methods ***
  272.     STDMETHOD(Expand) (THIS_ LPCOLESTR pszExpand) PURE;
  273. };
  274. //-------------------------------------------------------------------------
  275. //
  276. // IACList2 interface
  277. //
  278. // [Description]
  279. //              This interface exists to allow the caller to set filter criteria
  280. // for an AutoComplete List.  AutoComplete Lists generates the list of
  281. // possible AutoComplete completions.  CLSID_ACListISF is one AutoComplete
  282. // List COM object that implements this interface.
  283. //-------------------------------------------------------------------------
  284. #undef INTERFACE
  285. #define INTERFACE IACList2
  286. typedef enum _tagAUTOCOMPLETELISTOPTIONS
  287. {
  288.     ACLO_NONE            = 0,    // don't enumerate anything
  289.     ACLO_CURRENTDIR      = 1,    // enumerate current directory
  290.     ACLO_MYCOMPUTER      = 2,    // enumerate MyComputer
  291.     ACLO_DESKTOP         = 4,    // enumerate Desktop Folder
  292.     ACLO_FAVORITES       = 8,    // enumerate Favorites Folder
  293.     ACLO_FILESYSONLY     = 16,   // enumerate only the file system
  294.     ACLO_FILESYSDIRS     = 32,   // enumerate only the file system dirs, UNC shares, and UNC servers.
  295. } AUTOCOMPLETELISTOPTIONS;
  296. DECLARE_INTERFACE_(IACList2, IACList)
  297. {
  298.     // *** IACList2 specific methods ***
  299.     STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
  300.     STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;
  301. };
  302. /*-------------------------------------------------------------------------*
  303.     INTERFACE: IProgressDialog
  304.     DESCRIPTION:
  305.         CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create
  306.     a progress dialog, set it's title, animation, text lines, progress, and
  307.     it will do all the work of updating on a background thread, being modless,
  308.     handling the user cancelling the operation, and estimating the time remaining
  309.     until the operation completes.
  310.     USAGE:
  311.         This is how the dialog is used during operations that require progress
  312.     and the ability to cancel:
  313.     {
  314.         DWORD dwComplete, dwTotal;
  315.         IProgressDialog * ppd;
  316.         CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void **)&ppd);
  317.         ppd->SetTitle(L"My Slow Operation");                                // Set the title of the dialog.
  318.         ppd->SetAnimation(hInstApp, IDA_OPERATION_ANIMATION);               // Set the animation to play.
  319.         ppd->StartProgressDialog(hwndParent, punk, PROGDLG_AUTOTIME, NULL); // Display and enable automatic estimated time remaining.
  320.         ppd->SetCancelMsg(L"Please wait while the current operation is cleaned up", NULL);   // Will only be displayed if Cancel button is pressed.
  321.         dwComplete = 0;
  322.         dwTotal = CalcTotalUnitsToDo();
  323.         // Reset because CalcTotalUnitsToDo() took a long time and the estimated time
  324.         // is based on the time between ::StartProgressDialog() and the first
  325.         // ::SetProgress() call.
  326.         ppd->Timer(PDTIMER_RESET, NULL);
  327.         for (nIndex = 0; nIndex < nTotal; nIndex++)
  328.         {
  329.             if (TRUE == ppd->HasUserCancelled())
  330.                 break;
  331.             ppd->SetLine(2, L"I'm processing item n", FALSE, NULL);
  332.             dwComplete += DoSlowOperation();
  333.             ppd->SetProgress(dwCompleted, dwTotal);
  334.         }
  335.         ppd->StopProgressDialog();
  336.         ppd->Release();
  337.     }
  338. *-------------------------------------------------------------------------*/
  339. // Flags for IProgressDialog::StartProgressDialog() (dwFlags)
  340. #define PROGDLG_NORMAL          0x00000000      // default normal progress dlg behavior
  341. #define PROGDLG_MODAL           0x00000001      // the dialog is modal to its hwndParent (default is modeless)
  342. #define PROGDLG_AUTOTIME        0x00000002      // automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!)
  343. #define PROGDLG_NOTIME          0x00000004      // we dont show the "time remaining" if this is set. We need this if dwTotal < dwCompleted for sparse files
  344. #define PROGDLG_NOMINIMIZE      0x00000008      // Do not have a minimize button in the caption bar.
  345. #define PROGDLG_NOPROGRESSBAR   0x00000010      // Don't display the progress bar
  346. // Time Actions (dwTimerAction)
  347. #define PDTIMER_RESET       0x00000001       // Reset the timer so the progress will be calculated from now until the first ::SetProgress() is called so
  348.                                              // those this time will correspond to the values passed to ::SetProgress().  Only do this before ::SetProgress() is called.
  349. #undef  INTERFACE
  350. #define INTERFACE   IProgressDialog
  351. DECLARE_INTERFACE_(IProgressDialog, IUnknown)
  352. {
  353.     // *** IUnknown methods ***
  354.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  355.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  356.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  357.     // *** IProgressDialog specific methods
  358.     STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown * punkEnableModless, DWORD dwFlags, LPCVOID pvResevered) PURE;
  359.     STDMETHOD(StopProgressDialog)(THIS) PURE;
  360.     STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;
  361.     STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PURE;
  362.     STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE;
  363.     STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
  364.     STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
  365.     STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPath, LPCVOID pvResevered) PURE;
  366.     STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID pvResevered) PURE;
  367.     STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID pvResevered) PURE;
  368. };
  369. //==========================================================================
  370. // IInputObjectSite/IInputObject interfaces
  371. //
  372. //  These interfaces allow us (or ISVs) to install/update external Internet
  373. // Toolbar for IE and the shell. The frame will simply get the CLSID from
  374. // registry (to be defined) and CoCreateInstance it.
  375. //
  376. //==========================================================================
  377. //-------------------------------------------------------------------------
  378. //
  379. // IInputObjectSite interface
  380. //
  381. //   A site implements this interface so the object can communicate
  382. // focus change to it.
  383. //
  384. // [Member functions]
  385. //
  386. // IInputObjectSite::OnFocusChangeIS(punkObj, fSetFocus)
  387. //   Object (punkObj) is getting or losing the focus.
  388. //
  389. //-------------------------------------------------------------------------
  390. #undef  INTERFACE
  391. #define INTERFACE   IInputObjectSite
  392. DECLARE_INTERFACE_(IInputObjectSite, IUnknown)
  393. {
  394.     // *** IUnknown methods ***
  395.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  396.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  397.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  398.     // *** IInputObjectSite specific methods ***
  399.     STDMETHOD(OnFocusChangeIS)(THIS_ IUnknown* punkObj, BOOL fSetFocus) PURE;
  400. };
  401. //-------------------------------------------------------------------------
  402. //
  403. // IInputObject interface
  404. //
  405. //   An object implements this interface so the site can communicate
  406. // activation and accelerator events to it.
  407. //
  408. // [Member functions]
  409. //
  410. // IInputObject::UIActivateIO(fActivate, lpMsg)
  411. //   Activates or deactivates the object.  lpMsg may be NULL.  Returns
  412. //   S_OK if the activation succeeded.
  413. //
  414. // IInputObject::HasFocusIO()
  415. //   Returns S_OK if the object has the focus, S_FALSE if not.
  416. //
  417. // IInputObject::TranslateAcceleratorIO(lpMsg)
  418. //   Allow the object to process the message.  Returns S_OK if the
  419. //   message was processed (eaten).
  420. //
  421. //-------------------------------------------------------------------------
  422. #undef  INTERFACE
  423. #define INTERFACE   IInputObject
  424. DECLARE_INTERFACE_(IInputObject, IUnknown)
  425. {
  426.     // *** IUnknown methods ***
  427.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  428.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  429.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  430.     // *** IInputObject specific methods ***
  431.     STDMETHOD(UIActivateIO)(THIS_ BOOL fActivate, LPMSG lpMsg) PURE;
  432.     STDMETHOD(HasFocusIO)(THIS) PURE;
  433.     STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
  434. };
  435. //==========================================================================
  436. // IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces
  437. // IInputObjectSite/IInputObject interfaces
  438. //
  439. //  These interfaces allow us (or ISVs) to install/update external Internet
  440. // Toolbar for IE and the shell. The frame will simply get the CLSID from
  441. // registry (to be defined) and CoCreateInstance it.
  442. //
  443. //==========================================================================
  444. //-------------------------------------------------------------------------
  445. //
  446. // IDockingWindowSite interface
  447. //
  448. //   A site implements this interface so the object can negotiate for
  449. // and inquire about real estate on the site.
  450. //
  451. // [Member functions]
  452. //
  453. // IDockingWindowSite::GetBorderDW(punkObj, prcBorder)
  454. //   Site returns the bounding rectangle of the given source object
  455. //   (punkObj).
  456. //
  457. // IDockingWindowSite::RequestBorderSpaceDW(punkObj, pbw)
  458. //   Object requests that the site makes room for it, as specified in
  459. //   *pbw.
  460. //
  461. // IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw)
  462. //   Object requests that the site set the border spacing to the size
  463. //   specified in *pbw.
  464. //
  465. //-------------------------------------------------------------------------
  466. #undef  INTERFACE
  467. #define INTERFACE   IDockingWindowSite
  468. DECLARE_INTERFACE_(IDockingWindowSite, IOleWindow)
  469. {
  470.     // *** IUnknown methods ***
  471.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  472.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  473.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  474.     // *** IOleWindow methods ***
  475.     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
  476.     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
  477.     // *** IDockingWindowSite methods ***
  478.     STDMETHOD(GetBorderDW) (THIS_ IUnknown* punkObj, LPRECT prcBorder) PURE;
  479.     STDMETHOD(RequestBorderSpaceDW) (THIS_ IUnknown* punkObj, LPCBORDERWIDTHS pbw) PURE;
  480.     STDMETHOD(SetBorderSpaceDW) (THIS_ IUnknown* punkObj, LPCBORDERWIDTHS pbw) PURE;
  481. };
  482. //-------------------------------------------------------------------------
  483. //
  484. // IDockingWindowFrame interface
  485. //
  486. //
  487. // [Member functions]
  488. //
  489. // IDockingWindowFrame::AddToolbar(punkSrc, pwszItem, dwReserved)
  490. //
  491. // IDockingWindowFrame::RemoveToolbar(punkSrc, dwRemoveFlags)
  492. //
  493. // IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv)
  494. //
  495. //-------------------------------------------------------------------------
  496. // flags for RemoveToolbar
  497. #define DWFRF_NORMAL            0x0000
  498. #define DWFRF_DELETECONFIGDATA  0x0001
  499. // flags for AddToolbar
  500. #define DWFAF_HIDDEN  0x0001   // add hidden
  501. #undef  INTERFACE
  502. #define INTERFACE   IDockingWindowFrame
  503. DECLARE_INTERFACE_(IDockingWindowFrame, IOleWindow)
  504. {
  505.     // *** IUnknown methods ***
  506.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  507.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  508.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  509.     // *** IOleWindow methods ***
  510.     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
  511.     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
  512.     // *** IDockingWindowFrame methods ***
  513.     STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) PURE;
  514.     STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE;
  515.     STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PURE;
  516. };
  517. #if (_WIN32_IE >= 0x0400)
  518. //-------------------------------------------------------------------------
  519. //
  520. // IRunnableTask interface
  521. //
  522. //   This is a free threaded interface used for putting items on a background
  523. // scheduler for execution within the view.  It allows a scheduler to start and
  524. // stop tasks on as many worker threads as it deems necessary.
  525. //
  526. // Run(), Kill() and Suspend() may be called from different threads.
  527. //
  528. // [Member functions]
  529. //
  530. // IRunnableTask::Run(void)
  531. //   Initiate the task to run.  This should return E_PENDING if the task
  532. //   has been suspended.
  533. //
  534. // IRunnableTask::Kill(void)
  535. //
  536. // IRunnableTask::Suspend(void)
  537. //
  538. // IRunnableTask::Resume(void)
  539. //
  540. // IRunnableTask::IsRunning(void)
  541. //
  542. //-------------------------------------------------------------------------
  543. // Convenient state values
  544. #define IRTIR_TASK_NOT_RUNNING  0
  545. #define IRTIR_TASK_RUNNING      1
  546. #define IRTIR_TASK_SUSPENDED    2
  547. #define IRTIR_TASK_PENDING      3
  548. #define IRTIR_TASK_FINISHED     4
  549. #undef  INTERFACE
  550. #define INTERFACE   IRunnableTask
  551. DECLARE_INTERFACE_( IRunnableTask, IUnknown )
  552. {
  553.     // *** IUnknown methods ***
  554.     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  555.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  556.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  557.     // *** IRunnableTask methods ***
  558.     STDMETHOD (Run)(THIS) PURE;
  559.     STDMETHOD (Kill)(THIS_ BOOL fWait ) PURE;
  560.     STDMETHOD (Suspend)(THIS) PURE;
  561.     STDMETHOD (Resume)(THIS) PURE;
  562.     STDMETHOD_(ULONG, IsRunning)(THIS) PURE;
  563. };
  564. typedef IRunnableTask * LPRUNNABLETASK;
  565. #endif
  566. #if (_WIN32_IE >= 0x0400)
  567. /* ***************** IThumbnailCapture
  568.  * CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specified
  569.  *                    size as an hbitmap
  570.  */
  571. #undef  INTERFACE
  572. #define INTERFACE   IThumbnailCapture
  573. DECLARE_INTERFACE_ ( IThumbnailCapture, IUnknown )
  574. {
  575.     // *** IThumbnailCapture methods ***
  576.     STDMETHOD (CaptureThumbnail)    ( THIS_ const SIZE * pMaxSize,
  577.                                       IUnknown * pHTMLDoc2,
  578.                                       HBITMAP * phbmThumbnail ) PURE;
  579. };
  580. typedef IThumbnailCapture * LPTHUMBNAILCAPTURE;
  581. #endif
  582. #if (_WIN32_IE >= 0x400)
  583. //
  584. // We need to make sure that WININET.H is included before this interface is
  585. // used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH
  586. //
  587. #ifdef _WININET_
  588. //
  589. //  Flags and structures used by IActiveDesktop
  590. //
  591. typedef struct _tagWALLPAPEROPT
  592. {
  593.     DWORD   dwSize;     // size of this Structure.
  594.     DWORD   dwStyle;    // WPSTYLE_* mentioned above
  595. }
  596. WALLPAPEROPT;
  597. typedef WALLPAPEROPT  *LPWALLPAPEROPT;
  598. typedef const WALLPAPEROPT *LPCWALLPAPEROPT;
  599. typedef struct _tagCOMPONENTSOPT
  600. {
  601.     DWORD   dwSize;             //Size of this structure
  602.     BOOL    fEnableComponents;  //Enable components?
  603.     BOOL    fActiveDesktop;     // Active desktop enabled ?
  604. }
  605. COMPONENTSOPT;
  606. typedef COMPONENTSOPT   *LPCOMPONENTSOPT;
  607. typedef const COMPONENTSOPT   *LPCCOMPONENTSOPT;
  608. typedef struct _tagCOMPPOS
  609. {
  610.     DWORD   dwSize;             //Size of this structure
  611.     int     iLeft;              //Left of top-left corner in screen co-ordinates.
  612.     int     iTop;               //Top of top-left corner in screen co-ordinates.
  613.     DWORD   dwWidth;            // Width in pixels.
  614.     DWORD   dwHeight;           // Height in pixels.
  615.     int     izIndex;            // Indicates the Z-order of the component.
  616.     BOOL    fCanResize;         // Is the component resizeable?
  617.     BOOL    fCanResizeX;        // Resizeable in X-direction?
  618.     BOOL    fCanResizeY;        // Resizeable in Y-direction?
  619.     int     iPreferredLeftPercent;    //Left of top-left corner as percent of screen width
  620.     int     iPreferredTopPercent;     //Top of top-left corner as percent of screen height
  621. }
  622. COMPPOS;
  623. typedef COMPPOS *LPCOMPPOS;
  624. typedef const COMPPOS *LPCCOMPPOS;
  625. typedef struct  _tagCOMPSTATEINFO
  626. {
  627.     DWORD   dwSize;             // Size of this structure.
  628.     int     iLeft;              // Left of the top-left corner in screen co-ordinates.
  629.     int     iTop;               // Top of top-left corner in screen co-ordinates.
  630.     DWORD   dwWidth;            // Width in pixels.
  631.     DWORD   dwHeight;           // Height in pixels.
  632.     DWORD   dwItemState;        // State of the component (full-screen mode or split-screen or normal state.
  633. }
  634. COMPSTATEINFO;
  635. typedef COMPSTATEINFO   *LPCOMPSTATEINFO;
  636. typedef const COMPSTATEINFO *LPCCOMPSTATEINFO;
  637. #define COMPONENT_TOP (0x3fffffff)  // izOrder value meaning component is at the top
  638. // iCompType values
  639. #define COMP_TYPE_HTMLDOC       0
  640. #define COMP_TYPE_PICTURE       1
  641. #define COMP_TYPE_WEBSITE       2
  642. #define COMP_TYPE_CONTROL       3
  643. #define COMP_TYPE_CFHTML        4
  644. #define COMP_TYPE_MAX           4
  645. // The following is the COMPONENT structure used in IE4.01, IE4.0 and Memphis. It is kept here for compatibility
  646. // reasons.
  647. typedef struct _tagIE4COMPONENT
  648. {
  649.     DWORD   dwSize;             //Size of this structure
  650.     DWORD   dwID;               //Reserved: Set it always to zero.
  651.     int     iComponentType;     //One of COMP_TYPE_*
  652.     BOOL    fChecked;           // Is this component enabled?
  653.     BOOL    fDirty;             // Had the component been modified and not yet saved to disk?
  654.     BOOL    fNoScroll;          // Is the component scrollable?
  655.     COMPPOS cpPos;              // Width, height etc.,
  656.     WCHAR   wszFriendlyName[MAX_PATH];          // Friendly name of component.
  657.     WCHAR   wszSource[INTERNET_MAX_URL_LENGTH]; //URL of the component.
  658.     WCHAR   wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; //Subscrined URL
  659. }
  660. IE4COMPONENT;
  661. typedef IE4COMPONENT *LPIE4COMPONENT;
  662. typedef const IE4COMPONENT *LPCIE4COMPONENT;
  663. //
  664. // The following is the new NT5 component structure. Note that the initial portion of this component exactly
  665. // matches the IE4COMPONENT structure. All new fields are added at the bottom and the dwSize field is used to
  666. // distinguish between IE4COMPONENT and the new COMPONENT structures.
  667. //
  668. typedef struct _tagCOMPONENT
  669. {
  670.     DWORD   dwSize;             //Size of this structure
  671.     DWORD   dwID;               //Reserved: Set it always to zero.
  672.     int     iComponentType;     //One of COMP_TYPE_*
  673.     BOOL    fChecked;           // Is this component enabled?
  674.     BOOL    fDirty;             // Had the component been modified and not yet saved to disk?
  675.     BOOL    fNoScroll;          // Is the component scrollable?
  676.     COMPPOS cpPos;              // Width, height etc.,
  677.     WCHAR   wszFriendlyName[MAX_PATH];          // Friendly name of component.
  678.     WCHAR   wszSource[INTERNET_MAX_URL_LENGTH]; //URL of the component.
  679.     WCHAR   wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; //Subscrined URL
  680.     //New fields are added below. Everything above here must exactly match the IE4COMPONENT Structure.
  681.     DWORD           dwCurItemState; // Current state of the Component.
  682.     COMPSTATEINFO   csiOriginal;    // Original state of the component when it was first added.
  683.     COMPSTATEINFO   csiRestored;    // Restored state of the component.
  684. }
  685. COMPONENT;
  686. typedef COMPONENT *LPCOMPONENT;
  687. typedef const COMPONENT *LPCCOMPONENT;
  688. // Defines for dwCurItemState
  689. #define IS_NORMAL               0x00000001
  690. #define IS_FULLSCREEN           0x00000002
  691. #define IS_SPLIT                0x00000004
  692. #define IS_VALIDSIZESTATEBITS   (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN)  // The set of IS_* state bits which define the "size" of the component - these bits are mutually exclusive.
  693. #define IS_VALIDSTATEBITS       (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN | 0x80000000 | 0x40000000)  // All of the currently defined IS_* bits.
  694. ////////////////////////////////////////////
  695. // Flags for IActiveDesktop::ApplyChanges()
  696. #define AD_APPLY_SAVE             0x00000001
  697. #define AD_APPLY_HTMLGEN          0x00000002
  698. #define AD_APPLY_REFRESH          0x00000004
  699. #define AD_APPLY_ALL              (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_REFRESH)
  700. #define AD_APPLY_FORCE            0x00000008
  701. #define AD_APPLY_BUFFERED_REFRESH 0x00000010
  702. #define AD_APPLY_DYNAMICREFRESH   0x00000020
  703. ////////////////////////////////////////////
  704. // Flags for IActiveDesktop::GetWallpaperOptions()
  705. //           IActiveDesktop::SetWallpaperOptions()
  706. #define WPSTYLE_CENTER      0
  707. #define WPSTYLE_TILE        1
  708. #define WPSTYLE_STRETCH     2
  709. #define WPSTYLE_MAX         3
  710. ////////////////////////////////////////////
  711. // Flags for IActiveDesktop::ModifyComponent()
  712. #define COMP_ELEM_TYPE          0x00000001
  713. #define COMP_ELEM_CHECKED       0x00000002
  714. #define COMP_ELEM_DIRTY         0x00000004
  715. #define COMP_ELEM_NOSCROLL      0x00000008
  716. #define COMP_ELEM_POS_LEFT      0x00000010
  717. #define COMP_ELEM_POS_TOP       0x00000020
  718. #define COMP_ELEM_SIZE_WIDTH    0x00000040
  719. #define COMP_ELEM_SIZE_HEIGHT   0x00000080
  720. #define COMP_ELEM_POS_ZINDEX    0x00000100
  721. #define COMP_ELEM_SOURCE        0x00000200
  722. #define COMP_ELEM_FRIENDLYNAME  0x00000400
  723. #define COMP_ELEM_SUBSCRIBEDURL 0x00000800
  724. #define COMP_ELEM_ORIGINAL_CSI  0x00001000
  725. #define COMP_ELEM_RESTORED_CSI  0x00002000
  726. #define COMP_ELEM_CURITEMSTATE  0x00004000
  727. #define COMP_ELEM_ALL   (COMP_ELEM_TYPE | COMP_ELEM_CHECKED | COMP_ELEM_DIRTY |                     
  728.                          COMP_ELEM_NOSCROLL | COMP_ELEM_POS_LEFT | COMP_ELEM_SIZE_WIDTH  |          
  729.                          COMP_ELEM_SIZE_HEIGHT | COMP_ELEM_POS_ZINDEX | COMP_ELEM_SOURCE |          
  730.                          COMP_ELEM_FRIENDLYNAME | COMP_ELEM_POS_TOP | COMP_ELEM_SUBSCRIBEDURL |     
  731.                          COMP_ELEM_ORIGINAL_CSI | COMP_ELEM_RESTORED_CSI | COMP_ELEM_CURITEMSTATE)
  732. ////////////////////////////////////////////
  733. // Flags for IActiveDesktop::AddDesktopItemWithUI()
  734. typedef enum tagDTI_ADTIWUI
  735. {
  736.     DTI_ADDUI_DEFAULT               = 0x00000000,
  737.     DTI_ADDUI_DISPSUBWIZARD         = 0x00000001,
  738.     DTI_ADDUI_POSITIONITEM          = 0x00000002,
  739. };
  740. ////////////////////////////////////////////
  741. // Flags for IActiveDesktop::AddUrl()
  742. #define ADDURL_SILENT           0X0001
  743. ////////////////////////////////////////////
  744. // Default positions for ADI
  745. #define COMPONENT_DEFAULT_LEFT    (0xFFFF)
  746. #define COMPONENT_DEFAULT_TOP     (0xFFFF)
  747. //
  748. //  Interface for manipulating the Active Desktop.
  749. //
  750. #undef INTERFACE
  751. #define INTERFACE IActiveDesktop
  752. DECLARE_INTERFACE_( IActiveDesktop, IUnknown )
  753. {
  754.     // IUnknown methods
  755.     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  756.     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
  757.     STDMETHOD_(ULONG, Release) ( THIS ) PURE;
  758.     // IActiveDesktop methods
  759.     STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE;
  760.     STDMETHOD (GetWallpaper)(THIS_ LPWSTR pwszWallpaper, UINT cchWallpaper, DWORD dwReserved) PURE;
  761.     STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE;
  762.     STDMETHOD (GetWallpaperOptions)(THIS_ LPWALLPAPEROPT pwpo, DWORD dwReserved) PURE;
  763.     STDMETHOD (SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT pwpo, DWORD dwReserved) PURE;
  764.     STDMETHOD (GetPattern)(THIS_ LPWSTR pwszPattern, UINT cchPattern, DWORD dwReserved) PURE;
  765.     STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE;
  766.     STDMETHOD (GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT pco, DWORD dwReserved) PURE;
  767.     STDMETHOD (SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT pco, DWORD dwReserved) PURE;
  768.     STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
  769.     STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
  770.     STDMETHOD (ModifyDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwFlags) PURE;
  771.     STDMETHOD (RemoveDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
  772.     STDMETHOD (GetDesktopItemCount)(THIS_ LPINT lpiCount, DWORD dwReserved) PURE;
  773.     STDMETHOD (GetDesktopItem)(THIS_ int nComponent, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
  774.     STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
  775.     STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
  776.     STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, LPCOMPONENT pcomp, DWORD dwFlags) PURE;
  777.     STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
  778. };
  779. typedef IActiveDesktop * LPACTIVEDESKTOP;
  780. #endif // _WININET_
  781. #if (_WIN32_IE >= 0x0500)
  782. #define MAX_COLUMN_NAME_LEN 80
  783. #define MAX_COLUMN_DESC_LEN 128
  784. #include <pshpack1.h>
  785. typedef struct {
  786.     SHCOLUMNID  scid;                           // OUT the unique identifier of this column
  787.     VARTYPE     vt;                             // OUT the native type of the data returned
  788.     DWORD       fmt;                            // OUT this listview format (LVCFMT_LEFT, usually)
  789.     UINT        cChars;                         // OUT the default width of the column, in characters
  790.     DWORD       csFlags;                        // OUT SHCOLSTATE flags
  791.     WCHAR wszTitle[MAX_COLUMN_NAME_LEN];        // OUT the title of the column
  792.     WCHAR wszDescription[MAX_COLUMN_DESC_LEN];  // OUT full description of this column
  793. } SHCOLUMNINFO, *LPSHCOLUMNINFO;
  794. typedef const SHCOLUMNINFO* LPCSHCOLUMNINFO;
  795. #include <poppack.h>        /* Return to default */
  796. #include <pshpack8.h>
  797. typedef struct {
  798.     ULONG   dwFlags;              // initialization flags
  799.     ULONG   dwReserved;           // reserved for future use.
  800.     WCHAR   wszFolder[MAX_PATH];  // fully qualified folder path (or empty if multiple folders)
  801. } SHCOLUMNINIT, *LPSHCOLUMNINIT;
  802. typedef const SHCOLUMNINIT* LPCSHCOLUMNINIT;
  803. #define SHCDF_UPDATEITEM        0x00000001      // this flag is a hint that the file has changed since the last call to GetItemData
  804. typedef struct {
  805.     ULONG   dwFlags;             // combination of SHCDF_ flags.
  806.     DWORD   dwFileAttributes;    // file attributes.
  807.     ULONG   dwReserved;          // reserved for future use.
  808.     WCHAR*  pwszExt;             // address of file name extension
  809.     WCHAR   wszFile[MAX_PATH];   // Absolute path of file.
  810. } SHCOLUMNDATA, *LPSHCOLUMNDATA;
  811. typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA;
  812. #include <poppack.h>        /* Return to byte packing */
  813. #undef INTERFACE
  814. #define INTERFACE IColumnProvider
  815. // Note: these objects must be threadsafe!  GetItemData _will_ be called
  816. // simultaneously from multiple threads.
  817. DECLARE_INTERFACE_(IColumnProvider, IUnknown)
  818. {
  819.     // IUnknown methods
  820.     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  821.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  822.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  823.     // IColumnProvider methods
  824.     STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE;
  825.     STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, SHCOLUMNINFO *psci) PURE;
  826.     STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VARIANT *pvarData) PURE;
  827. };
  828. ///////////////////////////////////////////////////////
  829. //
  830. // Drag and Drop helper
  831. //
  832. // Purpose: To expose the Shell drag images
  833. //
  834. // This interface is implemented in the shell by CLSID_DragDropHelper.
  835. //
  836. // To use:
  837. //   If you are the source of a drag (i.e. in response to LV_DRAGBEGIN or
  838. //    equivelent begin drag message) call
  839. //    IDragSourceHelper::InitializeFromWindow
  840. //              (<hwnd of window supporting DI_GETDRAGIMAGE>,
  841. //               <pointer to POINT indicating offset to the mouse from
  842. //                  the upper left corner of the image>,
  843. //               <pointer to data object>)
  844. //
  845. //      NOTE: The Data object must support IDataObject::SetData with multiple
  846. //            data types and GetData must implement data type cloning
  847. //            (Including HGLOBAL), not just aliasing.
  848. //
  849. //   If you wish to have an image while over your application add the
  850. //    IDragImages::Dr* calls to your IDropTarget implementation. For Example:
  851. //
  852. //    STDMETHODIMP CUserDropTarget::DragEnter(IDataObject* pDataObject,
  853. //                                            DWORD grfKeyState,
  854. //                                            POINTL pt, DWORD* pdwEffect)
  855. //    {
  856. //          // Process your DragEnter
  857. //          // Call IDragImages::DragEnter last.
  858. //          _pDropTargetHelper->DragEnter(_hwndDragOver, pDataObject,
  859. //                                        (POINT*)&pt, *pdwEffect);
  860. //          return hres;
  861. //    }
  862. //
  863. //
  864. //   If you wish to be able to source a drag image from a custom control,
  865. //     implement a handler for the RegisterWindowMessage(DI_GETDRAGIMAGE).
  866. //     The LPARAM is a pointer to an SHDRAGIMAGE structure.
  867. //
  868. //      sizeDragImage  -   Calculate the length and width required to render
  869. //                          the images.
  870. //      ptOffset       -   Calculate the offset from the upper left corner to
  871. //                          the mouse cursor within the image
  872. //      hbmpDragImage  -   CreateBitmap( sizeDragImage.cx, sizeDragImage.cy,
  873. //                           GetDeviceCaps(hdcScreen, PLANES),
  874. //                           GetDeviceCaps(hdcScreen, BITSPIXEL),
  875. //                           NULL);
  876. //
  877. //   Drag Images will only be displayed on Windows NT 5.0 or later.
  878. //
  879. //
  880. //   Note about IDropTargetHelper::Show - This method is provided for
  881. //     showing/hiding the Drag image in low color depth video modes. When
  882. //     painting to a window that is currently being dragged over (i.e. For
  883. //     indicating a selection) you need to hide the drag image by calling this
  884. //     method passing FALSE. After the window is done painting, Show the image
  885. //     again by passing TRUE.
  886. #include <pshpack8.h>
  887. typedef struct
  888. {
  889.     SIZE        sizeDragImage;      // OUT - The length and Width of the
  890.                                     //        rendered image
  891.     POINT       ptOffset;           // OUT - The Offset from the mouse cursor to
  892.                                     //        the upper left corner of the image
  893.     HBITMAP     hbmpDragImage;      // OUT - The Bitmap containing the rendered
  894.                                     //        drag images
  895.     COLORREF    crColorKey;         // OUT - The COLORREF that has been blitted
  896.                                     //        to the background of the images
  897. } SHDRAGIMAGE, *LPSHDRAGIMAGE;
  898. #include <poppack.h>        /* Return to byte packing */
  899. // This is sent to a window to get the rendered images to a bitmap
  900. // Call RegisterWindowMessage to get the ID
  901. #define DI_GETDRAGIMAGE     TEXT("ShellGetDragImage")
  902. #undef INTERFACE
  903. #define INTERFACE IDropTargetHelper
  904. DECLARE_INTERFACE_( IDropTargetHelper, IUnknown )
  905. {
  906.     // IUnknown methods
  907.     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  908.     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
  909.     STDMETHOD_(ULONG, Release) ( THIS ) PURE;
  910.     // IDropTargetHelper
  911.     STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject,
  912.                           POINT* ppt, DWORD dwEffect) PURE;
  913.     STDMETHOD (DragLeave)(THIS) PURE;
  914.     STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE;
  915.     STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt,
  916.                      DWORD dwEffect) PURE;
  917.     STDMETHOD (Show)(THIS_ BOOL fShow) PURE;
  918. };
  919. #undef INTERFACE
  920. #define INTERFACE IDragSourceHelper
  921. DECLARE_INTERFACE_( IDragSourceHelper, IUnknown )
  922. {
  923.     // IUnknown methods
  924.     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  925.     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
  926.     STDMETHOD_(ULONG, Release) ( THIS ) PURE;
  927.     // IDragSourceHelper
  928.     STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi,
  929.                                      IDataObject* pDataObject) PURE;
  930.     STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt,
  931.                                      IDataObject* pDataObject) PURE;
  932. };
  933. #endif // _WIN32_IE >= 0x0500
  934. #endif // _WIN32_IE
  935. //==========================================================================
  936. // Clipboard format which may be supported by IDataObject from system
  937. // defined shell folders (such as directories, network, ...).
  938. //==========================================================================
  939. #define CFSTR_SHELLIDLIST                   TEXT("Shell IDList Array")      // CF_IDLIST
  940. #define CFSTR_SHELLIDLISTOFFSET             TEXT("Shell Object Offsets")    // CF_OBJECTPOSITIONS
  941. #define CFSTR_NETRESOURCES                  TEXT("Net Resource")            // CF_NETRESOURCE
  942. #define CFSTR_FILEDESCRIPTORA               TEXT("FileGroupDescriptor")     // CF_FILEGROUPDESCRIPTORA
  943. #define CFSTR_FILEDESCRIPTORW               TEXT("FileGroupDescriptorW")    // CF_FILEGROUPDESCRIPTORW
  944. #define CFSTR_FILECONTENTS                  TEXT("FileContents")            // CF_FILECONTENTS
  945. #define CFSTR_FILENAMEA                     TEXT("FileName")                // CF_FILENAMEA
  946. #define CFSTR_FILENAMEW                     TEXT("FileNameW")               // CF_FILENAMEW
  947. #define CFSTR_PRINTERGROUP                  TEXT("PrinterFriendlyName")     // CF_PRINTERS
  948. #define CFSTR_FILENAMEMAPA                  TEXT("FileNameMap")             // CF_FILENAMEMAPA
  949. #define CFSTR_FILENAMEMAPW                  TEXT("FileNameMapW")            // CF_FILENAMEMAPW
  950. #define CFSTR_SHELLURL                      TEXT("UniformResourceLocator")
  951. #define CFSTR_INETURLA                      CFSTR_SHELLURL
  952. #define CFSTR_INETURLW                      TEXT("UniformResourceLocatorW")
  953. #define CFSTR_PREFERREDDROPEFFECT           TEXT("Preferred DropEffect")
  954. #define CFSTR_PERFORMEDDROPEFFECT           TEXT("Performed DropEffect")
  955. #define CFSTR_PASTESUCCEEDED                TEXT("Paste Succeeded")
  956. #define CFSTR_INDRAGLOOP                    TEXT("InShellDragLoop")
  957. #define CFSTR_DRAGCONTEXT                   TEXT("DragContext")
  958. #define CFSTR_MOUNTEDVOLUME                 TEXT("MountedVolume")
  959. #define CFSTR_PERSISTEDDATAOBJECT           TEXT("PersistedDataObject")
  960. #define CFSTR_TARGETCLSID                           TEXT("TargetCLSID")                         // HGLOBAL with a CLSID of the drop target
  961. #define CFSTR_LOGICALPERFORMEDDROPEFFECT    TEXT("Logical Performed DropEffect")
  962. #define CFSTR_AUTOPLAY_SHELLIDLISTS         TEXT("Autoplay Enumerated IDList Array")  //  (HGLOBAL with LPIDA)
  963. #ifdef UNICODE
  964. #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORW
  965. #define CFSTR_FILENAME          CFSTR_FILENAMEW
  966. #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPW
  967. #define CFSTR_INETURL           CFSTR_INETURLW
  968. #else
  969. #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORA
  970. #define CFSTR_FILENAME          CFSTR_FILENAMEA
  971. #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPA
  972. #define CFSTR_INETURL           CFSTR_INETURLA
  973. #endif
  974. #define DVASPECT_SHORTNAME      2 // use for CF_HDROP to get short name version of file paths
  975. #define DVASPECT_COPY           3 // use to indicate format is a "Copy" of the data (FILECONTENTS, FILEDESCRIPTOR, etc)
  976. #define DVASPECT_LINK           4 // use to indicate format is a "Shortcut" to the data (FILECONTENTS, FILEDESCRIPTOR, etc)
  977. #include <pshpack8.h>
  978. //
  979. // format of CF_NETRESOURCE
  980. //
  981. typedef struct _NRESARRAY {     // anr
  982.     UINT cItems;
  983.     NETRESOURCE nr[1];
  984. } NRESARRAY, * LPNRESARRAY;
  985. #include <poppack.h>        /* Return to byte packing */
  986. //
  987. // format of CF_IDLIST
  988. //
  989. typedef struct _IDA {
  990.     UINT cidl;          // number of relative IDList
  991.     UINT aoffset[1];    // [0]: folder IDList, [1]-[cidl]: item IDList
  992. } CIDA, * LPIDA;
  993. //
  994. // FILEDESCRIPTOR.dwFlags field indicate which fields are to be used
  995. //
  996. typedef enum {
  997.     FD_CLSID            = 0x0001,
  998.     FD_SIZEPOINT        = 0x0002,
  999.     FD_ATTRIBUTES       = 0x0004,
  1000.     FD_CREATETIME       = 0x0008,
  1001.     FD_ACCESSTIME       = 0x0010,
  1002.     FD_WRITESTIME       = 0x0020,
  1003.     FD_FILESIZE         = 0x0040,
  1004.     FD_PROGRESSUI       = 0x4000,       // Show Progress UI w/Drag and Drop
  1005.     FD_LINKUI           = 0x8000,       // 'link' UI is prefered
  1006. } FD_FLAGS;
  1007. typedef struct _FILEDESCRIPTORA { // fod
  1008.     DWORD dwFlags;
  1009.     CLSID clsid;
  1010.     SIZEL sizel;
  1011.     POINTL pointl;
  1012.     DWORD dwFileAttributes;
  1013.     FILETIME ftCreationTime;
  1014.     FILETIME ftLastAccessTime;
  1015.     FILETIME ftLastWriteTime;
  1016.     DWORD nFileSizeHigh;
  1017.     DWORD nFileSizeLow;
  1018.     CHAR   cFileName[ MAX_PATH ];
  1019. } FILEDESCRIPTORA, *LPFILEDESCRIPTORA;
  1020. typedef struct _FILEDESCRIPTORW { // fod
  1021.     DWORD dwFlags;
  1022.     CLSID clsid;
  1023.     SIZEL sizel;
  1024.     POINTL pointl;
  1025.     DWORD dwFileAttributes;
  1026.     FILETIME ftCreationTime;
  1027.     FILETIME ftLastAccessTime;
  1028.     FILETIME ftLastWriteTime;
  1029.     DWORD nFileSizeHigh;
  1030.     DWORD nFileSizeLow;
  1031.     WCHAR  cFileName[ MAX_PATH ];
  1032. } FILEDESCRIPTORW, *LPFILEDESCRIPTORW;
  1033. #ifdef UNICODE
  1034. #define FILEDESCRIPTOR      FILEDESCRIPTORW
  1035. #define LPFILEDESCRIPTOR    LPFILEDESCRIPTORW
  1036. #else
  1037. #define FILEDESCRIPTOR      FILEDESCRIPTORA
  1038. #define LPFILEDESCRIPTOR    LPFILEDESCRIPTORA
  1039. #endif
  1040. //
  1041. // format of CF_FILEGROUPDESCRIPTOR
  1042. //
  1043. typedef struct _FILEGROUPDESCRIPTORA { // fgd
  1044.      UINT cItems;
  1045.      FILEDESCRIPTORA fgd[1];
  1046. } FILEGROUPDESCRIPTORA, * LPFILEGROUPDESCRIPTORA;
  1047. typedef struct _FILEGROUPDESCRIPTORW { // fgd
  1048.      UINT cItems;
  1049.      FILEDESCRIPTORW fgd[1];
  1050. } FILEGROUPDESCRIPTORW, * LPFILEGROUPDESCRIPTORW;
  1051. #ifdef UNICODE
  1052. #define FILEGROUPDESCRIPTOR     FILEGROUPDESCRIPTORW
  1053. #define LPFILEGROUPDESCRIPTOR   LPFILEGROUPDESCRIPTORW
  1054. #else
  1055. #define FILEGROUPDESCRIPTOR     FILEGROUPDESCRIPTORA
  1056. #define LPFILEGROUPDESCRIPTOR   LPFILEGROUPDESCRIPTORA
  1057. #endif
  1058. //
  1059. // format of CF_HDROP and CF_PRINTERS, in the HDROP case the data that follows
  1060. // is a double null terinated list of file names, for printers they are printer
  1061. // friendly names
  1062. //
  1063. typedef struct _DROPFILES {
  1064.    DWORD pFiles;                       // offset of file list
  1065.    POINT pt;                           // drop point (client coords)
  1066.    BOOL fNC;                           // is it on NonClient area
  1067.                                        // and pt is in screen coords
  1068.    BOOL fWide;                         // WIDE character switch
  1069. } DROPFILES, *LPDROPFILES;
  1070. //====== File System Notification APIs ===============================
  1071. //
  1072. //
  1073. //  File System Notification flags
  1074. //
  1075. #define SHCNE_RENAMEITEM          0x00000001L
  1076. #define SHCNE_CREATE              0x00000002L
  1077. #define SHCNE_DELETE              0x00000004L
  1078. #define SHCNE_MKDIR               0x00000008L
  1079. #define SHCNE_RMDIR               0x00000010L
  1080. #define SHCNE_MEDIAINSERTED       0x00000020L
  1081. #define SHCNE_MEDIAREMOVED        0x00000040L
  1082. #define SHCNE_DRIVEREMOVED        0x00000080L
  1083. #define SHCNE_DRIVEADD            0x00000100L
  1084. #define SHCNE_NETSHARE            0x00000200L
  1085. #define SHCNE_NETUNSHARE          0x00000400L
  1086. #define SHCNE_ATTRIBUTES          0x00000800L
  1087. #define SHCNE_UPDATEDIR           0x00001000L
  1088. #define SHCNE_UPDATEITEM          0x00002000L
  1089. #define SHCNE_SERVERDISCONNECT    0x00004000L
  1090. #define SHCNE_UPDATEIMAGE         0x00008000L
  1091. #define SHCNE_DRIVEADDGUI         0x00010000L
  1092. #define SHCNE_RENAMEFOLDER        0x00020000L
  1093. #define SHCNE_FREESPACE           0x00040000L
  1094. #if (_WIN32_IE >= 0x0400)
  1095. // SHCNE_EXTENDED_EVENT: the extended event is identified in dwItem1,
  1096. // packed in LPITEMIDLIST format (same as SHCNF_DWORD packing).
  1097. // Additional information can be passed in the dwItem2 parameter
  1098. // of SHChangeNotify (called "pidl2" below), which if present, must also
  1099. // be in LPITEMIDLIST format.
  1100. //
  1101. // Unlike the standard events, the extended events are ORDINALs, so we
  1102. // don't run out of bits.  Extended events follow the SHCNEE_* naming
  1103. // convention.
  1104. //
  1105. // The dwItem2 parameter varies according to the extended event.
  1106. #define SHCNE_EXTENDED_EVENT      0x04000000L
  1107. #endif      // _WIN32_IE >= 0x0400
  1108. #define SHCNE_ASSOCCHANGED        0x08000000L
  1109. #define SHCNE_DISKEVENTS          0x0002381FL
  1110. #define SHCNE_GLOBALEVENTS        0x0C0581E0L // Events that dont match pidls first
  1111. #define SHCNE_ALLEVENTS           0x7FFFFFFFL
  1112. #define SHCNE_INTERRUPT           0x80000000L // The presence of this flag indicates
  1113.                                             // that the event was generated by an
  1114.                                             // interrupt.  It is stripped out before
  1115.                                             // the clients of SHCNNotify_ see it.
  1116. #if (_WIN32_IE >= 0x0400)
  1117. // SHCNE_EXTENDED_EVENT extended events.  These events are ordinals.
  1118. // This is not a bitfield.
  1119. #define SHCNEE_ORDERCHANGED         2L  // pidl2 is the changed folder
  1120. #define SHCNEE_MSI_CHANGE           4L  // pidl2 is a SHChangeProductKeyAsIDList
  1121. #define SHCNEE_MSI_UNINSTALL        5L  // pidl2 is a SHChangeProductKeyAsIDList
  1122. #endif
  1123. // Flags
  1124. // uFlags & SHCNF_TYPE is an ID which indicates what dwItem1 and dwItem2 mean
  1125. #define SHCNF_IDLIST      0x0000        // LPITEMIDLIST
  1126. #define SHCNF_PATHA       0x0001        // path name
  1127. #define SHCNF_PRINTERA    0x0002        // printer friendly name
  1128. #define SHCNF_DWORD       0x0003        // DWORD
  1129. #define SHCNF_PATHW       0x0005        // path name
  1130. #define SHCNF_PRINTERW    0x0006        // printer friendly name
  1131. #define SHCNF_TYPE        0x00FF
  1132. #define SHCNF_FLUSH       0x1000
  1133. #define SHCNF_FLUSHNOWAIT 0x2000
  1134. #ifdef UNICODE
  1135. #define SHCNF_PATH      SHCNF_PATHW
  1136. #define SHCNF_PRINTER   SHCNF_PRINTERW
  1137. #else
  1138. #define SHCNF_PATH      SHCNF_PATHA
  1139. #define SHCNF_PRINTER   SHCNF_PRINTERA
  1140. #endif
  1141. //
  1142. //  APIs
  1143. //
  1144. SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
  1145. //
  1146. // IShellChangeNotify
  1147. //
  1148. #undef  INTERFACE
  1149. #define INTERFACE  IShellChangeNotify
  1150. DECLARE_INTERFACE_(IShellChangeNotify, IUnknown)
  1151. {
  1152.     // *** IUnknown methods ***
  1153.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  1154.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1155.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1156.     // *** IShellChangeNotify methods ***
  1157.     STDMETHOD(OnChange) (THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE;
  1158. } ;
  1159. //
  1160. // IQueryInfo
  1161. //
  1162. //-------------------------------------------------------------------------
  1163. //
  1164. // IQueryInfo interface
  1165. //
  1166. // [Methods]
  1167. //              ::GetInfoTip()
  1168. //-------------------------------------------------------------------------
  1169. #undef  INTERFACE
  1170. #define INTERFACE  IQueryInfo
  1171. DECLARE_INTERFACE_(IQueryInfo, IUnknown)
  1172. {
  1173.     // *** IUnknown methods ***
  1174.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
  1175.     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
  1176.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  1177.     // *** IQueryInfo methods ***
  1178.     STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR **ppwszTip) PURE;
  1179.     STDMETHOD(GetInfoFlags)(THIS_ DWORD *pdwFlags) PURE;
  1180. } ;
  1181. #define QITIPF_DEFAULT          0x00000000
  1182. #define QITIPF_USENAME          0x00000001
  1183. #define QITIPF_LINKNOTARGET     0x00000002
  1184. #define QITIPF_LINKUSETARGET    0x00000004
  1185. #define QITIPF_USESLOWTIP       0x00000008  // Flag says it's OK to take a long time generating tip
  1186. #define QIF_CACHED           0x00000001
  1187. #define QIF_DONTEXPANDFOLDER 0x00000002
  1188. //
  1189. // SHAddToRecentDocs
  1190. //
  1191. #define SHARD_PIDL      0x00000001L
  1192. #define SHARD_PATHA     0x00000002L
  1193. #define SHARD_PATHW     0x00000003L
  1194. #ifdef UNICODE
  1195. #define SHARD_PATH  SHARD_PATHW
  1196. #else
  1197. #define SHARD_PATH  SHARD_PATHA
  1198. #endif
  1199. SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
  1200. #if (_WIN32_IE >= 0x0400)
  1201. typedef struct _SHChangeProductKeyAsIDList {
  1202.     USHORT cb;
  1203.     WCHAR wszProductKey[39];
  1204.     USHORT cbZero;
  1205. } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
  1206. SHSTDAPI_(void) SHUpdateImageA(LPCSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
  1207. SHSTDAPI_(void) SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
  1208. #ifdef UNICODE
  1209. #define SHUpdateImage  SHUpdateImageW
  1210. #else
  1211. #define SHUpdateImage  SHUpdateImageA
  1212. #endif // !UNICODE
  1213. #endif /* _WIN32_IE */
  1214. SHSTDAPI SHGetInstanceExplorer(IUnknown **ppunk);
  1215. //
  1216. // SHGetDataFromIDListA/W
  1217. //
  1218. // SHGetDataFromIDList nFormat values TCHAR
  1219. #define SHGDFIL_FINDDATA        1
  1220. #define SHGDFIL_NETRESOURCE     2
  1221. #define SHGDFIL_DESCRIPTIONID   3
  1222. #define SHDID_ROOT_REGITEM          1
  1223. #define SHDID_FS_FILE               2
  1224. #define SHDID_FS_DIRECTORY          3
  1225. #define SHDID_FS_OTHER              4
  1226. #define SHDID_COMPUTER_DRIVE35      5
  1227. #define SHDID_COMPUTER_DRIVE525     6
  1228. #define SHDID_COMPUTER_REMOVABLE    7
  1229. #define SHDID_COMPUTER_FIXED        8
  1230. #define SHDID_COMPUTER_NETDRIVE     9
  1231. #define SHDID_COMPUTER_CDROM        10
  1232. #define SHDID_COMPUTER_RAMDISK      11
  1233. #define SHDID_COMPUTER_OTHER        12
  1234. #define SHDID_NET_DOMAIN            13
  1235. #define SHDID_NET_SERVER            14
  1236. #define SHDID_NET_SHARE             15
  1237. #define SHDID_NET_RESTOFNET         16
  1238. #define SHDID_NET_OTHER             17
  1239. #define SHDID_COMPUTER_IMAGING      18
  1240. #define SHDID_COMPUTER_AUDIO        19
  1241. #define SHDID_COMPUTER_SHAREDDOCS   20
  1242. #include <pshpack8.h>
  1243. typedef struct _SHDESCRIPTIONID {
  1244.     DWORD   dwDescriptionId;
  1245.     CLSID   clsid;
  1246. } SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
  1247. #include <poppack.h>        /* Return to byte packing */
  1248. // these delegate to IShellFolder2::GetItemData()
  1249. SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat, void *pv, int cb);
  1250. SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat, void *pv, int cb);
  1251. #ifdef UNICODE
  1252. #define SHGetDataFromIDList  SHGetDataFromIDListW
  1253. #else
  1254. #define SHGetDataFromIDList  SHGetDataFromIDListA
  1255. #endif // !UNICODE
  1256. //===========================================================================
  1257. //
  1258. // PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with
  1259. // IPropertySetStorage/IPropertyStorage
  1260. //
  1261. // The known property ids and their variant types are:
  1262. //      PID_IS_URL          [VT_LPWSTR]   URL
  1263. //      PID_IS_NAME         [VT_LPWSTR]   Name of the internet shortcut
  1264. //      PID_IS_WORKINGDIR   [VT_LPWSTR]   Working directory for the shortcut
  1265. //      PID_IS_HOTKEY       [VT_UI2]      Hotkey for the shortcut
  1266. //      PID_IS_SHOWCMD      [VT_I4]       Show command for shortcut
  1267. //      PID_IS_ICONINDEX    [VT_I4]       Index into file that has icon
  1268. //      PID_IS_ICONFILE     [VT_LPWSTR]   File that has the icon
  1269. //      PID_IS_WHATSNEW     [VT_LPWSTR]   What's New text
  1270. //      PID_IS_AUTHOR       [VT_LPWSTR]   Author
  1271. //      PID_IS_DESCRIPTION  [VT_LPWSTR]   Description text of site
  1272. //      PID_IS_COMMENT      [VT_LPWSTR]   User annotated comment
  1273. //
  1274. #define PID_IS_URL           2
  1275. #define PID_IS_NAME          4
  1276. #define PID_IS_WORKINGDIR    5
  1277. #define PID_IS_HOTKEY        6
  1278. #define PID_IS_SHOWCMD       7
  1279. #define PID_IS_ICONINDEX     8
  1280. #define PID_IS_ICONFILE      9
  1281. #define PID_IS_WHATSNEW      10
  1282. #define PID_IS_AUTHOR        11
  1283. #define PID_IS_DESCRIPTION   12
  1284. #define PID_IS_COMMENT       13
  1285. //
  1286. // PROPIDs for Internet Sites (FMTID_InternetSite) to be used with
  1287. // IPropertySetStorage/IPropertyStorage
  1288. //
  1289. // The known property ids and their variant types are:
  1290. //      PID_INTSITE_WHATSNEW     [VT_LPWSTR]   What's New text
  1291. //      PID_INTSITE_AUTHOR       [VT_LPWSTR]   Author
  1292. //      PID_INTSITE_LASTVISIT    [VT_FILETIME] Time site was last visited
  1293. //      PID_INTSITE_LASTMOD      [VT_FILETIME] Time site was last modified
  1294. //      PID_INTSITE_VISITCOUNT   [VT_UI4]      Number of times user has visited
  1295. //      PID_INTSITE_DESCRIPTION  [VT_LPWSTR]   Description text of site
  1296. //      PID_INTSITE_COMMENT      [VT_LPWSTR]   User annotated comment
  1297. //      PID_INTSITE_RECURSE      [VT_UI4]      Levels to recurse (0-3)
  1298. //      PID_INTSITE_WATCH        [VT_UI4]      PIDISM_ flags
  1299. //      PID_INTSITE_SUBSCRIPTION [VT_UI8]      Subscription cookie
  1300. //      PID_INTSITE_URL          [VT_LPWSTR]   URL
  1301. //      PID_INTSITE_TITLE        [VT_LPWSTR]   Title
  1302. //      PID_INTSITE_CODEPAGE     [VT_UI4]      Codepage of the document
  1303. //      PID_INTSITE_TRACKING     [VT_UI4]      Tracking
  1304. //      PID_INTSITE_ICONINDEX    [VT_I4]       Retrieve the index to the icon
  1305. //      PID_INTSITE_ICONFILE     [VT_LPWSTR]   Retrieve the file containing the icon index.
  1306. #define PID_INTSITE_WHATSNEW      2
  1307. #define PID_INTSITE_AUTHOR        3
  1308. #define PID_INTSITE_LASTVISIT     4
  1309. #define PID_INTSITE_LASTMOD       5
  1310. #define PID_INTSITE_VISITCOUNT    6
  1311. #define PID_INTSITE_DESCRIPTION   7
  1312. #define PID_INTSITE_COMMENT       8
  1313. #define PID_INTSITE_FLAGS         9
  1314. #define PID_INTSITE_CONTENTLEN    10
  1315. #define PID_INTSITE_CONTENTCODE   11
  1316. #define PID_INTSITE_RECURSE       12
  1317. #define PID_INTSITE_WATCH         13
  1318. #define PID_INTSITE_SUBSCRIPTION  14
  1319. #define PID_INTSITE_URL           15
  1320. #define PID_INTSITE_TITLE         16
  1321. #define PID_INTSITE_CODEPAGE      18
  1322. #define PID_INTSITE_TRACKING      19
  1323. #define PID_INTSITE_ICONINDEX     20
  1324. #define PID_INTSITE_ICONFILE      21
  1325. // Flags for PID_IS_FLAGS
  1326. #define PIDISF_RECENTLYCHANGED  0x00000001
  1327. #define PIDISF_CACHEDSTICKY     0x00000002
  1328. #define PIDISF_CACHEIMAGES      0x00000010
  1329. #define PIDISF_FOLLOWALLLINKS   0x00000020
  1330. // Values for PID_INTSITE_WATCH
  1331. #define PIDISM_GLOBAL           0       // Monitor based on global setting
  1332. #define PIDISM_WATCH            1       // User says watch
  1333. #define PIDISM_DONTWATCH        2       // User says don't watch
  1334. ////////////////////////////////////////////////////////////////////
  1335. //
  1336. // The shell keeps track of some per-user state to handle display
  1337. // options that is of major interest to ISVs.
  1338. // The key one requested right now is "DoubleClickInWebView".
  1339. //
  1340. //  SysFiles are these windows special files:
  1341. //      "dll sys vxd 386 drv"
  1342. //
  1343. //  hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute
  1344. //
  1345. //  system files are files with the FILE_ATTRIBUTE_SYSTEM attribute
  1346. //
  1347. //      fShowAllObjects fShowSysFiles   Result
  1348. //      --------------- -------------   ------
  1349. //      0               0               hide hidden + SysFiles + system files
  1350. //      0               1               hide hidden files.
  1351. //      1               0               show all files.
  1352. //      1               1               show all files.
  1353. //
  1354. typedef struct {
  1355.     BOOL fShowAllObjects : 1;
  1356.     BOOL fShowExtensions : 1;
  1357.     BOOL fNoConfirmRecycle : 1;
  1358.     BOOL fShowSysFiles : 1;
  1359.     BOOL fShowCompColor : 1;
  1360.     BOOL fDoubleClickInWebView : 1;
  1361.     BOOL fDesktopHTML : 1;
  1362.     BOOL fWin95Classic : 1;
  1363.     BOOL fDontPrettyPath : 1;
  1364.     BOOL fShowAttribCol : 1;
  1365.     BOOL fMapNetDrvBtn : 1;
  1366.     BOOL fShowInfoTip : 1;
  1367.     BOOL fHideIcons : 1;
  1368.     UINT fRestFlags : 3;
  1369. } SHELLFLAGSTATE, *LPSHELLFLAGSTATE;
  1370. #define SSF_SHOWALLOBJECTS          0x00000001
  1371. #define SSF_SHOWEXTENSIONS          0x00000002
  1372. #define SSF_SHOWCOMPCOLOR           0x00000008
  1373. #define SSF_SHOWSYSFILES            0x00000020
  1374. #define SSF_DOUBLECLICKINWEBVIEW    0x00000080
  1375. #define SSF_SHOWATTRIBCOL           0x00000100
  1376. #define SSF_DESKTOPHTML             0x00000200
  1377. #define SSF_WIN95CLASSIC            0x00000400
  1378. #define SSF_DONTPRETTYPATH          0x00000800
  1379. #define SSF_SHOWINFOTIP             0x00002000
  1380. #define SSF_MAPNETDRVBUTTON         0x00001000
  1381. #define SSF_NOCONFIRMRECYCLE        0x00008000
  1382. #define SSF_HIDEICONS               0x00004000
  1383. // SHGetSettings(LPSHELLFLAGSTATE lpss, DWORD dwMask)
  1384. //
  1385. // Specify the bits you are interested in in dwMask and they will be
  1386. // filled out in the lpss structure.
  1387. //
  1388. // When these settings change, a WM_SETTINGCHANGE message is sent
  1389. // with the string lParam value of "ShellState".
  1390. //
  1391. SHSTDAPI_(void) SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
  1392. // SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast)
  1393. //
  1394. // Given a pidl, you can get an interface pointer (as specified by riid) of the pidl's parent folder (in ppv)
  1395. // If ppidlLast is non-NULL, you can also get the pidl of the last item.
  1396. //
  1397. SHSTDAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast);
  1398. // SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
  1399. //
  1400. //  given a string it will call psfDesktop->ParseDisplayName() to try and create a pidl
  1401. //  if no pbc specified, it uses the preferred options for parsing.
  1402. //  this includes mapping file system paths to their appropriate aliased location (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES))
  1403. //  psfgaoOut is optional for SFGAO attributes
  1404. //
  1405. SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut);
  1406. // SHPathPrepareForWrite(HWND hwnd, IUnknown *punkEnableModless, LPCTSTR pszPath, DWORD dwFlags)
  1407. //
  1408. // DESCRIPTION:
  1409. //     This API will prepare the path for the caller.  This includes:
  1410. // 1. Prompting for the ejectable media to be re-inserted. (Floppy, CD-ROM, ZIP drive, etc.)
  1411. // 2. Prompting for the media to be formatted. (Floppy, hard drive, etc.)
  1412. // 3. Remount mapped drives if the connection was lost. (\uncshare mapped to N: becomes disconnected)
  1413. // 4. If the path doesn't exist, create it.  (SHPPFW_DIRCREATE and SHPPFW_ASKDIRCREATE)
  1414. // 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set)
  1415. //
  1416. // PARAMETERS:
  1417. //      hwnd: Parernt window for UI.  NULL means don't display UI. OPTIONAL
  1418. //      punkEnableModless: Parent that will be set to modal during UI using IOleInPlaceActiveObject::EnableModeless(). OPTIONAL
  1419. //      pszPath: Path to verify is valid for writting.  This can be a UNC or file drive path.  The path
  1420. //               should only contain directories.  Pass SHPPFW_IGNOREFILENAME if the last path segment
  1421. //               is always filename to ignore.
  1422. //      dwFlags: SHPPFW_* Flags to modify behavior
  1423. //
  1424. //-------------------------------------------------------------------------
  1425. #define SHPPFW_NONE             0x00000000
  1426. #define SHPPFW_DEFAULT          SHPPFW_DIRCREATE        // May change
  1427. #define SHPPFW_DIRCREATE        0x00000001              // Create the directory if it doesn't exist without asking the user.
  1428. #define SHPPFW_ASKDIRCREATE     0x00000002              // Create the directory if it doesn't exist after asking the user.
  1429. #define SHPPFW_IGNOREFILENAME   0x00000004              // Ignore the last item in pszPath because it's a file.  Example: pszPath="C:DirADirB", only use "C:DirA".
  1430. #define SHPPFW_NOWRITECHECK     0x00000008              // Caller only needs to read from the drive, so don't check if it's READ ONLY.
  1431. #define SHPPFW_MEDIACHECKONLY   0x00000010              // do the retrys on the media (or net path), return errors if the file can't be found
  1432. SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR pszPath, DWORD dwFlags);
  1433. SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR pszPath, DWORD dwFlags);
  1434. #ifdef UNICODE
  1435. #define SHPathPrepareForWrite  SHPathPrepareForWriteW
  1436. #else
  1437. #define SHPathPrepareForWrite  SHPathPrepareForWriteA
  1438. #endif // !UNICODE
  1439. //--------------------------------------------------------------------------
  1440. //
  1441. // Interface used for exposing the INI file methods on a shortcut file
  1442. //
  1443. //
  1444. //--------------------------------------------------------------------------
  1445. #undef  INTERFACE
  1446. #define INTERFACE  INamedPropertyBag
  1447. DECLARE_INTERFACE_(INamedPropertyBag, IUnknown)
  1448. {
  1449.     // *** IUnknown methods ***
  1450.     STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void **ppv) PURE;
  1451.     STDMETHOD_(ULONG,AddRef)    (THIS) PURE;
  1452.     STDMETHOD_(ULONG,Release)   (THIS) PURE;
  1453.     // *** INamedPropertyBag methods ***
  1454.     STDMETHOD(ReadPropertyNPB) (THIS_  /* [in] */ LPCOLESTR pszBagname,
  1455.                             /* [in] */ LPCOLESTR pszPropName,
  1456.                             /* [out][in] */ PROPVARIANT *pVar) PURE;
  1457.     STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname,
  1458.                            /* [in] */ LPCOLESTR pszPropName,
  1459.                            /* [in] */ PROPVARIANT  *pVar) PURE;
  1460.     STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname,
  1461.                           /* [in] */ LPCOLESTR pszPropName) PURE;
  1462. };
  1463. #ifdef __urlmon_h__
  1464. //    NOTE: urlmon.h must be included before shlobj.h to access this function.
  1465. //
  1466. //    SoftwareUpdateMessageBox
  1467. //
  1468. //    Provides a standard message box for the alerting the user that a software
  1469. //    update is available or installed. No UI will be displayed if there is no
  1470. //    update available or if the available update version is less than or equal
  1471. //    to the Advertised update version.
  1472. //
  1473. //    hWnd                - [in] Handle of owner window
  1474. //    szDistUnit          - [in] Unique identifier string for a code distribution unit. For
  1475. //                               ActiveX controls and Active Setup installed components, this
  1476. //                               is typically a GUID string.
  1477. //    dwFlags             - [in] Must be 0.
  1478. //    psdi                - [in,out] Pointer to SOFTDISTINFO ( see URLMon.h ). May be NULL.
  1479. //                                cbSize should be initialized
  1480. //                                by the caller to sizeof(SOFTDISTINFO), dwReserved should be set to 0.
  1481. //
  1482. //    RETURNS:
  1483. //
  1484. //    IDNO     - The user chose cancel. If *pbRemind is FALSE, the caller should save the
  1485. //               update version from the SOFTDISTINFO and pass it in as the Advertised
  1486. //               version in future calls.
  1487. //
  1488. //    IDYES    - The user has selected Update Now/About Update. The caller should navigate to
  1489. //               the SOFTDISTINFO's pszHREF to initiate the install or learn about it.
  1490. //               The caller should save the update version from the SOFTDISTINFO and pass
  1491. //               it in as the Advertised version in future calls.
  1492. //
  1493. //    IDIGNORE - There is no pending software update. Note: There is
  1494. //               no Ignore button in the standard UI. This occurs if the available
  1495. //               version is less than the installed version or is not present or if the
  1496. //               Advertised version is greater than or equal to the update version.
  1497. //
  1498. //    IDABORT  - An error occured. Call GetSoftwareUpdateInfo() for a more specific HRESULT.
  1499. //               Note: There is no Abort button in the standard UI.
  1500. SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd,
  1501.                                            LPCWSTR szDistUnit,
  1502.                                            DWORD dwFlags,
  1503.                                            LPSOFTDISTINFO psdi );
  1504. #endif // if __urlmon_h__
  1505. #ifdef __cplusplus
  1506. }
  1507. #endif  /* __cplusplus */
  1508. #include <poppack.h>
  1509. SHDOCAPI_(BOOL) ImportPrivacySettings( LPCWSTR szFilename,
  1510.                             IN OUT BOOL* pfParsePrivacyPreferences, IN OUT BOOL* pfParsePerSiteRules);
  1511. #ifndef IEnumPrivacyRecords
  1512. typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
  1513. #endif
  1514. SHDOCAPI DoPrivacyDlg( HWND hwndParent, LPOLESTR pszUrl, IEnumPrivacyRecords *pPrivacyEnum, BOOL fReportAllSites);
  1515. #endif // _SHLOBJ_H_