shell32: Implement SHCreateItemFromIDList.
[wine] / include / shobjidl.idl
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
22 import "objidl.idl";
23 import "oleidl.idl";
24 import "oaidl.idl";
25 import "docobj.idl";
26 import "shtypes.idl";
27 import "servprov.idl";
28 import "comcat.idl";
29 import "propidl.idl";
30 /* FIXME: import "prsht.idl";*/
31 import "msxml.idl";
32 import "wtypes.idl";
33 import "propsys.idl";
34 /* FIXME: import "structuredquery.idl"; */
35
36 cpp_quote("/* FIXME: #include <sherrors.h> */")
37
38
39 /*****************************************************************************
40  * IPersistFolder interface
41  */
42 [
43     object,
44     uuid(000214ea-0000-0000-c000-000000000046),
45     pointer_default(unique)
46 ]
47 interface IPersistFolder : IPersist
48 {
49     typedef IPersistFolder *LPPERSISTFOLDER;
50
51     HRESULT Initialize( [in] LPCITEMIDLIST pidl );
52 }
53
54
55 /*****************************************************************************
56  * IPersistFolder2 interface
57  */
58 [
59     object,
60     uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f),
61     pointer_default(unique)
62 ]
63 interface IPersistFolder2 : IPersistFolder
64 {
65     typedef IPersistFolder2 *LPPERSISTFOLDER2;
66
67     HRESULT GetCurFolder( [out] LPITEMIDLIST *ppidl );
68 }
69
70
71 /*****************************************************************************
72  * IPersistIDList interface
73  */
74 [
75     object,
76     uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),
77     pointer_default(unique)
78 ]
79 interface IPersistIDList : IPersist
80 {
81     HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
82     HRESULT GetIDList( [out] LPITEMIDLIST *ppidl );
83 }
84
85
86 /*****************************************************************************
87  * IEnumIDList interface
88  */
89 [
90     object,
91     uuid(000214f2-0000-0000-c000-000000000046),
92     pointer_default(unique)
93 ]
94 interface IEnumIDList : IUnknown
95 {
96     typedef IEnumIDList *LPENUMIDLIST;
97
98     HRESULT Next(
99         [in] ULONG celt,
100         [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
101         [out] ULONG *pceltFetched);
102
103     HRESULT Skip( [in] ULONG celt );
104     HRESULT Reset();
105     HRESULT Clone( [out] IEnumIDList **ppenum );
106 }
107
108 /*****************************************************************************
109  * IShellPropSheetExt interface
110  */
111 cpp_quote("#if 0")
112     typedef LPARAM LPFNSVADDPROPSHEETPAGE;
113 cpp_quote("#else")
114 cpp_quote("#include <prsht.h>")
115 cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
116 cpp_quote("#endif")
117
118 [
119     object,
120     uuid(000214E9-0000-0000-C000-000000000046),
121     pointer_default(unique),
122     local
123 ]
124 interface IShellPropSheetExt : IUnknown
125 {
126     enum tagSHELLPROPSHEETEXTPAGEID {
127         EXPPS_FILETYPES = 0x1
128     };
129
130     typedef UINT EXPPS;
131
132     HRESULT AddPages(
133         [in] LPFNSVADDPROPSHEETPAGE pfnAddPage,
134         [in] LPARAM lParam);
135     HRESULT ReplacePage(
136         [in] EXPPS uPageID,
137         [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith,
138         [in] LPARAM lParam);
139 }
140 typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
141
142 /*****************************************************************************
143  * IShellFolder interface
144  */
145 [
146     object,
147     uuid(000214e6-0000-0000-c000-000000000046),
148     pointer_default(unique)
149 ]
150 interface IShellFolder : IUnknown
151 {
152     typedef IShellFolder * LPSHELLFOLDER;
153
154     typedef enum tagSHGDN
155     {
156         SHGDN_NORMAL = 0,
157         SHGDN_INFOLDER = 1,
158         SHGDN_FOREDITING = 0x1000,
159         SHGDN_INCLUDE_NONFILESYS = 0x2000,
160         SHGDN_FORADDRESSBAR = 0x4000,
161         SHGDN_FORPARSING = 0x8000
162     } SHGNO;
163
164     typedef DWORD SHGDNF;
165
166     enum tagSHCONTF
167     {
168         SHCONTF_FOLDERS = 32,
169         SHCONTF_NONFOLDERS = 64,
170         SHCONTF_INCLUDEHIDDEN = 128,
171         SHCONTF_INIT_ON_FIRST_NEXT = 256,
172         SHCONTF_NETPRINTERSRCH = 512,
173         SHCONTF_SHAREABLE = 1024,
174         SHCONTF_STORAGE = 2048
175     };
176
177     typedef DWORD SHCONTF;
178
179     cpp_quote("#define SFGAO_CANCOPY           DROPEFFECT_COPY")
180     cpp_quote("#define SFGAO_CANMOVE           DROPEFFECT_MOVE")
181     cpp_quote("#define SFGAO_CANLINK           DROPEFFECT_LINK")
182     cpp_quote("#define SFGAO_STORAGE           0x00000008L")
183     cpp_quote("#define SFGAO_CANRENAME         0x00000010L")
184     cpp_quote("#define SFGAO_CANDELETE         0x00000020L")
185     cpp_quote("#define SFGAO_HASPROPSHEET      0x00000040L")
186     cpp_quote("#define SFGAO_DROPTARGET        0x00000100L")
187     cpp_quote("#define SFGAO_CAPABILITYMASK    0x00000177L")
188     cpp_quote("#define SFGAO_ENCRYPTED         0x00002000L")
189     cpp_quote("#define SFGAO_ISSLOW            0x00004000L")
190     cpp_quote("#define SFGAO_GHOSTED           0x00008000L")
191     cpp_quote("#define SFGAO_LINK              0x00010000L")
192     cpp_quote("#define SFGAO_SHARE             0x00020000L")
193     cpp_quote("#define SFGAO_READONLY          0x00040000L")
194     cpp_quote("#define SFGAO_HIDDEN            0x00080000L")
195     cpp_quote("#define SFGAO_DISPLAYATTRMASK   0x000FC000L")
196     cpp_quote("#define SFGAO_FILESYSANCESTOR   0x10000000L")
197     cpp_quote("#define SFGAO_FOLDER            0x20000000L")
198     cpp_quote("#define SFGAO_FILESYSTEM        0x40000000L")
199     cpp_quote("#define SFGAO_HASSUBFOLDER      0x80000000L")
200     cpp_quote("#define SFGAO_CONTENTSMASK      0x80000000L")
201     cpp_quote("#define SFGAO_VALIDATE          0x01000000L")
202     cpp_quote("#define SFGAO_REMOVABLE         0x02000000L")
203     cpp_quote("#define SFGAO_COMPRESSED        0x04000000L")
204     cpp_quote("#define SFGAO_BROWSABLE         0x08000000L")
205     cpp_quote("#define SFGAO_NONENUMERATED     0x00100000L")
206     cpp_quote("#define SFGAO_NEWCONTENT        0x00200000L")
207     cpp_quote("#define SFGAO_STREAM            0x00400000L")
208     cpp_quote("#define SFGAO_STORAGEANCESTOR   0x00800000L")
209
210     typedef ULONG SFGAOF;
211
212     HRESULT ParseDisplayName(
213         [in] HWND hwndOwner,
214         [in] LPBC pbcReserved,
215         [in, string] LPOLESTR lpszDisplayName,
216         [out] ULONG *pchEaten,
217         [out] LPITEMIDLIST *ppidl,
218         [in, out, unique] ULONG *pdwAttributes);
219
220     HRESULT EnumObjects(
221         [in] HWND hwndOwner,
222         [in] SHCONTF grfFlags,
223         [out] IEnumIDList **ppenumIDList);
224
225     HRESULT BindToObject(
226         [in] LPCITEMIDLIST pidl,
227         [in] LPBC pbcReserved,
228         [in] REFIID riid,
229         [out, iid_is(riid)] void **ppvOut);
230
231     HRESULT BindToStorage(
232         [in] LPCITEMIDLIST pidl,
233         [in] LPBC pbcReserved,
234         [in] REFIID riid,
235         [out, iid_is(riid)] void **ppvObj);
236
237     HRESULT CompareIDs(
238         [in] LPARAM lParam,
239         [in] LPCITEMIDLIST pidl1,
240         [in] LPCITEMIDLIST pidl2);
241
242     HRESULT CreateViewObject(
243         [in] HWND hwndOwner,
244         [in] REFIID riid,
245         [out, iid_is(riid)] void **ppvOut);
246
247     HRESULT GetAttributesOf(
248         [in] UINT cidl,
249         [in, size_is(cidl)] LPCITEMIDLIST *apidl,
250         [in, out] SFGAOF *rgfInOut);
251
252     HRESULT GetUIObjectOf(
253         [in] HWND hwndOwner,
254         [in] UINT cidl,
255         [in, size_is(cidl)] LPCITEMIDLIST *apidl,
256         [in] REFIID riid,
257         [in, out, unique] UINT *prgfInOut,
258         [out, iid_is(riid)] void **ppvOut);
259
260     HRESULT GetDisplayNameOf(
261         [in] LPCITEMIDLIST pidl,
262         [in] SHGDNF uFlags,
263         [out] STRRET *lpName);
264
265     HRESULT SetNameOf(
266         [in] HWND hwnd,
267         [in] LPCITEMIDLIST pidl,
268         [in, string] LPCOLESTR lpszName,
269         [in] SHGDNF uFlags,
270         [out] LPITEMIDLIST *ppidlOut);
271 }
272
273
274 /*****************************************************************************
275  * IEnumExtraSearch interface
276  */
277 [
278     object,
279     uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13),
280     pointer_default(unique)
281 ]
282 interface IEnumExtraSearch : IUnknown
283 {
284     typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
285
286     typedef struct
287     {
288         GUID guidSearch;
289         WCHAR wszFriendlyName[80];
290         /*
291          *WCHAR wszMenuText[80];
292          *WCHAR wszHelpText[MAX_PATH];
293          */
294         WCHAR wszUrl[2084];
295         /*
296          *WCHAR wszIcon[MAX_PATH+10];
297          *WCHAR wszGreyIcon[MAX_PATH+10];
298          *WCHAR wszClrIcon[MAX_PATH+10];
299          */
300     } EXTRASEARCH, *LPEXTRASEARCH;
301
302     HRESULT Next(
303         [in] ULONG celt,
304         [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
305         [out] ULONG *pceltFetched);
306
307     HRESULT Skip( [in] ULONG celt );
308     HRESULT Reset();
309     HRESULT Clone( [out] IEnumExtraSearch **ppenum );
310 }
311
312
313 /*****************************************************************************
314  * IShellFolder2 interface
315  */
316 [
317     object,
318     uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1),
319     pointer_default(unique)
320 ]
321 interface IShellFolder2 : IShellFolder
322 {
323     typedef struct
324     {
325         GUID    fmtid;
326         DWORD   pid;
327     } SHCOLUMNID, *LPSHCOLUMNID;
328     typedef const SHCOLUMNID *LPCSHCOLUMNID;
329
330     HRESULT GetDefaultSearchGUID( [out] GUID *lpguid );
331     HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum );
332     HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay );
333     HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags );
334     HRESULT GetDetailsEx( [in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
335     HRESULT GetDetailsOf( [in] LPCITEMIDLIST pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd);
336     HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid );
337 }
338
339 /*****************************************************************************
340  * IShellItem interface
341  */
342 [
343     object,
344     uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),
345     pointer_default(unique)
346 ]
347 interface IShellItem : IUnknown
348 {
349     typedef [v1_enum] enum {
350         SIGDN_NORMALDISPLAY                = 0,
351         SIGDN_PARENTRELATIVEPARSING        = 0x80018001,
352         SIGDN_DESKTOPABSOLUTEPARSING       = 0x80028000,
353         SIGDN_PARENTRELATIVEEDITING        = 0x80031001,
354         SIGDN_DESKTOPABSOLUTEEDITING       = 0x8004c000,
355         SIGDN_FILESYSPATH                  = 0x80058000,
356         SIGDN_URL                          = 0x80068000,
357         SIGDN_PARENTRELATIVEFORADDRESSBAR  = 0x8007c001,
358         SIGDN_PARENTRELATIVE               = 0x80080001
359     } SIGDN; /* & 0xFFFF => SHGDN */
360
361     typedef DWORD SICHINTF;
362
363     HRESULT BindToHandler(
364         [in] IBindCtx *pbc,
365         [in] REFGUID rbhid,
366         [in] REFIID riid,
367         [out, iid_is(riid)] void **ppvOut);
368
369     HRESULT GetParent( [out] IShellItem **ppsi );
370
371     HRESULT GetDisplayName(
372         [in] SIGDN sigdnName,
373         [out] LPWSTR *ppszName);
374
375     HRESULT GetAttributes(
376         [in] SFGAOF sfgaoMask,
377         [out] SFGAOF *psfgaoAttribs);
378
379     HRESULT Compare(
380         [in] IShellItem *psi,
381         [in] SICHINTF hint,
382         [out] int *piOrder);
383 }
384
385 typedef enum tagNWMF {
386     NWMF_UNLOADING        = 0x0001,
387     NWMF_USERINITED       = 0x0002,
388     NWMF_FIRST            = 0x0004,
389     NWMF_OVERRIDEKEY      = 0x0008,
390     NWMF_SHOWHELP         = 0x0010,
391     NWMF_HTMLDIALOG       = 0x0020,
392     NWMF_FROMDIALOGCHILD  = 0x0040,
393     NWMF_USERREQUESTED    = 0x0080,
394     NWMF_USERALLOWED      = 0x0100
395 } NWMF;
396
397 [
398     uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb),
399     object,
400     pointer_default(unique)
401 ]
402 interface INewWindowManager : IUnknown
403 {
404     HRESULT EvaluateNewWindow(
405         [in, string] LPCWSTR pszUrl,
406         [in, string] LPCWSTR pszName,
407         [in, string] LPCWSTR pszUrlContext,
408         [in, string] LPCWSTR pszFeatures,
409         [in]         BOOL fReplace,
410         [in]         DWORD dwFlags,
411         [in]         DWORD dwUserActionTime);
412 }
413
414 cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager")
415
416 /*****************************************************************************
417  * IEnumShellItems interface
418  */
419 [
420  object,
421  uuid(70629033-E363-4A28-A567-0DB78006E6D7),
422  pointer_default(unique)
423 ]
424 interface IEnumShellItems : IUnknown
425 {
426     [local] HRESULT Next(
427         [in] ULONG celt,
428         [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
429         [out] ULONG *pceltFetched);
430
431     [call_as(Next)] HRESULT RemoteNext(
432         [in] ULONG celt,
433         [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
434         [out] ULONG *pceltFetched);
435
436     HRESULT Skip(
437         [in] ULONG celt);
438
439     HRESULT Reset();
440
441     HRESULT Clone(
442         [out] IEnumShellItems **ppenum);
443 }
444
445 /*****************************************************************************
446  * IShellItemArray interface
447  */
448 [
449  object,
450  uuid(B63EA76D-1F85-456F-A19C-48159EFA858B),
451  pointer_default(unique)
452 ]
453 interface IShellItemArray : IUnknown
454 {
455     typedef [v1_enum] enum SIATTRIBFLAGS {
456         SIATTRIBFLAGS_AND            = 0x0001,
457         SIATTRIBFLAGS_OR             = 0x0002,
458         SIATTRIBFLAGS_APPCOMPAT      = 0x0003,
459         SIATTRIBFLAGS_MASK           = 0x0003,
460         SIATTRIBFLAGS_ALLITEMS       = 0x4000
461     } SIATTRIBFLAGS;
462     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)")
463
464     HRESULT BindToHandler(
465         [in, unique] IBindCtx *pbc,
466         [in] REFGUID bhid,
467         [in] REFIID riid,
468         [out, iid_is(riid)] void **ppvOut);
469
470     HRESULT GetPropertyStore(
471         [in] GETPROPERTYSTOREFLAGS flags,
472         [in] REFIID riid,
473         [out, iid_is(riid)] void **ppv);
474
475     HRESULT GetPropertyDescriptionList(
476         [in] REFPROPERTYKEY keyType,
477         [in] REFIID riid,
478         [out, iid_is(riid)] void **ppv);
479
480     HRESULT GetAttributes(
481         [in] SIATTRIBFLAGS AttribFlags,
482         [in] SFGAOF sfgaoMask,
483         [out] SFGAOF *psfgaoAttribs);
484
485     HRESULT GetCount(
486         [out] DWORD *pdwNumItems);
487
488     HRESULT GetItemAt(
489         [in] DWORD dwIndex,
490         [out] IShellItem **ppsi);
491
492     HRESULT EnumItems(
493         [out] IEnumShellItems **ppenumShellItems);
494
495 }
496
497 cpp_quote("HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);")
498 cpp_quote("HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);")
499 cpp_quote("HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);")
500
501 /*****************************************************************************
502  * IShellItemFilter interface
503  */
504 [
505  object,
506  uuid(2659B475-EEB8-48B7-8F07-B378810F48CF),
507  pointer_default(unique)
508 ]
509 interface IShellItemFilter : IUnknown
510 {
511     HRESULT IncludeItem(
512         [in] IShellItem *psi);
513
514     HRESULT GetEnumFlagsForItem(
515         [in] IShellItem *psi,
516         [out] SHCONTF *pgrfFlags);
517 }
518
519 /*****************************************************************************
520  * FOLDERSETTINGS
521  */
522 typedef char *LPVIEWSETTINGS;
523
524 typedef enum
525 {
526     FWF_AUTOARRANGE         = 0x00000001,
527     FWF_ABBREVIATEDNAMES    = 0x00000002,
528     FWF_SNAPTOGRID          = 0x00000004,
529     FWF_OWNERDATA           = 0x00000008,
530     FWF_BESTFITWINDOW       = 0x00000010,
531     FWF_DESKTOP             = 0x00000020,
532     FWF_SINGLESEL           = 0x00000040,
533     FWF_NOSUBFOLDERS        = 0x00000080,
534     FWF_TRANSPARENT         = 0x00000100,
535     FWF_NOCLIENTEDGE        = 0x00000200,
536     FWF_NOSCROLL            = 0x00000400,
537     FWF_ALIGNLEFT           = 0x00000800,
538     FWF_NOICONS             = 0x00001000,
539     FWF_SHOWSELALWAYS       = 0x00002000,
540     FWF_NOVISIBLE           = 0x00004000,
541     FWF_SINGLECLICKACTIVATE = 0x00008000,
542     FWF_NOWEBVIEW           = 0x00010000,
543     FWF_HIDEFILENAMES       = 0x00020000,
544     FWF_CHECKSELECT         = 0x00040000,
545     FWF_NOENUMREFRESH       = 0x00080000,
546     FWF_NOGROUPING          = 0x00100000,
547     FWF_FULLROWSELECT       = 0x00200000,
548     FWF_NOFILTERS           = 0x00400000,
549     FWF_NOCOLUMNHEADER      = 0x00800000,
550     FWF_NOHEADERINALLVIEWS  = 0x01000000,
551     FWF_EXTENDEDTILES       = 0x02000000,
552     FWF_TRICHECKSELECT      = 0x04000000,
553     FWF_AUTOCHECKSELECT     = 0x08000000,
554     FWF_NOBROWSERVIEWSTATE  = 0x10000000,
555     FWF_SUBSETGROUPS        = 0x20000000,
556     FWF_USESEARCHFOLDER     = 0x40000000,
557     FWF_ALLOWRTLREADING     = 0x80000000
558 } FOLDERFLAGS;
559
560 typedef enum
561 {
562     FVM_AUTO       =-1,
563     FVM_ICON       = 1,
564     FVM_FIRST      = FVM_ICON,
565     FVM_SMALLICON  = 2,
566     FVM_LIST       = 3,
567     FVM_DETAILS    = 4,
568     FVM_THUMBNAIL  = 5,
569     FVM_TILE       = 6,
570     FVM_THUMBSTRIP = 7,
571     FVM_CONTENT    = 8,
572     FVM_LAST       = FVM_CONTENT
573 } FOLDERVIEWMODE;
574
575 typedef struct
576 {
577     UINT ViewMode;
578     UINT fFlags;
579 } FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;
580 typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
581
582 /*****************************************************************************
583  * IShellIcon interface
584  */
585 [
586     uuid(000214e5-0000-0000-c000-000000000046),
587     object,
588     pointer_default(unique)
589 ]
590 interface IShellIcon : IUnknown
591 {
592     HRESULT GetIconOf(
593         [in] PCUITEMID_CHILD pidl,
594         [in] UINT flags,
595         [out] int *pIconIndex);
596 }
597
598 /*****************************************************************************
599  * IShellView interface
600  */
601 interface IShellBrowser;  /* forward declaration */
602 [
603     object,
604     uuid(000214e3-0000-0000-c000-000000000046),
605     pointer_default(unique)
606 ]
607 interface IShellView : IOleWindow
608 {
609     typedef IShellView *LPSHELLVIEW;
610
611     cpp_quote("#define SVSI_DESELECT       0x00000000")
612     cpp_quote("#define SVSI_SELECT         0x00000001")
613     cpp_quote("#define SVSI_EDIT           0x00000003")
614     cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
615     cpp_quote("#define SVSI_ENSUREVISIBLE  0x00000008")
616     cpp_quote("#define SVSI_FOCUSED        0x00000010")
617     cpp_quote("#define SVSI_TRANSLATEPT    0x00000020")
618     cpp_quote("#define SVSI_SELECTIONMARK  0x00000040")
619     cpp_quote("#define SVSI_POSITIONITEM   0x00000080")
620     cpp_quote("#define SVSI_CHECK          0x00000100")
621     cpp_quote("#define SVSI_NOSTATECHANGE  0x80000000")
622
623     typedef UINT SVSIF;
624
625     typedef enum
626     {
627         SVGIO_BACKGROUND     = 0x00000000,
628         SVGIO_SELECTION      = 0x00000001,
629         SVGIO_ALLVIEW        = 0x00000002,
630         SVGIO_CHECKED        = 0x00000003,
631         SVGIO_TYPE_MASK      = 0x0000000f,
632         SVGIO_FLAG_VIEWORDER = 0x80000000,
633     } SVGIO;
634
635     typedef enum
636     {
637         SVUIA_DEACTIVATE       = 0,
638         SVUIA_ACTIVATE_NOFOCUS = 1,
639         SVUIA_ACTIVATE_FOCUS   = 2,
640         SVUIA_INPLACEACTIVATE  = 3
641     } SVUIA_STATUS;
642
643     HRESULT TranslateAccelerator( [in] MSG *pmsg );
644     HRESULT EnableModeless( [in] BOOL fEnable );
645     HRESULT UIActivate( [in] UINT uState );
646     HRESULT Refresh();
647     HRESULT CreateViewWindow(
648         [in] IShellView *psvPrevious,
649         [in] LPCFOLDERSETTINGS lpfs,
650         [in] IShellBrowser *psb,
651         [out] RECT *prcView,
652         [out] HWND *phWnd);
653
654     HRESULT DestroyViewWindow();
655     HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs );
656
657     [local] HRESULT AddPropertySheetPages(
658         [in] DWORD dwReserved,
659         [in] LPFNSVADDPROPSHEETPAGE pfn,
660         [in] LPARAM lparam);
661
662     HRESULT SaveViewState();
663     HRESULT SelectItem(
664         [in] LPCITEMIDLIST pidlItem,
665         [in] SVSIF uFlags);
666     HRESULT GetItemObject(
667         [in] UINT uItem,
668         [in] REFIID riid,
669         [out, iid_is(riid)] void **ppv);
670 }
671
672 [
673     object,
674     uuid(88e39e80-3578-11cf-ae69-08002b2e1262),
675     pointer_default(unique)
676 ]
677 interface IShellView2 : IShellView
678 {
679     typedef GUID SHELLVIEWID;
680 cpp_quote("#include <pshpack8.h>")
681     typedef struct _SV2CVW2_PARAMS
682     {
683         DWORD cbSize;
684         IShellView *psvPrev;
685         LPCFOLDERSETTINGS pfs;
686         IShellBrowser *psbOwner;
687         RECT *prcView;
688         SHELLVIEWID const *pvid;
689         HWND hwndView;
690     } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
691 cpp_quote("#include <poppack.h>")
692
693     HRESULT GetView(
694         [in, out] SHELLVIEWID *view_guid,
695         [in] ULONG view_type
696     );
697     HRESULT CreateViewWindow2(
698         [in] LPSV2CVW2_PARAMS view_params
699     );
700     HRESULT HandleRename(
701         [in] LPCITEMIDLIST new_pidl
702     );
703     HRESULT SelectAndPositionItem(
704         [in] LPCITEMIDLIST item,
705         [in] UINT flags,
706         [in] POINT *point
707     );
708 }
709
710 /*****************************************************************************
711  * IFolderView interface
712  */
713 [
714     uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
715     object,
716     pointer_default(unique)
717 ]
718 interface IFolderView : IUnknown
719 {
720     HRESULT GetCurrentViewMode( [out] UINT *mode );
721     HRESULT SetCurrentViewMode( [in] UINT mode );
722     HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );
723     HRESULT Item(
724         [in] int index,
725         [out] PITEMID_CHILD *ppidl
726     );
727     HRESULT ItemCount(
728         [in] UINT flags,
729         [out] int *items
730     );
731     HRESULT Items(
732         [in] UINT flags,
733         [in] REFIID riid,
734         [out, iid_is(riid)] void **ppv
735     );
736     HRESULT GetSelectionMarkedItem( [out] int *item );
737     HRESULT GetFocusedItem( [out] int *item );
738     HRESULT GetItemPosition(
739         [in] PCUITEMID_CHILD pidl,
740         [out] POINT* ppt
741     );
742     HRESULT GetSpacing( [in, out, unique] POINT* pt );
743     HRESULT GetDefaultSpacing( [out] POINT* pt );
744     HRESULT GetAutoArrange();
745     HRESULT SelectItem(
746         [in] int item,
747         [in] DWORD flags
748     );
749     HRESULT SelectAndPositionItems(
750         [in] UINT cidl,
751         [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
752         [in, unique, size_is(cidl)] POINT* apt,
753         [in] DWORD flags
754     );
755 }
756
757 /*****************************************************************************
758  * IShellBrowser interface
759  */
760 [
761     object,
762     uuid(000214e2-0000-0000-c000-000000000046),
763     pointer_default(unique)
764 ]
765 interface IShellBrowser : IOleWindow
766 {
767     typedef IShellBrowser *LPSHELLBROWSER;
768
769 cpp_quote("#define SBSP_DEFBROWSER            0x00000000")
770 cpp_quote("#define SBSP_SAMEBROWSER           0x00000001")
771 cpp_quote("#define SBSP_NEWBROWSER            0x00000002")
772 cpp_quote("#define SBSP_DEFMODE               0x00000000")
773 cpp_quote("#define SBSP_OPENMODE              0x00000010")
774 cpp_quote("#define SBSP_EXPLOREMODE           0x00000020")
775 cpp_quote("#define SBSP_HELPMODE              0x00000040")
776 cpp_quote("#define SBSP_NOTRANSFERHIST        0x00000080")
777 cpp_quote("#define SBSP_ABSOLUTE              0x00000000")
778 cpp_quote("#define SBSP_RELATIVE              0x00001000")
779 cpp_quote("#define SBSP_PARENT                0x00002000")
780 cpp_quote("#define SBSP_NAVIGATEBACK          0x00004000")
781 cpp_quote("#define SBSP_NAVIGATEFORWARD       0x00008000")
782 cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE    0x00010000")
783 cpp_quote("#define SBSP_KEEPSAMETEMPLATE      0x00020000")
784 cpp_quote("#define SBSP_KEEPWORDWHEELTEXT     0x00040000")
785 cpp_quote("#define SBSP_ACTIVATE_NOFOCUS      0x00080000")
786 cpp_quote("#define SBSP_CREATENOHISTORY       0x00100000")
787 cpp_quote("#define SBSP_PLAYNOSOUND           0x00200000")
788 cpp_quote("#define SBSP_CALLERUNTURUSTED      0x00800000")
789 cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD    0x01000000")
790 cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD  0x02000000")
791 cpp_quote("#define SBSP_NOAUTOSELECT          0x04000000")
792 cpp_quote("#define SBSP_WRITENOHISTORY        0x08000000")
793 cpp_quote("#define SBSP_TRUSTEDFORACTIVEX     0x10000000")
794 cpp_quote("#define SBSP_FEEDNAVIGATION        0x20000000")
795 cpp_quote("#define SBSP_REDIRECT              0x40000000")
796 cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000")
797
798 cpp_quote("#define FCW_STATUS      0x0001")
799 cpp_quote("#define FCW_TOOLBAR     0x0002")
800 cpp_quote("#define FCW_TREE        0x0003")
801 cpp_quote("#define FCW_INTERNETBAR 0x0006")
802 cpp_quote("#define FCW_PROGRESS    0x0008")
803
804 cpp_quote("#define FCT_MERGE       0x0001")
805 cpp_quote("#define FCT_CONFIGABLE  0x0002")
806 cpp_quote("#define FCT_ADDTOEND    0x0004")
807
808 cpp_quote("#if 0")
809     typedef LPARAM LPTBBUTTONSB;
810 cpp_quote("#else")
811 cpp_quote("#include <commctrl.h>")
812 cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
813 cpp_quote("#endif")
814
815     HRESULT InsertMenusSB(
816         [in] HMENU hmenuShared,
817         [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
818
819     HRESULT SetMenuSB(
820         [in] HMENU hmenuShared,
821         [in] HOLEMENU holemenuReserved,
822         [in] HWND hwndActiveObject);
823
824     HRESULT RemoveMenusSB( [in] HMENU hmenuShared );
825     HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText );
826     HRESULT EnableModelessSB( [in] BOOL fEnable );
827     HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID );
828
829     HRESULT BrowseObject(
830         [in] LPCITEMIDLIST pidl,
831         [in] UINT wFlags);
832
833     HRESULT GetViewStateStream(
834         [in] DWORD grfMode,
835         [out] IStream **ppStrm);
836
837     HRESULT GetControlWindow(
838         [in] UINT id,
839         [out] HWND *phwnd);
840
841     [local] HRESULT SendControlMsg(
842         [in] UINT id,
843         [in] UINT uMsg,
844         [in] WPARAM wParam,
845         [in] LPARAM lParam,
846         [in] LRESULT *pret);
847
848     HRESULT QueryActiveShellView( [out] IShellView **ppshv );
849     HRESULT OnViewWindowActive( [in] IShellView *pshv );
850
851     [local]
852     HRESULT SetToolbarItems(
853         [in] LPTBBUTTONSB lpButtons,
854         [in] UINT nButtons,
855         [in] UINT uFlags);
856 }
857
858
859 /*****************************************************************************
860  * IShellLinkA interface
861  */
862 [
863     object,
864     uuid(000214ee-0000-0000-c000-000000000046),
865     pointer_default(unique)
866 ]
867 interface IShellLinkA : IUnknown
868 {
869     typedef enum
870     {
871         SLR_NO_UI               = 0x0001,
872         SLR_ANY_MATCH           = 0x0002,
873         SLR_UPDATE              = 0x0004,
874         SLR_NOUPDATE            = 0x0008,
875         SLR_NOSEARCH            = 0x0010,
876         SLR_NOTRACK             = 0x0020,
877         SLR_NOLINKINFO          = 0x0040,
878         SLR_INVOKE_MSI          = 0x0080,
879         SLR_NO_UI_WITH_MSG_PUMP = 0x0101,
880     } SLR_FLAGS;
881
882     typedef enum
883     {
884         SLGP_SHORTPATH   = 0x0001,
885         SLGP_UNCPRIORITY = 0x0002,
886         SLGP_RAWPATH     = 0x0004,
887     } SLGP_FLAGS;
888
889     HRESULT GetPath(
890         [out, size_is(cch)] LPSTR pszFile,
891         [in] int cch,
892         [in, out, unique] WIN32_FIND_DATAA *pfd,
893         [in] DWORD fFlags);
894
895     HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
896
897     HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
898
899     HRESULT GetDescription(
900         [out, size_is(cch)] LPSTR pszName,
901         [in] int cch);
902
903     HRESULT SetDescription( [in] LPCSTR pszName );
904
905     HRESULT GetWorkingDirectory(
906         [out, size_is(cch)] LPSTR pszDir,
907         [in] int cch);
908
909     HRESULT SetWorkingDirectory( [in] LPCSTR pszDir );
910
911     HRESULT GetArguments(
912         [out, size_is(cch)] LPSTR pszArgs,
913         [in] int cch);
914
915     HRESULT SetArguments( [in] LPCSTR pszArgs );
916
917     HRESULT GetHotkey( [out] WORD *pwHotkey );
918
919     HRESULT SetHotkey( [in] WORD wHotkey );
920
921     HRESULT GetShowCmd( [out] int *piShowCmd );
922
923     HRESULT SetShowCmd( [in] int iShowCmd );
924
925     HRESULT GetIconLocation(
926         [out, size_is(cch)] LPSTR pszIconPath,
927         [in] int cch,
928         [out] int *piIcon);
929
930     HRESULT SetIconLocation(
931         [in] LPCSTR pszIconPath,
932         [in] int iIcon);
933
934     HRESULT SetRelativePath(
935         [in] LPCSTR pszPathRel,
936         [in] DWORD dwReserved);
937
938     HRESULT Resolve(
939         [in] HWND hwnd,
940         [in] DWORD fFlags);
941
942     HRESULT SetPath( [in] LPCSTR pszFile );
943 }
944
945
946 /*****************************************************************************
947  * IShellLinkW interface
948  */
949 [
950     object,
951     uuid(000214f9-0000-0000-c000-000000000046),
952     pointer_default(unique)
953 ]
954 interface IShellLinkW : IUnknown
955 {
956     HRESULT GetPath(
957         [out, size_is(cch)] LPWSTR pszFile,
958         [in] int cch,
959         [in, out] WIN32_FIND_DATAW *pfd,
960         [in] DWORD fFlags);
961
962     HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
963
964     HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
965
966     HRESULT GetDescription(
967         [out, size_is(cch)] LPWSTR pszName,
968         [in] int cch);
969
970     HRESULT SetDescription( [in] LPCWSTR pszName );
971
972     HRESULT GetWorkingDirectory(
973         [out, size_is(cch)] LPWSTR pszDir,
974         [in] int cch);
975
976     HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir );
977
978     HRESULT GetArguments(
979         [out, size_is(cch)] LPWSTR pszArgs,
980         [in] int cch);
981
982     HRESULT SetArguments( [in] LPCWSTR pszArgs );
983
984     HRESULT GetHotkey( [out] WORD *pwHotkey );
985
986     HRESULT SetHotkey( [in] WORD wHotkey );
987
988     HRESULT GetShowCmd( [out] int *piShowCmd );
989
990     HRESULT SetShowCmd( [in] int iShowCmd );
991
992     HRESULT GetIconLocation(
993         [out, size_is(cch)] LPWSTR pszIconPath,
994         [in] int cch,
995         [out] int *piIcon);
996
997     HRESULT SetIconLocation(
998         [in] LPCWSTR pszIconPath,
999         [in] int iIcon);
1000
1001     HRESULT SetRelativePath(
1002         [in] LPCWSTR pszPathRel,
1003         [in] DWORD dwReserved);
1004
1005     HRESULT Resolve(
1006         [in] HWND hwnd,
1007         [in] DWORD fFlags);
1008
1009     HRESULT SetPath( [in] LPCWSTR pszFile );
1010 }
1011
1012 cpp_quote("#define IShellLink WINELIB_NAME_AW(IShellLink)")
1013
1014
1015 /*****************************************************************************
1016  * IShellExtInit interface
1017  */
1018 [
1019     object,
1020     uuid(000214e8-0000-0000-c000-000000000046),
1021     pointer_default(unique),
1022     local
1023 ]
1024 interface IShellExtInit : IUnknown
1025 {
1026     typedef IShellExtInit *LPSHELLEXTINIT;
1027
1028     HRESULT Initialize(
1029         [in] LPCITEMIDLIST pidlFolder,
1030         [in] IDataObject *pdtobj,
1031         [in] HKEY hkeyProgID);
1032 }
1033
1034
1035 /*******************************************************************************/
1036 /* Note: the following interfaces are not in shobjidl.idl under Windows, they  */
1037 /* are declared directly in shlobj.h. It hopefully won't break anything to put */
1038 /* them here anyway.                                                           */
1039 /*******************************************************************************/
1040
1041 #ifndef MAX_PATH
1042 #define MAX_PATH 260
1043 #endif
1044
1045
1046 /*****************************************************************************
1047  * IPersistFolder3 interface
1048  */
1049 [
1050     object,
1051     uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),
1052     pointer_default(unique)
1053 ]
1054 interface IPersistFolder3 : IPersistFolder2
1055 {
1056     typedef struct
1057     {
1058         LPITEMIDLIST    pidlTargetFolder;
1059         WCHAR           szTargetParsingName[MAX_PATH];
1060         WCHAR           szNetworkProvider[MAX_PATH];
1061         DWORD           dwAttributes;
1062         int             csidl;
1063     } PERSIST_FOLDER_TARGET_INFO;
1064
1065     HRESULT InitializeEx(
1066         [in] IBindCtx *pbc,
1067         [in] LPCITEMIDLIST pidlRoot,
1068         [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);
1069
1070     HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );
1071 }
1072
1073
1074 /*****************************************************************************
1075  * IExtractIconA interface
1076  */
1077 [
1078     object,
1079     uuid(000214eb-0000-0000-c000-000000000046),
1080     pointer_default(unique),
1081     local
1082 ]
1083 interface IExtractIconA : IUnknown
1084 {
1085 cpp_quote("#define GIL_OPENICON     0x0001")
1086 cpp_quote("#define GIL_FORSHELL     0x0002")
1087 cpp_quote("#define GIL_ASYNC        0x0020")
1088 cpp_quote("#define GIL_DEFAULTICON  0x0040")
1089 cpp_quote("#define GIL_FORSHORTCUT  0x0080")
1090
1091 cpp_quote("#define GIL_SIMULATEDOC  0x0001")
1092 cpp_quote("#define GIL_PERINSTANCE  0x0002")
1093 cpp_quote("#define GIL_PERCLASS     0x0004")
1094 cpp_quote("#define GIL_NOTFILENAME  0x0008")
1095 cpp_quote("#define GIL_DONTCACHE    0x0010")
1096
1097     typedef IExtractIconA *LPEXTRACTICONA;
1098
1099     HRESULT GetIconLocation(
1100         [in] UINT uFlags,
1101         [out, size_is(cchMax)] LPSTR szIconFile,
1102         [in] UINT cchMax,
1103         [out] INT *piIndex,
1104         [out] UINT *pwFlags);
1105
1106     HRESULT Extract(
1107         [in] LPCSTR pszFile,
1108         [in] UINT nIconIndex,
1109         [out] HICON *phiconLarge,
1110         [out] HICON *phiconSmall,
1111         [in] UINT nIconSize );
1112 }
1113
1114
1115 /*****************************************************************************
1116  * IExtractIconW interface
1117  */
1118 [
1119     object,
1120     uuid(000214fa-0000-0000-c000-000000000046),
1121     pointer_default(unique),
1122     local
1123 ]
1124 interface IExtractIconW : IUnknown
1125 {
1126     typedef IExtractIconW *LPEXTRACTICONW;
1127
1128     HRESULT GetIconLocation(
1129         [in] UINT uFlags,
1130         [out, size_is(cchMax)] LPWSTR szIconFile,
1131         [in] UINT cchMax,
1132         [out] INT *piIndex,
1133         [out] UINT *pwFlags);
1134
1135     HRESULT Extract(
1136         [in] LPCWSTR pszFile,
1137         [in] UINT nIconIndex,
1138         [out] HICON *phiconLarge,
1139         [out] HICON *phiconSmall,
1140         [in] UINT nIconSize );
1141 }
1142
1143 cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)")
1144 cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)")
1145
1146
1147 /*****************************************************************************
1148  * ICommDlgBrowser interface
1149  */
1150 [
1151     object,
1152     uuid(000214f1-0000-0000-c000-000000000046),
1153     pointer_default(unique)
1154 ]
1155 interface ICommDlgBrowser : IUnknown
1156 {
1157 cpp_quote("#define CDBOSC_SETFOCUS     0x00000000")
1158 cpp_quote("#define CDBOSC_KILLFOCUS    0x00000001")
1159 cpp_quote("#define CDBOSC_SELCHANGE    0x00000002")
1160 cpp_quote("#define CDBOSC_RENAME       0x00000003")
1161 cpp_quote("#define CDBOSC_STATECHANGE  0x00000004")
1162
1163     typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
1164
1165     HRESULT OnDefaultCommand( [in] IShellView *shv );
1166     HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );
1167     HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );
1168 }
1169
1170
1171 /*****************************************************************************
1172  * ICommDlgBrowser2 interface
1173  */
1174 [
1175  object,
1176  uuid(10339516-2894-11D2-9039-00C04F8EEB3E),
1177  pointer_default(unique)
1178 ]
1179 interface ICommDlgBrowser2 : ICommDlgBrowser
1180 {
1181
1182     HRESULT Notify(
1183         [in] IShellView *ppshv,
1184         [in] DWORD dwNotifyType);
1185
1186     HRESULT GetDefaultMenuText(
1187         [in] IShellView *ppshv,
1188         [out, string, size_is(cchMax)] LPWSTR pszText,
1189         [in] int cchMax);
1190
1191     HRESULT GetViewFlags(
1192         [out] DWORD *pdwFlags);
1193 }
1194
1195
1196 /*****************************************************************************
1197  * ICommDlgBrowser3 interface
1198  */
1199 [
1200  object,
1201  uuid(C8AD25A1-3294-41EE-8165-71174BD01C57),
1202  pointer_default(unique)
1203 ]
1204 interface ICommDlgBrowser3 : ICommDlgBrowser2
1205 {
1206
1207     HRESULT OnColumnClicked(
1208         [in] IShellView *ppshv,
1209         [in] int iColumn);
1210
1211     HRESULT GetCurrentFilter(
1212         [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec,
1213         [in] int cchFileSpec);
1214
1215     HRESULT OnPreviewCreated(
1216         [in] IShellView *ppshv);
1217 }
1218
1219
1220 /*****************************************************************************
1221  * IDockingWindowFrame interface
1222  */
1223 [
1224     object,
1225     uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),
1226     pointer_default(unique),
1227     local
1228 ]
1229 interface IDockingWindowFrame : IOleWindow
1230 {
1231 cpp_quote("#define DWFRF_NORMAL           0x0000")
1232 cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001")
1233 cpp_quote("#define DWFAF_HIDDEN           0x0001")
1234
1235     HRESULT AddToolbar(
1236         [in] IUnknown *punkSrc,
1237         [in] LPCWSTR pwszItem,
1238         [in] DWORD dwAddFlags);
1239
1240     HRESULT RemoveToolbar(
1241         [in] IUnknown *punkSrc,
1242         [in] DWORD dwRemoveFlags);
1243
1244     HRESULT FindToolbar(
1245         [in] LPCWSTR pwszItem,
1246         [in] REFIID riid,
1247         [out] LPVOID *ppvObj);
1248 }
1249
1250
1251 /*****************************************************************************
1252  * IDragSourceHelper interface
1253  */
1254 [
1255     object,
1256     uuid(de5bf786-477a-11d2-839d-00c04fd918d0),
1257     pointer_default(unique),
1258     local
1259 ]
1260 interface IDragSourceHelper : IUnknown
1261 {
1262     typedef struct
1263     {
1264         SIZE     sizeDragImage;
1265         POINT    ptOffset;
1266         HBITMAP  hbmpDragImage;
1267         COLORREF crColorKey;
1268     } SHDRAGIMAGE, *LPSHDRAGIMAGE;
1269
1270   HRESULT InitializeFromBitmap(
1271       [in] LPSHDRAGIMAGE pshdi,
1272       [in] IDataObject *pDataObject);
1273
1274   HRESULT InitializeFromWindow(
1275       [in] HWND hwnd,
1276       [in] POINT *ppt,
1277       [in] IDataObject *pDataObject);
1278 }
1279
1280
1281 /*****************************************************************************
1282  * IDropTargetHelper interface
1283  */
1284 [
1285     object,
1286     uuid(4657278b-411b-11d2-839a-00c04fd918d0),
1287     pointer_default(unique),
1288     local
1289 ]
1290 interface IDropTargetHelper : IUnknown
1291 {
1292     HRESULT DragEnter(
1293         [in] HWND hwndTarget,
1294         [in] IDataObject *pDataObject,
1295         [in] POINT *ppt,
1296         [in] DWORD dwEffect);
1297
1298     HRESULT DragLeave();
1299
1300     HRESULT DragOver(
1301         [in] POINT *ppt,
1302         [in] DWORD dwEffect);
1303
1304     HRESULT Drop(
1305         [in] IDataObject *pDataObject,
1306         [in] POINT *ppt,
1307         [in] DWORD dwEffect);
1308
1309     HRESULT Show( [in] BOOL fShow );
1310 }
1311
1312
1313 /*****************************************************************************
1314  * IContextMenu interface
1315  */
1316 [
1317     object,
1318     uuid(000214e4-0000-0000-c000-000000000046),
1319     pointer_default(unique),
1320     local
1321 ]
1322 interface IContextMenu : IUnknown
1323 {
1324 cpp_quote("#define CMF_NORMAL        0x00000000")
1325 cpp_quote("#define CMF_DEFAULTONLY   0x00000001")
1326 cpp_quote("#define CMF_VERBSONLY     0x00000002")
1327 cpp_quote("#define CMF_EXPLORE       0x00000004")
1328 cpp_quote("#define CMF_NOVERBS       0x00000008")
1329 cpp_quote("#define CMF_CANRENAME     0x00000010")
1330 cpp_quote("#define CMF_NODEFAULT     0x00000020")
1331 cpp_quote("#define CMF_INCLUDESTATIC 0x00000040")
1332 cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100")
1333 cpp_quote("#define CMF_RESERVED      0xffff0000")
1334
1335 cpp_quote("#define GCS_VERBA         0x00000000")
1336 cpp_quote("#define GCS_HELPTEXTA     0x00000001")
1337 cpp_quote("#define GCS_VALIDATEA     0x00000002")
1338 cpp_quote("#define GCS_VERBW         0x00000004")
1339 cpp_quote("#define GCS_HELPTEXTW     0x00000005")
1340 cpp_quote("#define GCS_VALIDATEW     0x00000006")
1341 cpp_quote("#define GCS_UNICODE       0x00000004")
1342 cpp_quote("#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)")
1343 cpp_quote("#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)")
1344 cpp_quote("#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)")
1345
1346 cpp_quote("#define CMDSTR_NEWFOLDERA   \"NewFolder\"")
1347 cpp_quote("#define CMDSTR_VIEWLISTA    \"ViewList\"")
1348 cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"")
1349 cpp_quote("#if defined(__GNUC__)")
1350 cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }")
1351 cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }")
1352 cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }")
1353 cpp_quote("#elif defined(_MSC_VER)")
1354 cpp_quote("# define CMDSTR_NEWFOLDERW   L\"NewFolder\"")
1355 cpp_quote("# define CMDSTR_VIEWLISTW    L\"ViewList\"")
1356 cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"")
1357 cpp_quote("#else")
1358 cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};")
1359 cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};")
1360 cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};")
1361 cpp_quote("#endif")
1362 cpp_quote("#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)")
1363 cpp_quote("#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)")
1364 cpp_quote("#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)")
1365
1366 cpp_quote("#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY")
1367 cpp_quote("#define CMIC_MASK_ICON           SEE_MASK_ICON")
1368 cpp_quote("#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI")
1369 cpp_quote("#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE")
1370 cpp_quote("#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE")
1371 cpp_quote("#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME")
1372 cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM")
1373 cpp_quote("#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE")
1374 cpp_quote("#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK")
1375 cpp_quote("#define CMIC_MASK_SHIFT_DOWN     0x10000000")
1376 cpp_quote("#define CMIC_MASK_PTINVOKE       0x20000000")
1377 cpp_quote("#define CMIC_MASK_CONTROL_DOWN   0x40000000")
1378 cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE")
1379 cpp_quote("#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS")
1380
1381     typedef IContextMenu *LPCONTEXTMENU;
1382
1383     typedef struct tagCMINVOKECOMMANDINFO
1384     {
1385         DWORD cbSize;
1386         DWORD fMask;
1387         HWND hwnd;
1388         LPCSTR lpVerb;
1389         LPCSTR lpParameters;
1390         LPCSTR lpDirectory;
1391         INT nShow;
1392         DWORD dwHotKey;
1393         HANDLE hIcon;
1394     } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
1395
1396     typedef struct tagCMInvokeCommandInfoEx
1397     {
1398         DWORD cbSize;
1399         DWORD fMask;
1400         HWND hwnd;
1401         LPCSTR lpVerb;
1402         LPCSTR lpParameters;
1403         LPCSTR lpDirectory;
1404         INT nShow;
1405         DWORD dwHotKey;
1406         HANDLE hIcon;
1407         LPCSTR lpTitle;
1408         LPCWSTR lpVerbW;
1409         LPCWSTR lpParametersW;
1410         LPCWSTR lpDirectoryW;
1411         LPCWSTR lpTitleW;
1412         POINT ptInvoke;
1413     } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
1414
1415     HRESULT QueryContextMenu(
1416         [in] HMENU hmenu,
1417         [in] UINT indexMenu,
1418         [in] UINT idCmdFirst,
1419         [in] UINT idCmdLast,
1420         [in] UINT uFlags);
1421
1422     HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );
1423
1424     HRESULT GetCommandString(
1425         [in] UINT_PTR idCmd,
1426         [in] UINT uType,
1427         [out] UINT *pwReserved,
1428         [out, size_is(cchMax)] LPSTR pszName,
1429         [in] UINT cchMax);
1430 }
1431
1432
1433 /*****************************************************************************
1434  * IContextMenu2 interface
1435  */
1436 [
1437     object,
1438     uuid(000214f4-0000-0000-c000-000000000046),
1439     pointer_default(unique),
1440     local
1441 ]
1442 interface IContextMenu2 : IContextMenu
1443 {
1444     typedef IContextMenu2 *LPCONTEXTMENU2;
1445
1446     HRESULT HandleMenuMsg(
1447         [in] UINT uMsg,
1448         [in] WPARAM wParam,
1449         [in] LPARAM lParam);
1450 }
1451
1452
1453 /*****************************************************************************
1454  * IContextMenu3 interface
1455  */
1456 [
1457     object,
1458     uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),
1459     pointer_default(unique),
1460     local
1461 ]
1462 interface IContextMenu3 : IContextMenu2
1463 {
1464     typedef IContextMenu3 *LPCONTEXTMENU3;
1465
1466     HRESULT HandleMenuMsg2(
1467         [in] UINT uMsg,
1468         [in] WPARAM wParam,
1469         [in] LPARAM lParam,
1470         [out] LRESULT *plResult);
1471 }
1472
1473
1474 /*****************************************************************************
1475  * IShellExecuteHookA interface
1476  */
1477 [
1478     object,
1479     uuid(000214f5-0000-0000-c000-000000000046),
1480     pointer_default(unique),
1481     local
1482 ]
1483 interface IShellExecuteHookA : IUnknown
1484 {
1485     cpp_quote("struct _SHELLEXECUTEINFOA;")
1486     HRESULT Execute(
1487         [in, out] struct _SHELLEXECUTEINFOA* pei);
1488 }
1489
1490
1491 /*****************************************************************************
1492  * IShellExecuteHookW interface
1493  */
1494 [
1495     object,
1496     uuid(000214fb-0000-0000-c000-000000000046),
1497     pointer_default(unique),
1498     local
1499 ]
1500 interface IShellExecuteHookW : IUnknown
1501 {
1502     cpp_quote("struct _SHELLEXECUTEINFOW;")
1503     HRESULT Execute(
1504                 [in, out] struct _SHELLEXECUTEINFOW* pei);
1505 }
1506
1507 /*****************************************************************************
1508  * IShellLinkDataList interface
1509  */
1510 [
1511     object,
1512     uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1),
1513     pointer_default(unique)
1514 ]
1515 interface IShellLinkDataList : IUnknown
1516 {
1517     [local] HRESULT AddDataBlock(
1518                 [in] void *pDataBlock);
1519     [local] HRESULT CopyDataBlock(
1520                 [in] DWORD dwSig,
1521                 [out] void **ppDataBlock);
1522     HRESULT RemoveDataBlock(
1523                 [in] DWORD dwSig);
1524     HRESULT GetFlags(
1525                 [out] DWORD *pdwFlags);
1526     HRESULT SetFlags(
1527                 [in] DWORD dwFlags);
1528 }
1529
1530
1531 /*****************************************************************************
1532  * IResolveShellLink interface
1533  */
1534 [
1535     object,
1536     uuid(5cd52983-9449-11d2-963a-00c04f79adf0),
1537     pointer_default(unique)
1538 ]
1539 interface IResolveShellLink : IUnknown
1540 {
1541     HRESULT ResolveShellLink(
1542                 [in] IUnknown *punk,
1543                 [in] HWND hwnd,
1544                 [in] DWORD fFlags);
1545 }
1546
1547
1548 /*****************************************************************************
1549  * IURLSearchHook interface
1550  */
1551 [
1552     object,
1553     uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),
1554     pointer_default(unique),
1555     local
1556 ]
1557 interface IURLSearchHook : IUnknown
1558 {
1559     HRESULT Translate(
1560                 [in, out] LPWSTR lpwszSearchURL,
1561                 [in] DWORD cchBufferSize);
1562 }
1563
1564
1565 /*****************************************************************************
1566  * ISearchContext interface
1567  */
1568 [
1569     object,
1570     uuid(09f656a2-41af-480c-88f7-16cc0d164615),
1571     pointer_default(unique),
1572     local
1573 ]
1574 interface ISearchContext : IUnknown
1575 {
1576     HRESULT GetSearchUrl(
1577                 [in] BSTR *pbstrSearchUrl);
1578     HRESULT GetSearchText(
1579                 [in] BSTR *pbstrSearchText);
1580     HRESULT GetSearchStyle(
1581                 [in] BSTR *pdwSearchStyle);
1582 }
1583
1584
1585 /*****************************************************************************
1586  * IURLSearchHook2 interface
1587  */
1588 [
1589     object,
1590     uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),
1591     pointer_default(unique),
1592     local
1593 ]
1594 interface IURLSearchHook2 : IURLSearchHook
1595 {
1596     HRESULT TranslateWithSearchContext(
1597                 [in, out] LPWSTR lpwszSearchURL,
1598                 [in] DWORD cchBufferSize,
1599                 [in] ISearchContext *pSearchContext);
1600 }
1601
1602
1603 cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)")
1604
1605 /*****************************************************************************
1606  * INewShortcutHookA interface
1607  */
1608 [
1609     object,
1610     uuid(000214e1-0000-0000-c000-000000000046),
1611     pointer_default(unique),
1612     local
1613 ]
1614 interface INewShortcutHookA : IUnknown
1615 {
1616     HRESULT SetReferent(
1617                 [in] LPCSTR pcszReferent,
1618                 [in] HWND hwnd);
1619     HRESULT GetReferent(
1620                 [out] LPSTR pcszReferent,
1621                 [in] int cchReferent);
1622     HRESULT SetFolder(
1623                 [in] LPCSTR pcszReferent);
1624     HRESULT GetFolder(
1625                 [out] LPSTR pcszReferent,
1626                 [in] int cchFolder);
1627     HRESULT GetName(
1628                 [out] LPSTR pszName,
1629                 [in] int cchName);
1630     HRESULT GetExtension(
1631                 [out] LPSTR pszExtension,
1632                 [in] int cchExtension);
1633
1634
1635
1636 /*****************************************************************************
1637  * INewShortcutHookW interface
1638  */
1639 [
1640     object,
1641     uuid(000214f7-0000-0000-c000-000000000046),
1642     pointer_default(unique),
1643     local
1644 ]
1645 interface INewShortcutHookW : IUnknown
1646 {
1647     HRESULT SetReferent(
1648                 [in] LPCWSTR pcszReferent,
1649                 [in] HWND hwnd);
1650     HRESULT GetReferent(
1651                 [out] LPWSTR pcszReferent,
1652                 [in] int cchReferent);
1653     HRESULT SetFolder(
1654                 [in] LPCWSTR pcszReferent);
1655     HRESULT GetFolder(
1656                 [out] LPWSTR pcszReferent,
1657                 [in] int cchFolder);
1658     HRESULT GetName(
1659                 [out] LPWSTR pszName,
1660                 [in] int cchName);
1661     HRESULT GetExtension(
1662                 [out] LPWSTR pszExtension,
1663                 [in] int cchExtension);
1664
1665
1666 /*****************************************************************************
1667  * IRunnableTask interface
1668  */
1669 [
1670     object,
1671     uuid(85788d00-6807-11d0-b810-00c04fd706ec),
1672     pointer_default(unique),
1673     local
1674 ]
1675 interface IRunnableTask : IUnknown
1676 {
1677     HRESULT Run();
1678     HRESULT Kill([in] BOOL fWait);
1679     HRESULT Suspend();
1680     HRESULT Resume();
1681     ULONG IsRunning();
1682 }
1683
1684 /*****************************************************************************
1685  * IShellChangeNotify interface
1686  */
1687 [
1688     object,
1689     uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2),
1690     pointer_default(unique),
1691     local
1692 ]
1693 interface IShellChangeNotify : IUnknown
1694 {
1695     HRESULT OnChange(
1696                 [in] LONG lEvent,
1697                 [in] LPCITEMIDLIST pidl1,
1698                 [in] LPCITEMIDLIST pidl2);
1699 }
1700
1701 /*****************************************************************************
1702  * IFileSystemBindData interface
1703  */
1704 [
1705     object,
1706     uuid(01e18d10-4d8b-11d2-855d-006008059367),
1707     pointer_default(unique),
1708     local
1709 ]
1710 interface IFileSystemBindData : IUnknown
1711 {
1712     HRESULT SetFindData(
1713                 [in] const WIN32_FIND_DATAW *pfd);
1714     HRESULT GetFindData(
1715                 [out] WIN32_FIND_DATAW *pfd);
1716 }
1717
1718 /*****************************************************************************
1719  *    ITaskbarList interface
1720  */
1721 [
1722     object,
1723     uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
1724     pointer_default(unique)
1725 ]
1726 interface ITaskbarList : IUnknown
1727 {
1728     HRESULT HrInit();
1729
1730     HRESULT AddTab(
1731         [in] HWND hwnd);
1732
1733     HRESULT DeleteTab(
1734         [in] HWND hwnd);
1735
1736     HRESULT ActivateTab(
1737         [in] HWND hwnd);
1738
1739     HRESULT SetActiveAlt(
1740         [in] HWND hwnd);
1741 }
1742
1743 cpp_quote("EXTERN_C const CLSID CLSID_TaskbarList;")
1744
1745 /*****************************************************************************
1746  *    IAutoCompleteDropDown interface
1747  */
1748 [
1749     object,
1750     uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
1751     pointer_default(unique)
1752 ]
1753 interface IAutoCompleteDropDown : IUnknown
1754 {
1755 cpp_quote("#define ACDD_VISIBLE   0x0001")
1756
1757     HRESULT GetDropDownStatus(
1758         [out] DWORD *pdwFlags,
1759         [out, string] LPWSTR *ppwszString);
1760
1761     HRESULT ResetEnumerator();
1762 }
1763
1764 [
1765     object,
1766     uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0),
1767     pointer_default(unique)
1768 ]
1769 interface IProfferService : IUnknown
1770 {
1771     HRESULT ProfferService(
1772         [in] REFGUID service,
1773         [in] IServiceProvider *pService,
1774         [out] DWORD *pCookie);
1775
1776     HRESULT RevokeService([in] DWORD cookie);
1777 }
1778
1779 /*****************************************************************************
1780  * IExplorerBrowserEvents interface
1781  */
1782 [
1783  object,
1784  uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F)
1785 ]
1786 interface IExplorerBrowserEvents : IUnknown
1787 {
1788     HRESULT OnNavigationPending(
1789         [in] PCIDLIST_ABSOLUTE pidlFolder);
1790
1791     HRESULT OnViewCreated(
1792         [in] IShellView *psv);
1793
1794     HRESULT OnNavigationComplete(
1795         [in] PCIDLIST_ABSOLUTE pidlFolder);
1796
1797     HRESULT OnNavigationFailed(
1798         [in] PCIDLIST_ABSOLUTE pidlFolder);
1799 }
1800
1801 typedef GUID EXPLORERPANE;
1802 typedef EXPLORERPANE *REFEXPLORERPANE;
1803
1804 cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility")
1805
1806 /*****************************************************************************
1807  * IExplorerPaneVisibility interface
1808  */
1809 [
1810  object,
1811  uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC)
1812 ]
1813 interface IExplorerPaneVisibility : IUnknown
1814 {
1815     typedef enum tagEXPLORERPANESTATE {
1816         EPS_DONTCARE     = 0x0,
1817         EPS_DEFAULT_ON   = 0x1,
1818         EPS_DEFAULT_OFF  = 0x2,
1819         EPS_STATE_MASK   = 0xffff,
1820         EPS_INITIALSTATE = 0x10000,
1821         EPS_FORCE        = 0x20000
1822     } EXPLORERPANESTATE;
1823
1824     HRESULT GetPaneState(
1825         [in] REFEXPLORERPANE ep,
1826         [out] EXPLORERPANESTATE *peps);
1827 }
1828
1829 typedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS {
1830     EBF_NONE                     = 0,
1831     EBF_SELECTFROMDATAOBJECT     = 0x100,
1832     EBF_NODROPTARGET             = 0x200
1833 } EXPLORER_BROWSER_FILL_FLAGS;
1834
1835 typedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS {
1836     EBO_NONE               = 0x00,
1837     EBO_NAVIGATEONCE       = 0x01,
1838     EBO_SHOWFRAMES         = 0x02,
1839     EBO_ALWAYSNAVIGATE     = 0x04,
1840     EBO_NOTRAVELLOG        = 0x08,
1841     EBO_NOWRAPPERWINDOW    = 0x10,
1842     EBO_HTMLSHAREPOINTVIEW = 0x20
1843 } EXPLORER_BROWSER_OPTIONS;
1844
1845 cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser")
1846
1847 /*****************************************************************************
1848  * IExplorerBrowser interface
1849  */
1850 [
1851  object,
1852  uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6),
1853  pointer_default(unique)
1854 ]
1855 interface IExplorerBrowser : IUnknown
1856 {
1857
1858     [local] HRESULT Initialize(
1859         [in] HWND hwndParent,
1860         [in] const RECT *prc,
1861         [in, unique] const FOLDERSETTINGS *pfs);
1862
1863     HRESULT Destroy();
1864
1865     [local] HRESULT SetRect(
1866         [in,out,unique] HDWP *phdwp,
1867         [in] RECT rcBrowser);
1868
1869     HRESULT SetPropertyBag(
1870         [in, string] LPCWSTR pszPropertyBag);
1871
1872     HRESULT SetEmptyText(
1873         [in, string] LPCWSTR pszEmptyText);
1874
1875     HRESULT SetFolderSettings(
1876         [in] const FOLDERSETTINGS *pfs);
1877
1878     HRESULT Advise(
1879         [in] IExplorerBrowserEvents *psbe,
1880         [out] DWORD *pdwCookie);
1881
1882     HRESULT Unadvise(
1883         [in] DWORD dwCookie);
1884
1885     HRESULT SetOptions(
1886         [in] EXPLORER_BROWSER_OPTIONS dwFlag);
1887
1888     HRESULT GetOptions(
1889         [out] EXPLORER_BROWSER_OPTIONS *pdwFlag);
1890
1891     HRESULT BrowseToIDList(
1892         [in] PCUIDLIST_RELATIVE pidl,
1893         [in] UINT uFlags);
1894
1895     HRESULT BrowseToObject(
1896         [in] IUnknown *punk,
1897         [in] UINT uFlags);
1898
1899     HRESULT FillFromObject(
1900         [in] IUnknown *punk,
1901         [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags);
1902
1903     HRESULT RemoveAll();
1904
1905     HRESULT GetCurrentView(
1906         [in] REFIID riid,
1907         [out, iid_is(riid)] void **ppv);
1908 }
1909
1910 /*****************************************************************************
1911  * INameSpaceTreeControl interface
1912  */
1913 [
1914  object,
1915  uuid(028212A3-B627-47E9-8856-C14265554E4F)
1916 ]
1917 interface INameSpaceTreeControl : IUnknown
1918 {
1919     [v1_enum] enum _NSTCSTYLE {
1920         NSTCS_HASEXPANDOS                 = 0x00000001,
1921         NSTCS_HASLINES                    = 0x00000002,
1922         NSTCS_SINGLECLICKEXPAND           = 0x00000004,
1923         NSTCS_FULLROWSELECT               = 0x00000008,
1924         NSTCS_SPRINGEXPAND                = 0x00000010,
1925         NSTCS_HORIZONTALSCROLL            = 0x00000020,
1926         NSTCS_ROOTHASEXPANDO              = 0x00000040,
1927         NSTCS_SHOWSELECTIONALWAYS         = 0x00000080,
1928         NSTCS_NOINFOTIP                   = 0x00000200,
1929         NSTCS_EVENHEIGHT                  = 0x00000400,
1930         NSTCS_NOREPLACEOPEN               = 0x00000800,
1931         NSTCS_DISABLEDRAGDROP             = 0x00001000,
1932         NSTCS_NOORDERSTREAM               = 0x00002000,
1933         NSTCS_RICHTOOLTIP                 = 0x00004000,
1934         NSTCS_BORDER                      = 0x00008000,
1935         NSTCS_NOEDITLABELS                = 0x00010000,
1936         NSTCS_TABSTOP                     = 0x00020000,
1937         NSTCS_FAVORITESMODE               = 0x00080000,
1938         NSTCS_AUTOHSCROLL                 = 0x00100000,
1939         NSTCS_FADEINOUTEXPANDOS           = 0x00200000,
1940         NSTCS_EMPTYTEXT                   = 0x00400000,
1941         NSTCS_CHECKBOXES                  = 0x00800000,
1942         NSTCS_PARTIALCHECKBOXES           = 0x01000000,
1943         NSTCS_EXCLUSIONCHECKBOXES         = 0x02000000,
1944         NSTCS_DIMMEDCHECKBOXES            = 0x04000000,
1945         NSTCS_NOINDENTCHECKS              = 0x08000000,
1946         NSTCS_ALLOWJUNCTIONS              = 0x10000000,
1947         NSTCS_SHOWTABSBUTTON              = 0x20000000,
1948         NSTCS_SHOWDELETEBUTTON            = 0x40000000,
1949         NSTCS_SHOWREFRESHBUTTON      = (int)0x80000000
1950     };
1951     typedef DWORD NSTCSTYLE;
1952
1953     [v1_enum] enum _NSTCROOTSTYLE {
1954         NSTCRS_VISIBLE                    = 0x0000,
1955         NSTCRS_HIDDEN                     = 0x0001,
1956         NSTCRS_EXPANDED                   = 0x0002
1957     };
1958     typedef DWORD NSTCROOTSTYLE;
1959
1960     [v1_enum] enum _NSTCITEMSTATE {
1961         NSTCIS_NONE                       = 0x0000,
1962         NSTCIS_SELECTED                   = 0x0001,
1963         NSTCIS_EXPANDED                   = 0x0002,
1964         NSTCIS_BOLD                       = 0x0004,
1965         NSTCIS_DISABLED                   = 0x0008,
1966         NSTCIS_SELECTEDNOEXPAND           = 0x0010
1967     };
1968     typedef DWORD NSTCITEMSTATE;
1969
1970     typedef [v1_enum] enum NSTCGNI {
1971         NSTCGNI_NEXT                      = 0,
1972         NSTCGNI_NEXTVISIBLE               = 1,
1973         NSTCGNI_PREV                      = 2,
1974         NSTCGNI_PREVVISIBLE               = 3,
1975         NSTCGNI_PARENT                    = 4,
1976         NSTCGNI_CHILD                     = 5,
1977         NSTCGNI_FIRSTVISIBLE              = 6,
1978         NSTCGNI_LASTVISIBLE               = 7
1979     } NSTCGNI;
1980
1981     HRESULT Initialize(
1982         [in] HWND hwndParent,
1983         [in, unique] RECT *prc,
1984         [in] NSTCSTYLE nstcsFlags);
1985
1986     HRESULT TreeAdvise(
1987         [in] IUnknown *punk,
1988         [out] DWORD *pdwCookie);
1989
1990     HRESULT TreeUnadvise(
1991         [in] DWORD dwCookie);
1992
1993     HRESULT AppendRoot(
1994         [in] IShellItem *psiRoot,
1995         [in] SHCONTF grfEnumFlags,
1996         [in] NSTCROOTSTYLE grfRootStyle,
1997         [in, unique] IShellItemFilter *pif);
1998
1999     HRESULT InsertRoot(
2000         [in] int iIndex,
2001         [in] IShellItem *psiRoot,
2002         [in] SHCONTF grfEnumFlags,
2003         [in] NSTCROOTSTYLE grfRootStyle,
2004         [in, unique] IShellItemFilter *pif);
2005
2006     HRESULT RemoveRoot(
2007         [in] IShellItem *psiRoot);
2008
2009     HRESULT RemoveAllRoots();
2010
2011     HRESULT GetRootItems(
2012         [out] IShellItemArray **ppsiaRootItems);
2013
2014     HRESULT SetItemState(
2015         [in] IShellItem *psi,
2016         [in] NSTCITEMSTATE nstcisMask,
2017         [in] NSTCITEMSTATE nstcisFlags);
2018
2019     HRESULT GetItemState(
2020         [in] IShellItem *psi,
2021         [in] NSTCITEMSTATE nstcismask,
2022         [out] NSTCITEMSTATE *pnstcisFlags);
2023
2024     HRESULT GetSelectedItems(
2025         [out] IShellItemArray **psiaItems);
2026
2027     HRESULT GetItemCustomState(
2028         [in] IShellItem *psi,
2029         [out] int *piStateNumber);
2030
2031     HRESULT SetItemCustomState(
2032         [in] IShellItem *psi,
2033         [in] int iStateNumber);
2034
2035     HRESULT EnsureItemVisible(
2036         [in] IShellItem *psi);
2037
2038     HRESULT SetTheme(
2039         [in, string] LPCWSTR pszTheme);
2040
2041     HRESULT GetNextItem(
2042         [in, unique] IShellItem *psi,
2043         [in] NSTCGNI nstcgi,
2044         [out] IShellItem **ppsiNext);
2045
2046     HRESULT HitTest(
2047         [in] POINT *ppt,
2048         [out] IShellItem **ppsiOut);
2049
2050     HRESULT GetItemRect(
2051         [in] IShellItem *psi,
2052         [out] RECT *prect);
2053
2054     HRESULT CollapseAll();
2055 }
2056
2057 /*****************************************************************************
2058  * INameSpaceTreeControl2 interface
2059  */
2060 [
2061  object,
2062  uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C)
2063 ]
2064 interface INameSpaceTreeControl2 : INameSpaceTreeControl
2065 {
2066     typedef [v1_enum] enum NSTCSTYLE2 {
2067         NSTCS2_DEFAULT                     = 0x00,
2068         NSTCS2_INTERRUPTNOTIFICATIONS      = 0x01,
2069         NSTCS2_SHOWNULLSPACEMENU           = 0x02,
2070         NSTCS2_DISPLAYPADDING              = 0x04,
2071         NSTCS2_DISPLAYPINNEDONLY           = 0x08,
2072         NTSCS2_NOSINGLETONAUTOEXPAND       = 0x10,  /* The apparent typo here is   */
2073         NTSCS2_NEVERINSERTNONENUMERATED    = 0x20   /* present also in the Win SDK */
2074     } NSTCSTYLE2;
2075     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)")
2076
2077     HRESULT SetControlStyle(
2078         [in] NSTCSTYLE nstcsMask,
2079         [in] NSTCSTYLE nstcsStyle);
2080
2081     HRESULT GetControlStyle(
2082         [in] NSTCSTYLE nstcsMask,
2083         [out] NSTCSTYLE *pnstcsStyle);
2084
2085     HRESULT SetControlStyle2(
2086         [in] NSTCSTYLE2 nstcsMask,
2087         [in] NSTCSTYLE2 nstcsStyle);
2088
2089     HRESULT GetControlStyle2(
2090         [in] NSTCSTYLE2 nstcsMask,
2091         [out] NSTCSTYLE2 *pnstcsStyle);
2092 }
2093
2094 /*****************************************************************************
2095  * INameSpaceTreeControlEvents interface
2096  */
2097
2098 [
2099  object,
2100  uuid(93D77985-B3D8-4484-8318-672CDDA002CE),
2101  local
2102 ]
2103 interface INameSpaceTreeControlEvents : IUnknown
2104 {
2105     [v1_enum] enum _NSTCEHITTEST {
2106         NSTCEHT_NOWHERE                    = 0x0001,
2107         NSTCEHT_ONITEMICON                 = 0x0002,
2108         NSTCEHT_ONITEMLABEL                = 0x0004,
2109         NSTCEHT_ONITEMIDENT                = 0x0008,
2110         NSTCEHT_ONITEMBUTTON               = 0x0010,
2111         NSTCEHT_ONITEMRIGHT                = 0x0020,
2112         NSTCEHT_ONITEMSTATEICON            = 0x0040,
2113         NSTCEHT_ONITEM                     = 0x0046,
2114         NSTCEHT_ONITEMTABBUTTON            = 0x1000
2115     };
2116     typedef DWORD NSTCEHITTEST;
2117
2118     [v1_enum] enum _NSTCECLICKTYPE {
2119         NSTCECT_LBUTTON                    = 0x1,
2120         NSTCECT_MBUTTON                    = 0x2,
2121         NSTCECT_RBUTTON                    = 0x3,
2122         NSTCECT_BUTTON                     = 0x3,
2123         NSTCECT_DBLCLICK                   = 0x4
2124     };
2125     typedef DWORD NSTCECLICKTYPE;
2126
2127     HRESULT OnItemClick(
2128         [in] IShellItem *psi,
2129         [in] NSTCEHITTEST nstceHitTest,
2130         [in] NSTCECLICKTYPE nstceClickType);
2131
2132     HRESULT OnPropertyItemCommit(
2133         [in] IShellItem *psi);
2134
2135     HRESULT OnItemStateChanging(
2136         [in] IShellItem *psi,
2137         [in] NSTCITEMSTATE nstcisMask,
2138         [in] NSTCITEMSTATE nstcisState);
2139
2140     HRESULT OnItemStateChanged(
2141         [in] IShellItem *psi,
2142         [in] NSTCITEMSTATE nstcisMask,
2143         [in] NSTCITEMSTATE nstcisState);
2144
2145     HRESULT OnSelectionChanged(
2146         [in] IShellItemArray *psiaSelection);
2147
2148     HRESULT OnKeyboardInput(
2149         [in] UINT uMsg,
2150         [in] WPARAM wParam,
2151         [in] LPARAM lParam);
2152
2153     HRESULT OnBeforeExpand(
2154         [in] IShellItem *psi);
2155
2156     HRESULT OnAfterExpand(
2157         [in] IShellItem *psi);
2158
2159     HRESULT OnBeginLabelEdit(
2160         [in] IShellItem *psi);
2161
2162     HRESULT OnEndLabelEdit(
2163         [in] IShellItem *psi);
2164
2165     HRESULT OnGetToolTip(
2166         [in] IShellItem *psi,
2167         [out, string, size_is(cchTip)] LPWSTR pszTip,
2168         [in] int cchTip);
2169
2170     HRESULT OnBeforeItemDelete(
2171         [in] IShellItem *psi);
2172
2173     HRESULT OnItemAdded(
2174         [in] IShellItem *psi,
2175         [in] BOOL fIsRoot);
2176
2177     HRESULT OnItemDeleted(
2178         [in] IShellItem *psi,
2179         [in] BOOL fIsRoot);
2180
2181     HRESULT OnBeforeContextMenu(
2182         [in, unique] IShellItem *psi,
2183         [in] REFIID riid,
2184         [out, iid_is(riid)] void **ppv);
2185
2186     HRESULT OnAfterContextMenu(
2187         [in] IShellItem *psi,
2188         [in] IContextMenu *pcmIn,
2189         [in] REFIID riid,
2190         [out, iid_is(riid)] void **ppv);
2191
2192     HRESULT OnBeforeStateImageChange(
2193         [in] IShellItem *psi,
2194         [out] int *piDefaultIcon,
2195         [out] int *piOpenIcon);
2196
2197     HRESULT OnGetDefaultIconIndex(
2198         [in] IShellItem *psi,
2199         [out] int *piDefaultIcon,
2200         [out] int *piOpenIcon);
2201 }
2202
2203 cpp_quote("#ifdef MIDL_PASS")
2204 typedef IUnknown *HIMAGELIST;
2205 cpp_quote("#endif")
2206
2207 /*****************************************************************************
2208  * INameSpaceTreeControlCustomDraw interface
2209  */
2210 [
2211  object,
2212  uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78),
2213  local
2214 ]
2215
2216 interface INameSpaceTreeControlCustomDraw : IUnknown
2217 {
2218     typedef struct NSTCCUSTOMDRAW
2219     {
2220         IShellItem *psi;
2221         UINT uItemState;
2222         NSTCITEMSTATE nstcis;
2223         LPCWSTR pszText;
2224         int iImage;
2225         HIMAGELIST himl;
2226         int iLevel;
2227         int iIndent;
2228     } NSTCCUSTOMDRAW;
2229
2230     HRESULT PrePaint(
2231         [in] HDC hdc,
2232         [in] RECT *prc,
2233         [out] LRESULT *plres);
2234
2235     HRESULT PostPaint(
2236         [in] HDC hdc,
2237         [in] RECT *prc);
2238
2239     HRESULT ItemPrePaint(
2240         [in] HDC hdc,
2241         [in] RECT *prc,
2242         [in, out] COLORREF *pclrText,
2243         [in, out] COLORREF *pclrTextBk,
2244         [out] LRESULT *plres);
2245
2246     HRESULT ItemPostPaint(
2247         [in] HDC hdc,
2248         [in] RECT *prc,
2249         [in] NSTCCUSTOMDRAW *pnstccdItem);
2250 }
2251
2252 /*****************************************************************************
2253  * INameSpaceTreeControlDropHandler interface
2254  */
2255 [
2256  object,
2257  uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51),
2258  local
2259 ]
2260 interface INameSpaceTreeControlDropHandler : IUnknown
2261 {
2262     HRESULT OnDragEnter(
2263         [in, unique] IShellItem *psiOver,
2264         [in] IShellItemArray *psiaData,
2265         [in] BOOL fOutsideSource,
2266         [in] DWORD grfKeyState,
2267         [in, out] DWORD *pdwEffect);
2268
2269     HRESULT OnDragOver(
2270         [in, unique] IShellItem *psiOver,
2271         [in] IShellItemArray *psiaData,
2272         [in] DWORD grfKeyState,
2273         [in, out] DWORD *pdwEffect);
2274
2275     HRESULT OnDragPosition(
2276         [in, unique] IShellItem *psiOver,
2277         [in] IShellItemArray *psiaData,
2278         [in] int iNewPosition,
2279         [in] int iOldPosition);
2280
2281     HRESULT OnDrop(
2282         [in, unique] IShellItem *psiOver,
2283         [in] IShellItemArray *psiaData,
2284         [in] int iPosition,
2285         [in] DWORD grfKeyState,
2286         [in, out] DWORD *pdwEffect);
2287
2288     HRESULT OnDropPosition(
2289         [in, unique] IShellItem *psiOver,
2290         [in] IShellItemArray *psiaData,
2291         [in] int iNewPosition,
2292         [in] int iOldPosition);
2293
2294     HRESULT OnDragLeave(
2295         [in, unique] IShellItem *psiOver);
2296 }
2297 cpp_quote("#define NSTCDHPOS_ONTOP -1")
2298
2299 interface IFileDialog;
2300
2301 typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE
2302 {
2303     FDEOR_DEFAULT  = 0,
2304     FDEOR_ACCCEP   = 1,
2305     FDEOR_REFUSE   = 2
2306 } FDE_OVERWRITE_RESPONSE;
2307
2308 typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE
2309 {
2310     FDESVR_DEFAULT = 0,
2311     FDESVR_ACCEPT  = 1,
2312     FDESVR_REFUSE  = 2
2313 } FDE_SHAREVIOLATION_RESPONSE;
2314
2315 /*****************************************************************************
2316  * IFileDialogEvents interface
2317  */
2318 [
2319  object,
2320  uuid(973510DB-7D7F-452B-8975-74A85828D354),
2321  pointer_default(unique)
2322 ]
2323 interface IFileDialogEvents : IUnknown
2324 {
2325     HRESULT OnFileOk(
2326         [in] IFileDialog *pfd);
2327
2328     HRESULT OnFolderChanging(
2329         [in] IFileDialog *pfd,
2330         [in] IShellItem *psiFolder);
2331
2332     HRESULT OnFolderChange(
2333         [in] IFileDialog *pfd);
2334
2335     HRESULT OnSelectionChange(
2336         [in] IFileDialog *pfd);
2337
2338     HRESULT OnShareViolation(
2339         [in] IFileDialog *pfd,
2340         [in] IShellItem *psi,
2341         [out] FDE_SHAREVIOLATION_RESPONSE *pResponse);
2342
2343     HRESULT OnTypeChange(
2344         [in] IFileDialog *pfd);
2345
2346     HRESULT OnOverwrite(
2347         [in] IFileDialog *pfd,
2348         [in] IShellItem *psi,
2349         [out] FDE_OVERWRITE_RESPONSE *pResponse);
2350 }
2351
2352 /*****************************************************************************
2353  * IModalWindow interface
2354  */
2355 [
2356  object,
2357  uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802),
2358  pointer_default(unique)
2359 ]
2360 interface IModalWindow : IUnknown
2361 {
2362     [local]
2363     HRESULT Show(
2364         [in, unique, annotation("__in_opt")] HWND hwndOwner);
2365
2366     [call_as(Show)]
2367     HRESULT RemoteShow(
2368         [in, unique] HWND hwndOwner);
2369 }
2370
2371 typedef [v1_enum] enum FDAP
2372 {
2373     FDAP_BOTTOM    = 0,
2374     FDAP_TOP       = 1
2375 } FDAP;
2376
2377 /*****************************************************************************
2378  * IFileDialog interface
2379  */
2380 [
2381  object,
2382  uuid(42F85136-DB7E-439C-85F1-E4075D135FC8),
2383  pointer_default(unique)
2384 ]
2385 interface IFileDialog : IModalWindow
2386 {
2387     [v1_enum] enum _FILEOPENDIALOGOPTIONS
2388     {
2389         FOS_OVERWRITEPROMPT     = 0x00000002,
2390         FOS_STRICTFILETYPES     = 0x00000004,
2391         FOS_NOCHANGEDIR         = 0x00000008,
2392         FOS_PICKFOLDERS         = 0x00000020,
2393         FOS_FORCEFILESYSTEM     = 0x00000040,
2394         FOS_ALLNONSTORAGEITEMS  = 0x00000080,
2395         FOS_NOVALIDATE          = 0x00000100,
2396         FOS_ALLOWMULTISELECT    = 0x00000200,
2397         FOS_PATHMUSTEXIST       = 0x00000800,
2398         FOS_FILEMUSTEXIST       = 0x00001000,
2399         FOS_CREATEPROMPT        = 0x00002000,
2400         FOS_SHAREAWARE          = 0x00004000,
2401         FOS_NOREADONLYRETURN    = 0x00008000,
2402         FOS_NOTESTFILECREATE    = 0x00010000,
2403         FOS_HIDEMRUPLACES       = 0x00020000,
2404         FOS_HIDEPINNEDPLACES    = 0x00040000,
2405         FOS_NODEREFERENCELINKS  = 0x00100000,
2406         FOS_DONTADDTORECENT     = 0x02000000,
2407         FOS_FORCESHOWHIDDEN     = 0x10000000,
2408         FOS_DEFAULTNOMINIMODE   = 0x20000000,
2409         FOS_FORCEPREVIEWPANEON  = 0x40000000
2410     };
2411     typedef DWORD FILEOPENDIALOGOPTIONS;
2412
2413     HRESULT SetFileTypes(
2414         [in] UINT cFileTypes,
2415         [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec);
2416
2417     HRESULT SetFileTypeIndex(
2418         [in] UINT iFileType);
2419
2420     HRESULT GetFileTypeIndex(
2421         [out] UINT *piFileType);
2422
2423     HRESULT Advise(
2424         [in] IFileDialogEvents *pfde,
2425         [out] DWORD *pdwCookie);
2426
2427     HRESULT Unadvise(
2428         [in] DWORD dwCookie);
2429
2430     HRESULT SetOptions(
2431         [in] FILEOPENDIALOGOPTIONS fos);
2432
2433     HRESULT GetOptions(
2434         [in] FILEOPENDIALOGOPTIONS *pfos);
2435
2436     HRESULT SetDefaultFolder(
2437         [in] IShellItem *psi);
2438
2439     HRESULT SetFolder(
2440         [in] IShellItem *psi);
2441
2442     HRESULT GetFolder(
2443         [out] IShellItem **ppsi);
2444
2445     HRESULT GetCurrentSelection(
2446         [out] IShellItem **ppsi);
2447
2448     HRESULT SetFileName(
2449         [in, string] LPCWSTR pszName);
2450
2451     HRESULT GetFileName(
2452         [out, string] LPWSTR *pszName);
2453
2454     HRESULT SetTitle(
2455         [in, string] LPCWSTR pszTitle);
2456
2457     HRESULT SetOkButtonLabel(
2458         [in, string] LPCWSTR pszText);
2459
2460     HRESULT SetFileNameLabel(
2461         [in, string] LPCWSTR pszLabel);
2462
2463     HRESULT GetResult(
2464         [out] IShellItem **ppsi);
2465
2466     HRESULT AddPlace(
2467         [in] IShellItem *psi,
2468         [in] FDAP fdap);
2469
2470     HRESULT SetDefaultExtension(
2471         [in, string] LPCWSTR pszDefaultExtension);
2472
2473     HRESULT Close(
2474         [in] HRESULT hr);
2475
2476     HRESULT SetClientGuid(
2477         [in] REFGUID guid);
2478
2479     HRESULT ClearClientData();
2480
2481     HRESULT SetFilter(
2482         [in] IShellItemFilter *pFilter);
2483 }
2484
2485 /*****************************************************************************
2486  * IFileDialog2 interface
2487  */
2488 [
2489  object,
2490  uuid(61744FC7-85B5-4791-A9B0-272276309B13),
2491  pointer_default(unique)
2492 ]
2493 interface IFileDialog2 : IFileDialog
2494 {
2495     HRESULT SetCancelButtonLabel(
2496         [in] LPCWSTR pszLabel);
2497
2498     HRESULT SetNavigationRoot(
2499         [in] IShellItem *psi);
2500 }
2501
2502 /*****************************************************************************
2503  * IFileOperationProgressSink interface
2504  */
2505 [
2506  object,
2507  uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2),
2508  pointer_default(unique)
2509 ]
2510 interface IFileOperationProgressSink : IUnknown
2511 {
2512     HRESULT StartOperations();
2513
2514     HRESULT FinishOperations(
2515         [in] HRESULT hrResult);
2516
2517     HRESULT PreRenameItem(
2518         [in] DWORD dwFlags,
2519         [in] IShellItem *psiItem,
2520         [in, unique, string] LPCWSTR pszNewName);
2521
2522     HRESULT PostRenameItem(
2523         [in] DWORD dwFlags,
2524         [in] IShellItem *psiItem,
2525         [in, string] LPCWSTR pszNewName,
2526         [in] HRESULT hrRename,
2527         [in] IShellItem *psiNewlyCreated);
2528
2529     HRESULT PreMoveItem(
2530         [in] DWORD dwFlags,
2531         [in] IShellItem *psiItem,
2532         [in] IShellItem *psiDestinationFolder,
2533         [in, unique, string] LPCWSTR pszNewName);
2534
2535     HRESULT PostMoveItem(
2536         [in] DWORD dwFlags,
2537         [in] IShellItem *psiItem,
2538         [in] IShellItem *psiDestinationFolder,
2539         [in, unique, string] LPCWSTR pszNewName,
2540         [in] HRESULT hrMove,
2541         [in] IShellItem *psiNewlyCreated);
2542
2543     HRESULT PreCopyItem(
2544         [in] DWORD dwFlags,
2545         [in] IShellItem *psiItem,
2546         [in] IShellItem *psiDestinationFolder,
2547         [in, unique, string] LPCWSTR pszNewName);
2548
2549     HRESULT PostCopyItem(
2550         [in] DWORD dwFlags,
2551         [in] IShellItem *psiItem,
2552         [in] IShellItem *psiDestinationFolder,
2553         [in, unique, string] LPCWSTR pszNewName,
2554         [in] HRESULT hrCopy,
2555         [in] IShellItem *psiNewlyCreated);
2556
2557     HRESULT PreDeleteItem(
2558         [in] DWORD dwFlags,
2559         [in] IShellItem *psiItem);
2560
2561     HRESULT PostDeleteItem(
2562         [in] DWORD dwFlags,
2563         [in] IShellItem *psiItem,
2564         [in] HRESULT hrDelete,
2565         [in] IShellItem *psiNewlyCreated);
2566
2567     HRESULT PreNewItem(
2568         [in] DWORD dwFlags,
2569         [in] IShellItem *psiDestinationFolder,
2570         [in, unique, string] LPCWSTR pszNewName);
2571
2572     HRESULT PostNewItem(
2573         [in] DWORD dwFlags,
2574         [in] IShellItem *psiDestinationFolder,
2575         [in, unique, string] LPCWSTR pszNewName,
2576         [in, unique, string] LPCWSTR pszTemplateName,
2577         [in] DWORD dwFileAttributes,
2578         [in] HRESULT hrNew,
2579         [in] IShellItem *psiNewItem);
2580
2581     HRESULT UpdateProgress(
2582         [in] UINT iWorkTotal,
2583         [in] UINT iWorkSoFar);
2584
2585     HRESULT ResetTimer();
2586
2587     HRESULT PauseTimer();
2588
2589     HRESULT ResumeTimer();
2590 }
2591
2592 /*****************************************************************************
2593  * IFileSaveDialog interface
2594  */
2595 [
2596  object,
2597  uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB),
2598  pointer_default(unique)
2599 ]
2600 interface IFileSaveDialog : IFileDialog
2601 {
2602     HRESULT SetSaveAsItem(
2603         [in] IShellItem *psi);
2604
2605     HRESULT SetProperties(
2606         [in] IPropertyStore *pStore);
2607
2608     HRESULT SetCollectedProperties(
2609         [in] IPropertyDescriptionList *pList,
2610         [in] BOOL fAppendDefault);
2611
2612     HRESULT GetProperties(
2613         [in] IPropertyStore **ppStore);
2614
2615     HRESULT ApplyProperties(
2616         [in] IShellItem *psi,
2617         [in] IPropertyStore *pStore,
2618         [in, unique] HWND hwnd,
2619         [in, unique] IFileOperationProgressSink *pSink);
2620 }
2621
2622
2623 /*****************************************************************************
2624  * IFileOpenDialog interface
2625  */
2626 [
2627  object,
2628  uuid(D57C7288-D4AD-4768-BE02-9D969532D960),
2629  pointer_default(unique)
2630 ]
2631 interface IFileOpenDialog : IFileDialog
2632 {
2633     HRESULT GetResults(
2634         [out] IShellItemArray **ppenum);
2635
2636     HRESULT GetSelectedItems(
2637         [out] IShellItemArray **ppsai);
2638 }
2639
2640 typedef [v1_enum] enum CDCONTROLSTATEF
2641 {
2642     CDCS_INACTIVE       = 0x0,
2643     CDCS_ENABLED        = 0x1,
2644     CDCS_VISIBLE        = 0x2,
2645     CDCS_ENABLEDVISIBLE = 0x3
2646 } CDCONTROLSTATEF;
2647 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)")
2648 /*****************************************************************************
2649  * IFileDialogCustomize interface
2650  */
2651 [
2652  object,
2653  uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034),
2654  pointer_default(unique)
2655 ]
2656 interface IFileDialogCustomize : IUnknown
2657 {
2658     HRESULT EnableOpenDropDown(
2659         [in] DWORD dwIDCtl);
2660
2661     HRESULT AddMenu(
2662         [in] DWORD dwIDCtl,
2663         [in, string] LPCWSTR pszLabel);
2664
2665     HRESULT AddPushButton(
2666         [in] DWORD dwIDCtl,
2667         [in, string] LPCWSTR pszLabel);
2668
2669     HRESULT AddComboBox(
2670         [in] DWORD dwIDCtl);
2671
2672     HRESULT AddRadioButtonList(
2673         [in] DWORD dwIDCtl);
2674
2675     HRESULT AddCheckButton(
2676         [in] DWORD dwIDCtl,
2677         [in, string] LPCWSTR pszLabel,
2678         [in] BOOL bChecked);
2679
2680     HRESULT AddEditBox(
2681         [in] DWORD dwIDCtl,
2682         [in, string] LPCWSTR pszText);
2683
2684     HRESULT AddSeparator(
2685         [in] DWORD dwIDCtl);
2686
2687     HRESULT AddText(
2688         [in] DWORD dwIDCtl,
2689         [in, string] LPCWSTR pszText);
2690
2691     HRESULT SetControlLabel(
2692         [in] DWORD dwIDCtl,
2693         [in, string] LPCWSTR pszLabel);
2694
2695     HRESULT GetControlState(
2696         [in] DWORD dwIDCtl,
2697         [out] CDCONTROLSTATEF *pdwState);
2698
2699     HRESULT SetControlState(
2700         [in] DWORD dwIDCtl,
2701         [in] CDCONTROLSTATEF dwState);
2702
2703     HRESULT GetEditBoxText(
2704         [in] DWORD dwIDCtl,
2705         [out, string] WCHAR **ppszText);
2706
2707     HRESULT SetEditBoxText(
2708         [in] DWORD dwIDCtl,
2709         [in, string] LPCWSTR pszText);
2710
2711     HRESULT GetCheckButtonState(
2712         [in] DWORD dwIDCtl,
2713         [out] BOOL *pbChecked);
2714
2715     HRESULT SetCheckButtonState(
2716         [in] DWORD dwIDCtl,
2717         [in] BOOL bChecked);
2718
2719     HRESULT AddControlItem(
2720         [in] DWORD dwIDCtl,
2721         [in] DWORD dwIDItem,
2722         [in] LPCWSTR pszLabel);
2723
2724     HRESULT RemoveControlItem(
2725         [in] DWORD dwIDCtl,
2726         [in] DWORD dwIDItem);
2727
2728     HRESULT RemoveAllControlItems(
2729         [in] DWORD dwIDCtl);
2730
2731     HRESULT GetControlItemState(
2732         [in] DWORD dwIDCtl,
2733         [in] DWORD dwIDItem,
2734         [out] CDCONTROLSTATEF *pdwState);
2735
2736     HRESULT SetControlItemState(
2737         [in] DWORD dwIDCtl,
2738         [in] DWORD dwIDItem,
2739         [in] CDCONTROLSTATEF dwState);
2740
2741     HRESULT GetSelectedControlItem(
2742         [in] DWORD dwIDCtl,
2743         [out] DWORD *pdwIDItem);
2744
2745     HRESULT SetSelectedControlItem(
2746         [in] DWORD dwIDCtl,
2747         [in] DWORD dwIDItem);
2748
2749     HRESULT StartVisualGroup(
2750         [in] DWORD dwIDCtl,
2751         [in, string] LPCWSTR pszLabel);
2752
2753     HRESULT EndVisualGroup();
2754
2755     HRESULT MakeProminent(
2756         [in] DWORD dwIDCtl);
2757
2758     HRESULT SetControlItemText(
2759         [in] DWORD dwIDCtl,
2760         [in] DWORD dwIDItem,
2761         [in, string] LPCWSTR pszLabel);
2762 }
2763
2764 /*****************************************************************************
2765  * IFileDialogControlEvents interface
2766  */
2767 [
2768  object,
2769  uuid(36116642-D713-4B97-9B83-7484A9D00433),
2770  pointer_default(unique)
2771 ]
2772 interface IFileDialogControlEvents : IUnknown
2773 {
2774     HRESULT OnItemSelected(
2775         [in] IFileDialogCustomize *pfdc,
2776         [in] DWORD dwIDCtl,
2777         [in] DWORD dwIDItem);
2778
2779     HRESULT OnButtonClicked(
2780         [in] IFileDialogCustomize *pfdc,
2781         [in] DWORD dwIDCtl);
2782
2783     HRESULT OnCheckButtonToggled(
2784         [in] IFileDialogCustomize *pfdc,
2785         [in] BOOL dwIDCtl,
2786         [in] BOOL bChecked);
2787
2788     HRESULT OnControlActivating(
2789         [in] IFileDialogCustomize *pfdc,
2790         [in] DWORD dwIDCtl);
2791 }