xref: /reactos/sdk/include/psdk/shobjidl.idl (revision ebaf247c)
1/*
2 * COM interfaces for shell objects
3 *
4 * Copyright (C) 1999 Juergen Schmied
5 * Copyright (C) 2003 Alexandre Julliard
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22import "objidl.idl";
23import "oleidl.idl";
24import "oaidl.idl";
25import "docobj.idl";
26import "shtypes.idl";
27import "servprov.idl";
28import "comcat.idl";
29import "propidl.idl";
30/* FIXME: import "prsht.idl";*/
31import "msxml.idl";
32import "wtypes.idl";
33import "propsys.idl";
34import "objectarray.idl";
35/* FIXME: import "structuredquery.idl"; */
36
37cpp_quote("/* FIXME: #include <sherrors.h> */")
38
39cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
40cpp_quote("#undef PlaySound")
41cpp_quote("#endif")
42
43
44/*****************************************************************************
45 * IPersistFolder interface
46 */
47[
48    object,
49    uuid(000214ea-0000-0000-c000-000000000046),
50    pointer_default(unique)
51]
52interface IPersistFolder : IPersist
53{
54    typedef IPersistFolder *LPPERSISTFOLDER;
55
56    HRESULT Initialize( [in] PCIDLIST_ABSOLUTE pidl );
57}
58
59
60/*****************************************************************************
61 * IPersistFolder2 interface
62 */
63[
64    object,
65    uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f),
66    pointer_default(unique)
67]
68interface IPersistFolder2 : IPersistFolder
69{
70    typedef IPersistFolder2 *LPPERSISTFOLDER2;
71
72    HRESULT GetCurFolder( [out] PIDLIST_ABSOLUTE *ppidl );
73}
74
75
76/*****************************************************************************
77 * IPersistIDList interface
78 */
79[
80    object,
81    uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),
82    pointer_default(unique)
83]
84interface IPersistIDList : IPersist
85{
86    HRESULT SetIDList( [in] PCIDLIST_ABSOLUTE pidl );
87    HRESULT GetIDList( [out] PIDLIST_ABSOLUTE *ppidl );
88}
89
90
91/*****************************************************************************
92 * IEnumIDList interface
93 */
94[
95    object,
96    uuid(000214f2-0000-0000-c000-000000000046),
97    pointer_default(unique)
98]
99interface IEnumIDList : IUnknown
100{
101    typedef IEnumIDList *LPENUMIDLIST;
102
103    HRESULT Next(
104        [in] ULONG celt,
105        [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
106        [out] ULONG *pceltFetched);
107
108    HRESULT Skip( [in] ULONG celt );
109    HRESULT Reset();
110    HRESULT Clone( [out] IEnumIDList **ppenum );
111}
112
113/*****************************************************************************
114 * IShellPropSheetExt interface
115 */
116cpp_quote("#if 0")
117    typedef LPARAM LPFNSVADDPROPSHEETPAGE;
118cpp_quote("#else")
119cpp_quote("#include <prsht.h>")
120cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
121cpp_quote("#endif")
122
123[
124    object,
125    uuid(000214E9-0000-0000-C000-000000000046),
126    pointer_default(unique),
127    local
128]
129interface IShellPropSheetExt : IUnknown
130{
131    enum tagSHELLPROPSHEETEXTPAGEID {
132        EXPPS_FILETYPES = 0x1
133    };
134
135    typedef UINT EXPPS;
136
137    HRESULT AddPages(
138        [in] LPFNSVADDPROPSHEETPAGE pfnAddPage,
139        [in] LPARAM lParam);
140    HRESULT ReplacePage(
141        [in] EXPPS uPageID,
142        [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith,
143        [in] LPARAM lParam);
144}
145typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
146
147/*****************************************************************************
148 * IShellFolder interface
149 */
150[
151    object,
152    uuid(000214e6-0000-0000-c000-000000000046),
153    pointer_default(unique)
154]
155interface IShellFolder : IUnknown
156{
157    typedef IShellFolder * LPSHELLFOLDER;
158
159    typedef enum tagSHGDN
160    {
161        SHGDN_NORMAL = 0,
162        SHGDN_INFOLDER = 1,
163        SHGDN_FOREDITING = 0x1000,
164        SHGDN_INCLUDE_NONFILESYS = 0x2000,
165        SHGDN_FORADDRESSBAR = 0x4000,
166        SHGDN_FORPARSING = 0x8000
167    } SHGNO;
168
169    typedef DWORD SHGDNF;
170
171    enum tagSHCONTF
172    {
173        SHCONTF_FOLDERS = 32,
174        SHCONTF_NONFOLDERS = 64,
175        SHCONTF_INCLUDEHIDDEN = 128,
176        SHCONTF_INIT_ON_FIRST_NEXT = 256,
177        SHCONTF_NETPRINTERSRCH = 512,
178        SHCONTF_SHAREABLE = 1024,
179        SHCONTF_STORAGE = 2048,
180        SHCONTF_NAVIGATION_ENUM = 0x01000,
181        SHCONTF_FASTITEMS = 0x02000,
182        SHCONTF_FLATLIST = 0x04000,
183        SHCONTF_ENABLE_ASYNC = 0x08000,
184        SHCONTF_INCLUDESUPERHIDDEN = 0x10000
185    };
186
187    typedef DWORD SHCONTF;
188
189    cpp_quote("#define SFGAO_CANCOPY           DROPEFFECT_COPY")
190    cpp_quote("#define SFGAO_CANMOVE           DROPEFFECT_MOVE")
191    cpp_quote("#define SFGAO_CANLINK           DROPEFFECT_LINK")
192    cpp_quote("#define SFGAO_STORAGE           0x00000008L")
193    cpp_quote("#define SFGAO_CANRENAME         0x00000010L")
194    cpp_quote("#define SFGAO_CANDELETE         0x00000020L")
195    cpp_quote("#define SFGAO_HASPROPSHEET      0x00000040L")
196    cpp_quote("#define SFGAO_DROPTARGET        0x00000100L")
197    cpp_quote("#define SFGAO_CAPABILITYMASK    0x00000177L")
198    cpp_quote("#define SFGAO_ENCRYPTED         0x00002000L")
199    cpp_quote("#define SFGAO_ISSLOW            0x00004000L")
200    cpp_quote("#define SFGAO_GHOSTED           0x00008000L")
201    cpp_quote("#define SFGAO_LINK              0x00010000L")
202    cpp_quote("#define SFGAO_SHARE             0x00020000L")
203    cpp_quote("#define SFGAO_READONLY          0x00040000L")
204    cpp_quote("#define SFGAO_HIDDEN            0x00080000L")
205    cpp_quote("#define SFGAO_DISPLAYATTRMASK   0x000FC000L")
206    cpp_quote("#define SFGAO_FILESYSANCESTOR   0x10000000L")
207    cpp_quote("#define SFGAO_FOLDER            0x20000000L")
208    cpp_quote("#define SFGAO_FILESYSTEM        0x40000000L")
209    cpp_quote("#define SFGAO_HASSUBFOLDER      0x80000000L")
210    cpp_quote("#define SFGAO_CONTENTSMASK      0x80000000L")
211    cpp_quote("#define SFGAO_VALIDATE          0x01000000L")
212    cpp_quote("#define SFGAO_REMOVABLE         0x02000000L")
213    cpp_quote("#define SFGAO_COMPRESSED        0x04000000L")
214    cpp_quote("#define SFGAO_BROWSABLE         0x08000000L")
215    cpp_quote("#define SFGAO_NONENUMERATED     0x00100000L")
216    cpp_quote("#define SFGAO_NEWCONTENT        0x00200000L")
217    cpp_quote("#define SFGAO_STREAM            0x00400000L")
218    cpp_quote("#define SFGAO_STORAGEANCESTOR   0x00800000L")
219
220    typedef ULONG SFGAOF;
221
222    HRESULT ParseDisplayName(
223        [in] HWND hwndOwner,
224        [in] LPBC pbcReserved,
225        [in, string] LPOLESTR lpszDisplayName,
226        [out] ULONG *pchEaten,
227        [out] PIDLIST_RELATIVE *ppidl,
228        [in, out, unique] ULONG *pdwAttributes);
229
230    HRESULT EnumObjects(
231        [in] HWND hwndOwner,
232        [in] SHCONTF grfFlags,
233        [out] IEnumIDList **ppenumIDList);
234
235    HRESULT BindToObject(
236        [in] PCUIDLIST_RELATIVE pidl,
237        [in] LPBC pbcReserved,
238        [in] REFIID riid,
239        [out, iid_is(riid)] void **ppvOut);
240
241    HRESULT BindToStorage(
242        [in] PCUIDLIST_RELATIVE pidl,
243        [in] LPBC pbcReserved,
244        [in] REFIID riid,
245        [out, iid_is(riid)] void **ppvObj);
246
247    HRESULT CompareIDs(
248        [in] LPARAM lParam,
249        [in] PCUIDLIST_RELATIVE pidl1,
250        [in] PCUIDLIST_RELATIVE pidl2);
251
252    HRESULT CreateViewObject(
253        [in] HWND hwndOwner,
254        [in] REFIID riid,
255        [out, iid_is(riid)] void **ppvOut);
256
257    HRESULT GetAttributesOf(
258        [in] UINT cidl,
259        [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
260        [in, out] SFGAOF *rgfInOut);
261
262    HRESULT GetUIObjectOf(
263        [in] HWND hwndOwner,
264        [in] UINT cidl,
265        [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
266        [in] REFIID riid,
267        [in, out, unique] UINT *prgfInOut,
268        [out, iid_is(riid)] void **ppvOut);
269
270    HRESULT GetDisplayNameOf(
271        [in] PCUITEMID_CHILD pidl,
272        [in] SHGDNF uFlags,
273        [out] STRRET *lpName);
274
275    HRESULT SetNameOf(
276        [in] HWND hwnd,
277        [in] PCUITEMID_CHILD pidl,
278        [in, string] LPCOLESTR lpszName,
279        [in] SHGDNF uFlags,
280        [out] PITEMID_CHILD *ppidlOut);
281}
282
283
284/*****************************************************************************
285 * IEnumExtraSearch interface
286 */
287[
288    object,
289    uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13),
290    pointer_default(unique)
291]
292interface IEnumExtraSearch : IUnknown
293{
294    typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
295
296    typedef struct
297    {
298        GUID guidSearch;
299        WCHAR wszFriendlyName[80];
300        /*
301         *WCHAR wszMenuText[80];
302         *WCHAR wszHelpText[MAX_PATH];
303         */
304        WCHAR wszUrl[2084];
305        /*
306         *WCHAR wszIcon[MAX_PATH+10];
307         *WCHAR wszGreyIcon[MAX_PATH+10];
308         *WCHAR wszClrIcon[MAX_PATH+10];
309         */
310    } EXTRASEARCH, *LPEXTRASEARCH;
311
312    HRESULT Next(
313        [in] ULONG celt,
314        [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
315        [out] ULONG *pceltFetched);
316
317    HRESULT Skip( [in] ULONG celt );
318    HRESULT Reset();
319    HRESULT Clone( [out] IEnumExtraSearch **ppenum );
320}
321
322
323/*****************************************************************************
324 * IShellFolder2 interface
325 */
326[
327    object,
328    uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1),
329    pointer_default(unique)
330]
331interface IShellFolder2 : IShellFolder
332{
333    typedef struct
334    {
335        GUID    fmtid;
336        DWORD   pid;
337    } SHCOLUMNID, *LPSHCOLUMNID;
338    typedef const SHCOLUMNID *LPCSHCOLUMNID;
339
340    HRESULT GetDefaultSearchGUID( [out] GUID *lpguid );
341    HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum );
342    HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay );
343    HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags );
344    HRESULT GetDetailsEx( [in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
345    HRESULT GetDetailsOf( [in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd);
346    HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid );
347}
348
349/*****************************************************************************
350 * IShellItem interface
351 */
352[
353    object,
354    uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),
355    pointer_default(unique)
356]
357interface IShellItem : IUnknown
358{
359    typedef [v1_enum] enum {
360        SIGDN_NORMALDISPLAY                = 0,
361        SIGDN_PARENTRELATIVEPARSING        = 0x80018001,
362        SIGDN_DESKTOPABSOLUTEPARSING       = 0x80028000,
363        SIGDN_PARENTRELATIVEEDITING        = 0x80031001,
364        SIGDN_DESKTOPABSOLUTEEDITING       = 0x8004c000,
365        SIGDN_FILESYSPATH                  = 0x80058000,
366        SIGDN_URL                          = 0x80068000,
367        SIGDN_PARENTRELATIVEFORADDRESSBAR  = 0x8007c001,
368        SIGDN_PARENTRELATIVE               = 0x80080001
369    } SIGDN; /* & 0xFFFF => SHGDN */
370
371    [v1_enum] enum _SICHINTF
372    {
373        SICHINT_DISPLAY                       = 0x00000000,
374        SICHINT_CANONICAL                     = 0x10000000,
375        SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
376        SICHINT_ALLFIELDS                     = 0x80000000
377    };
378    typedef DWORD SICHINTF;
379
380    HRESULT BindToHandler(
381        [in] IBindCtx *pbc,
382        [in] REFGUID rbhid,
383        [in] REFIID riid,
384        [out, iid_is(riid)] void **ppvOut);
385
386    HRESULT GetParent( [out] IShellItem **ppsi );
387
388    HRESULT GetDisplayName(
389        [in] SIGDN sigdnName,
390        [out] LPWSTR *ppszName);
391
392    HRESULT GetAttributes(
393        [in] SFGAOF sfgaoMask,
394        [out] SFGAOF *psfgaoAttribs);
395
396    HRESULT Compare(
397        [in] IShellItem *psi,
398        [in] SICHINTF hint,
399        [out] int *piOrder);
400}
401
402/*****************************************************************************
403 * IShellItem2 interface
404 */
405[
406    object,
407    uuid(7E9FB0D3-919F-4307-AB2E-9B1860310C93),
408    pointer_default(unique)
409]
410interface IShellItem2 : IShellItem
411{
412    HRESULT GetPropertyStore(
413        [in] GETPROPERTYSTOREFLAGS flags,
414        [in] REFIID riid,
415        [out, iid_is(riid)] void **ppv);
416
417    HRESULT GetPropertyStoreWithCreateObject(
418        [in] GETPROPERTYSTOREFLAGS flags,
419        [in] IUnknown *punkCreateObject,
420        [in] REFIID riid,
421        [out, iid_is(riid)] void **ppv);
422
423    HRESULT GetPropertyStoreForKeys(
424        [in, size_is(cKeys)] const PROPERTYKEY *rgKeys,
425        [in] UINT cKeys,
426        [in] GETPROPERTYSTOREFLAGS flags,
427        [in] REFIID riid,
428        [out, iid_is(riid)] void **ppv);
429
430    HRESULT GetPropertyDescriptionList(
431        [in] REFPROPERTYKEY keyType,
432        [in] REFIID riid,
433        [out, iid_is(riid)] void **ppv);
434
435    HRESULT Update(
436        [in, unique] IBindCtx *pbc);
437
438    HRESULT GetProperty(
439        [in] REFPROPERTYKEY key,
440        [out] PROPVARIANT *ppropvar);
441
442    HRESULT GetCLSID(
443        [in] REFPROPERTYKEY key,
444        [out] CLSID *pclsid);
445
446    HRESULT GetFileTime (
447        [in] REFPROPERTYKEY key,
448        [out] FILETIME *pft);
449
450    HRESULT GetInt32(
451        [in] REFPROPERTYKEY key,
452        [out] int *pi);
453
454    HRESULT GetString(
455        [in] REFPROPERTYKEY key,
456        [out, string] LPWSTR *ppsz);
457
458    HRESULT GetUInt32(
459        [in] REFPROPERTYKEY key,
460        [out] ULONG *pui);
461
462    HRESULT GetUInt64(
463        [in] REFPROPERTYKEY key,
464        [out] ULONGLONG *pull);
465
466    HRESULT GetBool(
467        [in] REFPROPERTYKEY key,
468        [out] BOOL *pf);
469}
470
471typedef enum tagNWMF {
472    NWMF_UNLOADING        = 0x0001,
473    NWMF_USERINITED       = 0x0002,
474    NWMF_FIRST            = 0x0004,
475    NWMF_OVERRIDEKEY      = 0x0008,
476    NWMF_SHOWHELP         = 0x0010,
477    NWMF_HTMLDIALOG       = 0x0020,
478    NWMF_FROMDIALOGCHILD  = 0x0040,
479    NWMF_USERREQUESTED    = 0x0080,
480    NWMF_USERALLOWED      = 0x0100
481} NWMF;
482
483[
484    uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb),
485    object,
486    pointer_default(unique)
487]
488interface INewWindowManager : IUnknown
489{
490    HRESULT EvaluateNewWindow(
491        [in, string] LPCWSTR pszUrl,
492        [in, string] LPCWSTR pszName,
493        [in, string] LPCWSTR pszUrlContext,
494        [in, string] LPCWSTR pszFeatures,
495        [in]         BOOL fReplace,
496        [in]         DWORD dwFlags,
497        [in]         DWORD dwUserActionTime);
498}
499
500cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager")
501
502/*****************************************************************************
503 * IEnumShellItems interface
504 */
505[
506 object,
507 uuid(70629033-E363-4A28-A567-0DB78006E6D7),
508 pointer_default(unique)
509]
510interface IEnumShellItems : IUnknown
511{
512    [local] HRESULT Next(
513        [in] ULONG celt,
514        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
515        [out] ULONG *pceltFetched);
516
517    [call_as(Next)] HRESULT RemoteNext(
518        [in] ULONG celt,
519        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
520        [out] ULONG *pceltFetched);
521
522    HRESULT Skip(
523        [in] ULONG celt);
524
525    HRESULT Reset();
526
527    HRESULT Clone(
528        [out] IEnumShellItems **ppenum);
529}
530
531/*****************************************************************************
532 * IShellItemArray interface
533 */
534[
535 object,
536 uuid(B63EA76D-1F85-456F-A19C-48159EFA858B),
537 pointer_default(unique)
538]
539interface IShellItemArray : IUnknown
540{
541    typedef [v1_enum] enum SIATTRIBFLAGS {
542        SIATTRIBFLAGS_AND            = 0x0001,
543        SIATTRIBFLAGS_OR             = 0x0002,
544        SIATTRIBFLAGS_APPCOMPAT      = 0x0003,
545        SIATTRIBFLAGS_MASK           = 0x0003,
546        SIATTRIBFLAGS_ALLITEMS       = 0x4000
547    } SIATTRIBFLAGS;
548    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)")
549
550    HRESULT BindToHandler(
551        [in, unique] IBindCtx *pbc,
552        [in] REFGUID bhid,
553        [in] REFIID riid,
554        [out, iid_is(riid)] void **ppvOut);
555
556    HRESULT GetPropertyStore(
557        [in] GETPROPERTYSTOREFLAGS flags,
558        [in] REFIID riid,
559        [out, iid_is(riid)] void **ppv);
560
561    HRESULT GetPropertyDescriptionList(
562        [in] REFPROPERTYKEY keyType,
563        [in] REFIID riid,
564        [out, iid_is(riid)] void **ppv);
565
566    HRESULT GetAttributes(
567        [in] SIATTRIBFLAGS AttribFlags,
568        [in] SFGAOF sfgaoMask,
569        [out] SFGAOF *psfgaoAttribs);
570
571    HRESULT GetCount(
572        [out] DWORD *pdwNumItems);
573
574    HRESULT GetItemAt(
575        [in] DWORD dwIndex,
576        [out] IShellItem **ppsi);
577
578    HRESULT EnumItems(
579        [out] IEnumShellItems **ppenumShellItems);
580
581}
582
583typedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS
584{
585    DOGIF_DEFAULT       = 0x0,
586    DOGIF_TRAVERSE_LINK = 0x1,
587    DOGIF_NO_HDROP      = 0x2,
588    DOGIF_NO_URL        = 0x4,
589    DOGIF_ONLY_IF_ONE   = 0x8
590} DATAOBJ_GET_ITEM_FLAGS;
591cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)")
592
593cpp_quote("HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);")
594cpp_quote("HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);")
595cpp_quote("HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);")
596cpp_quote("HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv);")
597cpp_quote("HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);")
598cpp_quote("HRESULT WINAPI SHGetItemFromObject(IUnknown *punk, REFIID riid, void **ppv);")
599cpp_quote("HRESULT WINAPI SHCreateShellItemArray(PCIDLIST_ABSOLUTE pidlParent, IShellFolder* psf, UINT cidl, PCUITEMID_CHILD_ARRAY ppidl, IShellItemArray **ppsiItemArray);")
600cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromShellItem(IShellItem *psi, REFIID riid, void **ppv);")
601cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromIDLists(UINT cidl, PCIDLIST_ABSOLUTE_ARRAY pidl_array, IShellItemArray **psia);")
602cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromDataObject(IDataObject *pdo, REFIID riid, void **ppv);")
603
604/*****************************************************************************
605 * IShellItemFilter interface
606 */
607[
608 object,
609 uuid(2659B475-EEB8-48B7-8F07-B378810F48CF),
610 pointer_default(unique)
611]
612interface IShellItemFilter : IUnknown
613{
614    HRESULT IncludeItem(
615        [in] IShellItem *psi);
616
617    HRESULT GetEnumFlagsForItem(
618        [in] IShellItem *psi,
619        [out] SHCONTF *pgrfFlags);
620}
621
622/*****************************************************************************
623 * FOLDERSETTINGS
624 */
625typedef char *LPVIEWSETTINGS;
626
627typedef enum
628{
629    FWF_AUTOARRANGE         = 0x00000001,
630    FWF_ABBREVIATEDNAMES    = 0x00000002,
631    FWF_SNAPTOGRID          = 0x00000004,
632    FWF_OWNERDATA           = 0x00000008,
633    FWF_BESTFITWINDOW       = 0x00000010,
634    FWF_DESKTOP             = 0x00000020,
635    FWF_SINGLESEL           = 0x00000040,
636    FWF_NOSUBFOLDERS        = 0x00000080,
637    FWF_TRANSPARENT         = 0x00000100,
638    FWF_NOCLIENTEDGE        = 0x00000200,
639    FWF_NOSCROLL            = 0x00000400,
640    FWF_ALIGNLEFT           = 0x00000800,
641    FWF_NOICONS             = 0x00001000,
642    FWF_SHOWSELALWAYS       = 0x00002000,
643    FWF_NOVISIBLE           = 0x00004000,
644    FWF_SINGLECLICKACTIVATE = 0x00008000,
645    FWF_NOWEBVIEW           = 0x00010000,
646    FWF_HIDEFILENAMES       = 0x00020000,
647    FWF_CHECKSELECT         = 0x00040000,
648    FWF_NOENUMREFRESH       = 0x00080000,
649    FWF_NOGROUPING          = 0x00100000,
650    FWF_FULLROWSELECT       = 0x00200000,
651    FWF_NOFILTERS           = 0x00400000,
652    FWF_NOCOLUMNHEADER      = 0x00800000,
653    FWF_NOHEADERINALLVIEWS  = 0x01000000,
654    FWF_EXTENDEDTILES       = 0x02000000,
655    FWF_TRICHECKSELECT      = 0x04000000,
656    FWF_AUTOCHECKSELECT     = 0x08000000,
657    FWF_NOBROWSERVIEWSTATE  = 0x10000000,
658    FWF_SUBSETGROUPS        = 0x20000000,
659    FWF_USESEARCHFOLDER     = 0x40000000,
660    FWF_ALLOWRTLREADING     = 0x80000000
661} FOLDERFLAGS;
662
663typedef enum
664{
665    FVM_AUTO       =-1,
666    FVM_ICON       = 1,
667    FVM_FIRST      = FVM_ICON,
668    FVM_SMALLICON  = 2,
669    FVM_LIST       = 3,
670    FVM_DETAILS    = 4,
671    FVM_THUMBNAIL  = 5,
672    FVM_TILE       = 6,
673    FVM_THUMBSTRIP = 7,
674    FVM_CONTENT    = 8,
675    FVM_LAST       = FVM_CONTENT
676} FOLDERVIEWMODE;
677
678typedef struct
679{
680    UINT ViewMode;
681    UINT fFlags;
682} FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;
683typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
684
685/*****************************************************************************
686 * IShellIcon interface
687 */
688[
689    uuid(000214e5-0000-0000-c000-000000000046),
690    object,
691    pointer_default(unique)
692]
693interface IShellIcon : IUnknown
694{
695    HRESULT GetIconOf(
696        [in] PCUITEMID_CHILD pidl,
697        [in] UINT flags,
698        [out] int *pIconIndex);
699}
700
701/*****************************************************************************
702 * IShellView interface
703 */
704interface IShellBrowser;  /* forward declaration */
705[
706    object,
707    uuid(000214e3-0000-0000-c000-000000000046),
708    pointer_default(unique)
709]
710interface IShellView : IOleWindow
711{
712    typedef IShellView *LPSHELLVIEW;
713
714    cpp_quote("#define SVSI_DESELECT       0x00000000")
715    cpp_quote("#define SVSI_SELECT         0x00000001")
716    cpp_quote("#define SVSI_EDIT           0x00000003")
717    cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
718    cpp_quote("#define SVSI_ENSUREVISIBLE  0x00000008")
719    cpp_quote("#define SVSI_FOCUSED        0x00000010")
720    cpp_quote("#define SVSI_TRANSLATEPT    0x00000020")
721    cpp_quote("#define SVSI_SELECTIONMARK  0x00000040")
722    cpp_quote("#define SVSI_POSITIONITEM   0x00000080")
723    cpp_quote("#define SVSI_CHECK          0x00000100")
724    cpp_quote("#define SVSI_NOSTATECHANGE  0x80000000")
725
726    typedef UINT SVSIF;
727
728    typedef enum
729    {
730        SVGIO_BACKGROUND     = 0x00000000,
731        SVGIO_SELECTION      = 0x00000001,
732        SVGIO_ALLVIEW        = 0x00000002,
733        SVGIO_CHECKED        = 0x00000003,
734        SVGIO_TYPE_MASK      = 0x0000000f,
735        SVGIO_FLAG_VIEWORDER = 0x80000000,
736    } SVGIO;
737
738    typedef enum
739    {
740        SVUIA_DEACTIVATE       = 0,
741        SVUIA_ACTIVATE_NOFOCUS = 1,
742        SVUIA_ACTIVATE_FOCUS   = 2,
743        SVUIA_INPLACEACTIVATE  = 3
744    } SVUIA_STATUS;
745
746    HRESULT TranslateAccelerator( [in] MSG *pmsg );
747    HRESULT EnableModeless( [in] BOOL fEnable );
748    HRESULT UIActivate( [in] UINT uState );
749    HRESULT Refresh();
750    HRESULT CreateViewWindow(
751        [in] IShellView *psvPrevious,
752        [in] LPCFOLDERSETTINGS lpfs,
753        [in] IShellBrowser *psb,
754        [out] RECT *prcView,
755        [out] HWND *phWnd);
756
757    HRESULT DestroyViewWindow();
758    HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs );
759
760    [local] HRESULT AddPropertySheetPages(
761        [in] DWORD dwReserved,
762        [in] LPFNSVADDPROPSHEETPAGE pfn,
763        [in] LPARAM lparam);
764
765    HRESULT SaveViewState();
766    HRESULT SelectItem(
767        [in] LPCITEMIDLIST pidlItem,
768        [in] SVSIF uFlags);
769    HRESULT GetItemObject(
770        [in] UINT uItem,
771        [in] REFIID riid,
772        [out, iid_is(riid)] void **ppv);
773}
774
775[
776    object,
777    uuid(88e39e80-3578-11cf-ae69-08002b2e1262),
778    pointer_default(unique)
779]
780interface IShellView2 : IShellView
781{
782    typedef GUID SHELLVIEWID;
783cpp_quote("#include <pshpack8.h>")
784    typedef struct _SV2CVW2_PARAMS
785    {
786        DWORD cbSize;
787        IShellView *psvPrev;
788        LPCFOLDERSETTINGS pfs;
789        IShellBrowser *psbOwner;
790        RECT *prcView;
791        SHELLVIEWID const *pvid;
792        HWND hwndView;
793    } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
794cpp_quote("#include <poppack.h>")
795
796    HRESULT GetView(
797        [in, out] SHELLVIEWID *view_guid,
798        [in] ULONG view_type
799    );
800    HRESULT CreateViewWindow2(
801        [in] LPSV2CVW2_PARAMS view_params
802    );
803    HRESULT HandleRename(
804        [in] LPCITEMIDLIST new_pidl
805    );
806    HRESULT SelectAndPositionItem(
807        [in] LPCITEMIDLIST item,
808        [in] UINT flags,
809        [in] POINT *point
810    );
811}
812
813[
814    object,
815    uuid(ec39fa88-f8af-41c5-8421-38bed28f4673),
816    pointer_default(unique)
817]
818interface IShellView3 : IShellView2
819{
820    [v1_enum] enum _SV3CVW3_FLAGS
821    {
822        SV3CVW3_DEFAULT          = 0x00000000,
823        SV3CVW3_NONINTERACTIVE   = 0x00000001,
824        SV3CVW3_FORCEVIEWMODE    = 0x00000002,
825        SV3CVW3_FORCEFOLDERFLAGS = 0x00000004
826    };
827
828    typedef DWORD SV3CVW3_FLAGS;
829
830    HRESULT CreateViewWindow3(
831        [in] IShellBrowser *owner,
832        [in, unique] IShellView *prev_view,
833        [in] SV3CVW3_FLAGS view_flags,
834        [in] FOLDERFLAGS mask,
835        [in] FOLDERFLAGS flags,
836        [in] FOLDERVIEWMODE mode,
837        [in, unique] const SHELLVIEWID *view_id,
838        [in] const RECT *rect,
839        [out] HWND *hwnd);
840}
841
842/*****************************************************************************
843 * IFolderView interface
844 */
845[
846    uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
847    object,
848    pointer_default(unique)
849]
850interface IFolderView : IUnknown
851{
852    HRESULT GetCurrentViewMode( [out] UINT *mode );
853    HRESULT SetCurrentViewMode( [in] UINT mode );
854    HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );
855    HRESULT Item(
856        [in] int index,
857        [out] PITEMID_CHILD *ppidl
858    );
859    HRESULT ItemCount(
860        [in] UINT flags,
861        [out] int *items
862    );
863    HRESULT Items(
864        [in] UINT flags,
865        [in] REFIID riid,
866        [out, iid_is(riid)] void **ppv
867    );
868    HRESULT GetSelectionMarkedItem( [out] int *item );
869    HRESULT GetFocusedItem( [out] int *item );
870    HRESULT GetItemPosition(
871        [in] PCUITEMID_CHILD pidl,
872        [out] POINT* ppt
873    );
874    HRESULT GetSpacing( [in, out, unique] POINT* pt );
875    HRESULT GetDefaultSpacing( [out] POINT* pt );
876    HRESULT GetAutoArrange();
877    HRESULT SelectItem(
878        [in] int item,
879        [in] DWORD flags
880    );
881    HRESULT SelectAndPositionItems(
882        [in] UINT cidl,
883        [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
884        [in, unique, size_is(cidl)] POINT* apt,
885        [in] DWORD flags
886    );
887}
888
889[v1_enum] enum tagSORTDIRECTION
890{
891    SORT_DESCENDING = -1,
892    SORT_ASCENDING = 1
893};
894typedef int SORTDIRECTION;
895
896typedef struct SORTCOLUMN
897{
898    PROPERTYKEY propkey;
899    SORTDIRECTION direction;
900} SORTCOLUMN;
901
902typedef [v1_enum] enum FVTEXTTYPE
903{
904    FVST_EMPTYTEXT = 0
905} FVTEXTTYPE;
906
907[
908    uuid(1af3a467-214f-4298-908e-06b03e0b39f9),
909    object,
910    pointer_default(unique)
911]
912interface IFolderView2 : IFolderView
913{
914    HRESULT SetGroupBy(
915        [in] REFPROPERTYKEY key,
916        [in] BOOL ascending);
917
918    [local]
919    HRESULT GetGroupBy(
920        [out] PROPERTYKEY *pkey,
921        [out] BOOL *ascending);
922
923    [call_as(GetGroupBy)]
924    HRESULT RemoteGetGroupBy(
925        [out] PROPERTYKEY *pkey,
926        [out] BOOL *ascending);
927
928    HRESULT SetViewProperty(
929        [in] PCUITEMID_CHILD pidl,
930        [in] REFPROPERTYKEY propkey,
931        [in] REFPROPVARIANT propvar);
932
933    HRESULT GetViewProperty(
934        [in] PCUITEMID_CHILD pidl,
935        [in] REFPROPERTYKEY propkey,
936        [out] PROPVARIANT *propvar);
937
938    HRESULT SetTileViewProperties(
939        [in] PCUITEMID_CHILD pidl,
940        [in, string] LPCWSTR prop_list);
941
942    HRESULT SetExtendedTileViewProperties(
943        [in] PCUITEMID_CHILD pidl,
944        [in, string] LPCWSTR prop_list);
945
946    HRESULT SetText(
947        [in] FVTEXTTYPE type,
948        [in] LPCWSTR text);
949
950    HRESULT SetCurrentFolderFlags(
951        [in] DWORD mask,
952        [in] DWORD flags);
953
954    HRESULT GetCurrentFolderFlags([out] DWORD *flags);
955
956    HRESULT GetSortColumnCount([out] int *columns);
957
958    HRESULT SetSortColumns(
959        [in, size_is(count)] const SORTCOLUMN *columns,
960        [in] int count);
961
962    HRESULT GetSortColumns(
963        [out, size_is(count)] SORTCOLUMN *columns,
964        [in] int count);
965
966    HRESULT GetItem(
967        [in] int ittem,
968        [in] REFIID riid,
969        [out, iid_is(riid)] void **ppv);
970
971    HRESULT GetVisibleItem(
972        [in] int start,
973        [in] BOOL previous,
974        [out] int *item);
975
976    HRESULT GetSelectedItem(
977        [in] int start,
978        [out] int *item);
979
980    HRESULT GetSelection(
981        [in] BOOL none_implies_folder,
982        [out] IShellItemArray **array);
983
984    HRESULT GetSelectionState(
985        [in] PCUITEMID_CHILD pidl,
986        [out] DWORD *flags);
987
988    HRESULT InvokeVerbOnSelection([in, unique, string] LPCSTR verb);
989
990    HRESULT SetViewModeAndIconSize(
991        [in] FOLDERVIEWMODE mode,
992        [in] int size);
993
994    HRESULT GetViewModeAndIconSize(
995        [out] FOLDERVIEWMODE *mode,
996        [out] int *size);
997
998    HRESULT SetGroupSubsetCount([in] UINT visible_rows);
999
1000    HRESULT GetGroupSubsetCount([out] UINT *visible_rows);
1001
1002    HRESULT SetRedraw([in] BOOL redraw);
1003
1004    HRESULT IsMoveInSameFolder();
1005
1006    HRESULT DoRename();
1007}
1008
1009/*****************************************************************************
1010 * IShellBrowser interface
1011 */
1012[
1013    object,
1014    uuid(000214e2-0000-0000-c000-000000000046),
1015    pointer_default(unique)
1016]
1017interface IShellBrowser : IOleWindow
1018{
1019    typedef IShellBrowser *LPSHELLBROWSER;
1020
1021cpp_quote("#define SBSP_DEFBROWSER            0x00000000")
1022cpp_quote("#define SBSP_SAMEBROWSER           0x00000001")
1023cpp_quote("#define SBSP_NEWBROWSER            0x00000002")
1024cpp_quote("#define SBSP_DEFMODE               0x00000000")
1025cpp_quote("#define SBSP_OPENMODE              0x00000010")
1026cpp_quote("#define SBSP_EXPLOREMODE           0x00000020")
1027cpp_quote("#define SBSP_HELPMODE              0x00000040")
1028cpp_quote("#define SBSP_NOTRANSFERHIST        0x00000080")
1029cpp_quote("#define SBSP_ABSOLUTE              0x00000000")
1030cpp_quote("#define SBSP_RELATIVE              0x00001000")
1031cpp_quote("#define SBSP_PARENT                0x00002000")
1032cpp_quote("#define SBSP_NAVIGATEBACK          0x00004000")
1033cpp_quote("#define SBSP_NAVIGATEFORWARD       0x00008000")
1034cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE    0x00010000")
1035cpp_quote("#define SBSP_KEEPSAMETEMPLATE      0x00020000")
1036cpp_quote("#define SBSP_KEEPWORDWHEELTEXT     0x00040000")
1037cpp_quote("#define SBSP_ACTIVATE_NOFOCUS      0x00080000")
1038cpp_quote("#define SBSP_CREATENOHISTORY       0x00100000")
1039cpp_quote("#define SBSP_PLAYNOSOUND           0x00200000")
1040cpp_quote("#define SBSP_CALLERUNTURUSTED      0x00800000")
1041cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD    0x01000000")
1042cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD  0x02000000")
1043cpp_quote("#define SBSP_NOAUTOSELECT          0x04000000")
1044cpp_quote("#define SBSP_WRITENOHISTORY        0x08000000")
1045cpp_quote("#define SBSP_TRUSTEDFORACTIVEX     0x10000000")
1046cpp_quote("#define SBSP_FEEDNAVIGATION        0x20000000")
1047cpp_quote("#define SBSP_REDIRECT              0x40000000")
1048cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000")
1049
1050cpp_quote("#define FCW_STATUS      0x0001")
1051cpp_quote("#define FCW_TOOLBAR     0x0002")
1052cpp_quote("#define FCW_TREE        0x0003")
1053cpp_quote("#define FCW_INTERNETBAR 0x0006")
1054cpp_quote("#define FCW_PROGRESS    0x0008")
1055
1056cpp_quote("#define FCT_MERGE       0x0001")
1057cpp_quote("#define FCT_CONFIGABLE  0x0002")
1058cpp_quote("#define FCT_ADDTOEND    0x0004")
1059
1060cpp_quote("#if 0")
1061    typedef LPARAM LPTBBUTTONSB;
1062cpp_quote("#else")
1063cpp_quote("#include <commctrl.h>")
1064cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
1065cpp_quote("#endif")
1066
1067    HRESULT InsertMenusSB(
1068        [in] HMENU hmenuShared,
1069        [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
1070
1071    HRESULT SetMenuSB(
1072        [in] HMENU hmenuShared,
1073        [in] HOLEMENU holemenuReserved,
1074        [in] HWND hwndActiveObject);
1075
1076    HRESULT RemoveMenusSB( [in] HMENU hmenuShared );
1077    HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText );
1078    HRESULT EnableModelessSB( [in] BOOL fEnable );
1079    HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID );
1080
1081    HRESULT BrowseObject(
1082        [in] LPCITEMIDLIST pidl,
1083        [in] UINT wFlags);
1084
1085    HRESULT GetViewStateStream(
1086        [in] DWORD grfMode,
1087        [out] IStream **ppStrm);
1088
1089    HRESULT GetControlWindow(
1090        [in] UINT id,
1091        [out] HWND *phwnd);
1092
1093    [local] HRESULT SendControlMsg(
1094        [in] UINT id,
1095        [in] UINT uMsg,
1096        [in] WPARAM wParam,
1097        [in] LPARAM lParam,
1098        [in] LRESULT *pret);
1099
1100    HRESULT QueryActiveShellView( [out] IShellView **ppshv );
1101    HRESULT OnViewWindowActive( [in] IShellView *pshv );
1102
1103    [local]
1104    HRESULT SetToolbarItems(
1105        [in] LPTBBUTTONSB lpButtons,
1106        [in] UINT nButtons,
1107        [in] UINT uFlags);
1108}
1109
1110
1111/*****************************************************************************
1112 * IShellLinkA interface
1113 */
1114[
1115    object,
1116    uuid(000214ee-0000-0000-c000-000000000046),
1117    pointer_default(unique)
1118]
1119interface IShellLinkA : IUnknown
1120{
1121    typedef enum
1122    {
1123        SLR_NO_UI               = 0x0001,
1124        SLR_ANY_MATCH           = 0x0002,
1125        SLR_UPDATE              = 0x0004,
1126        SLR_NOUPDATE            = 0x0008,
1127        SLR_NOSEARCH            = 0x0010,
1128        SLR_NOTRACK             = 0x0020,
1129        SLR_NOLINKINFO          = 0x0040,
1130        SLR_INVOKE_MSI          = 0x0080,
1131        SLR_NO_UI_WITH_MSG_PUMP = 0x0101,
1132    } SLR_FLAGS;
1133
1134    typedef enum
1135    {
1136        SLGP_SHORTPATH   = 0x0001,
1137        SLGP_UNCPRIORITY = 0x0002,
1138        SLGP_RAWPATH     = 0x0004,
1139    } SLGP_FLAGS;
1140
1141    HRESULT GetPath(
1142        [out, size_is(cch)] LPSTR pszFile,
1143        [in] int cch,
1144        [in, out, unique] WIN32_FIND_DATAA *pfd,
1145        [in] DWORD fFlags);
1146
1147    HRESULT GetIDList( [out] PIDLIST_ABSOLUTE * ppidl );
1148
1149    HRESULT SetIDList( [in] PCIDLIST_ABSOLUTE pidl );
1150
1151    HRESULT GetDescription(
1152        [out, size_is(cch)] LPSTR pszName,
1153        [in] int cch);
1154
1155    HRESULT SetDescription( [in] LPCSTR pszName );
1156
1157    HRESULT GetWorkingDirectory(
1158        [out, size_is(cch)] LPSTR pszDir,
1159        [in] int cch);
1160
1161    HRESULT SetWorkingDirectory( [in] LPCSTR pszDir );
1162
1163    HRESULT GetArguments(
1164        [out, size_is(cch)] LPSTR pszArgs,
1165        [in] int cch);
1166
1167    HRESULT SetArguments( [in] LPCSTR pszArgs );
1168
1169    HRESULT GetHotkey( [out] WORD *pwHotkey );
1170
1171    HRESULT SetHotkey( [in] WORD wHotkey );
1172
1173    HRESULT GetShowCmd( [out] int *piShowCmd );
1174
1175    HRESULT SetShowCmd( [in] int iShowCmd );
1176
1177    HRESULT GetIconLocation(
1178        [out, size_is(cch)] LPSTR pszIconPath,
1179        [in] int cch,
1180        [out] int *piIcon);
1181
1182    HRESULT SetIconLocation(
1183        [in] LPCSTR pszIconPath,
1184        [in] int iIcon);
1185
1186    HRESULT SetRelativePath(
1187        [in] LPCSTR pszPathRel,
1188        [in] DWORD dwReserved);
1189
1190    HRESULT Resolve(
1191        [in] HWND hwnd,
1192        [in] DWORD fFlags);
1193
1194    HRESULT SetPath( [in] LPCSTR pszFile );
1195}
1196
1197
1198/*****************************************************************************
1199 * IShellLinkW interface
1200 */
1201[
1202    object,
1203    uuid(000214f9-0000-0000-c000-000000000046),
1204    pointer_default(unique)
1205]
1206interface IShellLinkW : IUnknown
1207{
1208    HRESULT GetPath(
1209        [out, size_is(cch)] LPWSTR pszFile,
1210        [in] int cch,
1211        [in, out] WIN32_FIND_DATAW *pfd,
1212        [in] DWORD fFlags);
1213
1214    HRESULT GetIDList( [out] PIDLIST_ABSOLUTE * ppidl );
1215
1216    HRESULT SetIDList( [in] PCIDLIST_ABSOLUTE pidl );
1217
1218    HRESULT GetDescription(
1219        [out, size_is(cch)] LPWSTR pszName,
1220        [in] int cch);
1221
1222    HRESULT SetDescription( [in] LPCWSTR pszName );
1223
1224    HRESULT GetWorkingDirectory(
1225        [out, size_is(cch)] LPWSTR pszDir,
1226        [in] int cch);
1227
1228    HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir );
1229
1230    HRESULT GetArguments(
1231        [out, size_is(cch)] LPWSTR pszArgs,
1232        [in] int cch);
1233
1234    HRESULT SetArguments( [in] LPCWSTR pszArgs );
1235
1236    HRESULT GetHotkey( [out] WORD *pwHotkey );
1237
1238    HRESULT SetHotkey( [in] WORD wHotkey );
1239
1240    HRESULT GetShowCmd( [out] int *piShowCmd );
1241
1242    HRESULT SetShowCmd( [in] int iShowCmd );
1243
1244    HRESULT GetIconLocation(
1245        [out, size_is(cch)] LPWSTR pszIconPath,
1246        [in] int cch,
1247        [out] int *piIcon);
1248
1249    HRESULT SetIconLocation(
1250        [in] LPCWSTR pszIconPath,
1251        [in] int iIcon);
1252
1253    HRESULT SetRelativePath(
1254        [in] LPCWSTR pszPathRel,
1255        [in] DWORD dwReserved);
1256
1257    HRESULT Resolve(
1258        [in] HWND hwnd,
1259        [in] DWORD fFlags);
1260
1261    HRESULT SetPath( [in] LPCWSTR pszFile );
1262}
1263
1264cpp_quote("#define IShellLink WINELIB_NAME_AW(IShellLink)")
1265
1266
1267/*****************************************************************************
1268 * IShellExtInit interface
1269 */
1270[
1271    object,
1272    uuid(000214e8-0000-0000-c000-000000000046),
1273    pointer_default(unique),
1274    local
1275]
1276interface IShellExtInit : IUnknown
1277{
1278    typedef IShellExtInit *LPSHELLEXTINIT;
1279
1280    HRESULT Initialize(
1281        [in] PCIDLIST_ABSOLUTE pidlFolder,
1282        [in] IDataObject *pdtobj,
1283        [in] HKEY hkeyProgID);
1284}
1285
1286
1287/*******************************************************************************/
1288/* Note: the following interfaces are not in shobjidl.idl under Windows, they  */
1289/* are declared directly in shlobj.h. It hopefully won't break anything to put */
1290/* them here anyway.                                                           */
1291/*******************************************************************************/
1292
1293#ifndef MAX_PATH
1294#define MAX_PATH 260
1295#endif
1296
1297
1298/*****************************************************************************
1299 * IPersistFolder3 interface
1300 */
1301[
1302    object,
1303    uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),
1304    pointer_default(unique)
1305]
1306interface IPersistFolder3 : IPersistFolder2
1307{
1308    typedef struct
1309    {
1310        LPITEMIDLIST	pidlTargetFolder;
1311	WCHAR		szTargetParsingName[MAX_PATH];
1312	WCHAR		szNetworkProvider[MAX_PATH];
1313	DWORD		dwAttributes;
1314	int		csidl;
1315    } PERSIST_FOLDER_TARGET_INFO;
1316
1317    HRESULT InitializeEx(
1318        [in] IBindCtx *pbc,
1319        [in] LPCITEMIDLIST pidlRoot,
1320        [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);
1321
1322    HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );
1323}
1324
1325
1326/*****************************************************************************
1327 * IExtractIconA interface
1328 */
1329[
1330    object,
1331    uuid(000214eb-0000-0000-c000-000000000046),
1332    pointer_default(unique),
1333    local
1334]
1335interface IExtractIconA : IUnknown
1336{
1337cpp_quote("#define GIL_OPENICON     0x0001")
1338cpp_quote("#define GIL_FORSHELL     0x0002")
1339cpp_quote("#define GIL_ASYNC        0x0020")
1340cpp_quote("#define GIL_DEFAULTICON  0x0040")
1341cpp_quote("#define GIL_FORSHORTCUT  0x0080")
1342
1343cpp_quote("#define GIL_SIMULATEDOC  0x0001")
1344cpp_quote("#define GIL_PERINSTANCE  0x0002")
1345cpp_quote("#define GIL_PERCLASS     0x0004")
1346cpp_quote("#define GIL_NOTFILENAME  0x0008")
1347cpp_quote("#define GIL_DONTCACHE    0x0010")
1348
1349    typedef IExtractIconA *LPEXTRACTICONA;
1350
1351    HRESULT GetIconLocation(
1352        [in] UINT uFlags,
1353        [out, size_is(cchMax)] LPSTR szIconFile,
1354        [in] UINT cchMax,
1355        [out] INT *piIndex,
1356        [out] UINT *pwFlags);
1357
1358    HRESULT Extract(
1359        [in] LPCSTR pszFile,
1360        [in] UINT nIconIndex,
1361        [out] HICON *phiconLarge,
1362        [out] HICON *phiconSmall,
1363        [in] UINT nIconSize );
1364}
1365
1366
1367/*****************************************************************************
1368 * IExtractIconW interface
1369 */
1370[
1371    object,
1372    uuid(000214fa-0000-0000-c000-000000000046),
1373    pointer_default(unique),
1374    local
1375]
1376interface IExtractIconW : IUnknown
1377{
1378    typedef IExtractIconW *LPEXTRACTICONW;
1379
1380    HRESULT GetIconLocation(
1381        [in] UINT uFlags,
1382        [out, size_is(cchMax)] LPWSTR szIconFile,
1383        [in] UINT cchMax,
1384        [out] INT *piIndex,
1385        [out] UINT *pwFlags);
1386
1387    HRESULT Extract(
1388        [in] LPCWSTR pszFile,
1389        [in] UINT nIconIndex,
1390        [out] HICON *phiconLarge,
1391        [out] HICON *phiconSmall,
1392        [in] UINT nIconSize );
1393}
1394
1395cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)")
1396cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)")
1397
1398
1399/*****************************************************************************
1400 * ICommDlgBrowser interface
1401 */
1402[
1403    object,
1404    uuid(000214f1-0000-0000-c000-000000000046),
1405    pointer_default(unique)
1406]
1407interface ICommDlgBrowser : IUnknown
1408{
1409cpp_quote("#define CDBOSC_SETFOCUS     0x00000000")
1410cpp_quote("#define CDBOSC_KILLFOCUS    0x00000001")
1411cpp_quote("#define CDBOSC_SELCHANGE    0x00000002")
1412cpp_quote("#define CDBOSC_RENAME       0x00000003")
1413cpp_quote("#define CDBOSC_STATECHANGE  0x00000004")
1414
1415    typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
1416
1417    HRESULT OnDefaultCommand( [in] IShellView *shv );
1418    HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );
1419    HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );
1420}
1421
1422
1423/*****************************************************************************
1424 * ICommDlgBrowser2 interface
1425 */
1426[
1427 object,
1428 uuid(10339516-2894-11D2-9039-00C04F8EEB3E),
1429 pointer_default(unique)
1430]
1431interface ICommDlgBrowser2 : ICommDlgBrowser
1432{
1433
1434    HRESULT Notify(
1435        [in] IShellView *ppshv,
1436        [in] DWORD dwNotifyType);
1437
1438    HRESULT GetDefaultMenuText(
1439        [in] IShellView *ppshv,
1440        [out, string, size_is(cchMax)] LPWSTR pszText,
1441        [in] int cchMax);
1442
1443    HRESULT GetViewFlags(
1444        [out] DWORD *pdwFlags);
1445}
1446
1447
1448/*****************************************************************************
1449 * ICommDlgBrowser3 interface
1450 */
1451[
1452 object,
1453 uuid(C8AD25A1-3294-41EE-8165-71174BD01C57),
1454 pointer_default(unique)
1455]
1456interface ICommDlgBrowser3 : ICommDlgBrowser2
1457{
1458
1459    HRESULT OnColumnClicked(
1460        [in] IShellView *ppshv,
1461        [in] int iColumn);
1462
1463    HRESULT GetCurrentFilter(
1464        [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec,
1465        [in] int cchFileSpec);
1466
1467    HRESULT OnPreviewCreated(
1468        [in] IShellView *ppshv);
1469}
1470
1471/*****************************************************************************
1472 * IDockingWindow interface
1473 */
1474[
1475    object,
1476    uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8)
1477]
1478interface IDockingWindow : IOleWindow
1479{
1480    HRESULT ShowDW(
1481        [in] BOOL fShow);
1482
1483    HRESULT CloseDW(
1484        [in] DWORD dwReserved);
1485
1486    HRESULT ResizeBorderDW(
1487        [in] LPCRECT prcBorder,
1488        [in] IUnknown *punkToolbarSite,
1489        [in] BOOL fReserved);
1490};
1491
1492
1493/*****************************************************************************
1494 * IDockingWindowFrame interface
1495 */
1496[
1497    object,
1498    uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),
1499    pointer_default(unique),
1500    local
1501]
1502interface IDockingWindowFrame : IOleWindow
1503{
1504cpp_quote("#define DWFRF_NORMAL           0x0000")
1505cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001")
1506cpp_quote("#define DWFAF_HIDDEN           0x0001")
1507
1508    HRESULT AddToolbar(
1509        [in] IUnknown *punkSrc,
1510        [in] LPCWSTR pwszItem,
1511        [in] DWORD dwAddFlags);
1512
1513    HRESULT RemoveToolbar(
1514        [in] IUnknown *punkSrc,
1515        [in] DWORD dwRemoveFlags);
1516
1517    HRESULT FindToolbar(
1518        [in] LPCWSTR pwszItem,
1519        [in] REFIID riid,
1520        [out] LPVOID *ppvObj);
1521}
1522
1523
1524/*****************************************************************************
1525 * IDragSourceHelper interface
1526 */
1527[
1528    object,
1529    uuid(de5bf786-477a-11d2-839d-00c04fd918d0),
1530    pointer_default(unique),
1531    local
1532]
1533interface IDragSourceHelper : IUnknown
1534{
1535    typedef struct
1536    {
1537        SIZE     sizeDragImage;
1538        POINT    ptOffset;
1539        HBITMAP  hbmpDragImage;
1540        COLORREF crColorKey;
1541    } SHDRAGIMAGE, *LPSHDRAGIMAGE;
1542
1543  HRESULT InitializeFromBitmap(
1544      [in] LPSHDRAGIMAGE pshdi,
1545      [in] IDataObject *pDataObject);
1546
1547  HRESULT InitializeFromWindow(
1548      [in] HWND hwnd,
1549      [in] POINT *ppt,
1550      [in] IDataObject *pDataObject);
1551}
1552
1553
1554/*****************************************************************************
1555 * IDropTargetHelper interface
1556 */
1557[
1558    object,
1559    uuid(4657278b-411b-11d2-839a-00c04fd918d0),
1560    pointer_default(unique),
1561    local
1562]
1563interface IDropTargetHelper : IUnknown
1564{
1565    HRESULT DragEnter(
1566        [in] HWND hwndTarget,
1567        [in] IDataObject *pDataObject,
1568        [in] POINT *ppt,
1569        [in] DWORD dwEffect);
1570
1571    HRESULT DragLeave();
1572
1573    HRESULT DragOver(
1574        [in] POINT *ppt,
1575        [in] DWORD dwEffect);
1576
1577    HRESULT Drop(
1578        [in] IDataObject *pDataObject,
1579        [in] POINT *ppt,
1580        [in] DWORD dwEffect);
1581
1582    HRESULT Show( [in] BOOL fShow );
1583}
1584
1585
1586/*****************************************************************************
1587 * IContextMenu interface
1588 */
1589[
1590    object,
1591    uuid(000214e4-0000-0000-c000-000000000046),
1592    pointer_default(unique),
1593    local
1594]
1595interface IContextMenu : IUnknown
1596{
1597cpp_quote("#define CMF_NORMAL        0x00000000")
1598cpp_quote("#define CMF_DEFAULTONLY   0x00000001")
1599cpp_quote("#define CMF_VERBSONLY     0x00000002")
1600cpp_quote("#define CMF_EXPLORE       0x00000004")
1601cpp_quote("#define CMF_NOVERBS       0x00000008")
1602cpp_quote("#define CMF_CANRENAME     0x00000010")
1603cpp_quote("#define CMF_NODEFAULT     0x00000020")
1604cpp_quote("#define CMF_INCLUDESTATIC 0x00000040")
1605cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100")
1606cpp_quote("#define CMF_RESERVED      0xffff0000")
1607
1608cpp_quote("#define GCS_VERBA         0x00000000")
1609cpp_quote("#define GCS_HELPTEXTA     0x00000001")
1610cpp_quote("#define GCS_VALIDATEA     0x00000002")
1611cpp_quote("#define GCS_VERBW         0x00000004")
1612cpp_quote("#define GCS_HELPTEXTW     0x00000005")
1613cpp_quote("#define GCS_VALIDATEW     0x00000006")
1614cpp_quote("#define GCS_UNICODE       0x00000004")
1615cpp_quote("#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)")
1616cpp_quote("#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)")
1617cpp_quote("#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)")
1618
1619cpp_quote("#define CMDSTR_NEWFOLDERA   \"NewFolder\"")
1620cpp_quote("#define CMDSTR_VIEWLISTA    \"ViewList\"")
1621cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"")
1622cpp_quote("#if defined(__GNUC__)")
1623cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }")
1624cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }")
1625cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }")
1626cpp_quote("#elif defined(_MSC_VER)")
1627cpp_quote("# define CMDSTR_NEWFOLDERW   L\"NewFolder\"")
1628cpp_quote("# define CMDSTR_VIEWLISTW    L\"ViewList\"")
1629cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"")
1630cpp_quote("#else")
1631cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};")
1632cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};")
1633cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};")
1634cpp_quote("#endif")
1635cpp_quote("#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)")
1636cpp_quote("#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)")
1637cpp_quote("#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)")
1638
1639cpp_quote("#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY")
1640cpp_quote("#define CMIC_MASK_ICON           SEE_MASK_ICON")
1641cpp_quote("#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI")
1642cpp_quote("#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE")
1643cpp_quote("#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE")
1644cpp_quote("#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME")
1645cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM")
1646cpp_quote("#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE")
1647cpp_quote("#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK")
1648cpp_quote("#define CMIC_MASK_NOASYNC        SEE_MASK_NOASYNC")
1649cpp_quote("#define CMIC_MASK_SHIFT_DOWN     0x10000000")
1650cpp_quote("#define CMIC_MASK_PTINVOKE       0x20000000")
1651cpp_quote("#define CMIC_MASK_CONTROL_DOWN   0x40000000")
1652cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE")
1653cpp_quote("#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS")
1654
1655    typedef IContextMenu *LPCONTEXTMENU;
1656
1657    typedef struct tagCMINVOKECOMMANDINFO
1658    {
1659        DWORD cbSize;
1660        DWORD fMask;
1661        HWND hwnd;
1662        LPCSTR lpVerb;
1663        LPCSTR lpParameters;
1664        LPCSTR lpDirectory;
1665        INT nShow;
1666        DWORD dwHotKey;
1667        HANDLE hIcon;
1668    } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
1669
1670    typedef struct tagCMInvokeCommandInfoEx
1671    {
1672        DWORD cbSize;
1673        DWORD fMask;
1674        HWND hwnd;
1675        LPCSTR lpVerb;
1676        LPCSTR lpParameters;
1677        LPCSTR lpDirectory;
1678        INT nShow;
1679        DWORD dwHotKey;
1680        HANDLE hIcon;
1681        LPCSTR lpTitle;
1682        LPCWSTR lpVerbW;
1683        LPCWSTR lpParametersW;
1684        LPCWSTR lpDirectoryW;
1685        LPCWSTR lpTitleW;
1686        POINT ptInvoke;
1687    } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
1688
1689    HRESULT QueryContextMenu(
1690        [in] HMENU hmenu,
1691        [in] UINT indexMenu,
1692        [in] UINT idCmdFirst,
1693        [in] UINT idCmdLast,
1694        [in] UINT uFlags);
1695
1696    HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );
1697
1698    HRESULT GetCommandString(
1699        [in] UINT_PTR idCmd,
1700        [in] UINT uType,
1701        [out] UINT *pwReserved,
1702        [out, size_is(cchMax)] LPSTR pszName,
1703        [in] UINT cchMax);
1704}
1705
1706
1707/*****************************************************************************
1708 * IContextMenu2 interface
1709 */
1710[
1711    object,
1712    uuid(000214f4-0000-0000-c000-000000000046),
1713    pointer_default(unique),
1714    local
1715]
1716interface IContextMenu2 : IContextMenu
1717{
1718    typedef IContextMenu2 *LPCONTEXTMENU2;
1719
1720    HRESULT HandleMenuMsg(
1721        [in] UINT uMsg,
1722        [in] WPARAM wParam,
1723        [in] LPARAM lParam);
1724}
1725
1726
1727/*****************************************************************************
1728 * IContextMenu3 interface
1729 */
1730[
1731    object,
1732    uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),
1733    pointer_default(unique),
1734    local
1735]
1736interface IContextMenu3 : IContextMenu2
1737{
1738    typedef IContextMenu3 *LPCONTEXTMENU3;
1739
1740    HRESULT HandleMenuMsg2(
1741        [in] UINT uMsg,
1742        [in] WPARAM wParam,
1743        [in] LPARAM lParam,
1744        [out] LRESULT *plResult);
1745}
1746
1747/*****************************************************************************
1748 * IContextMenuCB interface
1749 */
1750
1751[
1752    object,
1753    uuid(3409e930-5a39-11d1-83fa-00a0c90dc849),
1754    pointer_default(unique),
1755    local
1756]
1757interface IContextMenuCB : IUnknown
1758{
1759    HRESULT CallBack(
1760        [in] IShellFolder *psf,
1761        [in] HWND hwndOwner,
1762        [in] IDataObject *pdtobj,
1763        [in] UINT uMsg,
1764        [in] WPARAM wParam,
1765        [in] LPARAM lParam);
1766}
1767
1768/*****************************************************************************
1769 * IShellExecuteHookA interface
1770 */
1771[
1772    object,
1773    uuid(000214f5-0000-0000-c000-000000000046),
1774    pointer_default(unique),
1775    local
1776]
1777interface IShellExecuteHookA : IUnknown
1778{
1779    cpp_quote("struct _SHELLEXECUTEINFOA;")
1780    HRESULT Execute(
1781        [in, out] struct _SHELLEXECUTEINFOA* pei);
1782}
1783
1784
1785/*****************************************************************************
1786 * IShellExecuteHookW interface
1787 */
1788[
1789    object,
1790    uuid(000214fb-0000-0000-c000-000000000046),
1791    pointer_default(unique),
1792    local
1793]
1794interface IShellExecuteHookW : IUnknown
1795{
1796    cpp_quote("struct _SHELLEXECUTEINFOW;")
1797    HRESULT Execute(
1798		[in, out] struct _SHELLEXECUTEINFOW* pei);
1799}
1800
1801/*****************************************************************************
1802 * IShellLinkDataList interface
1803 */
1804[
1805    object,
1806    uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1),
1807    pointer_default(unique)
1808]
1809interface IShellLinkDataList : IUnknown
1810{
1811    [local] HRESULT AddDataBlock(
1812                [in] void *pDataBlock);
1813    [local] HRESULT CopyDataBlock(
1814                [in] DWORD dwSig,
1815                [out] void **ppDataBlock);
1816    HRESULT RemoveDataBlock(
1817                [in] DWORD dwSig);
1818    HRESULT GetFlags(
1819                [out] DWORD *pdwFlags);
1820    HRESULT SetFlags(
1821                [in] DWORD dwFlags);
1822}
1823
1824
1825/*****************************************************************************
1826 * IResolveShellLink interface
1827 */
1828[
1829    object,
1830    uuid(5cd52983-9449-11d2-963a-00c04f79adf0),
1831    pointer_default(unique)
1832]
1833interface IResolveShellLink : IUnknown
1834{
1835    HRESULT ResolveShellLink(
1836                [in] IUnknown *punk,
1837                [in] HWND hwnd,
1838                [in] DWORD fFlags);
1839}
1840
1841
1842/*****************************************************************************
1843 * IURLSearchHook interface
1844 */
1845[
1846    object,
1847    uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),
1848    pointer_default(unique),
1849    local
1850]
1851interface IURLSearchHook : IUnknown
1852{
1853    HRESULT Translate(
1854                [in, out] LPWSTR lpwszSearchURL,
1855                [in] DWORD cchBufferSize);
1856}
1857
1858
1859/*****************************************************************************
1860 * ISearchContext interface
1861 */
1862[
1863    object,
1864    uuid(09f656a2-41af-480c-88f7-16cc0d164615),
1865    pointer_default(unique),
1866    local
1867]
1868interface ISearchContext : IUnknown
1869{
1870    HRESULT GetSearchUrl(
1871                [in] BSTR *pbstrSearchUrl);
1872    HRESULT GetSearchText(
1873                [in] BSTR *pbstrSearchText);
1874    HRESULT GetSearchStyle(
1875                [in] BSTR *pdwSearchStyle);
1876}
1877
1878
1879/*****************************************************************************
1880 * IURLSearchHook2 interface
1881 */
1882[
1883    object,
1884    uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),
1885    pointer_default(unique),
1886    local
1887]
1888interface IURLSearchHook2 : IURLSearchHook
1889{
1890    HRESULT TranslateWithSearchContext(
1891                [in, out] LPWSTR lpwszSearchURL,
1892                [in] DWORD cchBufferSize,
1893                [in] ISearchContext *pSearchContext);
1894}
1895
1896
1897cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)")
1898
1899/*****************************************************************************
1900 * INewShortcutHookA interface
1901 */
1902[
1903    object,
1904    uuid(000214e1-0000-0000-c000-000000000046),
1905    pointer_default(unique),
1906    local
1907]
1908interface INewShortcutHookA : IUnknown
1909{
1910    HRESULT SetReferent(
1911                [in] LPCSTR pcszReferent,
1912                [in] HWND hwnd);
1913    HRESULT GetReferent(
1914                [out] LPSTR pcszReferent,
1915                [in] int cchReferent);
1916    HRESULT SetFolder(
1917                [in] LPCSTR pcszReferent);
1918    HRESULT GetFolder(
1919                [out] LPSTR pcszReferent,
1920                [in] int cchFolder);
1921    HRESULT GetName(
1922                [out] LPSTR pszName,
1923                [in] int cchName);
1924    HRESULT GetExtension(
1925                [out] LPSTR pszExtension,
1926                [in] int cchExtension);
1927}
1928
1929
1930/*****************************************************************************
1931 * INewShortcutHookW interface
1932 */
1933[
1934    object,
1935    uuid(000214f7-0000-0000-c000-000000000046),
1936    pointer_default(unique),
1937    local
1938]
1939interface INewShortcutHookW : IUnknown
1940{
1941    HRESULT SetReferent(
1942                [in] LPCWSTR pcszReferent,
1943                [in] HWND hwnd);
1944    HRESULT GetReferent(
1945                [out] LPWSTR pcszReferent,
1946                [in] int cchReferent);
1947    HRESULT SetFolder(
1948                [in] LPCWSTR pcszReferent);
1949    HRESULT GetFolder(
1950                [out] LPWSTR pcszReferent,
1951                [in] int cchFolder);
1952    HRESULT GetName(
1953                [out] LPWSTR pszName,
1954                [in] int cchName);
1955    HRESULT GetExtension(
1956                [out] LPWSTR pszExtension,
1957                [in] int cchExtension);
1958}
1959
1960/*****************************************************************************
1961 * IRunnableTask interface
1962 */
1963[
1964    object,
1965    uuid(85788d00-6807-11d0-b810-00c04fd706ec),
1966    pointer_default(unique),
1967    local
1968]
1969interface IRunnableTask : IUnknown
1970{
1971    HRESULT Run();
1972    HRESULT Kill([in] BOOL fWait);
1973    HRESULT Suspend();
1974    HRESULT Resume();
1975    ULONG IsRunning();
1976}
1977
1978/*****************************************************************************
1979 * IShellChangeNotify interface
1980 */
1981[
1982    object,
1983    uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2),
1984    pointer_default(unique),
1985    local
1986]
1987interface IShellChangeNotify : IUnknown
1988{
1989    HRESULT OnChange(
1990                [in] LONG lEvent,
1991                [in] LPCITEMIDLIST pidl1,
1992                [in] LPCITEMIDLIST pidl2);
1993}
1994
1995cpp_quote("#define STR_FILE_SYS_BIND_DATA  L\"File System Bind Data\"")
1996
1997/*****************************************************************************
1998 * IFileSystemBindData interface
1999 */
2000[
2001    object,
2002    uuid(01e18d10-4d8b-11d2-855d-006008059367),
2003    pointer_default(unique),
2004    local
2005]
2006interface IFileSystemBindData : IUnknown
2007{
2008    HRESULT SetFindData(
2009                [in] const WIN32_FIND_DATAW *pfd);
2010    HRESULT GetFindData(
2011                [out] WIN32_FIND_DATAW *pfd);
2012}
2013
2014/*****************************************************************************
2015 *    ITaskbarList interface
2016 */
2017[
2018    object,
2019    uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
2020    pointer_default(unique)
2021]
2022interface ITaskbarList : IUnknown
2023{
2024    HRESULT HrInit();
2025
2026    HRESULT AddTab(
2027        [in] HWND hwnd);
2028
2029    HRESULT DeleteTab(
2030        [in] HWND hwnd);
2031
2032    HRESULT ActivateTab(
2033        [in] HWND hwnd);
2034
2035    HRESULT SetActiveAlt(
2036        [in] HWND hwnd);
2037}
2038
2039/*****************************************************************************
2040 *    ITaskbarList2 interface
2041 */
2042[
2043    object,
2044    uuid(602D4995-B13A-429B-A66E-1935E44F4317),
2045    pointer_default(unique)
2046]
2047interface ITaskbarList2 : ITaskbarList
2048{
2049    HRESULT MarkFullscreenWindow(
2050        [in] HWND hwnd,
2051        [in] BOOL fullscreen);
2052}
2053
2054cpp_quote("#ifdef MIDL_PASS")
2055typedef IUnknown* HIMAGELIST;
2056cpp_quote("#endif")
2057
2058typedef [v1_enum] enum THUMBBUTTONFLAGS {
2059    THBF_ENABLED         = 0x0000,
2060    THBF_DISABLED        = 0x0001,
2061    THBF_DISMISSONCLICK  = 0x0002,
2062    THBF_NOBACKGROUND    = 0x0004,
2063    THBF_HIDDEN          = 0x0008,
2064    THBF_NONINTERACTIVE  = 0x0010
2065} THUMBBUTTONFLAGS;
2066
2067cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)")
2068
2069typedef [v1_enum] enum THUMBBUTTONMASK {
2070    THB_BITMAP   = 0x0001,
2071    THB_ICON     = 0x0002,
2072    THB_TOOLTIP  = 0x0004,
2073    THB_FLAGS    = 0x0008
2074} THUMBBUTTONMASK;
2075
2076cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)")
2077
2078cpp_quote("#include <pshpack8.h>")
2079typedef struct THUMBBUTTON {
2080    THUMBBUTTONMASK dwMask;
2081    UINT iId;
2082    UINT iBitmap;
2083    HICON hIcon;
2084    WCHAR szTip[260];
2085    THUMBBUTTONFLAGS dwFlags;
2086} THUMBBUTTON, *LPTHUMBBUTTON;
2087cpp_quote("#include <poppack.h>")
2088
2089[
2090    uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf),
2091    object
2092]
2093interface ITaskbarList3 : ITaskbarList2
2094{
2095    typedef [v1_enum] enum TBPFLAG {
2096        TBPF_NOPROGRESS     = 0x0000,
2097        TBPF_INDETERMINATE  = 0x0001,
2098        TBPF_NORMAL         = 0x0002,
2099        TBPF_ERROR          = 0x0004,
2100        TBPF_PAUSED         = 0x0008
2101    } TBPFLAG;
2102
2103    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)")
2104
2105    HRESULT SetProgressValue(
2106            [in] HWND hwnd,
2107            [in] ULONGLONG ullCompleted,
2108            [in] ULONGLONG ullTotal);
2109
2110    HRESULT SetProgressState(
2111            [in] HWND hwnd,
2112            [in] TBPFLAG tbpFlags);
2113
2114    HRESULT RegisterTab(
2115            [in] HWND hwndTab,
2116            [in] HWND hwndMDI);
2117
2118    HRESULT UnregisterTab([in] HWND hwndTab);
2119
2120    HRESULT SetTabOrder(
2121            [in] HWND hwndTab,
2122            [in] HWND hwndInsertBefore);
2123
2124    HRESULT SetTabActive(
2125            [in] HWND hwndTab,
2126            [in] HWND hwndMDI,
2127            [in] DWORD dwReserved);
2128
2129    HRESULT ThumbBarAddButtons(
2130            [in] HWND hwnd,
2131            [in] UINT cButtons,
2132            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
2133
2134    HRESULT ThumbBarUpdateButtons(
2135            [in] HWND hwnd,
2136            [in] UINT cButtons,
2137            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
2138
2139    HRESULT ThumbBarSetImageList(
2140            [in] HWND hwnd,
2141            [in] HIMAGELIST himl);
2142
2143    HRESULT SetOverlayIcon(
2144            [in] HWND hwnd,
2145            [in] HICON hIcon,
2146            [in, unique, string] LPCWSTR pszDescription);
2147
2148    HRESULT SetThumbnailTooltip(
2149            [in] HWND hwnd,
2150            [in, unique, string] LPCWSTR pszTip);
2151
2152    HRESULT SetThumbnailClip(
2153            [in] HWND hwnd,
2154            [in] RECT *prcClip);
2155}
2156
2157[
2158    uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a),
2159    object
2160]
2161interface ITaskbarList4 : ITaskbarList3
2162{
2163    typedef [v1_enum] enum STPFLAG {
2164        STPF_NONE                       = 0x0000,
2165        STPF_USEAPPTHUMBNAILALWAYS      = 0x0001,
2166        STPF_USEAPPTHUMBNAILWHENACTIVE  = 0x0002,
2167        STPF_USEAPPPEEKALWAYS           = 0x0004,
2168        STPF_USEAPPPEEKWHENACTIVE       = 0x0008
2169    } STPFLAG;
2170
2171    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)")
2172
2173    HRESULT SetTabProperties(
2174            [in] HWND hwndTab,
2175            [in] STPFLAG stpFlags);
2176}
2177
2178/*****************************************************************************
2179 * IDefaultExtractIconInit interface
2180 */
2181
2182[
2183    object,
2184    uuid(800AB0B8-F5FA-4e72-8FF3-B1A243B87BD9), /* FIXME: wrong value! */
2185    pointer_default(unique),
2186	local
2187]
2188interface IDefaultExtractIconInit : IUnknown
2189{
2190    HRESULT SetDefaultIcon(
2191                       [in] LPCWSTR pszFile,
2192                       [in] int iIcon);
2193    HRESULT SetFlags(
2194                       [in] UINT uFlags);
2195    HRESULT SetKey(
2196                       [in] HKEY hkey);
2197    HRESULT SetNormalIcon(
2198                       [in] LPCWSTR pszFile,
2199                       [in] int iIcon);
2200    HRESULT SetOpenIcon(
2201                       [in] LPCWSTR pszFile,
2202                       [in] int iIcon);
2203    HRESULT SetShortcutIcon(
2204                       [in] LPCWSTR pszFile,
2205                       [in] int iIcon);
2206}
2207
2208
2209#ifdef __REACTOS__
2210/*****************************************************************************
2211 * IExplorerCommand interface (Vista+)
2212 */
2213
2214interface IEnumExplorerCommand;
2215
2216[
2217    uuid(A08CE4D0-FA25-44AB-B57C-C7B1C323E0B9),
2218    pointer_default(unique)
2219]
2220interface IExplorerCommand : IUnknown
2221{
2222    cpp_quote("// GetIcon(ppszIcon) Receives resource string that identifies icon source")
2223    typedef [v1_enum] enum _EXPCMDSTATE
2224    {
2225        ECS_ENABLED         = 0x000,
2226        ECS_DISABLED        = 0x001,
2227        ECS_HIDDEN          = 0x002,
2228        ECS_CHECKBOX        = 0x004,
2229        ECS_CHECKED         = 0x008,
2230        ECS_RADIOCHECK      = 0x010,    // Windows 7
2231    } EXPCMDSTATE;
2232
2233    typedef [v1_enum] enum _EXPCMDFLAGS
2234    {
2235        ECF_DEFAULT         = 0x000,
2236        ECF_HASSUBCOMMANDS  = 0x001,
2237        ECF_HASSPLITBUTTON  = 0x002,
2238        ECF_HIDELABEL       = 0x004,
2239        ECF_ISSEPARATOR     = 0x008,
2240        ECF_HASLUASHIELD    = 0x010,
2241        ECF_SEPARATORBEFORE = 0x020,    // Windows 7
2242        ECF_SEPARATORAFTER  = 0x040,    // Windows 7
2243        ECF_ISDROPDOWN      = 0x080,    // Windows 7
2244        ECF_TOGGLEABLE      = 0x100,    // Windows 8
2245        ECF_AUTOMENUICONS   = 0x200,    // Windows 8
2246    } EXPCMDFLAGS;
2247
2248    HRESULT GetTitle(
2249                    [in, unique] IShellItemArray *psiItemArray,
2250                    [out, string] LPWSTR *ppszName);
2251    HRESULT GetIcon(
2252                    [in, unique] IShellItemArray *psiItemArray,
2253                    [out, string] LPWSTR *ppszIcon);
2254    HRESULT GetToolTip(
2255                    [in, unique] IShellItemArray *psiItemArray,
2256                    [out, string] LPWSTR *ppszInfotip);
2257    HRESULT GetCanonicalName(
2258                    [out] GUID* pguidCommandName);
2259    HRESULT GetState(
2260                    [in] IShellItemArray *psiItemArray,
2261                    [in] BOOL fOkToBeSlow,
2262                    [out] EXPCMDSTATE *pCmdState);
2263    HRESULT Invoke(
2264                    [in] IShellItemArray *psiItemArray,
2265                    [in, unique] IBindCtx *pbc);
2266    HRESULT GetFlags(
2267                    [out] EXPCMDFLAGS *pFlags);
2268    HRESULT EnumSubCommands(
2269                    [out] IEnumExplorerCommand **ppEnum);
2270};
2271
2272
2273/*****************************************************************************
2274 * IExplorerCommandState interface (Vista+)
2275 */
2276[
2277    object,
2278    uuid(BDDACB60-7657-47AE-8445-D23E1ACF82AE),
2279    pointer_default(unique)
2280]
2281interface IExplorerCommandState : IUnknown
2282{
2283    HRESULT GetState(
2284                    [in] IShellItemArray *psiItemArray,
2285                    [in] BOOL fOkToBeSlow,
2286                    [out] EXPCMDSTATE *pCmdState);
2287}
2288
2289
2290/*****************************************************************************
2291 * IInitializeCommand interface (Vista+)
2292 */
2293[
2294    object,
2295    uuid(85075ACF-231F-40EA-9610-D26B7B58F638),
2296    pointer_default(unique)
2297]
2298interface IInitializeCommand : IUnknown
2299{
2300    HRESULT Initialize(
2301                    [in, string] LPCWSTR pszCommandName,
2302                    [in] IPropertyBag *ppb);
2303}
2304
2305
2306/*****************************************************************************
2307 * IEnumExplorerCommand interface (Vista+)
2308 */
2309[
2310    object,
2311    uuid(A88826F8-186F-4987-AADE-EA0CEF8FBFE8),
2312    pointer_default(unique)
2313]
2314interface IEnumExplorerCommand : IUnknown
2315{
2316    [local]
2317    HRESULT Next(
2318                    [in] ULONG celt,
2319                    [out] IExplorerCommand** pUICommand,
2320                    [out, optional] ULONG *pceltFetched);
2321    [call_as(Next)]
2322    HRESULT RemoteNext(
2323                    [in] ULONG celt,
2324                    [out] IExplorerCommand** pUICommand,
2325                    [out, optional] ULONG *pceltFetched);
2326    HRESULT Skip(
2327                    [in] ULONG celt);
2328    HRESULT Reset();
2329    HRESULT Clone(
2330                    [out] IEnumExplorerCommand **ppenum);
2331};
2332
2333
2334/*****************************************************************************
2335 * IExplorerCommandProvider interface (Vista+)
2336 */
2337[
2338    uuid(64961751-0835-43C0-8FFE-D57686530E64),
2339    pointer_default(unique)
2340]
2341interface IExplorerCommandProvider : IUnknown
2342{
2343    cpp_quote("// GetCommands usually creates an IEnumExplorerCommand")
2344    cpp_quote("// GetCommand usually creates an IExplorerCommand")
2345
2346    HRESULT GetCommands(
2347                    [in] IUnknown *punkSite,
2348                    [in] REFIID riid,
2349                    [out, iid_is(riid)] void **ppv);
2350    HRESULT GetCommand(
2351                    [in] REFGUID rguidCommandId,
2352                    [in] REFIID riid,
2353                    [out, iid_is(riid)] void **ppv);
2354};
2355
2356#endif // __REACTOS__
2357
2358/*****************************************************************************
2359 * IDeskBand interface
2360 */
2361cpp_quote("#define DBIM_MINSIZE    0x0001")
2362cpp_quote("#define DBIM_MAXSIZE    0x0002")
2363cpp_quote("#define DBIM_INTEGRAL   0x0004")
2364cpp_quote("#define DBIM_ACTUAL     0x0008")
2365cpp_quote("#define DBIM_TITLE      0x0010")
2366cpp_quote("#define DBIM_MODEFLAGS  0x0020")
2367cpp_quote("#define DBIM_BKCOLOR    0x0040")
2368
2369cpp_quote("#include <pshpack8.h>")
2370
2371typedef struct tagDESKBANDINFO
2372{
2373    DWORD       dwMask;
2374    POINTL      ptMinSize;
2375    POINTL      ptMaxSize;
2376    POINTL      ptIntegral;
2377    POINTL      ptActual;
2378    WCHAR       wszTitle[256];
2379    DWORD       dwModeFlags;
2380    COLORREF    crBkgnd;
2381} DESKBANDINFO;
2382
2383cpp_quote("#include <poppack.h>")
2384
2385cpp_quote("#define DBIMF_NORMAL            0x0000")
2386cpp_quote("#define DBIMF_FIXED             0x0001")
2387cpp_quote("#define DBIMF_FIXEDBMP          0x0004   // a fixed background bitmap (if supported)")
2388cpp_quote("#define DBIMF_VARIABLEHEIGHT    0x0008")
2389cpp_quote("#define DBIMF_UNDELETEABLE      0x0010")
2390cpp_quote("#define DBIMF_DEBOSSED          0x0020")
2391cpp_quote("#define DBIMF_BKCOLOR           0x0040")
2392cpp_quote("#define DBIMF_USECHEVRON        0x0080")
2393cpp_quote("#define DBIMF_BREAK             0x0100")
2394cpp_quote("#define DBIMF_ADDTOFRONT        0x0200")
2395cpp_quote("#define DBIMF_TOPALIGN          0x0400")
2396cpp_quote("#if (NTDDI_VERSION >= NTDDI_LONGHORN)")
2397cpp_quote("#define DBIMF_NOGRIPPER         0x0800")
2398cpp_quote("#define DBIMF_ALWAYSGRIPPER     0x1000")
2399cpp_quote("#define DBIMF_NOMARGINS         0x2000")
2400cpp_quote("#endif  // NTDDI_LONGHORN")
2401
2402cpp_quote("#define DBIF_VIEWMODE_NORMAL         0x0000")
2403cpp_quote("#define DBIF_VIEWMODE_VERTICAL       0x0001")
2404cpp_quote("#define DBIF_VIEWMODE_FLOATING       0x0002")
2405cpp_quote("#define DBIF_VIEWMODE_TRANSPARENT    0x0004")
2406
2407enum tagDESKBANDCID {
2408    DBID_BANDINFOCHANGED    = 0,
2409    DBID_SHOWONLY           = 1,
2410    DBID_MAXIMIZEBAND       = 2,
2411    DBID_PUSHCHEVRON        = 3,
2412    DBID_DELAYINIT          = 4,
2413    DBID_FINISHINIT         = 5,
2414    DBID_SETWINDOWTHEME     = 6,
2415    DBID_PERMITAUTOHIDE     = 7,
2416};
2417
2418cpp_quote("#define DBPC_SELECTFIRST    (DWORD)-1")
2419cpp_quote("#define DBPC_SELECTLAST     (DWORD)-2")
2420
2421cpp_quote("#define CGID_DeskBand IID_IDeskBand")
2422
2423[
2424    uuid(EB0FE172-1A3A-11D0-89B3-00A0C90A90AC),
2425    object,
2426]
2427interface IDeskBand : IDockingWindow
2428{
2429    HRESULT GetBandInfo(
2430        [in] DWORD dwBandID,
2431        [in] DWORD dwViewMode,
2432        [in, out] DESKBANDINFO* pdbi);
2433}
2434
2435cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60)")
2436
2437[
2438    uuid(EB0FE173-1A3A-11D0-89B3-00A0C90A90AC),
2439    object,
2440    pointer_default(unique),
2441    local
2442]
2443interface IDeskBar : IOleWindow
2444{
2445    HRESULT SetClient([in] IUnknown* punkClient);
2446
2447    HRESULT GetClient([out] IUnknown** ppunkClient);
2448
2449    HRESULT OnPosRectChangeDB([in] RECT *prc);
2450}
2451
2452
2453/*****************************************************************************
2454 * IMenuPopup interface
2455 */
2456[
2457    uuid(D1E7AFEB-6A2E-11d0-8C78-00C04FD918B4),
2458    object,
2459    pointer_default(unique),
2460    local
2461]
2462interface IMenuPopup : IDeskBar
2463{
2464    enum tagMENUPOPUPSELECT
2465    {
2466        MPOS_EXECUTE = 0,
2467        MPOS_FULLCANCEL,
2468        MPOS_CANCELLEVEL,
2469        MPOS_SELECTLEFT,
2470        MPOS_SELECTRIGHT,
2471        MPOS_CHILDTRACKING
2472    };
2473
2474    enum tagMENUPOPUPPOPUPFLAGS
2475    {
2476        MPPF_SETFOCUS      = 0x00000001,
2477        MPPF_INITIALSELECT = 0x00000002,
2478        MPPF_NOANIMATE     = 0x00000004,
2479        MPPF_KEYBOARD      = 0x00000010,
2480        MPPF_REPOSITION    = 0x00000020,
2481        MPPF_FORCEZORDER   = 0x00000040,
2482        MPPF_FINALSELECT   = 0x00000080,
2483        MPPF_TOP           = 0x20000000,
2484        MPPF_LEFT          = 0x40000000,
2485        MPPF_RIGHT         = 0x60000000,
2486        MPPF_BOTTOM        = 0x80000000,
2487        MPPF_POS_MASK      = 0xE0000000,
2488        MPPF_ALIGN_LEFT    = 0x02000000,
2489        MPPF_ALIGN_RIGHT   = 0x04000000
2490    };
2491    typedef int MP_POPUPFLAGS;
2492
2493    HRESULT Popup(
2494        [in] POINTL *ppt,
2495        [in] RECTL *prcExclude,
2496        [in] MP_POPUPFLAGS dwFlags);
2497
2498    HRESULT OnSelect([in] DWORD dwSelectType);
2499
2500    HRESULT SetSubMenu(
2501        [in] IMenuPopup* pmp,
2502        [in] BOOL fSet);
2503}
2504
2505cpp_quote("#endif /* _WIN32_IE_IE60 */")
2506
2507cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE40)")
2508
2509/*****************************************************************************
2510 * IBandSite interface
2511 */
2512cpp_quote("#include <pshpack8.h>")
2513
2514typedef struct tagBANDSITEINFO
2515{
2516    DWORD dwMask;
2517    DWORD dwState;
2518    DWORD dwStyle;
2519} BANDSITEINFO;
2520
2521cpp_quote("#include <poppack.h>")
2522
2523
2524enum tagBANDSITECID {
2525    BSID_BANDADDED,
2526    BSID_BANDREMOVED,
2527};
2528
2529cpp_quote("#define BSIM_STATE        0x00000001")
2530cpp_quote("#define BSIM_STYLE        0x00000002")
2531
2532cpp_quote("#define BSSF_VISIBLE      0x00000001")
2533cpp_quote("#define BSSF_NOTITLE      0x00000002")
2534cpp_quote("#define BSSF_UNDELETEABLE 0x00001000")
2535
2536cpp_quote("#define BSIS_AUTOGRIPPER       0x00000000")
2537cpp_quote("#define BSIS_NOGRIPPER         0x00000001")
2538cpp_quote("#define BSIS_ALWAYSGRIPPER     0x00000002")
2539cpp_quote("#define BSIS_LEFTALIGN         0x00000004")
2540cpp_quote("#define BSIS_SINGLECLICK       0x00000008")
2541cpp_quote("#define BSIS_NOCONTEXTMENU     0x00000010")
2542cpp_quote("#define BSIS_NODROPTARGET      0x00000020")
2543cpp_quote("#define BSIS_NOCAPTION         0x00000040")
2544cpp_quote("#define BSIS_PREFERNOLINEBREAK 0x00000080")
2545cpp_quote("#define BSIS_LOCKED            0x00000100")
2546cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE70)")
2547cpp_quote("#define BSIS_PRESERVEORDERDURINGLAYOUT 0x00000200")
2548cpp_quote("#endif  /* _WIN32_IE_IE70 */")
2549
2550cpp_quote("#define SID_SBandSite IID_IBandSite")
2551cpp_quote("#define CGID_BandSite IID_IBandSite")
2552
2553[
2554    object,
2555    uuid(4CF504B0-DE96-11D0-8B3F-00A0C911E8E5)
2556]
2557interface IBandSite : IUnknown
2558{
2559    HRESULT AddBand([in] IUnknown* punk);
2560
2561    HRESULT EnumBands(
2562        [in] UINT uBand,
2563        [out] DWORD* pdwBandID);
2564
2565    HRESULT QueryBand(
2566        [in] DWORD dwBandID,
2567        [out] IDeskBand** ppstb,
2568        [out] DWORD* pdwState,
2569        [out, string, size_is(cchName)] LPWSTR pszName,
2570        [in] int cchName);
2571
2572    HRESULT SetBandState(
2573        [in] DWORD dwBandID,
2574        [in] DWORD dwMask,
2575        [in] DWORD dwState);
2576
2577    HRESULT RemoveBand([in] DWORD dwBandID);
2578
2579    HRESULT GetBandObject(
2580        [in] DWORD dwBandID,
2581        [in] REFIID riid,
2582        [out, iid_is(riid)] void **ppv);
2583
2584    HRESULT SetBandSiteInfo([in] const BANDSITEINFO *pbsinfo);
2585
2586    HRESULT GetBandSiteInfo([in, out] BANDSITEINFO *pbsinfo);
2587}
2588
2589cpp_quote("#endif /* _WIN32_IE_IE40 */")
2590
2591/*****************************************************************************
2592 * IMenuBand interface
2593 */
2594[
2595    uuid(568804CD-CBD7-11d0-9816-00C04FD91972),
2596    object,
2597    pointer_default(unique),
2598    local
2599]
2600interface IMenuBand : IUnknown
2601{
2602    enum tagMENUBANDHANDLERCID {
2603        MBHANDCID_PIDLSELECT = 0,
2604    };
2605
2606    HRESULT IsMenuMessage([in] MSG* pmsg);
2607
2608    HRESULT TranslateMenuMessage(
2609        [in, out] MSG* pmsg,
2610        [out] LRESULT* plRet);
2611}
2612
2613/*****************************************************************************
2614 * IShellMenuCallback interface
2615 */
2616cpp_quote("#include <pshpack8.h>")
2617
2618typedef struct tagSMDATA
2619{
2620	DWORD			dwMask;
2621	DWORD			dwFlags;
2622	HMENU			hmenu;
2623	HWND			hwnd;
2624	UINT			uId;
2625	UINT			uIdParent;
2626	UINT			uIdAncestor;
2627	IUnknown		*punk;
2628	LPITEMIDLIST	pidlFolder;
2629	LPITEMIDLIST	pidlItem;
2630	IShellFolder	*psf;
2631	void			*pvUserData;
2632} SMDATA, *LPSMDATA;
2633
2634cpp_quote("#define SMDM_SHELLFOLDER		0x00000001")
2635cpp_quote("#define SMDM_HMENU			0x00000002")
2636cpp_quote("#define SMDM_TOOLBAR			0x00000004")
2637
2638typedef struct tagSMINFO
2639{
2640	DWORD			dwMask;
2641	DWORD			dwType;
2642	DWORD			dwFlags;
2643	int				iIcon;
2644} SMINFO, *PSMINFO;
2645
2646typedef struct tagSHCSCHANGENOTIFYSTRUCT
2647{
2648	LONG			lEvent;
2649	LPCITEMIDLIST	pidl1;
2650	LPCITEMIDLIST	pidl2;
2651} SMCSHCHANGENOTIFYSTRUCT, *PSMCSHCHANGENOTIFYSTRUCT;
2652
2653cpp_quote("#include <poppack.h>")
2654
2655enum
2656{
2657	SMIM_TYPE			= 0x00000001,
2658	SMIM_FLAGS			= 0x00000002,
2659	SMIM_ICON			= 0x00000004
2660};
2661
2662enum
2663{
2664	SMIT_SEPARATOR      = 0x00000001,
2665	SMIT_STRING         = 0x00000002
2666};
2667
2668enum
2669{
2670	SMIF_ICON			= 0x00000001,
2671	SMIF_ACCELERATOR	= 0x00000002,
2672	SMIF_DROPTARGET		= 0x00000004,
2673	SMIF_SUBMENU		= 0x00000008,
2674	SMIF_CHECKED		= 0x00000020,
2675	SMIF_DROPCASCADE	= 0x00000040,
2676	SMIF_HIDDEN			= 0x00000080,
2677	SMIF_DISABLED		= 0x00000100,
2678	SMIF_TRACKPOPUP		= 0x00000200,
2679	SMIF_DEMOTED		= 0x00000400,
2680	SMIF_ALTSTATE		= 0x00000800,
2681	SMIF_DRAGNDROP		= 0x00001000,
2682	SMIF_NEW			= 0x00002000,
2683};
2684
2685
2686cpp_quote("#define SMC_INITMENU				0x00000001")
2687cpp_quote("#define SMC_CREATE				0x00000002")
2688cpp_quote("#define SMC_EXITMENU				0x00000003")
2689cpp_quote("#define SMC_GETINFO				0x00000005")
2690cpp_quote("#define SMC_GETSFINFO			0x00000006")
2691cpp_quote("#define SMC_GETOBJECT			0x00000007")
2692cpp_quote("#define SMC_GETSFOBJECT			0x00000008")
2693cpp_quote("#define SMC_SFEXEC				0x00000009")
2694cpp_quote("#define SMC_SFSELECTITEM			0x0000000A")
2695cpp_quote("#define SMC_REFRESH				0x00000010")
2696cpp_quote("#define SMC_DEMOTE				0x00000011")
2697cpp_quote("#define SMC_PROMOTE				0x00000012")
2698cpp_quote("#define SMC_DEFAULTICON			0x00000016")
2699cpp_quote("#define SMC_NEWITEM				0x00000017")
2700cpp_quote("#define SMC_CHEVRONEXPAND		0x00000019")
2701cpp_quote("#define SMC_DISPLAYCHEVRONTIP	0x0000002A")
2702cpp_quote("#define SMC_SETSFOBJECT			0x0000002D")
2703cpp_quote("#define SMC_SHCHANGENOTIFY		0x0000002E")
2704cpp_quote("#define SMC_CHEVRONGETTIP		0x0000002F")
2705cpp_quote("#define SMC_SFDDRESTRICTED		0x00000030")
2706
2707[
2708    uuid(4CA300A1-9B8D-11d1-8B22-00C04FD918D0),
2709    object,
2710    pointer_default(unique),
2711    local
2712]
2713interface IShellMenuCallback : IUnknown
2714{
2715	HRESULT CallbackSM(
2716		[in, out] LPSMDATA psmd,
2717        [in] UINT uMsg,
2718        [in] WPARAM wParam,
2719        [in] LPARAM lParam);
2720}
2721
2722
2723/*****************************************************************************
2724 * IShellMenu interface
2725 */
2726
2727cpp_quote("#define SMINIT_DEFAULT               0x00000000")
2728cpp_quote("#define SMINIT_RESTRICT_DRAGDROP     0x00000002")
2729cpp_quote("#define SMINIT_TOPLEVEL              0x00000004")
2730cpp_quote("#define SMINIT_CACHED                0x00000010")
2731cpp_quote("#define SMINIT_VERTICAL              0x10000000")
2732cpp_quote("#define SMINIT_HORIZONTAL            0x20000000")
2733cpp_quote("")
2734cpp_quote("#define ANCESTORDEFAULT              (UINT)-1")
2735cpp_quote("")
2736cpp_quote("#define SMSET_TOP                    0x10000000")
2737cpp_quote("#define SMSET_BOTTOM                 0x20000000")
2738cpp_quote("#define SMSET_DONTOWN                0x00000001")
2739cpp_quote("")
2740cpp_quote("#define SMINV_REFRESH                0x00000001")
2741cpp_quote("#define SMINV_ID                     0x00000008")
2742
2743[
2744    uuid(EE1F7637-E138-11d1-8379-00C04FD918D0),
2745    object,
2746    pointer_default(unique),
2747    local
2748]
2749interface IShellMenu : IUnknown
2750{
2751	HRESULT Initialize(
2752		[in] IShellMenuCallback *psmc,
2753        [in] UINT uId,
2754        [in] UINT uIdAncestor,
2755        [in] DWORD dwFlags);
2756
2757	HRESULT GetMenuInfo(
2758		[out] IShellMenuCallback **ppsmc,
2759		[out] UINT *puId,
2760		[out] UINT *puIdAncestor,
2761		[out] DWORD *pdwFlags);
2762
2763	HRESULT SetShellFolder(
2764        [in] IShellFolder *psf,
2765		[in] LPCITEMIDLIST pidlFolder,
2766        [in] HKEY hKey,
2767        [in] DWORD dwFlags);
2768
2769	HRESULT GetShellFolder(
2770		[out] DWORD *pdwFlags,
2771		[out] LPITEMIDLIST *ppidl,
2772		[in] REFIID riid,
2773		[out] void **ppv);
2774
2775	HRESULT SetMenu(
2776		[in] HMENU hmenu,
2777		[in] HWND hwnd,
2778        [in] DWORD dwFlags);
2779
2780	HRESULT GetMenu(
2781		[out] HMENU *phmenu,
2782		[out] HWND *phwnd,
2783		[out] DWORD *pdwFlags);
2784
2785	HRESULT InvalidateItem(
2786		[in] LPSMDATA psmd,
2787        [in] DWORD dwFlags);
2788
2789	HRESULT GetState(
2790		[out] LPSMDATA psmd);
2791
2792	HRESULT SetMenuToolbar(
2793		[in] IUnknown *punk,
2794        [in] DWORD dwFlags);
2795}
2796
2797cpp_quote("#if (_WIN32_IE >= _WIN32_IE_IE60)")
2798
2799/*****************************************************************************
2800 * ITrackShellMenu interface
2801 */
2802[
2803    uuid(8278F932-2A3E-11d2-838F-00C04FD918D0),
2804    object,
2805    pointer_default(unique),
2806    local
2807]
2808interface ITrackShellMenu : IShellMenu
2809{
2810	HRESULT SetObscured(
2811		[in] HWND hwndTB,
2812		[in] IUnknown *punkBand,
2813		DWORD dwSMSetFlags);
2814
2815	HRESULT Popup(
2816		[in] HWND hwnd,
2817		[in] POINTL *ppt,
2818		[in] RECTL *prcExclude,
2819		MP_POPUPFLAGS dwFlags);
2820};
2821
2822cpp_quote("#endif /* _WIN32_IE_IE60 */")
2823
2824/*****************************************************************************
2825 *    IAutoCompleteDropDown interface
2826 */
2827[
2828    object,
2829    uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
2830    pointer_default(unique)
2831]
2832interface IAutoCompleteDropDown : IUnknown
2833{
2834cpp_quote("#define ACDD_VISIBLE   0x0001")
2835
2836    HRESULT GetDropDownStatus(
2837        [out] DWORD *pdwFlags,
2838        [out, string] LPWSTR *ppwszString);
2839
2840    HRESULT ResetEnumerator();
2841}
2842
2843/*****************************************************************************
2844 * IProfferService interface
2845 */
2846[
2847    object,
2848    uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0),
2849    pointer_default(unique)
2850]
2851interface IProfferService : IUnknown
2852{
2853    HRESULT ProfferService(
2854        [in] REFGUID service,
2855        [in] IServiceProvider *pService,
2856        [out] DWORD *pCookie);
2857
2858    HRESULT RevokeService([in] DWORD cookie);
2859}
2860
2861/*****************************************************************************
2862 * IExplorerBrowserEvents interface
2863 */
2864[
2865 object,
2866 uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F)
2867]
2868interface IExplorerBrowserEvents : IUnknown
2869{
2870    HRESULT OnNavigationPending(
2871        [in] PCIDLIST_ABSOLUTE pidlFolder);
2872
2873    HRESULT OnViewCreated(
2874        [in] IShellView *psv);
2875
2876    HRESULT OnNavigationComplete(
2877        [in] PCIDLIST_ABSOLUTE pidlFolder);
2878
2879    HRESULT OnNavigationFailed(
2880        [in] PCIDLIST_ABSOLUTE pidlFolder);
2881}
2882
2883typedef GUID EXPLORERPANE;
2884typedef EXPLORERPANE *REFEXPLORERPANE;
2885
2886cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility")
2887
2888/*****************************************************************************
2889 * IExplorerPaneVisibility interface
2890 */
2891[
2892 object,
2893 uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC)
2894]
2895interface IExplorerPaneVisibility : IUnknown
2896{
2897    typedef enum tagEXPLORERPANESTATE {
2898        EPS_DONTCARE     = 0x0,
2899        EPS_DEFAULT_ON   = 0x1,
2900        EPS_DEFAULT_OFF  = 0x2,
2901        EPS_STATE_MASK   = 0xffff,
2902        EPS_INITIALSTATE = 0x10000,
2903        EPS_FORCE        = 0x20000
2904    } EXPLORERPANESTATE;
2905
2906    HRESULT GetPaneState(
2907        [in] REFEXPLORERPANE ep,
2908        [out] EXPLORERPANESTATE *peps);
2909}
2910
2911typedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS {
2912    EBF_NONE                     = 0,
2913    EBF_SELECTFROMDATAOBJECT     = 0x100,
2914    EBF_NODROPTARGET             = 0x200
2915} EXPLORER_BROWSER_FILL_FLAGS;
2916
2917typedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS {
2918    EBO_NONE               = 0x00,
2919    EBO_NAVIGATEONCE       = 0x01,
2920    EBO_SHOWFRAMES         = 0x02,
2921    EBO_ALWAYSNAVIGATE     = 0x04,
2922    EBO_NOTRAVELLOG        = 0x08,
2923    EBO_NOWRAPPERWINDOW    = 0x10,
2924    EBO_HTMLSHAREPOINTVIEW = 0x20,
2925    EBO_NOBORDER           = 0x40,
2926    EBO_NOPERSISTVIEWSTATE = 0x80,
2927} EXPLORER_BROWSER_OPTIONS;
2928
2929cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser")
2930
2931/*****************************************************************************
2932 * IExplorerBrowser interface
2933 */
2934[
2935 object,
2936 uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6),
2937 pointer_default(unique)
2938]
2939interface IExplorerBrowser : IUnknown
2940{
2941
2942    [local] HRESULT Initialize(
2943        [in] HWND hwndParent,
2944        [in] const RECT *prc,
2945        [in, unique] const FOLDERSETTINGS *pfs);
2946
2947    HRESULT Destroy();
2948
2949    [local] HRESULT SetRect(
2950        [in,out,unique] HDWP *phdwp,
2951        [in] RECT rcBrowser);
2952
2953    HRESULT SetPropertyBag(
2954        [in, string] LPCWSTR pszPropertyBag);
2955
2956    HRESULT SetEmptyText(
2957        [in, string] LPCWSTR pszEmptyText);
2958
2959    HRESULT SetFolderSettings(
2960        [in] const FOLDERSETTINGS *pfs);
2961
2962    HRESULT Advise(
2963        [in] IExplorerBrowserEvents *psbe,
2964        [out] DWORD *pdwCookie);
2965
2966    HRESULT Unadvise(
2967        [in] DWORD dwCookie);
2968
2969    HRESULT SetOptions(
2970        [in] EXPLORER_BROWSER_OPTIONS dwFlag);
2971
2972    HRESULT GetOptions(
2973        [out] EXPLORER_BROWSER_OPTIONS *pdwFlag);
2974
2975    HRESULT BrowseToIDList(
2976        [in] PCUIDLIST_RELATIVE pidl,
2977        [in] UINT uFlags);
2978
2979    HRESULT BrowseToObject(
2980        [in] IUnknown *punk,
2981        [in] UINT uFlags);
2982
2983    HRESULT FillFromObject(
2984        [in] IUnknown *punk,
2985        [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags);
2986
2987    HRESULT RemoveAll();
2988
2989    HRESULT GetCurrentView(
2990        [in] REFIID riid,
2991        [out, iid_is(riid)] void **ppv);
2992}
2993
2994/*****************************************************************************
2995 * INameSpaceTreeControl interface
2996 */
2997[
2998 object,
2999 uuid(028212A3-B627-47E9-8856-C14265554E4F)
3000]
3001interface INameSpaceTreeControl : IUnknown
3002{
3003    [v1_enum] enum _NSTCSTYLE {
3004        NSTCS_HASEXPANDOS                 = 0x00000001,
3005        NSTCS_HASLINES                    = 0x00000002,
3006        NSTCS_SINGLECLICKEXPAND           = 0x00000004,
3007        NSTCS_FULLROWSELECT               = 0x00000008,
3008        NSTCS_SPRINGEXPAND                = 0x00000010,
3009        NSTCS_HORIZONTALSCROLL            = 0x00000020,
3010        NSTCS_ROOTHASEXPANDO              = 0x00000040,
3011        NSTCS_SHOWSELECTIONALWAYS         = 0x00000080,
3012        NSTCS_NOINFOTIP                   = 0x00000200,
3013        NSTCS_EVENHEIGHT                  = 0x00000400,
3014        NSTCS_NOREPLACEOPEN               = 0x00000800,
3015        NSTCS_DISABLEDRAGDROP             = 0x00001000,
3016        NSTCS_NOORDERSTREAM               = 0x00002000,
3017        NSTCS_RICHTOOLTIP                 = 0x00004000,
3018        NSTCS_BORDER                      = 0x00008000,
3019        NSTCS_NOEDITLABELS                = 0x00010000,
3020        NSTCS_TABSTOP                     = 0x00020000,
3021        NSTCS_FAVORITESMODE               = 0x00080000,
3022        NSTCS_AUTOHSCROLL                 = 0x00100000,
3023        NSTCS_FADEINOUTEXPANDOS           = 0x00200000,
3024        NSTCS_EMPTYTEXT                   = 0x00400000,
3025        NSTCS_CHECKBOXES                  = 0x00800000,
3026        NSTCS_PARTIALCHECKBOXES           = 0x01000000,
3027        NSTCS_EXCLUSIONCHECKBOXES         = 0x02000000,
3028        NSTCS_DIMMEDCHECKBOXES            = 0x04000000,
3029        NSTCS_NOINDENTCHECKS              = 0x08000000,
3030        NSTCS_ALLOWJUNCTIONS              = 0x10000000,
3031        NSTCS_SHOWTABSBUTTON              = 0x20000000,
3032        NSTCS_SHOWDELETEBUTTON            = 0x40000000,
3033        NSTCS_SHOWREFRESHBUTTON      = (int)0x80000000
3034    };
3035    typedef DWORD NSTCSTYLE;
3036
3037    [v1_enum] enum _NSTCROOTSTYLE {
3038        NSTCRS_VISIBLE                    = 0x0000,
3039        NSTCRS_HIDDEN                     = 0x0001,
3040        NSTCRS_EXPANDED                   = 0x0002
3041    };
3042    typedef DWORD NSTCROOTSTYLE;
3043
3044    [v1_enum] enum _NSTCITEMSTATE {
3045        NSTCIS_NONE                       = 0x0000,
3046        NSTCIS_SELECTED                   = 0x0001,
3047        NSTCIS_EXPANDED                   = 0x0002,
3048        NSTCIS_BOLD                       = 0x0004,
3049        NSTCIS_DISABLED                   = 0x0008,
3050        NSTCIS_SELECTEDNOEXPAND           = 0x0010
3051    };
3052    typedef DWORD NSTCITEMSTATE;
3053
3054    typedef [v1_enum] enum NSTCGNI {
3055        NSTCGNI_NEXT                      = 0,
3056        NSTCGNI_NEXTVISIBLE               = 1,
3057        NSTCGNI_PREV                      = 2,
3058        NSTCGNI_PREVVISIBLE               = 3,
3059        NSTCGNI_PARENT                    = 4,
3060        NSTCGNI_CHILD                     = 5,
3061        NSTCGNI_FIRSTVISIBLE              = 6,
3062        NSTCGNI_LASTVISIBLE               = 7
3063    } NSTCGNI;
3064
3065    HRESULT Initialize(
3066        [in] HWND hwndParent,
3067        [in, unique] RECT *prc,
3068        [in] NSTCSTYLE nstcsFlags);
3069
3070    HRESULT TreeAdvise(
3071        [in] IUnknown *punk,
3072        [out] DWORD *pdwCookie);
3073
3074    HRESULT TreeUnadvise(
3075        [in] DWORD dwCookie);
3076
3077    HRESULT AppendRoot(
3078        [in] IShellItem *psiRoot,
3079        [in] SHCONTF grfEnumFlags,
3080        [in] NSTCROOTSTYLE grfRootStyle,
3081        [in, unique] IShellItemFilter *pif);
3082
3083    HRESULT InsertRoot(
3084        [in] int iIndex,
3085        [in] IShellItem *psiRoot,
3086        [in] SHCONTF grfEnumFlags,
3087        [in] NSTCROOTSTYLE grfRootStyle,
3088        [in, unique] IShellItemFilter *pif);
3089
3090    HRESULT RemoveRoot(
3091        [in] IShellItem *psiRoot);
3092
3093    HRESULT RemoveAllRoots();
3094
3095    HRESULT GetRootItems(
3096        [out] IShellItemArray **ppsiaRootItems);
3097
3098    HRESULT SetItemState(
3099        [in] IShellItem *psi,
3100        [in] NSTCITEMSTATE nstcisMask,
3101        [in] NSTCITEMSTATE nstcisFlags);
3102
3103    HRESULT GetItemState(
3104        [in] IShellItem *psi,
3105        [in] NSTCITEMSTATE nstcismask,
3106        [out] NSTCITEMSTATE *pnstcisFlags);
3107
3108    HRESULT GetSelectedItems(
3109        [out] IShellItemArray **psiaItems);
3110
3111    HRESULT GetItemCustomState(
3112        [in] IShellItem *psi,
3113        [out] int *piStateNumber);
3114
3115    HRESULT SetItemCustomState(
3116        [in] IShellItem *psi,
3117        [in] int iStateNumber);
3118
3119    HRESULT EnsureItemVisible(
3120        [in] IShellItem *psi);
3121
3122    HRESULT SetTheme(
3123        [in, string] LPCWSTR pszTheme);
3124
3125    HRESULT GetNextItem(
3126        [in, unique] IShellItem *psi,
3127        [in] NSTCGNI nstcgi,
3128        [out] IShellItem **ppsiNext);
3129
3130    HRESULT HitTest(
3131        [in] POINT *ppt,
3132        [out] IShellItem **ppsiOut);
3133
3134    HRESULT GetItemRect(
3135        [in] IShellItem *psi,
3136        [out] RECT *prect);
3137
3138    HRESULT CollapseAll();
3139}
3140
3141/*****************************************************************************
3142 * INameSpaceTreeControl2 interface
3143 */
3144[
3145 object,
3146 uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C)
3147]
3148interface INameSpaceTreeControl2 : INameSpaceTreeControl
3149{
3150    typedef [v1_enum] enum NSTCSTYLE2 {
3151        NSTCS2_DEFAULT                     = 0x00,
3152        NSTCS2_INTERRUPTNOTIFICATIONS      = 0x01,
3153        NSTCS2_SHOWNULLSPACEMENU           = 0x02,
3154        NSTCS2_DISPLAYPADDING              = 0x04,
3155        NSTCS2_DISPLAYPINNEDONLY           = 0x08,
3156        NTSCS2_NOSINGLETONAUTOEXPAND       = 0x10,  /* The apparent typo here is   */
3157        NTSCS2_NEVERINSERTNONENUMERATED    = 0x20   /* present also in the Win SDK */
3158    } NSTCSTYLE2;
3159    cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)")
3160
3161    HRESULT SetControlStyle(
3162        [in] NSTCSTYLE nstcsMask,
3163        [in] NSTCSTYLE nstcsStyle);
3164
3165    HRESULT GetControlStyle(
3166        [in] NSTCSTYLE nstcsMask,
3167        [out] NSTCSTYLE *pnstcsStyle);
3168
3169    HRESULT SetControlStyle2(
3170        [in] NSTCSTYLE2 nstcsMask,
3171        [in] NSTCSTYLE2 nstcsStyle);
3172
3173    HRESULT GetControlStyle2(
3174        [in] NSTCSTYLE2 nstcsMask,
3175        [out] NSTCSTYLE2 *pnstcsStyle);
3176}
3177
3178/*****************************************************************************
3179 * INameSpaceTreeControlEvents interface
3180 */
3181
3182[
3183 object,
3184 uuid(93D77985-B3D8-4484-8318-672CDDA002CE),
3185 local
3186]
3187interface INameSpaceTreeControlEvents : IUnknown
3188{
3189    [v1_enum] enum _NSTCEHITTEST {
3190        NSTCEHT_NOWHERE                    = 0x0001,
3191        NSTCEHT_ONITEMICON                 = 0x0002,
3192        NSTCEHT_ONITEMLABEL                = 0x0004,
3193        NSTCEHT_ONITEMIDENT                = 0x0008,
3194        NSTCEHT_ONITEMBUTTON               = 0x0010,
3195        NSTCEHT_ONITEMRIGHT                = 0x0020,
3196        NSTCEHT_ONITEMSTATEICON            = 0x0040,
3197        NSTCEHT_ONITEM                     = 0x0046,
3198        NSTCEHT_ONITEMTABBUTTON            = 0x1000
3199    };
3200    typedef DWORD NSTCEHITTEST;
3201
3202    [v1_enum] enum _NSTCECLICKTYPE {
3203        NSTCECT_LBUTTON                    = 0x1,
3204        NSTCECT_MBUTTON                    = 0x2,
3205        NSTCECT_RBUTTON                    = 0x3,
3206        NSTCECT_BUTTON                     = 0x3,
3207        NSTCECT_DBLCLICK                   = 0x4
3208    };
3209    typedef DWORD NSTCECLICKTYPE;
3210
3211    HRESULT OnItemClick(
3212        [in] IShellItem *psi,
3213        [in] NSTCEHITTEST nstceHitTest,
3214        [in] NSTCECLICKTYPE nstceClickType);
3215
3216    HRESULT OnPropertyItemCommit(
3217        [in] IShellItem *psi);
3218
3219    HRESULT OnItemStateChanging(
3220        [in] IShellItem *psi,
3221        [in] NSTCITEMSTATE nstcisMask,
3222        [in] NSTCITEMSTATE nstcisState);
3223
3224    HRESULT OnItemStateChanged(
3225        [in] IShellItem *psi,
3226        [in] NSTCITEMSTATE nstcisMask,
3227        [in] NSTCITEMSTATE nstcisState);
3228
3229    HRESULT OnSelectionChanged(
3230        [in] IShellItemArray *psiaSelection);
3231
3232    HRESULT OnKeyboardInput(
3233        [in] UINT uMsg,
3234        [in] WPARAM wParam,
3235        [in] LPARAM lParam);
3236
3237    HRESULT OnBeforeExpand(
3238        [in] IShellItem *psi);
3239
3240    HRESULT OnAfterExpand(
3241        [in] IShellItem *psi);
3242
3243    HRESULT OnBeginLabelEdit(
3244        [in] IShellItem *psi);
3245
3246    HRESULT OnEndLabelEdit(
3247        [in] IShellItem *psi);
3248
3249    HRESULT OnGetToolTip(
3250        [in] IShellItem *psi,
3251        [out, string, size_is(cchTip)] LPWSTR pszTip,
3252        [in] int cchTip);
3253
3254    HRESULT OnBeforeItemDelete(
3255        [in] IShellItem *psi);
3256
3257    HRESULT OnItemAdded(
3258        [in] IShellItem *psi,
3259        [in] BOOL fIsRoot);
3260
3261    HRESULT OnItemDeleted(
3262        [in] IShellItem *psi,
3263        [in] BOOL fIsRoot);
3264
3265    HRESULT OnBeforeContextMenu(
3266        [in, unique] IShellItem *psi,
3267        [in] REFIID riid,
3268        [out, iid_is(riid)] void **ppv);
3269
3270    HRESULT OnAfterContextMenu(
3271        [in] IShellItem *psi,
3272        [in] IContextMenu *pcmIn,
3273        [in] REFIID riid,
3274        [out, iid_is(riid)] void **ppv);
3275
3276    HRESULT OnBeforeStateImageChange(
3277        [in] IShellItem *psi);
3278
3279    HRESULT OnGetDefaultIconIndex(
3280        [in] IShellItem *psi,
3281        [out] int *piDefaultIcon,
3282        [out] int *piOpenIcon);
3283}
3284
3285/*****************************************************************************
3286 * INameSpaceTreeControlCustomDraw interface
3287 */
3288[
3289 object,
3290 uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78),
3291 local
3292]
3293
3294interface INameSpaceTreeControlCustomDraw : IUnknown
3295{
3296    typedef struct NSTCCUSTOMDRAW
3297    {
3298        IShellItem *psi;
3299        UINT uItemState;
3300        NSTCITEMSTATE nstcis;
3301        LPCWSTR pszText;
3302        int iImage;
3303        HIMAGELIST himl;
3304        int iLevel;
3305        int iIndent;
3306    } NSTCCUSTOMDRAW;
3307
3308    HRESULT PrePaint(
3309        [in] HDC hdc,
3310        [in] RECT *prc,
3311        [out] LRESULT *plres);
3312
3313    HRESULT PostPaint(
3314        [in] HDC hdc,
3315        [in] RECT *prc);
3316
3317    HRESULT ItemPrePaint(
3318        [in] HDC hdc,
3319        [in] RECT *prc,
3320        [in, out] COLORREF *pclrText,
3321        [in, out] COLORREF *pclrTextBk,
3322        [out] LRESULT *plres);
3323
3324    HRESULT ItemPostPaint(
3325        [in] HDC hdc,
3326        [in] RECT *prc,
3327        [in] NSTCCUSTOMDRAW *pnstccdItem);
3328}
3329
3330/*****************************************************************************
3331 * INameSpaceTreeControlDropHandler interface
3332 */
3333[
3334 object,
3335 uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51),
3336 local
3337]
3338interface INameSpaceTreeControlDropHandler : IUnknown
3339{
3340    HRESULT OnDragEnter(
3341        [in, unique] IShellItem *psiOver,
3342        [in] IShellItemArray *psiaData,
3343        [in] BOOL fOutsideSource,
3344        [in] DWORD grfKeyState,
3345        [in, out] DWORD *pdwEffect);
3346
3347    HRESULT OnDragOver(
3348        [in, unique] IShellItem *psiOver,
3349        [in] IShellItemArray *psiaData,
3350        [in] DWORD grfKeyState,
3351        [in, out] DWORD *pdwEffect);
3352
3353    HRESULT OnDragPosition(
3354        [in, unique] IShellItem *psiOver,
3355        [in] IShellItemArray *psiaData,
3356        [in] int iNewPosition,
3357        [in] int iOldPosition);
3358
3359    HRESULT OnDrop(
3360        [in, unique] IShellItem *psiOver,
3361        [in] IShellItemArray *psiaData,
3362        [in] int iPosition,
3363        [in] DWORD grfKeyState,
3364        [in, out] DWORD *pdwEffect);
3365
3366    HRESULT OnDropPosition(
3367        [in, unique] IShellItem *psiOver,
3368        [in] IShellItemArray *psiaData,
3369        [in] int iNewPosition,
3370        [in] int iOldPosition);
3371
3372    HRESULT OnDragLeave(
3373        [in, unique] IShellItem *psiOver);
3374}
3375cpp_quote("#define NSTCDHPOS_ONTOP -1")
3376
3377interface IFileDialog;
3378
3379typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE
3380{
3381    FDEOR_DEFAULT  = 0,
3382    FDEOR_ACCEPT   = 1,
3383    FDEOR_REFUSE   = 2
3384} FDE_OVERWRITE_RESPONSE;
3385
3386typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE
3387{
3388    FDESVR_DEFAULT = 0,
3389    FDESVR_ACCEPT  = 1,
3390    FDESVR_REFUSE  = 2
3391} FDE_SHAREVIOLATION_RESPONSE;
3392
3393/*****************************************************************************
3394 * IFileDialogEvents interface
3395 */
3396[
3397 object,
3398 uuid(973510DB-7D7F-452B-8975-74A85828D354),
3399 pointer_default(unique)
3400]
3401interface IFileDialogEvents : IUnknown
3402{
3403    HRESULT OnFileOk(
3404        [in] IFileDialog *pfd);
3405
3406    HRESULT OnFolderChanging(
3407        [in] IFileDialog *pfd,
3408        [in] IShellItem *psiFolder);
3409
3410    HRESULT OnFolderChange(
3411        [in] IFileDialog *pfd);
3412
3413    HRESULT OnSelectionChange(
3414        [in] IFileDialog *pfd);
3415
3416    HRESULT OnShareViolation(
3417        [in] IFileDialog *pfd,
3418        [in] IShellItem *psi,
3419        [out] FDE_SHAREVIOLATION_RESPONSE *pResponse);
3420
3421    HRESULT OnTypeChange(
3422        [in] IFileDialog *pfd);
3423
3424    HRESULT OnOverwrite(
3425        [in] IFileDialog *pfd,
3426        [in] IShellItem *psi,
3427        [out] FDE_OVERWRITE_RESPONSE *pResponse);
3428}
3429
3430/*****************************************************************************
3431 * IModalWindow interface
3432 */
3433[
3434 object,
3435 uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802),
3436 pointer_default(unique)
3437]
3438interface IModalWindow : IUnknown
3439{
3440    [local]
3441    HRESULT Show(
3442        [in, unique, annotation("__in_opt")] HWND hwndOwner);
3443
3444    [call_as(Show)]
3445    HRESULT RemoteShow(
3446        [in, unique] HWND hwndOwner);
3447}
3448
3449typedef [v1_enum] enum FDAP
3450{
3451    FDAP_BOTTOM    = 0,
3452    FDAP_TOP       = 1
3453} FDAP;
3454
3455/*****************************************************************************
3456 * IFileDialog interface
3457 */
3458[
3459 object,
3460 uuid(42F85136-DB7E-439C-85F1-E4075D135FC8),
3461 pointer_default(unique)
3462]
3463interface IFileDialog : IModalWindow
3464{
3465    [v1_enum] enum _FILEOPENDIALOGOPTIONS
3466    {
3467        FOS_OVERWRITEPROMPT     = 0x00000002,
3468        FOS_STRICTFILETYPES     = 0x00000004,
3469        FOS_NOCHANGEDIR         = 0x00000008,
3470        FOS_PICKFOLDERS         = 0x00000020,
3471        FOS_FORCEFILESYSTEM     = 0x00000040,
3472        FOS_ALLNONSTORAGEITEMS  = 0x00000080,
3473        FOS_NOVALIDATE          = 0x00000100,
3474        FOS_ALLOWMULTISELECT    = 0x00000200,
3475        FOS_PATHMUSTEXIST       = 0x00000800,
3476        FOS_FILEMUSTEXIST       = 0x00001000,
3477        FOS_CREATEPROMPT        = 0x00002000,
3478        FOS_SHAREAWARE          = 0x00004000,
3479        FOS_NOREADONLYRETURN    = 0x00008000,
3480        FOS_NOTESTFILECREATE    = 0x00010000,
3481        FOS_HIDEMRUPLACES       = 0x00020000,
3482        FOS_HIDEPINNEDPLACES    = 0x00040000,
3483        FOS_NODEREFERENCELINKS  = 0x00100000,
3484        FOS_DONTADDTORECENT     = 0x02000000,
3485        FOS_FORCESHOWHIDDEN     = 0x10000000,
3486        FOS_DEFAULTNOMINIMODE   = 0x20000000,
3487        FOS_FORCEPREVIEWPANEON  = 0x40000000
3488    };
3489    typedef DWORD FILEOPENDIALOGOPTIONS;
3490
3491    HRESULT SetFileTypes(
3492        [in] UINT cFileTypes,
3493        [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec);
3494
3495    HRESULT SetFileTypeIndex(
3496        [in] UINT iFileType);
3497
3498    HRESULT GetFileTypeIndex(
3499        [out] UINT *piFileType);
3500
3501    HRESULT Advise(
3502        [in] IFileDialogEvents *pfde,
3503        [out] DWORD *pdwCookie);
3504
3505    HRESULT Unadvise(
3506        [in] DWORD dwCookie);
3507
3508    HRESULT SetOptions(
3509        [in] FILEOPENDIALOGOPTIONS fos);
3510
3511    HRESULT GetOptions(
3512        [in] FILEOPENDIALOGOPTIONS *pfos);
3513
3514    HRESULT SetDefaultFolder(
3515        [in] IShellItem *psi);
3516
3517    HRESULT SetFolder(
3518        [in] IShellItem *psi);
3519
3520    HRESULT GetFolder(
3521        [out] IShellItem **ppsi);
3522
3523    HRESULT GetCurrentSelection(
3524        [out] IShellItem **ppsi);
3525
3526    HRESULT SetFileName(
3527        [in, string] LPCWSTR pszName);
3528
3529    HRESULT GetFileName(
3530        [out, string] LPWSTR *pszName);
3531
3532    HRESULT SetTitle(
3533        [in, string] LPCWSTR pszTitle);
3534
3535    HRESULT SetOkButtonLabel(
3536        [in, string] LPCWSTR pszText);
3537
3538    HRESULT SetFileNameLabel(
3539        [in, string] LPCWSTR pszLabel);
3540
3541    HRESULT GetResult(
3542        [out] IShellItem **ppsi);
3543
3544    HRESULT AddPlace(
3545        [in] IShellItem *psi,
3546        [in] FDAP fdap);
3547
3548    HRESULT SetDefaultExtension(
3549        [in, string] LPCWSTR pszDefaultExtension);
3550
3551    HRESULT Close(
3552        [in] HRESULT hr);
3553
3554    HRESULT SetClientGuid(
3555        [in] REFGUID guid);
3556
3557    HRESULT ClearClientData();
3558
3559    HRESULT SetFilter(
3560        [in] IShellItemFilter *pFilter);
3561}
3562
3563/*****************************************************************************
3564 * IFileDialog2 interface
3565 */
3566[
3567 object,
3568 uuid(61744FC7-85B5-4791-A9B0-272276309B13),
3569 pointer_default(unique)
3570]
3571interface IFileDialog2 : IFileDialog
3572{
3573    HRESULT SetCancelButtonLabel(
3574        [in] LPCWSTR pszLabel);
3575
3576    HRESULT SetNavigationRoot(
3577        [in] IShellItem *psi);
3578}
3579
3580/*****************************************************************************
3581 * IFileOperationProgressSink interface
3582 */
3583[
3584 object,
3585 uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2),
3586 pointer_default(unique)
3587]
3588interface IFileOperationProgressSink : IUnknown
3589{
3590    HRESULT StartOperations();
3591
3592    HRESULT FinishOperations(
3593        [in] HRESULT hrResult);
3594
3595    HRESULT PreRenameItem(
3596        [in] DWORD dwFlags,
3597        [in] IShellItem *psiItem,
3598        [in, unique, string] LPCWSTR pszNewName);
3599
3600    HRESULT PostRenameItem(
3601        [in] DWORD dwFlags,
3602        [in] IShellItem *psiItem,
3603        [in, string] LPCWSTR pszNewName,
3604        [in] HRESULT hrRename,
3605        [in] IShellItem *psiNewlyCreated);
3606
3607    HRESULT PreMoveItem(
3608        [in] DWORD dwFlags,
3609        [in] IShellItem *psiItem,
3610        [in] IShellItem *psiDestinationFolder,
3611        [in, unique, string] LPCWSTR pszNewName);
3612
3613    HRESULT PostMoveItem(
3614        [in] DWORD dwFlags,
3615        [in] IShellItem *psiItem,
3616        [in] IShellItem *psiDestinationFolder,
3617        [in, unique, string] LPCWSTR pszNewName,
3618        [in] HRESULT hrMove,
3619        [in] IShellItem *psiNewlyCreated);
3620
3621    HRESULT PreCopyItem(
3622        [in] DWORD dwFlags,
3623        [in] IShellItem *psiItem,
3624        [in] IShellItem *psiDestinationFolder,
3625        [in, unique, string] LPCWSTR pszNewName);
3626
3627    HRESULT PostCopyItem(
3628        [in] DWORD dwFlags,
3629        [in] IShellItem *psiItem,
3630        [in] IShellItem *psiDestinationFolder,
3631        [in, unique, string] LPCWSTR pszNewName,
3632        [in] HRESULT hrCopy,
3633        [in] IShellItem *psiNewlyCreated);
3634
3635    HRESULT PreDeleteItem(
3636        [in] DWORD dwFlags,
3637        [in] IShellItem *psiItem);
3638
3639    HRESULT PostDeleteItem(
3640        [in] DWORD dwFlags,
3641        [in] IShellItem *psiItem,
3642        [in] HRESULT hrDelete,
3643        [in] IShellItem *psiNewlyCreated);
3644
3645    HRESULT PreNewItem(
3646        [in] DWORD dwFlags,
3647        [in] IShellItem *psiDestinationFolder,
3648        [in, unique, string] LPCWSTR pszNewName);
3649
3650    HRESULT PostNewItem(
3651        [in] DWORD dwFlags,
3652        [in] IShellItem *psiDestinationFolder,
3653        [in, unique, string] LPCWSTR pszNewName,
3654        [in, unique, string] LPCWSTR pszTemplateName,
3655        [in] DWORD dwFileAttributes,
3656        [in] HRESULT hrNew,
3657        [in] IShellItem *psiNewItem);
3658
3659    HRESULT UpdateProgress(
3660        [in] UINT iWorkTotal,
3661        [in] UINT iWorkSoFar);
3662
3663    HRESULT ResetTimer();
3664
3665    HRESULT PauseTimer();
3666
3667    HRESULT ResumeTimer();
3668}
3669
3670/*****************************************************************************
3671 * IFileSaveDialog interface
3672 */
3673[
3674 object,
3675 uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB),
3676 pointer_default(unique)
3677]
3678interface IFileSaveDialog : IFileDialog
3679{
3680    HRESULT SetSaveAsItem(
3681        [in] IShellItem *psi);
3682
3683    HRESULT SetProperties(
3684        [in] IPropertyStore *pStore);
3685
3686    HRESULT SetCollectedProperties(
3687        [in] IPropertyDescriptionList *pList,
3688        [in] BOOL fAppendDefault);
3689
3690    HRESULT GetProperties(
3691        [in] IPropertyStore **ppStore);
3692
3693    HRESULT ApplyProperties(
3694        [in] IShellItem *psi,
3695        [in] IPropertyStore *pStore,
3696        [in, unique] HWND hwnd,
3697        [in, unique] IFileOperationProgressSink *pSink);
3698}
3699
3700
3701/*****************************************************************************
3702 * IFileOpenDialog interface
3703 */
3704[
3705 object,
3706 uuid(D57C7288-D4AD-4768-BE02-9D969532D960),
3707 pointer_default(unique)
3708]
3709interface IFileOpenDialog : IFileDialog
3710{
3711    HRESULT GetResults(
3712        [out] IShellItemArray **ppenum);
3713
3714    HRESULT GetSelectedItems(
3715        [out] IShellItemArray **ppsai);
3716}
3717
3718typedef [v1_enum] enum CDCONTROLSTATEF
3719{
3720    CDCS_INACTIVE       = 0x0,
3721    CDCS_ENABLED        = 0x1,
3722    CDCS_VISIBLE        = 0x2,
3723    CDCS_ENABLEDVISIBLE = 0x3
3724} CDCONTROLSTATEF;
3725cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)")
3726/*****************************************************************************
3727 * IFileDialogCustomize interface
3728 */
3729[
3730 object,
3731 uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034),
3732 pointer_default(unique)
3733]
3734interface IFileDialogCustomize : IUnknown
3735{
3736    HRESULT EnableOpenDropDown(
3737        [in] DWORD dwIDCtl);
3738
3739    HRESULT AddMenu(
3740        [in] DWORD dwIDCtl,
3741        [in, string] LPCWSTR pszLabel);
3742
3743    HRESULT AddPushButton(
3744        [in] DWORD dwIDCtl,
3745        [in, string] LPCWSTR pszLabel);
3746
3747    HRESULT AddComboBox(
3748        [in] DWORD dwIDCtl);
3749
3750    HRESULT AddRadioButtonList(
3751        [in] DWORD dwIDCtl);
3752
3753    HRESULT AddCheckButton(
3754        [in] DWORD dwIDCtl,
3755        [in, string] LPCWSTR pszLabel,
3756        [in] BOOL bChecked);
3757
3758    HRESULT AddEditBox(
3759        [in] DWORD dwIDCtl,
3760        [in, string] LPCWSTR pszText);
3761
3762    HRESULT AddSeparator(
3763        [in] DWORD dwIDCtl);
3764
3765    HRESULT AddText(
3766        [in] DWORD dwIDCtl,
3767        [in, string] LPCWSTR pszText);
3768
3769    HRESULT SetControlLabel(
3770        [in] DWORD dwIDCtl,
3771        [in, string] LPCWSTR pszLabel);
3772
3773    HRESULT GetControlState(
3774        [in] DWORD dwIDCtl,
3775        [out] CDCONTROLSTATEF *pdwState);
3776
3777    HRESULT SetControlState(
3778        [in] DWORD dwIDCtl,
3779        [in] CDCONTROLSTATEF dwState);
3780
3781    HRESULT GetEditBoxText(
3782        [in] DWORD dwIDCtl,
3783        [out, string] WCHAR **ppszText);
3784
3785    HRESULT SetEditBoxText(
3786        [in] DWORD dwIDCtl,
3787        [in, string] LPCWSTR pszText);
3788
3789    HRESULT GetCheckButtonState(
3790        [in] DWORD dwIDCtl,
3791        [out] BOOL *pbChecked);
3792
3793    HRESULT SetCheckButtonState(
3794        [in] DWORD dwIDCtl,
3795        [in] BOOL bChecked);
3796
3797    HRESULT AddControlItem(
3798        [in] DWORD dwIDCtl,
3799        [in] DWORD dwIDItem,
3800        [in] LPCWSTR pszLabel);
3801
3802    HRESULT RemoveControlItem(
3803        [in] DWORD dwIDCtl,
3804        [in] DWORD dwIDItem);
3805
3806    HRESULT RemoveAllControlItems(
3807        [in] DWORD dwIDCtl);
3808
3809    HRESULT GetControlItemState(
3810        [in] DWORD dwIDCtl,
3811        [in] DWORD dwIDItem,
3812        [out] CDCONTROLSTATEF *pdwState);
3813
3814    HRESULT SetControlItemState(
3815        [in] DWORD dwIDCtl,
3816        [in] DWORD dwIDItem,
3817        [in] CDCONTROLSTATEF dwState);
3818
3819    HRESULT GetSelectedControlItem(
3820        [in] DWORD dwIDCtl,
3821        [out] DWORD *pdwIDItem);
3822
3823    HRESULT SetSelectedControlItem(
3824        [in] DWORD dwIDCtl,
3825        [in] DWORD dwIDItem);
3826
3827    HRESULT StartVisualGroup(
3828        [in] DWORD dwIDCtl,
3829        [in, string] LPCWSTR pszLabel);
3830
3831    HRESULT EndVisualGroup();
3832
3833    HRESULT MakeProminent(
3834        [in] DWORD dwIDCtl);
3835
3836    HRESULT SetControlItemText(
3837        [in] DWORD dwIDCtl,
3838        [in] DWORD dwIDItem,
3839        [in, string] LPCWSTR pszLabel);
3840}
3841
3842/*****************************************************************************
3843 * IFileDialogControlEvents interface
3844 */
3845[
3846 object,
3847 uuid(36116642-D713-4B97-9B83-7484A9D00433),
3848 pointer_default(unique)
3849]
3850interface IFileDialogControlEvents : IUnknown
3851{
3852    HRESULT OnItemSelected(
3853        [in] IFileDialogCustomize *pfdc,
3854        [in] DWORD dwIDCtl,
3855        [in] DWORD dwIDItem);
3856
3857    HRESULT OnButtonClicked(
3858        [in] IFileDialogCustomize *pfdc,
3859        [in] DWORD dwIDCtl);
3860
3861    HRESULT OnCheckButtonToggled(
3862        [in] IFileDialogCustomize *pfdc,
3863        [in] BOOL dwIDCtl,
3864        [in] BOOL bChecked);
3865
3866    HRESULT OnControlActivating(
3867        [in] IFileDialogCustomize *pfdc,
3868        [in] DWORD dwIDCtl);
3869}
3870
3871typedef [v1_enum] enum tagKF_CATEGORY
3872{
3873    KF_CATEGORY_VIRTUAL = 0x00000001,
3874    KF_CATEGORY_FIXED   = 0x00000002,
3875    KF_CATEGORY_COMMON  = 0x00000003,
3876    KF_CATEGORY_PERUSER = 0x00000004
3877} KF_CATEGORY;
3878
3879typedef [v1_enum] enum tagKF_REDIRECTION_CAPABILITIES
3880{
3881    KF_REDIRECTION_CAPABILITIES_ALLOW_ALL               = 0x000000ff,
3882    KF_REDIRECTION_CAPABILITIES_REDIRECTABLE            = 0x00000001,
3883    KF_REDIRECTION_CAPABILITIES_DENY_ALL                = 0x000fff00,
3884    KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED  = 0x00000100,
3885    KF_REDIRECTION_CAPABILITIES_DENY_POLICY             = 0x00000200,
3886    KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS        = 0x00000400
3887} KF_REDIRECTION_CAPABILITIES;
3888
3889typedef [v1_enum] enum tagKF_DEFINITION_FLAGS
3890{
3891    KFDF_LOCAL_REDIRECT_ONLY    = 0x00000002,
3892    KFDF_ROAMABLE               = 0x00000004,
3893    KFDF_PRECREATE              = 0x00000008,
3894    KFDF_STREAM                 = 0x00000010,
3895    KFDF_PUBLISHEXPANDEDPATH    = 0x00000020
3896} KF_DEFINITION_FLAGS;
3897
3898typedef struct tagKNOWNFOLDER_DEFINITION
3899{
3900    KF_CATEGORY         category;
3901    LPWSTR              pszName;
3902    LPWSTR              pszDescription;
3903    KNOWNFOLDERID       fidParent;
3904    LPWSTR              pszRelativePath;
3905    LPWSTR              pszParsingName;
3906    LPWSTR              pszTooltip;
3907    LPWSTR              pszLocalizedName;
3908    LPWSTR              pszIcon;
3909    LPWSTR              pszSecurity;
3910    DWORD               dwAttributes;
3911    KF_DEFINITION_FLAGS kfdFlags;
3912    FOLDERTYPEID        ftidType;
3913} KNOWNFOLDER_DEFINITION;
3914
3915[
3916 object,
3917 uuid(3aa7af7e-9b36-420C-a8e3-f77d4674a488),
3918 pointer_default(ref)
3919]
3920interface IKnownFolder : IUnknown
3921{
3922    HRESULT GetId(
3923        [out] KNOWNFOLDERID *pkfid);
3924
3925    HRESULT GetCategory(
3926        [out] KF_CATEGORY *pCategory);
3927
3928    HRESULT GetShellItem(
3929        [in] DWORD dwFlags,
3930        [in] REFIID riid,
3931        [out, iid_is(riid)] void **ppv);
3932
3933    HRESULT GetPath(
3934        [in] DWORD dwFlags,
3935        [out, string] LPWSTR *ppszPath);
3936
3937    HRESULT SetPath(
3938        [in] DWORD dwFlags,
3939        [in, string] LPCWSTR pszPath);
3940
3941    HRESULT GetIDList(
3942        [in] DWORD dwFlags,
3943        [out] PIDLIST_ABSOLUTE *ppidl);
3944
3945    HRESULT GetFolderType(
3946        [out] FOLDERTYPEID *pftid);
3947
3948    HRESULT GetRedirectionCapabilities(
3949        [out] KF_REDIRECTION_CAPABILITIES *pCapabilities);
3950
3951    HRESULT GetFolderDefinition(
3952        [out] KNOWNFOLDER_DEFINITION *pKFD);
3953}
3954
3955typedef [v1_enum] enum tagKF_REDIRECT_FLAGS
3956{
3957    KF_REDIRECT_USER_EXCLUSIVE      = 0x00000001,
3958    KF_REDIRECT_COPY_SOURCE_DACL    = 0x00000002,
3959    KF_REDIRECT_OWNER_USER          = 0x00000004,
3960    KF_REDIRECT_SET_OWNER_EXPLICIT  = 0x00000008,
3961    KF_REDIRECT_CHECK_ONLY          = 0x00000010,
3962    KF_REDIRECT_WITH_UI             = 0x00000020,
3963    KF_REDIRECT_UNPIN               = 0x00000040,
3964    KF_REDIRECT_PIN                 = 0x00000080,
3965    KF_REDIRECT_COPY_CONTENTS       = 0x00000200,
3966    KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400,
3967    KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800
3968} KF_REDIRECT_FLAGS;
3969
3970[
3971    object,
3972    uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018),
3973    pointer_default(ref)
3974]
3975interface IKnownFolderManager : IUnknown
3976{
3977    typedef [v1_enum] enum tagFFFP_MODE
3978    {
3979        FFFP_EXACTMATCH,
3980        FFFP_NEARESTPARENTMATCH
3981    } FFFP_MODE;
3982
3983    HRESULT FolderIdFromCsidl(
3984        [in] int nCsidl,
3985        [out] KNOWNFOLDERID *pfid);
3986
3987    HRESULT FolderIdToCsidl(
3988        [in] REFKNOWNFOLDERID rfid,
3989        [out] int *pnCsidl);
3990
3991    HRESULT GetFolderIds(
3992        [out, size_is(, *pCount)] KNOWNFOLDERID **ppKFId,
3993        [in, out] UINT *pCount);
3994
3995    HRESULT GetFolder(
3996        [in] REFKNOWNFOLDERID rfid,
3997        [out] IKnownFolder **ppkf);
3998
3999    HRESULT GetFolderByName(
4000        [in, string] LPCWSTR pszCanonicalName,
4001        [out] IKnownFolder **ppkf);
4002
4003    HRESULT RegisterFolder(
4004        [in] REFKNOWNFOLDERID rfid,
4005        [in] KNOWNFOLDER_DEFINITION const *pKFD);
4006
4007    HRESULT UnregisterFolder(
4008        [in] REFKNOWNFOLDERID rfid);
4009
4010    HRESULT FindFolderFromPath(
4011        [in, string] LPCWSTR pszPath,
4012        [in] FFFP_MODE mode,
4013        [out] IKnownFolder **ppkf);
4014
4015    HRESULT FindFolderFromIDList(
4016        [in] PCIDLIST_ABSOLUTE pidl,
4017        [out] IKnownFolder **ppkf);
4018
4019    HRESULT Redirect(
4020        [in] REFKNOWNFOLDERID rfid,
4021        [in, unique] HWND hwnd,
4022        [in] KF_REDIRECT_FLAGS flags,
4023        [in, unique, string] LPCWSTR pszTargetPath,
4024        [in] UINT cFolders,
4025        [in, size_is(cFolders), unique] KNOWNFOLDERID const *pExclusion,
4026        [out, string] LPWSTR *ppszError);
4027}
4028
4029/* function for releasing structure returned from IKnownFolder::GetFolderDefinition */
4030cpp_quote("static inline void FreeKnownFolderDefinitionFields(KNOWNFOLDER_DEFINITION *pKFD)")
4031cpp_quote("{")
4032cpp_quote("    CoTaskMemFree(pKFD->pszName);")
4033cpp_quote("    CoTaskMemFree(pKFD->pszDescription);")
4034cpp_quote("    CoTaskMemFree(pKFD->pszRelativePath);")
4035cpp_quote("    CoTaskMemFree(pKFD->pszParsingName);")
4036cpp_quote("    CoTaskMemFree(pKFD->pszTooltip);")
4037cpp_quote("    CoTaskMemFree(pKFD->pszLocalizedName);")
4038cpp_quote("    CoTaskMemFree(pKFD->pszIcon);")
4039cpp_quote("    CoTaskMemFree(pKFD->pszSecurity);")
4040cpp_quote("}")
4041
4042typedef [v1_enum] enum ASSOCIATIONLEVEL {
4043    AL_MACHINE,
4044    AL_EFFECTIVE,
4045    AL_USER
4046} ASSOCIATIONLEVEL;
4047
4048typedef [v1_enum] enum ASSOCIATIONTYPE {
4049    AT_FILEEXTENSION,
4050    AT_URLPROTOCOL,
4051    AT_STARTMENUCLIENT,
4052    AT_MIMETYPE
4053} ASSOCIATIONTYPE;
4054
4055[
4056    object,
4057    uuid(4e530b0a-e611-4c77-a3ac-9031d022281b),
4058    pointer_default(unique)
4059]
4060interface IApplicationAssociationRegistration : IUnknown
4061{
4062    HRESULT QueryCurrentDefault(
4063        [in, string] LPCWSTR pszQuery,
4064        [in] ASSOCIATIONTYPE atQueryType,
4065        [in] ASSOCIATIONLEVEL alQueryLevel,
4066        [out, string] LPWSTR *ppszAssociation);
4067
4068    HRESULT QueryAppIsDefault(
4069        [in, string] LPCWSTR pszQuery,
4070        [in] ASSOCIATIONTYPE atQueryType,
4071        [in] ASSOCIATIONLEVEL alQueryLevel,
4072        [in, string] LPCWSTR pszAppRegistryName,
4073        [out] BOOL *pfDefault);
4074
4075    HRESULT QueryAppIsDefaultAll(
4076        [in] ASSOCIATIONLEVEL alQueryLevel,
4077        [in, string] LPCWSTR pszAppRegistryName,
4078        [out] BOOL* pfDefault);
4079
4080    HRESULT SetAppAsDefault(
4081        [in, string] LPCWSTR pszAppRegistryName,
4082        [in, string] LPCWSTR pszSet,
4083        [in] ASSOCIATIONTYPE atSetType);
4084
4085    HRESULT SetAppAsDefaultAll(
4086        [in, string] LPCWSTR pszAppRegistryName);
4087
4088    HRESULT ClearUserAssociations();
4089}
4090
4091[
4092    uuid(6332debf-87b5-4670-90c0-5e57b408a49e),
4093    object,
4094    pointer_default(unique)
4095]
4096interface ICustomDestinationList : IUnknown
4097{
4098    typedef [v1_enum] enum KNOWNDESTCATEGORY {
4099        KDC_FREQUENT = 1,
4100        KDC_RECENT
4101    } KNOWNDESTCATEGORY;
4102
4103    HRESULT SetAppID([in, string] LPCWSTR pszAppID);
4104
4105    HRESULT BeginList(
4106            [out] UINT *pcMinSlots,
4107            [in] REFIID riid,
4108            [out, iid_is(riid)] void **ppv);
4109
4110    HRESULT AppendCategory(
4111            [in, string] LPCWSTR pszCategory,
4112            [in] IObjectArray *poa);
4113
4114    HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category);
4115    HRESULT AddUserTasks([in] IObjectArray *poa);
4116    HRESULT CommitList();
4117
4118    HRESULT GetRemovedDestinations(
4119            [in] REFIID riid,
4120            [out, iid_is(riid)] void **ppv);
4121
4122    HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID);
4123    HRESULT AbortList();
4124}
4125
4126[
4127    uuid(ddefe873-6997-4e68-be26-39b633adbe12),
4128    object,
4129    pointer_default(unique)
4130]
4131interface IQueryCancelAutoPlay : IUnknown
4132{
4133    HRESULT AllowAutoPlay([in, string] LPCWSTR path,
4134                          [in] DWORD content_type,
4135                          [in, string] LPCWSTR label,
4136                          [in] DWORD serial_number);
4137}
4138
4139[
4140    uuid(d594d0d8-8da7-457b-b3b4-ce5dbaac0b88),
4141    pointer_default(unique)
4142]
4143interface ITransferAdviseSink : IUnknown
4144{
4145    [v1_enum] enum _TRANSFER_ADVISE_STATE
4146    {
4147        TS_NONE          = 0,
4148        TS_PERFORMING    = 1,
4149        TS_PREPARING     = 2,
4150        TS_INDETERMINATE = 4
4151    };
4152    typedef DWORD TRANSFER_ADVISE_STATE;
4153
4154    HRESULT UpdateProgress([in] ULONGLONG size_current,
4155                           [in] ULONGLONG size_total,
4156                           [in] INT files_current,
4157                           [in] INT files_total,
4158                           [in] INT folders_current,
4159                           [in] INT folders_total);
4160    HRESULT UpdateTransferState([in] TRANSFER_ADVISE_STATE state);
4161    HRESULT ConfirmOverwrite([in] IShellItem *source,
4162                             [in] IShellItem *dest_parent,
4163                             [in, string] LPCWSTR name);
4164    HRESULT ConfirmEncryptLoss([in] IShellItem *source);
4165    HRESULT FileFailure([in] IShellItem *item,
4166                        [in, unique, string] LPCWSTR itemname,
4167                        [in] HRESULT hr,
4168                        [in, out, unique, size_is(crename)] LPWSTR rename,
4169                        [in] ULONG crename);
4170    HRESULT SubStreamFailure([in] IShellItem *item,
4171                             [in, string] LPCWSTR stream,
4172                             [in] HRESULT hr);
4173    HRESULT PropertyFailure([in] IShellItem *item,
4174                            [in, unique] const PROPERTYKEY *key,
4175                            [in] HRESULT hr);
4176}
4177
4178[v1_enum] enum _TRANSFER_SOURCE_FLAGS
4179{
4180    TSF_NORMAL                     = 0,
4181    TSF_FAIL_EXIST                 = 0,
4182    TSF_RENAME_EXIST               = 0x1,
4183    TSF_OVERWRITE_EXIST            = 0x2,
4184    TSF_ALLOW_DECRYPTION           = 0x4,
4185    TSF_NO_SECURITY                = 0x8,
4186    TSF_COPY_CREATION_TIME         = 0x10,
4187    TSF_COPY_WRITE_TIME            = 0x20,
4188    TSF_USE_FULL_ACCESS            = 0x40,
4189    TSF_DELETE_RECYCLE_IF_POSSIBLE = 0x80,
4190    TSF_COPY_HARD_LINK             = 0x100,
4191    TSF_COPY_LOCALIZED_NAME        = 0x200,
4192    TSF_MOVE_AS_COPY_DELETE        = 0x400,
4193    TSF_SUSPEND_SHELLEVENTS        = 0x800
4194};
4195typedef DWORD TRANSFER_SOURCE_FLAGS;
4196
4197[
4198    uuid(00adb003-bde9-45c6-8e29-d09f9353e108),
4199    object,
4200    pointer_default(unique)
4201]
4202interface ITransferSource : IUnknown
4203{
4204    HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie);
4205    HRESULT Unadvise([in] DWORD cookie);
4206    HRESULT SetProperties([in] IPropertyChangeArray *array);
4207    HRESULT OpenItem([in] IShellItem *item,
4208                     [in] TRANSFER_SOURCE_FLAGS flags,
4209                     [in] REFIID riid,
4210                     [out, iid_is(riid)] void **ppv);
4211    HRESULT MoveItem([in] IShellItem *item,
4212                     [in] IShellItem *parent_dest,
4213                     [in, string] LPCWSTR name_dest,
4214                     [in] TRANSFER_SOURCE_FLAGS flags,
4215                     [out] IShellItem **newitem);
4216    HRESULT RecycleItem([in] IShellItem *source,
4217                        [in] IShellItem *parent_dest,
4218                        [in] TRANSFER_SOURCE_FLAGS flags,
4219                        [out] IShellItem **new_dest);
4220    HRESULT RemoveItem([in] IShellItem *source, [in] TRANSFER_SOURCE_FLAGS flags);
4221    HRESULT RenameItem([in] IShellItem *source,
4222                       [in, string] LPCWSTR newname,
4223                       [in] TRANSFER_SOURCE_FLAGS flags,
4224                       [out] IShellItem **new_dest);
4225    HRESULT LinkItem([in] IShellItem *source,
4226                     [in] IShellItem *parent_dest,
4227                     [in, unique, string] LPCWSTR new_name,
4228                     [in] TRANSFER_SOURCE_FLAGS flags,
4229                     [out] IShellItem **new_dest);
4230    HRESULT ApplyPropertiesToItem([in] IShellItem *source, [out] IShellItem **newitem);
4231    HRESULT GetDefaultDestinationName([in] IShellItem *source,
4232                                      [in] IShellItem *parent_dest,
4233                                      [out, string] LPWSTR *dest_name);
4234    HRESULT EnterFolder([in] IShellItem *child_folder);
4235    HRESULT LeaveFolder([in] IShellItem *child_folder);
4236}
4237
4238[
4239    uuid(48addd32-3ca5-4124-abe3-b5a72531b207),
4240    object,
4241    pointer_default(unique)
4242]
4243interface ITransferDestination : IUnknown
4244{
4245    HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie);
4246    HRESULT Unadvise([in] DWORD cookie);
4247    HRESULT CreateItem([in, string] LPCWSTR name,
4248                       [in] DWORD attr,
4249                       [in] ULONGLONG size,
4250                       [in] TRANSFER_SOURCE_FLAGS flags,
4251                       [in] REFIID riid,
4252                       [out, iid_is(riid)] void **ppv,
4253                       [in] REFIID resources,
4254                       [out, iid_is(riid)] void **presources);
4255}
4256
4257[
4258    uuid(92218cab-ecaa-4335-8133-807fd234c2ee),
4259    object,
4260    pointer_default(unique)
4261]
4262interface IAssocHandlerInvoker : IUnknown
4263{
4264    HRESULT SupportsSelection();
4265    HRESULT Invoke();
4266}
4267
4268[
4269    uuid(f04061ac-1659-4a3f-a954-775aa57fc083),
4270    object,
4271    pointer_default(unique)
4272]
4273interface IAssocHandler : IUnknown
4274{
4275    HRESULT GetName([out, string] LPWSTR *name);
4276    HRESULT GetUIName([out, string] LPWSTR *uiname);
4277    HRESULT GetIconLocation([out, string] LPWSTR *path,
4278                            [out] int *index);
4279    HRESULT IsRecommended();
4280    HRESULT MakeDefault([in, string] LPCWSTR description);
4281    HRESULT Invoke([in] IDataObject *object);
4282    HRESULT CreateInvoker([in] IDataObject *object,
4283                          [out] IAssocHandlerInvoker **invoker);
4284}
4285
4286[
4287    uuid(973810ae-9599-4b88-9e4d-6ee98c9552da),
4288    object,
4289    pointer_default(unique)
4290]
4291interface IEnumAssocHandlers : IUnknown
4292{
4293    HRESULT Next([in]  ULONG count,
4294                 [out, size_is(count), length_is(*fetched)] IAssocHandler **handlers,
4295                 [out] ULONG *fetched);
4296}
4297
4298typedef enum ASSOC_FILTER
4299{
4300    ASSOC_FILTER_NONE = 0,
4301    ASSOC_FILTER_RECOMMENDED
4302} ASSOC_FILTER;
4303cpp_quote("HRESULT WINAPI SHAssocEnumHandlers(PCWSTR extra, ASSOC_FILTER filter, IEnumAssocHandlers **handlersenum);")
4304
4305typedef [v1_enum] enum ACTIVATEOPTIONS
4306{
4307    AO_NONE             = 0x00000000,
4308    AO_DESIGNMODE       = 0x00000001,
4309    AO_NOERRORUI        = 0x00000002,
4310    AO_NOSPLASHSCREEN   = 0x00000004
4311} ACTIVATEOPTIONS;
4312
4313[
4314    uuid(2e941141-7f97-4756-ba1d-9decde894a3d),
4315    object,
4316    pointer_default(unique)
4317]
4318interface IApplicationActivationManager : IUnknown
4319{
4320    HRESULT ActivateApplication([in] LPCWSTR appusermodelid,
4321                                [in, unique] LPCWSTR arguments,
4322                                [in] ACTIVATEOPTIONS options,
4323                                [out] DWORD *processid);
4324    HRESULT ActivateForFile([in] LPCWSTR appusermodelid,
4325                            [in] IShellItemArray *itemarray,
4326                            [in, unique] LPCWSTR verb,
4327                            [out] DWORD *processid);
4328    HRESULT ActivateForProtocol([in] LPCWSTR appusermodelid,
4329                                [in] IShellItemArray *itemarray,
4330                                [out] DWORD *processid);
4331}
4332
4333/*****************************************************************************
4334 * ShellObjects typelibrary
4335 */
4336[
4337 uuid(50A7E9B1-70EF-11D1-B75A-00A0C90564FE),
4338 lcid(0x0000),
4339 version(1.0)
4340]
4341library ShellObjects
4342{
4343    [
4344        uuid(71F96385-DDD6-48D3-A0C1-AE06E8B055FB)
4345    ]
4346    coclass ExplorerBrowser
4347    {
4348        interface IExplorerBrowser;
4349    }
4350
4351    [
4352        uuid(DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7)
4353    ]
4354    coclass FileOpenDialog
4355    {
4356        interface IFileOpenDialog;
4357    }
4358
4359    [
4360        uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B)
4361    ]
4362    coclass FileSaveDialog
4363    {
4364        interface IFileSaveDialog;
4365    }
4366
4367    [
4368        uuid(AE054212-3535-4430-83ED-D501AA6680E6)
4369    ]
4370    coclass NamespaceTreeControl
4371    {
4372        interface INameSpaceTreeControl2;
4373    }
4374
4375    [
4376        uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a)
4377    ]
4378    coclass KnownFolderManager
4379    {
4380        interface IKnownFolderManager;
4381    }
4382
4383    [
4384        uuid(591209c7-767b-42b2-9fba-44ee4615f2c7)
4385    ]
4386    coclass ApplicationAssociationRegistration
4387    {
4388        interface IApplicationAssociationRegistration;
4389    }
4390
4391    [
4392         uuid(00021401-0000-0000-c000-000000000046)
4393    ]
4394    coclass ShellLink
4395    {
4396        interface IShellLinkW;
4397    }
4398
4399    [
4400        uuid(56fdf344-fd6d-11d0-958a-006097c9a090)
4401    ]
4402    coclass TaskbarList
4403    {
4404        interface ITaskbarList4;
4405    }
4406
4407    [
4408        uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6)
4409    ]
4410    coclass DestinationList {
4411        interface ICustomDestinationList;
4412    }
4413
4414    [
4415        uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a)
4416    ]
4417    coclass EnumerableObjectCollection
4418    {
4419        interface IEnumObjects;
4420    }
4421
4422    [
4423        uuid(331f1768-05a9-4ddd-b86e-dae34ddc998a)
4424    ]
4425    coclass QueryCancelAutoPlay
4426    {
4427        interface IQueryCancelAutoPlay;
4428    }
4429
4430    [
4431        uuid(9ac9fbe1-e0a2-4ad6-b4ee-e212013ea917)
4432    ]
4433    coclass ShellItem {
4434        interface IShellItem2;
4435    }
4436
4437    [
4438        uuid(45ba127d-10a8-46ea-8ab7-56ea9078943c)
4439    ]
4440    coclass ApplicationActivationManager
4441    {
4442        interface IApplicationActivationManager;
4443    }
4444
4445#ifdef __REACTOS__
4446    [
4447        uuid(0010890e-8789-413c-adbc-48f5b511b3af)
4448    ]
4449    coclass UserNotification
4450    {
4451        interface IUserNotification;
4452    }
4453#endif // __REACTOS__
4454
4455}
4456
4457enum _OPPROGDLGF
4458{
4459    OPPROGDLG_DEFAULT = 0,
4460    OPPROGDLG_ENABLEPAUSE = 0x80,
4461    OPPROGDLG_ALLOWUNDO = 0x100,
4462    OPPROGDLG_DONTDISPLAYSOURCEPATH = 0x200,
4463    OPPROGDLG_DONTDISPLAYDESTPATH = 0x400,
4464    OPPROGDLG_NOMULTIDAYESTIMATES = 0x800,
4465    OPPROGDLG_DONTDISPLAYLOCATIONS = 0x1000
4466};
4467typedef DWORD OPPROGDLGF;
4468
4469enum _PDMODE
4470{
4471    PDM_DEFAULT = 0,
4472    PDM_RUN = 0x1,
4473    PDM_PREFLIGHT = 0x2,
4474    PDM_UNDOING = 0x4,
4475    PDM_ERRORSBLOCKING = 0x8,
4476    PDM_INDETERMINATE = 0x10
4477};
4478typedef DWORD PDMODE;
4479
4480typedef enum PDOPSTATUS
4481{
4482    PDOPS_RUNNING = 1,
4483    PDOPS_PAUSED = 2,
4484    PDOPS_CANCELLED = 3,
4485    PDOPS_STOPPED = 4,
4486    PDOPS_ERRORS = 5
4487} 	PDOPSTATUS;
4488
4489typedef enum _SPACTION
4490{
4491    SPACTION_NONE = 0,
4492    SPACTION_MOVING = 1,
4493    SPACTION_COPYING = 2,
4494    SPACTION_RECYCLING = 3,
4495    SPACTION_APPLYINGATTRIBS = 4,
4496    SPACTION_DOWNLOADING = 5,
4497    SPACTION_SEARCHING_INTERNET = 6,
4498    SPACTION_CALCULATING = 7,
4499    SPACTION_UPLOADING = 8,
4500    SPACTION_SEARCHING_FILES = 9,
4501    SPACTION_DELETING = 10,
4502    SPACTION_RENAMING = 11,
4503    SPACTION_FORMATTING = 12,
4504    SPACTION_COPY_MOVING = 13
4505} 	SPACTION;
4506
4507[
4508    uuid(0C9FB851-E5C9-43EB-A370-F0677B13874C),
4509    object,
4510    pointer_default(unique)
4511]
4512interface IOperationsProgressDialog : IUnknown
4513{
4514     HRESULT StartProgressDialog(
4515         [in] HWND hwndOwner,
4516         [in] OPPROGDLGF flags);
4517     HRESULT StopProgressDialog();
4518     HRESULT SetOperation(
4519         [in] SPACTION action);
4520     HRESULT SetMode(
4521         [in] PDMODE mode);
4522     HRESULT UpdateProgress(
4523        [in] ULONGLONG ullPointsCurrent,
4524        [in] ULONGLONG ullPointsTotal,
4525        [in] ULONGLONG ullSizeCurrent,
4526        [in] ULONGLONG ullSizeTotal,
4527        [in] ULONGLONG ullItemsCurrent,
4528        [in] ULONGLONG ullItemsTotal);
4529     HRESULT UpdateLocations(
4530         [in, optional] IShellItem *psiSource,
4531         [in, optional] IShellItem *psiTarget,
4532         [in, optional] IShellItem *psiItem);
4533     HRESULT ResetTimer();
4534     HRESULT PauseTimer();
4535     HRESULT ResumeTimer();
4536     HRESULT GetMilliseconds(
4537         [out] ULONGLONG *pullElapsed,
4538         [out] ULONGLONG *pullRemaining);
4539     HRESULT GetOperationStatus(
4540         [out] PDOPSTATUS *popstatus);
4541};
4542
4543[
4544    uuid(947aab5f-0a5c-4c13-b4d6-4bf7836fc9f8),
4545    object,
4546    pointer_default(unique)
4547]
4548interface IFileOperation : IUnknown
4549{
4550     HRESULT Advise(
4551         [in] IFileOperationProgressSink *pfops,
4552         [out] DWORD *pdwCookie);
4553     HRESULT Unadvise(
4554         [in] DWORD dwCookie);
4555     HRESULT SetOperationFlags(
4556         [in] DWORD dwOperationFlags);
4557     HRESULT SetProgressMessage(
4558         [in] LPCWSTR pszMessage);
4559     HRESULT SetProgressDialog(
4560         [in] IOperationsProgressDialog *popd);
4561     HRESULT SetProperties(
4562         [in] IPropertyChangeArray *pproparray);
4563     HRESULT SetOwnerWindow(
4564         [in] HWND hwndOwner);
4565     HRESULT ApplyPropertiesToItem(
4566         [in] IShellItem *psiItem);
4567     HRESULT ApplyPropertiesToItems(
4568         [in] IUnknown *punkItems);
4569     HRESULT RenameItem(
4570         [in] IShellItem *psiItem,
4571         [in] LPCWSTR pszNewName,
4572         [in] IFileOperationProgressSink *pfopsItem);
4573     HRESULT RenameItems(
4574         [in] IUnknown *pUnkItems,
4575         [in] LPCWSTR pszNewName);
4576     HRESULT MoveItem(
4577         [in] IShellItem *psiItem,
4578         [in] IShellItem *psiDestinationFolder,
4579         [in] LPCWSTR pszNewName,
4580         [in] IFileOperationProgressSink *pfopsItem);
4581     HRESULT MoveItems(
4582         [in] IUnknown *punkItems,
4583         [in] IShellItem *psiDestinationFolder);
4584     HRESULT CopyItem(
4585         [in] IShellItem *psiItem,
4586         [in] IShellItem *psiDestinationFolder,
4587         [in] LPCWSTR pszCopyName,
4588         [in] IFileOperationProgressSink *pfopsItem);
4589     HRESULT CopyItems(
4590         [in] IUnknown *punkItems,
4591         [in] IShellItem *psiDestinationFolder);
4592     HRESULT DeleteItem(
4593         [in] IShellItem *psiItem,
4594         [in] IFileOperationProgressSink *pfopsItem);
4595     HRESULT DeleteItems(
4596         [in] IUnknown *punkItems);
4597     HRESULT NewItem(
4598         [in] IShellItem *psiDestinationFolder,
4599         [in] DWORD dwFileAttributes,
4600         [in] LPCWSTR pszName,
4601         [in] LPCWSTR pszTemplateName,
4602         [in] IFileOperationProgressSink *pfopsItem);
4603     HRESULT PerformOperations();
4604     HRESULT GetAnyOperationsAborted(
4605         [out] BOOL *pfAnyOperationsAborted);
4606};
4607
4608[
4609    uuid(6CCB7BE0-6807-11d0-B810-00C04FD706EC),
4610    object,
4611    local,
4612    pointer_default(unique)
4613]
4614interface IShellTaskScheduler : IUnknown
4615{
4616    HRESULT AddTask(
4617        [in] IRunnableTask *pTask,
4618        [in] REFGUID rtoid,
4619        [in] DWORD_PTR lParam,
4620        [in] DWORD dwPriority);
4621    HRESULT RemoveTasks(
4622        [in] REFGUID rtoid,
4623        [in] DWORD_PTR lParam,
4624        [in] BOOL fWaitIfRunning);
4625    UINT CountTasks(
4626        [in] REFGUID rtoid);
4627    HRESULT Status(
4628        [in] DWORD dwReleaseStatus,
4629        [in] DWORD dwThreadTimeout);
4630}
4631
4632
4633[
4634    uuid(47c01f95-e185-412c-b5c5-4f27df965aea),
4635    object,
4636    pointer_default(unique)
4637]
4638interface IFolderBandPriv : IUnknown
4639{
4640    HRESULT SetCascade([in] BOOL fCascade);
4641
4642    HRESULT SetAccelerators([in] BOOL fAccelerators);
4643
4644    HRESULT SetNoIcons([in] BOOL fNoIcons);
4645
4646    HRESULT SetNoText([in] BOOL fNoText);
4647}
4648
4649
4650#ifdef __REACTOS__
4651/*****************************************************************************
4652 * IQueryContinue interface
4653 */
4654
4655[
4656    uuid(7307055c-b24a-486b-9f25-163e597a28a9),
4657    object,
4658    pointer_default(unique)
4659]
4660interface IQueryContinue : IUnknown
4661{
4662    // Returns S_OK if the operation should continue, and S_FALSE if not.
4663    HRESULT QueryContinue();
4664}
4665
4666
4667/*****************************************************************************
4668 * IUserNotification interface
4669 */
4670
4671[
4672    uuid(ba9711ba-5893-4787-a7e1-41277151550b),
4673    object,
4674    pointer_default(unique)
4675]
4676interface IUserNotification : IUnknown
4677{
4678    HRESULT SetBalloonInfo(
4679        [in, unique, string] LPCWSTR pszTitle,
4680        [in, unique, string] LPCWSTR pszText,
4681        [in] DWORD dwInfoFlags);
4682
4683    HRESULT SetBalloonRetry(
4684        [in] DWORD dwShowTime,  // Time intervals in milliseconds
4685        [in] DWORD dwInterval,
4686        [in] UINT cRetryCount);
4687
4688    HRESULT SetIconInfo(
4689        [in, unique] HICON hIcon,
4690        [in, unique, string] LPCWSTR pszToolTip);
4691
4692    // Blocks until the notification times out.
4693    HRESULT Show(
4694        [in, unique] IQueryContinue *pqc,
4695        [in] DWORD dwContinuePollInterval);
4696
4697    HRESULT PlaySound(
4698        [in, string] LPCWSTR pszSoundName);
4699};
4700
4701
4702/*****************************************************************************
4703 * IUserNotificationCallback interface (Vista+)
4704 */
4705
4706[
4707    uuid(19108294-0441-4aff-8013-fa0a730b0bea),
4708    object
4709]
4710interface IUserNotificationCallback : IUnknown
4711{
4712    HRESULT OnBalloonUserClick([in] POINT * pt);
4713    HRESULT OnLeftClick([in] POINT * pt);
4714    HRESULT OnContextMenu([in] POINT * pt);
4715};
4716
4717
4718/*****************************************************************************
4719 * IUserNotification2 interface (Vista+)
4720 */
4721
4722[
4723    uuid(215913cc-57eb-4fab-ab5a-e5fa7bea2a6c),
4724    object,
4725    pointer_default(unique)
4726]
4727interface IUserNotification2 : IUnknown
4728{
4729    HRESULT SetBalloonInfo(
4730        [in, unique, string] LPCWSTR pszTitle,
4731        [in, unique, string] LPCWSTR pszText,
4732        [in] DWORD dwInfoFlags);
4733
4734    HRESULT SetBalloonRetry(
4735        [in] DWORD dwShowTime,  // Time intervals in milliseconds
4736        [in] DWORD dwInterval,
4737        [in] UINT cRetryCount);
4738
4739    HRESULT SetIconInfo(
4740        [in, unique] HICON hIcon,
4741        [in, unique, string] LPCWSTR pszToolTip);
4742
4743    // Blocks until the notification times out.
4744    HRESULT Show(
4745        [in, unique] IQueryContinue *pqc,
4746        [in] DWORD dwContinuePollInterval,
4747        [in, unique] IUserNotificationCallback *pSink);
4748
4749    HRESULT PlaySound(
4750        [in, string] LPCWSTR pszSoundName);
4751};
4752
4753/*****************************************************************************
4754 * IItemNameLimits interface
4755 */
4756
4757[
4758    uuid(1df0d7f1-b267-4d28-8b10-12e23202a5c4)
4759]
4760interface IItemNameLimits : IUnknown
4761{
4762    HRESULT GetValidCharacters(
4763        [out, string] LPWSTR *ppwszValidChars,
4764        [out, string] LPWSTR *ppwszInvalidChars);
4765
4766    HRESULT GetMaxLength(
4767        [in, string] LPCWSTR pszName,
4768        [out] int *piMaxNameLen);
4769};
4770
4771#endif // __REACTOS__
4772