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