OSDN Git Service

Redo the filters based on assumptions discussed in mingw-dvlpr list.
[mingw/mingw-org-wsl.git] / include / shlobj.h
1 /**
2  * @file shlobj.h
3  * @copy 2012 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  * 
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  * 
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _SHLOBJ_H
25 #define _SHLOBJ_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #include <ole2.h>
34 #include <shlguid.h>
35 #include <shellapi.h>
36 #pragma pack(push,1)
37 #include <commctrl.h>
38
39 #define BIF_RETURNONLYFSDIRS 1
40 #define BIF_DONTGOBELOWDOMAIN 2
41 #define BIF_STATUSTEXT 4
42 #define BIF_RETURNFSANCESTORS 8
43 #define BIF_EDITBOX 16
44 #define BIF_VALIDATE 32
45 #define BIF_NEWDIALOGSTYLE 64
46 #define BIF_BROWSEINCLUDEURLS 128
47 #define BIF_USENEWUI ( BIF_EDITBOX | BIF_NEWDIALOGSTYLE )
48 #define BIF_BROWSEFORCOMPUTER 0x1000
49 #define BIF_BROWSEFORPRINTER 0x2000
50 #define BIF_BROWSEINCLUDEFILES 0x4000
51 #define BIF_SHAREABLE 0x8000
52 #define BFFM_INITIALIZED 1
53 #define BFFM_SELCHANGED 2
54 #define BFFM_VALIDATEFAILEDA 3
55 #define BFFM_VALIDATEFAILEDW 4
56 #define BFFM_SETSTATUSTEXTA (WM_USER + 100)
57 #define BFFM_SETSTATUSTEXTW (WM_USER + 104)
58 #define BFFM_ENABLEOK (WM_USER + 101)
59 #define BFFM_SETSELECTIONA (WM_USER + 102)
60 #define BFFM_SETSELECTIONW (WM_USER + 103)
61 #define BFFM_SETOKTEXT (WM_USER + 105)
62 #define BFFM_SETEXPANDED (WM_USER + 106)
63 #define BFFM_SETSTATUSTEXT  __AW(BFFM_SETSTATUSTEXT)
64 #define BFFM_SETSELECTION   __AW(BFFM_SETSELECTION)
65 #define BFFM_VALIDATEFAILED __AW(BFFM_VALIDATEFAILED)
66 #define DVASPECT_SHORTNAME 2
67 typedef enum tagSHARD {
68     SHARD_PIDL = 0x00000001,
69     SHARD_PATHA = 0x00000002,
70     SHARD_PATHW = 0x00000003,
71     SHARD_APPIDINFO = 0x00000004,
72     SHARD_APPIDINFOIDLIST = 0x00000005,
73     SHARD_LINK = 0x00000006,
74     SHARD_APPIDINFOLINK = 0x00000007,
75     SHARD_SHELLITEM = 0x00000008
76 } SHARD;
77 #define SHARD_PATH __AW(SHARD_PATH)
78 #define SHCNE_RENAMEITEM        1
79 #define SHCNE_CREATE    2
80 #define SHCNE_DELETE    4
81 #define SHCNE_MKDIR     8
82 #define SHCNE_RMDIR     16
83 #define SHCNE_MEDIAINSERTED     32
84 #define SHCNE_MEDIAREMOVED      64
85 #define SHCNE_DRIVEREMOVED      128
86 #define SHCNE_DRIVEADD  256
87 #define SHCNE_NETSHARE  512
88 #define SHCNE_NETUNSHARE        1024
89 #define SHCNE_ATTRIBUTES        2048
90 #define SHCNE_UPDATEDIR 4096
91 #define SHCNE_UPDATEITEM        8192
92 #define SHCNE_SERVERDISCONNECT  16384
93 #define SHCNE_UPDATEIMAGE       32768
94 #define SHCNE_DRIVEADDGUI       65536
95 #define SHCNE_RENAMEFOLDER      0x20000
96 #define SHCNE_FREESPACE 0x40000
97 #define SHCNE_ASSOCCHANGED      0x8000000
98 #define SHCNE_DISKEVENTS        0x2381F
99 #define SHCNE_GLOBALEVENTS      0xC0581E0
100 #define SHCNE_ALLEVENTS 0x7FFFFFFF
101 #define SHCNE_INTERRUPT 0x80000000
102 #define SHCNF_IDLIST    0
103 #define SHCNF_PATHA     1
104 #define SHCNF_PRINTERA  2
105 #define SHCNF_DWORD     3
106 #define SHCNF_PATHW     5
107 #define SHCNF_PRINTERW  6
108 #define SHCNF_TYPE      0xFF
109 #define SHCNF_FLUSH     0x1000
110 #define SHCNF_FLUSHNOWAIT       0x2000
111 #define SHCNF_PATH      __AW(SHCNF_PATH)
112 #define SHCNF_PRINTER   __AW(SHCNF_PRINTER)
113 #define SFGAO_CANCOPY   DROPEFFECT_COPY
114 #define SFGAO_CANMOVE   DROPEFFECT_MOVE
115 #define SFGAO_CANLINK   DROPEFFECT_LINK
116 #define SFGAO_CANRENAME         0x00000010L
117 #define SFGAO_CANDELETE         0x00000020L
118 #define SFGAO_HASPROPSHEET      0x00000040L
119 #define SFGAO_DROPTARGET        0x00000100L
120 #define SFGAO_CAPABILITYMASK    0x00000177L
121 #define SFGAO_ISSLOW            0x00004000L
122 #define SFGAO_GHOSTED           0x00008000L
123 #define SFGAO_LINK              0x00010000L
124 #define SFGAO_SHARE             0x00020000L
125 #define SFGAO_READONLY          0x00040000L
126 #define SFGAO_HIDDEN            0x00080000L
127 #define SFGAO_DISPLAYATTRMASK   (SFGAO_ISSLOW \
128                                  | SFGAO_GHOSTED \
129                                  | SFGAO_LINK \
130                                  | SFGAO_SHARE \
131                                  | SFGAO_READONLY \
132                                  | SFGAO_HIDDEN)
133 #define SFGAO_FILESYSANCESTOR   0x10000000L
134 #define SFGAO_FOLDER            0x20000000L
135 #define SFGAO_FILESYSTEM        0x40000000L
136 #define SFGAO_HASSUBFOLDER      0x80000000L
137 #define SFGAO_CONTENTSMASK      0x80000000L
138 #define SFGAO_VALIDATE          0x01000000L
139 #define SFGAO_REMOVABLE         0x02000000L
140 #define SFGAO_COMPRESSED        0x04000000L
141 #define STRRET_WSTR     0
142 #define STRRET_OFFSET   1
143 #define STRRET_CSTR     2
144 #define SHGDFIL_FINDDATA        1
145 #define SHGDFIL_NETRESOURCE     2
146 #define SHGDFIL_DESCRIPTIONID   3
147 #define SHDID_ROOT_REGITEM      1
148 #define SHDID_FS_FILE   2
149 #define SHDID_FS_DIRECTORY      3
150 #define SHDID_FS_OTHER  4
151 #define SHDID_COMPUTER_DRIVE35  5
152 #define SHDID_COMPUTER_DRIVE525 6
153 #define SHDID_COMPUTER_REMOVABLE        7
154 #define SHDID_COMPUTER_FIXED    8
155 #define SHDID_COMPUTER_NETDRIVE 9
156 #define SHDID_COMPUTER_CDROM    10
157 #define SHDID_COMPUTER_RAMDISK  11
158 #define SHDID_COMPUTER_OTHER    12
159 #define SHDID_NET_DOMAIN        13
160 #define SHDID_NET_SERVER        14
161 #define SHDID_NET_SHARE 15
162 #define SHDID_NET_RESTOFNET     16
163 #define SHDID_NET_OTHER 17
164
165 #ifndef REGSTR_PATH_EXPLORER
166 #define REGSTR_PATH_EXPLORER    TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
167 #endif
168
169 #define REGSTR_PATH_SPECIAL_FOLDERS     REGSTR_PATH_EXPLORER TEXT("\\Shell Folders")
170 #define CSIDL_DESKTOP   0
171 #define CSIDL_INTERNET  1
172 #define CSIDL_PROGRAMS  2
173 #define CSIDL_CONTROLS  3
174 #define CSIDL_PRINTERS  4
175 #define CSIDL_PERSONAL  5
176 #define CSIDL_FAVORITES 6
177 #define CSIDL_STARTUP   7
178 #define CSIDL_RECENT    8
179 #define CSIDL_SENDTO    9
180 #define CSIDL_BITBUCKET 10
181 #define CSIDL_STARTMENU 11
182 #define CSIDL_MYMUSIC   13
183 #define CSIDL_MYVIDEO   14
184 #define CSIDL_DESKTOPDIRECTORY  16
185 #define CSIDL_DRIVES    17
186 #define CSIDL_NETWORK   18
187 #define CSIDL_NETHOOD   19
188 #define CSIDL_FONTS     20
189 #define CSIDL_TEMPLATES 21
190 #define CSIDL_COMMON_STARTMENU  22
191 #define CSIDL_COMMON_PROGRAMS   23
192 #define CSIDL_COMMON_STARTUP    24
193 #define CSIDL_COMMON_DESKTOPDIRECTORY   25
194 #define CSIDL_APPDATA   26
195 #define CSIDL_PRINTHOOD 27
196 #define CSIDL_LOCAL_APPDATA 28
197 #define CSIDL_ALTSTARTUP    29
198 #define CSIDL_COMMON_ALTSTARTUP 30
199 #define CSIDL_COMMON_FAVORITES  31
200 #define CSIDL_INTERNET_CACHE   32
201 #define CSIDL_COOKIES   33
202 #define CSIDL_HISTORY   34
203 #define CSIDL_COMMON_APPDATA    35
204 #define CSIDL_WINDOWS   36
205 #define CSIDL_SYSTEM    37
206 #define CSIDL_PROGRAM_FILES     38
207 #define CSIDL_MYPICTURES        39
208 #define CSIDL_PROFILE   40
209 #define CSIDL_SYSTEMX86 41
210 #define CSIDL_PROGRAM_FILESX86  42
211 #define CSIDL_PROGRAM_FILES_COMMON      43
212 #define CSIDL_PROGRAM_FILES_COMMONX86   44
213 #define CSIDL_COMMON_TEMPLATES  45
214 #define CSIDL_COMMON_DOCUMENTS  46
215 #define CSIDL_COMMON_ADMINTOOLS 47
216 #define CSIDL_ADMINTOOLS        48
217 #define CSIDL_CONNECTIONS       49
218 #define CSIDL_COMMON_MUSIC      53
219 #define CSIDL_COMMON_PICTURES   54
220 #define CSIDL_COMMON_VIDEO      55
221 #define CSIDL_RESOURCES 56
222 #define CSIDL_RESOURCES_LOCALIZED       57
223 #define CSIDL_COMMON_OEM_LINKS  58
224 #define CSIDL_CDBURN_AREA       59
225 #define CSIDL_COMPUTERSNEARME   61
226 #define CSIDL_FLAG_DONT_VERIFY  0x4000
227 #define CSIDL_FLAG_CREATE       0x8000
228 #define CSIDL_FLAG_MASK 0xFF00
229 #define CFSTR_SHELLIDLIST       TEXT("Shell IDList Array")
230 #define CFSTR_SHELLIDLISTOFFSET TEXT("Shell Object Offsets")
231 #define CFSTR_NETRESOURCES      TEXT("Net Resource")
232 #define CFSTR_FILECONTENTS      TEXT("FileContents")
233 #define CFSTR_FILENAMEA         TEXT("FileName")
234 #define CFSTR_FILENAMEMAPA      TEXT("FileNameMap")
235 #define CFSTR_FILEDESCRIPTORA   TEXT("FileGroupDescriptor")
236 #define CFSTR_INETURLA          TEXT("UniformResourceLocator")
237 #define CFSTR_SHELLURL          CFSTR_INETURLA
238 #define CFSTR_FILENAMEW         TEXT("FileNameW")
239 #define CFSTR_FILENAMEMAPW      TEXT("FileNameMapW")
240 #define CFSTR_FILEDESCRIPTORW   TEXT("FileGroupDescriptorW")
241 #define CFSTR_INETURLW          TEXT("UniformResourceLocatorW")
242 #define CFSTR_FILENAME          __AW(CFSTR_FILENAME)
243 #define CFSTR_FILENAMEMAP       __AW(CFSTR_FILENAMEMAP)
244 #define CFSTR_FILEDESCRIPTOR    __AW(CFSTR_FILEDESCRIPTOR)
245 #define CFSTR_INETURL           __AW(CFSTR_INETURL)
246 #define CFSTR_PRINTERGROUP      TEXT("PrinterFriendlyName")
247 #define CFSTR_INDRAGLOOP        TEXT("InShellDragLoop")
248 #define CFSTR_PASTESUCCEEDED    TEXT("Paste Succeeded")
249 #define CFSTR_PERFORMEDDROPEFFECT       TEXT("Performed DropEffect")
250 #define CFSTR_PREFERREDDROPEFFECT       TEXT("Preferred DropEffect")
251 #define CMF_NORMAL      0
252 #define CMF_DEFAULTONLY 1
253 #define CMF_VERBSONLY   2
254 #define CMF_EXPLORE     4
255 #define CMF_NOVERBS     8
256 #define CMF_CANRENAME   16
257 #define CMF_NODEFAULT   32
258 #define CMF_INCLUDESTATIC       64
259 #define CMF_RESERVED    0xffff0000
260 #define GCS_VERBA        0
261 #define GCS_HELPTEXTA    1
262 #define GCS_VALIDATEA    2
263 #define GCS_VERBW        4
264 #define GCS_HELPTEXTW    5
265 #define GCS_VALIDATEW    6
266 #define GCS_UNICODE      4
267 #define GCS_VERB        __AW(GCS_VERB)
268 #define GCS_HELPTEXT    __AW(GCS_HELPTEXT)
269 #define GCS_VALIDATE    __AW(GCS_VALIDATE)
270 #define CMDSTR_NEWFOLDERA       "NewFolder"
271 #define CMDSTR_VIEWLISTA        "ViewList"
272 #define CMDSTR_VIEWDETAILSA     "ViewDetails"
273 #define CMDSTR_NEWFOLDERW       L"NewFolder"
274 #define CMDSTR_VIEWLISTW        L"ViewList"
275 #define CMDSTR_VIEWDETAILSW     L"ViewDetails"
276 #define CMDSTR_NEWFOLDER        __AW(CMDSTR_NEWFOLDER)
277 #define CMDSTR_VIEWLIST         __AW(CMDSTR_VIEWLIST)
278 #define CMDSTR_VIEWDETAILS      __AW(CMDSTR_VIEWDETAILS)
279 #define CMIC_MASK_HOTKEY        SEE_MASK_HOTKEY
280 #define CMIC_MASK_ICON  SEE_MASK_ICON
281 #define CMIC_MASK_FLAG_NO_UI    SEE_MASK_FLAG_NO_UI
282 #define CMIC_MASK_MODAL 0x80000000
283 #define CMIC_VALID_SEE_FLAGS    SEE_VALID_CMIC_FLAGS
284 #define GIL_OPENICON    1
285 #define GIL_FORSHELL    2
286 #define GIL_SIMULATEDOC 1
287 #define GIL_PERINSTANCE 2
288 #define GIL_PERCLASS    4
289 #define GIL_NOTFILENAME 8
290 #define GIL_DONTCACHE   16
291 #define FVSIF_RECT      1
292 #define FVSIF_PINNED    2
293 #define FVSIF_NEWFAILED 0x8000000
294 #define FVSIF_NEWFILE   0x80000000
295 #define FVSIF_CANVIEWIT 0x40000000
296 #define CDBOSC_SETFOCUS 0
297 #define CDBOSC_KILLFOCUS        1
298 #define CDBOSC_SELCHANGE        2
299 #define CDBOSC_RENAME   3
300 #define FCIDM_SHVIEWFIRST       0
301 #define FCIDM_SHVIEWLAST        0x7fff
302 #define FCIDM_BROWSERFIRST      0xa000
303 #define FCIDM_BROWSERLAST       0xbf00
304 #define FCIDM_GLOBALFIRST       0x8000
305 #define FCIDM_GLOBALLAST        0x9fff
306 #define FCIDM_MENU_FILE FCIDM_GLOBALFIRST
307 #define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040)
308 #define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080)
309 #define FCIDM_MENU_VIEW_SEP_OPTIONS     (FCIDM_GLOBALFIRST+0x0081)
310 #define FCIDM_MENU_TOOLS        (FCIDM_GLOBALFIRST+0x00c0)
311 #define FCIDM_MENU_TOOLS_SEP_GOTO       (FCIDM_GLOBALFIRST+0x00c1)
312 #define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100)
313 #define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140)
314 #define FCIDM_MENU_EXPLORE      (FCIDM_GLOBALFIRST+0x0150)
315 #define FCIDM_MENU_FAVORITES    (FCIDM_GLOBALFIRST+0x0170)
316 #define FCIDM_TOOLBAR   FCIDM_BROWSERFIRST
317 #define FCIDM_STATUS    (FCIDM_BROWSERFIRST+1)
318 #define SBSP_DEFBROWSER 0
319 #define SBSP_SAMEBROWSER        1
320 #define SBSP_NEWBROWSER 2
321 #define SBSP_DEFMODE    0
322 #define SBSP_OPENMODE   16
323 #define SBSP_EXPLOREMODE        32
324 #define SBSP_ABSOLUTE   0
325 #define SBSP_RELATIVE   0x1000
326 #define SBSP_PARENT     0x2000
327 #define SBSP_INITIATEDBYHLINKFRAME      0x80000000
328 #define SBSP_REDIRECT   0x40000000
329 #define FCW_STATUS      1
330 #define FCW_TOOLBAR     2
331 #define FCW_TREE        3
332 #define FCT_MERGE       1
333 #define FCT_CONFIGABLE  2
334 #define FCT_ADDTOEND    4
335 #define SVSI_DESELECT   0
336 #define SVSI_SELECT     1
337 #define SVSI_EDIT       3
338 #define SVSI_DESELECTOTHERS     4
339 #define SVSI_ENSUREVISIBLE      8
340 #define SVSI_FOCUSED    16
341 #define SVGIO_BACKGROUND        0
342 #define SVGIO_SELECTION 1
343 #define SVGIO_ALLVIEW   2
344 #define SV2GV_CURRENTVIEW ((UINT)-1)
345 #define SV2GV_DEFAULTVIEW ((UINT)-2)
346
347 typedef ULONG SFGAOF;
348 typedef DWORD SHGDNF;
349
350 typedef struct _IDA {
351         UINT cidl;
352         UINT aoffset[1];
353 } CIDA,*LPIDA;
354 typedef struct _SHITEMID {
355         USHORT  cb;
356         BYTE    abID[1];
357 } SHITEMID, * LPSHITEMID;
358 typedef const SHITEMID *LPCSHITEMID;
359 typedef struct _ITEMIDLIST {
360         SHITEMID mkid;
361 } ITEMIDLIST,*LPITEMIDLIST;
362 typedef const ITEMIDLIST *LPCITEMIDLIST;
363 typedef int (CALLBACK* BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);
364 typedef struct _browseinfoA {
365         HWND    hwndOwner;
366         LPCITEMIDLIST   pidlRoot;
367         LPSTR   pszDisplayName;
368         LPCSTR  lpszTitle;
369         UINT    ulFlags;
370         BFFCALLBACK     lpfn;
371         LPARAM  lParam;
372         int     iImage;
373 } BROWSEINFOA,*PBROWSEINFOA,*LPBROWSEINFOA;
374 typedef struct _browseinfoW {
375         HWND    hwndOwner;
376         LPCITEMIDLIST   pidlRoot;
377         LPWSTR  pszDisplayName;
378         LPCWSTR lpszTitle;
379         UINT    ulFlags;
380         BFFCALLBACK     lpfn;
381         LPARAM  lParam;
382         int     iImage;
383 } BROWSEINFOW,*PBROWSEINFOW,*LPBROWSEINFOW;
384 typedef struct _CMInvokeCommandInfo {
385         DWORD cbSize;
386         DWORD fMask;
387         HWND hwnd;
388         LPCSTR lpVerb;
389         LPCSTR lpParameters;
390         LPCSTR lpDirectory;
391         int nShow;
392         DWORD dwHotKey;
393         HANDLE hIcon;
394 } CMINVOKECOMMANDINFO,*LPCMINVOKECOMMANDINFO;
395 typedef struct _DROPFILES {
396         DWORD pFiles;
397         POINT pt;
398         BOOL fNC;
399         BOOL fWide;
400 } DROPFILES,*LPDROPFILES;
401 typedef enum tagSHGDN {
402         SHGDN_NORMAL=0,
403         SHGDN_INFOLDER,
404         SHGDN_FOREDITING=0x1000,
405         SHGDN_INCLUDE_NONFILESYS=0x2000,
406         SHGDN_FORADDRESSBAR=0x4000,
407         SHGDN_FORPARSING=0x8000
408 } SHGNO;
409 typedef enum tagSHCONTF {
410         SHCONTF_FOLDERS = 32,
411         SHCONTF_NONFOLDERS = 64,
412         SHCONTF_INCLUDEHIDDEN = 128,
413         SHCONTF_INIT_ON_FIRST_NEXT = 256,
414         SHCONTF_NETPRINTERSRCH = 512,
415         SHCONTF_SHAREABLE = 1024,
416         SHCONTF_STORAGE = 2048
417 } SHCONTF;
418 typedef struct _STRRET {
419         UINT uType;
420         _ANONYMOUS_UNION union {
421                 LPWSTR pOleStr;
422                 UINT uOffset;
423                 char cStr[MAX_PATH];
424         } DUMMYUNIONNAME;
425 } STRRET,*LPSTRRET;
426 typedef enum {
427         FD_CLSID=1,FD_SIZEPOINT=2,FD_ATTRIBUTES=4,FD_CREATETIME=8,FD_ACCESSTIME=16,
428         FD_WRITESTIME=32,FD_FILESIZE=64,FD_LINKUI=0x8000
429 } FD_FLAGS;
430 typedef struct _FILEDESCRIPTORA {
431         DWORD dwFlags;
432         CLSID clsid;
433         SIZEL sizel;
434         POINTL pointl;
435         DWORD dwFileAttributes;
436         FILETIME ftCreationTime;
437         FILETIME ftLastAccessTime;
438         FILETIME ftLastWriteTime;
439         DWORD nFileSizeHigh;
440         DWORD nFileSizeLow;
441         CHAR cFileName[MAX_PATH];
442 } FILEDESCRIPTORA,*LPFILEDESCRIPTORA;
443 typedef struct _FILEDESCRIPTORW {
444         DWORD dwFlags;
445         CLSID clsid;
446         SIZEL sizel;
447         POINTL pointl;
448         DWORD dwFileAttributes;
449         FILETIME ftCreationTime;
450         FILETIME ftLastAccessTime;
451         FILETIME ftLastWriteTime;
452         DWORD nFileSizeHigh;
453         DWORD nFileSizeLow;
454         WCHAR cFileName[MAX_PATH];
455 } FILEDESCRIPTORW,*LPFILEDESCRIPTORW;
456 typedef struct _FILEGROUPDESCRIPTORA {
457         UINT cItems;
458         FILEDESCRIPTORA fgd[1];
459 } FILEGROUPDESCRIPTORA,*LPFILEGROUPDESCRIPTORA;
460 typedef struct _FILEGROUPDESCRIPTORW {
461         UINT cItems;
462         FILEDESCRIPTORW fgd[1];
463 } FILEGROUPDESCRIPTORW,*LPFILEGROUPDESCRIPTORW;
464 typedef enum {
465         SLR_NO_UI=1,
466         SLR_ANY_MATCH=2,
467         SLR_UPDATE=4,
468         SLR_NOUPDATE=8,
469         SLR_NOSEARCH=16,
470         SLR_NOTRACK=32,
471         SLR_NOLINKINFO=64,
472         SLR_INVOKE_MSI=128
473 } SLR_FLAGS;
474 typedef enum {
475         SLGP_SHORTPATH=1,
476         SLGP_UNCPRIORITY=2,
477         SLGP_RAWPATH=4
478 } SLGP_FLAGS;
479 typedef PBYTE LPVIEWSETTINGS;
480 typedef enum {
481         FWF_AUTOARRANGE=1,FWF_ABBREVIATEDNAMES=2,FWF_SNAPTOGRID=4,FWF_OWNERDATA=8,
482         FWF_BESTFITWINDOW=16,FWF_DESKTOP=32,FWF_SINGLESEL=64,FWF_NOSUBFOLDERS=128,
483         FWF_TRANSPARENT=256,FWF_NOCLIENTEDGE=512,FWF_NOSCROLL=0x400,FWF_ALIGNLEFT=0x800,
484         FWF_SINGLECLICKACTIVATE=0x8000
485 } FOLDERFLAGS;
486 typedef enum {
487         FVM_ICON=1,
488         FVM_SMALLICON,
489         FVM_LIST,
490         FVM_DETAILS
491 } FOLDERVIEWMODE;
492 typedef struct {
493         UINT ViewMode;
494         UINT fFlags;
495 } FOLDERSETTINGS,*LPFOLDERSETTINGS;
496 typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
497 typedef struct {
498     DWORD cbSize;
499         HWND hwndOwner;
500         int iShow;
501         DWORD dwFlags;
502         RECT rect;
503         LPUNKNOWN punkRel;
504         OLECHAR strNewFile[MAX_PATH];
505 } FVSHOWINFO,*LPFVSHOWINFO;
506 typedef struct _NRESARRAY {
507         UINT cItems;
508         NETRESOURCE nr[1];
509 } NRESARRAY, *LPNRESARRAY;
510 enum { SBSC_HIDE,SBSC_SHOW,SBSC_TOGGLE,SBSC_QUERY };
511 enum {
512         SBCMDID_ENABLESHOWTREE,SBCMDID_SHOWCONTROL,SBCMDID_CANCELNAVIGATION,
513         SBCMDID_MAYSAVECHANGES,SBCMDID_SETHLINKFRAME,SBCMDID_ENABLESTOP,SBCMDID_OPTIONS
514 };
515 typedef enum {
516         SVUIA_DEACTIVATE,SVUIA_ACTIVATE_NOFOCUS,SVUIA_ACTIVATE_FOCUS,
517         SVUIA_INPLACEACTIVATE
518 } SVUIA_STATUS;
519
520
521
522 DECLARE_ENUMERATOR_(IEnumIDList,LPITEMIDLIST);
523 typedef IEnumIDList *LPENUMIDLIST;
524
525 #ifdef COBJMACROS
526 #define IEnumIDList_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
527 #define IEnumIDList_Release(T) (T)->lpVtbl->AddRef(T)
528 #define IEnumIDList_AddRef(T) (T)->lpVtbl->Release(T)
529 #define IEnumIDList_Next(T,a,b,c) (T)->lpVtbl->Next(T,a,b,c)
530 #define IEnumIDList_Skip(T,a) (T)->lpVtbl->Skip(T,a)
531 #define IEnumIDList_Reset(T) (T)->lpVtbl->Reset(T)
532 #define IEnumIDList_Clone(T,a) (T)->lpVtbl->Clone(T,a)
533 #endif
534
535 #define INTERFACE IObjMgr
536 DECLARE_INTERFACE_(IObjMgr, IUnknown)
537 {
538         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
539         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
540         STDMETHOD_(ULONG,Release)(THIS) PURE;
541         STDMETHOD(Append)(THIS_ IUnknown*) PURE;
542         STDMETHOD(Remove)(THIS_ IUnknown*) PURE;
543 };
544 #undef INTERFACE
545
546 #define INTERFACE IContextMenu
547 DECLARE_INTERFACE_(IContextMenu,IUnknown)
548 {
549         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
550         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
551         STDMETHOD_(ULONG,Release)(THIS) PURE;
552         STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
553         STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
554         STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
555 };
556 #undef INTERFACE
557 typedef IContextMenu *LPCONTEXTMENU;
558
559 #ifdef COBJMACROS
560 #define IContextMenu_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
561 #define IContextMenu_AddRef(T) (T)->lpVtbl->AddRef(T)
562 #define IContextMenu_Release(T) (T)->lpVtbl->Release(T)
563 #define IContextMenu_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
564 #define IContextMenu_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
565 #define IContextMenu_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
566 #endif
567
568 #define INTERFACE IContextMenu2
569 DECLARE_INTERFACE_(IContextMenu2,IContextMenu)
570 {
571         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
572         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
573         STDMETHOD_(ULONG,Release)(THIS) PURE;
574         STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
575         STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
576         STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
577         STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
578 };
579 #undef INTERFACE
580 typedef IContextMenu2 *LPCONTEXTMENU2;
581
582 #define INTERFACE IContextMenu3
583 DECLARE_INTERFACE_(IContextMenu3,IContextMenu2)
584 {
585  STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
586  STDMETHOD_(ULONG,AddRef)(THIS) PURE;
587  STDMETHOD_(ULONG,Release)(THIS) PURE;
588  STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
589  STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
590  STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
591  STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
592  STDMETHOD(HandleMenuMsg2)(THIS_ UINT,WPARAM,LPARAM,LRESULT*) PURE;
593 };
594 #undef INTERFACE
595 typedef IContextMenu3 *LPCONTEXTMENU3;
596
597 #define INTERFACE IQueryInfo
598 DECLARE_INTERFACE_(IQueryInfo,IUnknown)
599 {
600         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
601         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
602         STDMETHOD_(ULONG,Release)(THIS) PURE;
603         STDMETHOD(GetInfoTip)(THIS_ DWORD,WCHAR**) PURE;
604         STDMETHOD(GetInfoFlags)(THIS_ DWORD*) PURE;
605 };
606 #undef INTERFACE
607
608 #define INTERFACE IShellExtInit
609 DECLARE_INTERFACE_(IShellExtInit, IUnknown)
610 {
611         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
612         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
613         STDMETHOD_(ULONG,Release)(THIS) PURE;
614         STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST,LPDATAOBJECT,HKEY) PURE;
615 };
616 #undef INTERFACE
617 typedef IShellExtInit *LPSHELLEXTINIT;
618
619 #define INTERFACE IShellPropSheetExt
620 DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown)
621 {
622         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
623         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
624         STDMETHOD_(ULONG,Release)(THIS) PURE;
625         STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE,LPARAM) PURE;
626         STDMETHOD(ReplacePage)(THIS_ UINT,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
627 };
628 #undef INTERFACE
629 typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
630
631 #define INTERFACE IExtractIconA
632 DECLARE_INTERFACE_(IExtractIconA, IUnknown)
633 {
634         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
635         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
636         STDMETHOD_(ULONG,Release)(THIS) PURE;
637         STDMETHOD(GetIconLocation)(THIS_ UINT,LPSTR,UINT,int*,PUINT) PURE;
638         STDMETHOD(Extract)(THIS_ LPCSTR,UINT,HICON*,HICON*,UINT) PURE;
639 };
640 #undef INTERFACE
641 typedef IExtractIconA *LPEXTRACTICONA;
642
643 #ifdef COBJMACROS
644 #define IExtractIconA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
645 #define IExtractIconA_AddRef(T) (T)->lpVtbl->AddRef(T)
646 #define IExtractIconA_Release(T) (T)->lpVtbl->Release(T)
647 #define IExtractIconA_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
648 #define IExtractIconA_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
649 #endif
650
651 #define INTERFACE IExtractIconW
652 DECLARE_INTERFACE_(IExtractIconW, IUnknown)
653 {
654         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
655         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
656         STDMETHOD_(ULONG,Release)(THIS) PURE;
657         STDMETHOD(GetIconLocation)(THIS_ UINT,LPWSTR,UINT,int*,PUINT) PURE;
658         STDMETHOD(Extract)(THIS_ LPCWSTR,UINT,HICON*,HICON*,UINT) PURE;
659 };
660 #undef INTERFACE
661 typedef IExtractIconW *LPEXTRACTICONW;
662
663 #ifdef COBJMACROS
664 #define IExtractIconW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
665 #define IExtractIconW_AddRef(T) (T)->lpVtbl->AddRef(T)
666 #define IExtractIconW_Release(T) (T)->lpVtbl->Release(T)
667 #define IExtractIconW_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
668 #define IExtractIconW_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
669 #endif
670
671 #define IExtractIcon __AW(IExtractIcon)
672 #define LPEXTRACTICON __AW(LPEXTRACTICON)
673
674 #define INTERFACE IShellLinkA
675 DECLARE_INTERFACE_(IShellLinkA, IUnknown)
676 {
677         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
678         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
679         STDMETHOD_(ULONG,Release)(THIS) PURE;
680         STDMETHOD(GetPath)(THIS_ LPSTR,int,WIN32_FIND_DATAA*,DWORD) PURE;
681         STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
682         STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
683         STDMETHOD(GetDescription)(THIS_ LPSTR,int) PURE;
684         STDMETHOD(SetDescription)(THIS_ LPCSTR) PURE;
685         STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR,int) PURE;
686         STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR) PURE;
687         STDMETHOD(GetArguments)(THIS_ LPSTR,int) PURE;
688         STDMETHOD(SetArguments)(THIS_ LPCSTR) PURE;
689         STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
690         STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
691         STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
692         STDMETHOD(SetShowCmd)(THIS_ int) PURE;
693         STDMETHOD(GetIconLocation)(THIS_ LPSTR,int,int*) PURE;
694         STDMETHOD(SetIconLocation)(THIS_ LPCSTR,int) PURE;
695         STDMETHOD(SetRelativePath)(THIS_ LPCSTR ,DWORD) PURE;
696         STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
697         STDMETHOD(SetPath)(THIS_ LPCSTR) PURE;
698 };
699 #undef INTERFACE
700
701 #ifdef COBJMACROS
702 #define IShellLinkA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
703 #define IShellLinkA_AddRef(T) (T)->lpVtbl->AddRef(T)
704 #define IShellLinkA_Release(T) (T)->lpVtbl->Release(T)
705 #define IShellLinkA_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
706 #define IShellLinkA_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
707 #define IShellLinkA_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
708 #define IShellLinkA_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
709 #define IShellLinkA_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
710 #define IShellLinkA_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
711 #define IShellLinkA_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
712 #define IShellLinkA_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
713 #define IShellLinkA_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
714 #define IShellLinkA_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
715 #define IShellLinkA_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
716 #define IShellLinkA_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
717 #define IShellLinkA_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
718 #define IShellLinkA_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
719 #define IShellLinkA_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
720 #define IShellLinkA_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
721 #define IShellLinkA_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
722 #define IShellLinkA_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
723 #endif
724
725 #define INTERFACE IShellLinkW
726 DECLARE_INTERFACE_(IShellLinkW, IUnknown)
727 {
728         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
729         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
730         STDMETHOD_(ULONG,Release)(THIS) PURE;
731         STDMETHOD(GetPath)(THIS_ LPWSTR,int,WIN32_FIND_DATAW*,DWORD) PURE;
732         STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
733         STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
734         STDMETHOD(GetDescription)(THIS_ LPWSTR,int) PURE;
735         STDMETHOD(SetDescription)(THIS_ LPCWSTR) PURE;
736         STDMETHOD(GetWorkingDirectory)(THIS_ LPWSTR,int) PURE;
737         STDMETHOD(SetWorkingDirectory)(THIS_ LPCWSTR) PURE;
738         STDMETHOD(GetArguments)(THIS_ LPWSTR,int) PURE;
739         STDMETHOD(SetArguments)(THIS_ LPCWSTR) PURE;
740         STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
741         STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
742         STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
743         STDMETHOD(SetShowCmd)(THIS_ int) PURE;
744         STDMETHOD(GetIconLocation)(THIS_ LPWSTR,int,int*) PURE;
745         STDMETHOD(SetIconLocation)(THIS_ LPCWSTR,int) PURE;
746         STDMETHOD(SetRelativePath)(THIS_ LPCWSTR ,DWORD) PURE;
747         STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
748         STDMETHOD(SetPath)(THIS_ LPCWSTR) PURE;
749 };
750 #undef INTERFACE
751
752 #ifdef COBJMACROS
753 #define IShellLinkW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
754 #define IShellLinkW_AddRef(T) (T)->lpVtbl->AddRef(T)
755 #define IShellLinkW_Release(T) (T)->lpVtbl->Release(T)
756 #define IShellLinkW_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
757 #define IShellLinkW_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
758 #define IShellLinkW_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
759 #define IShellLinkW_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
760 #define IShellLinkW_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
761 #define IShellLinkW_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
762 #define IShellLinkW_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
763 #define IShellLinkW_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
764 #define IShellLinkW_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
765 #define IShellLinkW_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
766 #define IShellLinkW_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
767 #define IShellLinkW_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
768 #define IShellLinkW_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
769 #define IShellLinkW_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
770 #define IShellLinkW_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
771 #define IShellLinkW_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
772 #define IShellLinkW_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
773 #define IShellLinkW_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
774 #endif
775
776 #define INTERFACE IShellFolder
777 DECLARE_INTERFACE_(IShellFolder, IUnknown)
778 {
779         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
780         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
781         STDMETHOD_(ULONG,Release)(THIS) PURE;
782         STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
783         STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
784         STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
785         STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
786         STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
787         STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
788         STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
789         STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
790         STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
791         STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
792 };
793 #undef INTERFACE
794 typedef IShellFolder *LPSHELLFOLDER;
795
796 #ifdef COBJMACROS
797 #define IShellFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
798 #define IShellFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
799 #define IShellFolder_Release(T) (T)->lpVtbl->Release(T)
800 #define IShellFolder_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
801 #define IShellFolder_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
802 #define IShellFolder_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
803 #define IShellFolder_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
804 #define IShellFolder_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
805 #define IShellFolder_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
806 #define IShellFolder_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
807 #define IShellFolder_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
808 #define IShellFolder_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
809 #define IShellFolder_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
810 #endif
811
812 #define INTERFACE ICopyHook
813 DECLARE_INTERFACE_(ICopyHook, IUnknown)
814 {
815         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
816         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
817         STDMETHOD_(ULONG,Release)(THIS) PURE;
818         STDMETHOD_(UINT,CopyCallback)(THIS_ HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD) PURE;
819 };
820 #undef INTERFACE
821 typedef ICopyHook *LPCOPYHOOK;
822
823 #define INTERFACE IFileViewerSite
824 DECLARE_INTERFACE(IFileViewerSite)
825 {
826         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
827         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
828         STDMETHOD_(ULONG,Release)(THIS) PURE;
829         STDMETHOD(SetPinnedWindow)(THIS_ HWND) PURE;
830         STDMETHOD(GetPinnedWindow)(THIS_ HWND*) PURE;
831 };
832 #undef INTERFACE
833 typedef IFileViewerSite *LPFILEVIEWERSITE;
834
835 #define INTERFACE IFileViewer
836 DECLARE_INTERFACE(IFileViewer)
837 {
838         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
839         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
840         STDMETHOD_(ULONG,Release)(THIS) PURE;
841         STDMETHOD(ShowInitialize)(THIS_ LPFILEVIEWERSITE) PURE;
842         STDMETHOD(Show)(THIS_ LPFVSHOWINFO) PURE;
843         STDMETHOD(PrintTo)(THIS_ LPSTR,BOOL) PURE;
844 };
845 #undef INTERFACE
846 typedef IFileViewer *LPFILEVIEWER;
847
848 #define INTERFACE IFileSystemBindData
849 DECLARE_INTERFACE_(IFileSystemBindData, IUnknown)
850 {
851         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
852         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
853         STDMETHOD_(ULONG,Release)(THIS) PURE;
854         STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW*) PURE;
855         STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW*) PURE;
856 };
857 #undef INTERFACE
858
859 #define INTERFACE IPersistFolder
860 DECLARE_INTERFACE_(IPersistFolder,IPersist)
861 {
862         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
863         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
864         STDMETHOD_(ULONG,Release)(THIS) PURE;
865         STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
866         STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
867 };
868 #undef INTERFACE
869 typedef IPersistFolder *LPPERSISTFOLDER;
870
871 #ifdef COBJMACROS
872 #define IPersistFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
873 #define IPersistFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
874 #define IPersistFolder_Release(T) (T)->lpVtbl->Release(T)
875 #define IPersistFolder_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
876 #define IPersistFolder_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
877 #endif
878
879 typedef _COM_interface IShellBrowser *LPSHELLBROWSER;
880 typedef _COM_interface IShellView *LPSHELLVIEW;
881
882 #define INTERFACE IShellBrowser
883 DECLARE_INTERFACE_(IShellBrowser,IOleWindow)
884 {
885         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
886         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
887         STDMETHOD_(ULONG,Release)(THIS) PURE;
888         STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
889         STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
890         STDMETHOD(InsertMenusSB)(THIS_ HMENU,LPOLEMENUGROUPWIDTHS) PURE;
891         STDMETHOD(SetMenuSB)(THIS_ HMENU,HOLEMENU,HWND) PURE;
892         STDMETHOD(RemoveMenusSB)(THIS_ HMENU) PURE;
893         STDMETHOD(SetStatusTextSB)(THIS_ LPCOLESTR) PURE;
894         STDMETHOD(EnableModelessSB)(THIS_ BOOL) PURE;
895         STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG,WORD) PURE;
896         STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST,UINT) PURE;
897         STDMETHOD(GetViewStateStream)(THIS_ DWORD,LPSTREAM*) PURE;
898         STDMETHOD(GetControlWindow)(THIS_ UINT,HWND*) PURE;
899         STDMETHOD(SendControlMsg)(THIS_ UINT,UINT,WPARAM,LPARAM,LRESULT*) PURE;
900         STDMETHOD(QueryActiveShellView)(THIS_ LPSHELLVIEW*) PURE;
901         STDMETHOD(OnViewWindowActive)(THIS_ LPSHELLVIEW) PURE;
902         STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON,UINT,UINT) PURE;
903 };
904 #undef INTERFACE
905
906 #ifdef COBJMACROS
907 #define IShellBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
908 #define IShellBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
909 #define IShellBrowser_Release(T) (T)->lpVtbl->Release(T)
910 #define IShellBrowser_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
911 #define IShellBrowser_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
912 #define IShellBrowser_InsertMenusSB(T,a,b) (T)->lpVtbl->InsertMenusSB(T,a,b)
913 #define IShellBrowser_SetMenuSB(T,a,b,c) (T)->lpVtbl->SetMenuSB(T,a,b,c)
914 #define IShellBrowser_RemoveMenusSB(T,a) (T)->lpVtbl->RemoveMenusSB(T,a)
915 #define IShellBrowser_SetStatusTextSB(T,a) (T)->lpVtbl->SetStatusTextSB(T,a)
916 #define IShellBrowser_EnableModelessSB(T,a) (T)->lpVtbl->EnableModelessSB(T,a)
917 #define IShellBrowser_TranslateAcceleratorSB(T,a,b) (T)->lpVtbl->TranslateAcceleratorSB(T,a,b)
918 #define IShellBrowser_BrowseObject(T,a,b) (T)->lpVtbl->BrowseObject(T,a,b)
919 #define IShellBrowser_GetViewStateStream(T,a,b) (T)->lpVtbl->GetViewStateStream(T,a,b)
920 #define IShellBrowser_GetControlWindow(T,a,b) (T)->lpVtbl->GetControlWindow(T,a,b)
921 #define IShellBrowser_SendControlMsg(T,a,b,c,d,e) (T)->lpVtbl->SendControlMsg(T,a,b,c,d,e)
922 #define IShellBrowser_QueryActiveShellView(T,a) (T)->lpVtbl->QueryActiveShellView(T,a)
923 #define IShellBrowser_OnViewWindowActive(T,a) (T)->lpVtbl->OnViewWindowActive(T,a)
924 #define IShellBrowser_SetToolbarItems(T,a,b,c) (T)->lpVtbl->SetToolbarItems(T,a,b,c)
925 #endif
926
927 #define INTERFACE IShellView
928 DECLARE_INTERFACE_(IShellView,IOleWindow)
929 {
930         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
931         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
932         STDMETHOD_(ULONG,Release)(THIS) PURE;
933         STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
934         STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
935         STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
936 #ifdef _FIX_ENABLEMODELESS_CONFLICT
937         STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
938 #else
939         STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
940 #endif
941         STDMETHOD(UIActivate)(THIS_ UINT) PURE;
942         STDMETHOD(Refresh) (THIS) PURE;
943         STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
944         STDMETHOD(DestroyViewWindow)(THIS) PURE;
945         STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
946         STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
947         STDMETHOD(SaveViewState)(THIS) PURE;
948         STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
949         STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
950 };
951 #undef INTERFACE
952
953 #ifdef COBJMACROS
954 #define IShellView_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
955 #define IShellView_AddRef(T) (T)->lpVtbl->AddRef(T)
956 #define IShellView_Release(T) (T)->lpVtbl->Release(T)
957 #define IShellView_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
958 #define IShellView_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
959 #define IShellView_TranslateAccelerator(T,a) (T)->lpVtbl->TranslateAccelerator(T,a)
960
961 #ifdef _FIX_ENABLEMODELESS_CONFLICT
962 #define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModelessSV(T,a)
963 #else
964 #define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModeless(T,a)
965 #endif
966
967 #define IShellView_UIActivate(T,a) (T)->lpVtbl->UIActivate(T,a)
968 #define IShellView_Refresh(T) (T)->lpVtbl->Refresh(T)
969 #define IShellView_CreateViewWindow(T,a,b,c,d,e) (T)->lpVtbl->CreateViewWindow(T,a,b,c,d,e)
970 #define IShellView_DestroyViewWindow(T) (T)->lpVtbl->DestroyViewWindow(T)
971 #define IShellView_GetCurrentInfo(T,a) (T)->lpVtbl->GetCurrentInfo(T,a)
972 #define IShellView_AddPropertySheetPages(T,a,b,c) (T)->lpVtbl->AddPropertySheetPages(T,a,b,c)
973 #define IShellView_SaveViewState(T) (T)->lpVtbl->SaveViewState(T)
974 #define IShellView_SelectItem(T,a,b) (T)->lpVtbl->SelectItem(T,a,b)
975 #define IShellView_GetItemObject(T,a,b,c) (T)->lpVtbl->GetItemObject(T,a,b,c)
976 #endif
977
978 #define INTERFACE ICommDlgBrowser
979 DECLARE_INTERFACE_(ICommDlgBrowser,IUnknown)
980 {
981         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
982         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
983         STDMETHOD_(ULONG,Release)(THIS) PURE;
984         STDMETHOD(OnDefaultCommand)(THIS_ IShellView*) PURE;
985         STDMETHOD(OnStateChange)(THIS_ IShellView*,ULONG) PURE;
986         STDMETHOD(IncludeObject)(THIS_ IShellView*,LPCITEMIDLIST) PURE;
987 };
988 #undef INTERFACE
989 typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
990
991 #ifdef COBJMACROS
992 #define ICommDlgBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
993 #define ICommDlgBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
994 #define ICommDlgBrowser_Release(T) (T)->lpVtbl->Release(T)
995 #define ICommDlgBrowser_OnDefaultCommand(T,a) (T)->lpVtbl->OnDefaultCommand(T,a)
996 #define ICommDlgBrowser_OnStateChange(T,a,b) (T)->lpVtbl->OnStateChange(T,a,b)
997 #define ICommDlgBrowser_IncludeObject(T,a,b) (T)->lpVtbl->IncludeObject(T,a,b)
998 #endif
999
1000 typedef GUID SHELLVIEWID;
1001 typedef struct _SV2CVW2_PARAMS {
1002         DWORD cbSize;
1003         IShellView *psvPrev;
1004         FOLDERSETTINGS const *pfs;
1005         IShellBrowser *psbOwner;
1006         RECT *prcView;
1007         SHELLVIEWID const *pvid;
1008         HWND hwndView;
1009 } SV2CVW2_PARAMS,*LPSV2CVW2_PARAMS;
1010 #define INTERFACE IShellView2
1011 DECLARE_INTERFACE_(IShellView2,IShellView)
1012 {
1013
1014         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1015         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1016         STDMETHOD_(ULONG,Release)(THIS) PURE;
1017         STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
1018         STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
1019         STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
1020
1021 #ifdef _FIX_ENABLEMODELESS_CONFLICT
1022         STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
1023 #else
1024         STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
1025 #endif
1026
1027         STDMETHOD(UIActivate)(THIS_ UINT) PURE;
1028         STDMETHOD(Refresh) (THIS) PURE;
1029         STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
1030         STDMETHOD(DestroyViewWindow)(THIS) PURE;
1031         STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
1032         STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
1033         STDMETHOD(SaveViewState)(THIS) PURE;
1034         STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
1035         STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
1036         STDMETHOD(GetView)(THIS_ SHELLVIEWID*,ULONG) PURE;
1037         STDMETHOD(CreateViewWindow2)(THIS_ LPSV2CVW2_PARAMS) PURE;
1038 };
1039 #undef INTERFACE
1040
1041 #define INTERFACE IShellExecuteHookA
1042 DECLARE_INTERFACE_(IShellExecuteHookA,IUnknown)
1043 {
1044         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1045         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1046         STDMETHOD_(ULONG,Release)(THIS) PURE;
1047         STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA) PURE;
1048 };
1049 #undef INTERFACE
1050
1051 #define INTERFACE IShellExecuteHookW
1052 DECLARE_INTERFACE_(IShellExecuteHookW,IUnknown)
1053 {
1054         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1055         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1056         STDMETHOD_(ULONG,Release)(THIS) PURE;
1057         STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW) PURE;
1058 };
1059 #undef INTERFACE
1060
1061 #define INTERFACE IShellIcon
1062 DECLARE_INTERFACE_(IShellIcon,IUnknown)
1063 {
1064         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1065         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1066         STDMETHOD_(ULONG,Release)(THIS) PURE;
1067         STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST,UINT,PINT) PURE;
1068 };
1069 #undef INTERFACE
1070 typedef IShellIcon *LPSHELLICON;
1071
1072 typedef struct {
1073         BOOL fShowAllObjects : 1;
1074         BOOL fShowExtensions : 1;
1075         BOOL fNoConfirmRecycle : 1;
1076         BOOL fShowSysFiles : 1;
1077         BOOL fShowCompColor : 1;
1078         BOOL fDoubleClickInWebView : 1;
1079         BOOL fDesktopHTML : 1;
1080         BOOL fWin95Classic : 1;
1081         BOOL fDontPrettyPath : 1;
1082         BOOL fShowAttribCol : 1;
1083         BOOL fMapNetDrvBtn : 1;
1084         BOOL fShowInfoTip : 1;
1085         BOOL fHideIcons : 1;
1086         UINT fRestFlags : 3;
1087 } SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
1088
1089 #define SSF_SHOWALLOBJECTS 0x1
1090 #define SSF_SHOWEXTENSIONS 0x2
1091 #define SSF_SHOWCOMPCOLOR 0x8
1092 #define SSF_SHOWSYSFILES 0x20
1093 #define SSF_DOUBLECLICKINWEBVIEW 0x80
1094 #define SSF_SHOWATTRIBCOL 0x100
1095 #define SSF_DESKTOPHTML 0x200
1096 #define SSF_WIN95CLASSIC 0x400
1097 #define SSF_DONTPRETTYPATH 0x800
1098 #define SSF_MAPNETDRVBUTTON 0x1000
1099 #define SSF_SHOWINFOTIP 0x2000
1100 #define SSF_HIDEICONS 0x4000
1101 #define SSF_NOCONFIRMRECYCLE 0x8000
1102
1103 #define INTERFACE IShellIconOverlayIdentifier
1104 DECLARE_INTERFACE_(IShellIconOverlayIdentifier,IUnknown)
1105 {
1106         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1107         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1108         STDMETHOD_(ULONG,Release)(THIS) PURE;
1109         STDMETHOD(IsMemberOf)(THIS_ LPCWSTR,DWORD) PURE;
1110         STDMETHOD(GetOverlayInfo)(THIS_ LPWSTR,int,int*,DWORD*) PURE;
1111         STDMETHOD(GetPriority)(THIS_ int*) PURE;
1112 };
1113 #undef INTERFACE
1114
1115 #define ISIOI_ICONFILE 0x00000001
1116 #define ISIOI_ICONINDEX 0x00000002
1117
1118 void WINAPI SHAddToRecentDocs(UINT,PCVOID);
1119 LPITEMIDLIST WINAPI SHBrowseForFolderA(PBROWSEINFOA);
1120 LPITEMIDLIST WINAPI SHBrowseForFolderW(PBROWSEINFOW);
1121 void WINAPI SHChangeNotify(LONG,UINT,PCVOID,PCVOID);
1122 HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
1123 HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
1124 HRESULT WINAPI SHGetDesktopFolder(LPSHELLFOLDER*);
1125 HRESULT WINAPI SHGetInstanceExplorer(IUnknown **);
1126 HRESULT WINAPI SHGetMalloc(LPMALLOC*);
1127 BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
1128 BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
1129 HRESULT WINAPI SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*);
1130 HRESULT WINAPI SHLoadInProc(REFCLSID);
1131
1132 /* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */
1133 HRESULT WINAPI SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR);
1134 HRESULT WINAPI SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR);
1135
1136 void WINAPI SHGetSettings(LPSHELLFLAGSTATE,DWORD);
1137
1138 typedef __AW(IShellExecuteHook) IShellExecuteHook;
1139 typedef __AW(IShellLink) IShellLink;
1140 typedef __AW(BROWSEINFO) BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
1141 #define SHBrowseForFolder __AW(SHBrowseForFolder)
1142 #define SHGetDataFromIDList __AW(SHGetDataFromIDList)
1143 #define SHGetPathFromIDList __AW(SHGetPathFromIDList)
1144 #define SHGetFolderPath __AW(SHGetFolderPathW)
1145 #define FILEDESCRIPTOR __AW(FILEDESCRIPTOR)
1146 #define LPFILEDESCRIPTOR __AW(LPFILEDESCRIPTOR)
1147 #define FILEGROUPDESCRIPTOR __AW(FILEGROUPDESCRIPTOR)
1148 #define LPFILEGROUPDESCRIPTOR __AW(LPFILEGROUPDESCRIPTOR)
1149
1150 DWORD WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
1151
1152 #define SHFMT_ID_DEFAULT 0xFFFF
1153 #define SHFMT_OPT_FULL 1
1154 #define SHFMT_OPT_SYSONLY 2
1155 #define SHFMT_ERROR 0xFFFFFFFF
1156 #define SHFMT_CANCEL 0xFFFFFFFE
1157 #define SHFMT_NOFORMAT 0xFFFFFFFD
1158
1159 #if (_WIN32_IE >= 0x0400)
1160 BOOL WINAPI SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL);
1161 BOOL WINAPI SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL);
1162 #define SHGetSpecialFolderPath __AW(SHGetSpecialFolderPath)
1163 #endif /* _WIN32_IE >= 0x0400 */
1164
1165 #if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= _WIN32_WINNT_WIN2K)
1166
1167 #define INTERFACE IPersistFolder2
1168 DECLARE_INTERFACE_(IPersistFolder2,IPersistFolder)
1169 {
1170         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1171         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1172         STDMETHOD_(ULONG,Release)(THIS) PURE;
1173         STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
1174         STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
1175         STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
1176 };
1177 #undef INTERFACE
1178 typedef IPersistFolder2 *LPPERSISTFOLDER2;
1179
1180 #ifdef COBJMACROS
1181 #define IPersistFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
1182 #define IPersistFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
1183 #define IPersistFolder2_Release(T) (T)->lpVtbl->Release(T)
1184 #define IPersistFolder2_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
1185 #define IPersistFolder2_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
1186 #define IPersistFolder2_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
1187 #endif
1188
1189 #endif /* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= _WIN32_WINNT_WIN2K */
1190
1191 #if (_WIN32_IE >= 0x0500)
1192 typedef struct tagEXTRASEARCH
1193 {
1194         GUID guidSearch;
1195         WCHAR wszFriendlyName[80];
1196         WCHAR wszUrl[2084];
1197 } EXTRASEARCH, *LPEXTRASEARCH;
1198 typedef DWORD SHCOLSTATEF;
1199 typedef struct
1200 {
1201         GUID fmtid;
1202         DWORD pid;
1203 } SHCOLUMNID, *LPSHCOLUMNID;
1204 typedef const SHCOLUMNID *LPCSHCOLUMNID;
1205 typedef struct _SHELLDETAILS
1206 {
1207         int fmt; 
1208         int cxChar;
1209         STRRET str;
1210 } SHELLDETAILS, *LPSHELLDETAILS;
1211 typedef struct
1212 {
1213         LPITEMIDLIST pidlTargetFolder;
1214         WCHAR szTargetParsingName[MAX_PATH];
1215         WCHAR szNetworkProvider[MAX_PATH];
1216         DWORD dwAttributes;
1217         int csidl;
1218 } PERSIST_FOLDER_TARGET_INFO;
1219
1220 typedef enum {
1221         SHGFP_TYPE_CURRENT = 0,
1222         SHGFP_TYPE_DEFAULT = 1,
1223 } SHGFP_TYPE;
1224 #pragma pack(push,8)
1225 typedef struct {
1226         ULONG dwFlags;
1227         ULONG dwReserved;
1228         WCHAR wszFolder[MAX_PATH];
1229 } SHCOLUMNINIT,*LPSHCOLUMNINIT;
1230 typedef const SHCOLUMNINIT* LPCSHCOLUMNINIT;
1231 typedef struct {
1232         ULONG dwFlags;
1233         DWORD dwFileAttributes;
1234         ULONG dwReserved;
1235         WCHAR *pwszExt;
1236         WCHAR wszFile[MAX_PATH];
1237 } SHCOLUMNDATA,*LPSHCOLUMNDATA;
1238 typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA;
1239 #pragma pack(pop)
1240
1241 #define MAX_COLUMN_NAME_LEN 80
1242 #define MAX_COLUMN_DESC_LEN 128
1243
1244 #pragma pack(push,1)
1245 typedef struct {
1246         SHCOLUMNID scid;
1247         VARTYPE vt;
1248         DWORD fmt;
1249         UINT cChars;
1250         DWORD csFlags;
1251         WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
1252         WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
1253 } SHCOLUMNINFO,*LPSHCOLUMNINFO;
1254 typedef const SHCOLUMNINFO* LPCSHCOLUMNINFO;
1255 #pragma pack(pop)
1256
1257 typedef enum {
1258         SHCOLSTATE_TYPE_STR = 0x00000001,
1259         SHCOLSTATE_TYPE_INT = 0x00000002,
1260         SHCOLSTATE_TYPE_DATE = 0x00000003,
1261         SHCOLSTATE_TYPEMASK = 0x0000000f,
1262         SHCOLSTATE_ONBYDEFAULT = 0x00000010,
1263         SHCOLSTATE_SLOW = 0x00000020,
1264         SHCOLSTATE_EXTENDED = 0x00000040,
1265         SHCOLSTATE_SECONDARYUI = 0x00000080,
1266         SHCOLSTATE_HIDDEN = 0x00000100,
1267         SHCOLSTATE_PREFER_VARCMP = 0x00000200
1268 } SHCOLSTATE;
1269
1270 #ifdef COBJMACROS
1271 #define IContextMenu2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
1272 #define IContextMenu2_AddRef(T) (T)->lpVtbl->AddRef(T)
1273 #define IContextMenu2_Release(T) (T)->lpVtbl->Release(T)
1274 #define IContextMenu2_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
1275 #define IContextMenu2_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
1276 #define IContextMenu2_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
1277 #define IContextMenu2_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
1278 #define IContextMenu3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
1279 #define IContextMenu3_AddRef(T) (T)->lpVtbl->AddRef(T)
1280 #define IContextMenu3_Release(T) (T)->lpVtbl->Release(T)
1281 #define IContextMenu3_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
1282 #define IContextMenu3_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
1283 #define IContextMenu3_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
1284 #define IContextMenu3_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
1285 #define IContextMenu3_HandleMenuMsg2(T,a,b,c,d) (T)->lpVtbl->HandleMenuMsg(T,a,b,c,d)
1286 #endif
1287
1288 #define INTERFACE IColumnProvider
1289 DECLARE_INTERFACE_(IColumnProvider,IUnknown)
1290 {
1291         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1292         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1293         STDMETHOD_(ULONG,Release)(THIS) PURE;
1294         STDMETHOD(Initialize)(THIS_ LPCSHCOLUMNINIT) PURE;
1295         STDMETHOD(GetColumnInfo)(THIS_ DWORD,SHCOLUMNINFO*) PURE;
1296         STDMETHOD(GetItemData)(THIS_ LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*) PURE;
1297 };
1298 #undef INTERFACE
1299
1300 DECLARE_ENUMERATOR_(IEnumExtraSearch,LPEXTRASEARCH);
1301 typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
1302
1303 #define INTERFACE IShellFolder2
1304 DECLARE_INTERFACE_(IShellFolder2, IShellFolder)
1305 {
1306         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1307         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1308         STDMETHOD_(ULONG,Release)(THIS) PURE;
1309         STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
1310         STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
1311         STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
1312         STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
1313         STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
1314         STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
1315         STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
1316         STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
1317         STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
1318         STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
1319         STDMETHOD(GetDefaultSearchGUID)(THIS_ GUID*) PURE;
1320         STDMETHOD(EnumSearches)(THIS_ IEnumExtraSearch**) PURE;
1321         STDMETHOD(GetDefaultColumn)(THIS_ DWORD,ULONG*,ULONG*) PURE;
1322         STDMETHOD(GetDefaultColumnState)(THIS_ UINT,SHCOLSTATEF*) PURE;
1323         STDMETHOD(GetDetailsEx)(THIS_ LPCITEMIDLIST,const SHCOLUMNID*,VARIANT*) PURE;
1324         STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST,UINT,SHELLDETAILS*) PURE;
1325         STDMETHOD(MapColumnToSCID)(THIS_ UINT,SHCOLUMNID*) PURE;
1326 };
1327 #undef INTERFACE
1328 typedef IShellFolder2 *LPSHELLFOLDER2;
1329
1330 #ifdef COBJMACROS
1331 #define IShellFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
1332 #define IShellFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
1333 #define IShellFolder2_Release(T) (T)->lpVtbl->Release(T)
1334 #define IShellFolder2_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
1335 #define IShellFolder2_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
1336 #define IShellFolder2_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
1337 #define IShellFolder2_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
1338 #define IShellFolder2_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
1339 #define IShellFolder2_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
1340 #define IShellFolder2_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
1341 #define IShellFolder2_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
1342 #define IShellFolder2_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
1343 #define IShellFolder2_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
1344 #define IShellFolder2_GetDefaultSearchGUID(T,a) (T)->lpVtbl->GetDefaultSearchGUID(T,a)
1345 #define IShellFolder2_EnumSearches(T,a) (T)->lpVtbl->EnumSearches(T,a)
1346 #define IShellFolder2_GetDefaultColumn(T,a,b,c) (T)->lpVtbl->GetDefaultColumn(T,a,b,c)
1347 #define IShellFolder2_GetDefaultColumnState(T,a,b) (T)->lpVtbl->GetDefaultColumnState(T,a,b)
1348 #define IShellFolder2_GetDetailsEx(T,a,b,c) (T)->lpVtbl->GetDetailsEx(T,a,b,c)
1349 #define IShellFolder2_GetDetailsOf(T,a,b,c) (T)->lpVtbl->GetDetailsOf(T,a,b,c)
1350 #define IShellFolder2_MapColumnToSCID(T,a,b) (T)->lpVtbl->MapColumnToSCID(T,a,b)
1351 #endif
1352
1353 #define INTERFACE IPersistFolder3
1354 DECLARE_INTERFACE_(IPersistFolder3,IPersistFolder2)
1355 {
1356         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1357         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1358         STDMETHOD_(ULONG,Release)(THIS) PURE;
1359         STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
1360         STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
1361         STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
1362         STDMETHOD(InitializeEx)(THIS_ IBindCtx*,LPCITEMIDLIST,const PERSIST_FOLDER_TARGET_INFO*) PURE;
1363         STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO*) PURE;
1364 };
1365 #undef INTERFACE
1366 typedef IPersistFolder3 *LPPERSISTFOLDER3;
1367
1368 #ifdef COBJMACROS
1369 #define IPersistFolder3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
1370 #define IPersistFolder3_AddRef(T) (T)->lpVtbl->AddRef(T)
1371 #define IPersistFolder3_Release(T) (T)->lpVtbl->Release(T)
1372 #define IPersistFolder3_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
1373 #define IPersistFolder3_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
1374 #define IPersistFolder3_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
1375 #define IPersistFolder3_InitializeEx(T,a,b,c) (T)->lpVtbl->InitializeEx(T,a,b,c)
1376 #define IPersistFolder3_GetFolderTargetInfo(T,a) (T)->lpVtbl->GetFolderTargetInfo(T,a)
1377 #endif
1378
1379 #pragma pack(push,8)
1380 typedef struct
1381 {
1382         SIZE sizeDragImage;
1383         POINT ptOffset;
1384         HBITMAP hbmpDragImage;
1385         COLORREF crColorKey;
1386 } SHDRAGIMAGE, *LPSHDRAGIMAGE;
1387 #pragma pack(pop)
1388
1389 #define INTERFACE IDragSourceHelper
1390 DECLARE_INTERFACE_(IDragSourceHelper, IUnknown)
1391 {
1392         STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
1393         STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1394         STDMETHOD_(ULONG, Release) (THIS) PURE;
1395         STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE;
1396         STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE;
1397 };
1398 #undef INTERFACE
1399
1400 #define INTERFACE IDropTargetHelper
1401 DECLARE_INTERFACE_(IDropTargetHelper, IUnknown)
1402 {
1403         STDMETHOD (QueryInterface)(THIS_ REFIID riid, void** ppv) PURE;
1404         STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1405         STDMETHOD_(ULONG, Release) (THIS) PURE;
1406         STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE;
1407         STDMETHOD (DragLeave)(THIS) PURE;
1408         STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE;
1409         STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE;
1410         STDMETHOD (Show)(THIS_ BOOL fShow) PURE;
1411 };
1412 #undef INTERFACE
1413
1414 #endif /* _WIN32_IE >= 0x0500 */
1415
1416 #if (_WIN32_WINNT >= _WIN32_WINNT_WINME)
1417 HRESULT WINAPI SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*);
1418 #endif
1419
1420 #if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K)
1421 typedef struct {
1422         BOOL fShowAllObjects : 1;
1423         BOOL fShowExtensions : 1;
1424         BOOL fNoConfirmRecycle : 1;
1425         BOOL fShowSysFiles : 1;
1426         BOOL fShowCompColor : 1;
1427         BOOL fDoubleClickInWebView : 1;
1428         BOOL fDesktopHTML : 1;
1429         BOOL fWin95Classic : 1;
1430         BOOL fDontPrettyPath : 1;
1431         BOOL fShowAttribCol : 1;
1432         BOOL fMapNetDrvBtn : 1;
1433         BOOL fShowInfoTip : 1;
1434         BOOL fHideIcons : 1;
1435         BOOL fWebView : 1;
1436         BOOL fFilter : 1;
1437         BOOL fShowSuperHidden : 1;
1438         BOOL fNoNetCrawling : 1;
1439         DWORD dwWin95Unused;
1440         UINT uWin95Unused;
1441         LONG lParamSort;
1442         int iSortDirection;
1443         UINT version;
1444         UINT uNotUsed;
1445         BOOL fSepProcess : 1;
1446         BOOL fStartPanelOn : 1;
1447         BOOL fShowStartPage : 1;
1448         UINT fSpareFlags : 13;
1449 } SHELLSTATE, *LPSHELLSTATE;
1450
1451 BOOL WINAPI PathResolve(LPWSTR, LPCWSTR*, UINT);
1452 #define PRF_VERIFYEXISTS            0x0001
1453 #define PRF_TRYPROGRAMEXTENSIONS    (0x0002 | PRF_VERIFYEXISTS)
1454 #define PRF_FIRSTDIRDEF             0x0004
1455 #define PRF_DONTFINDLNK             0x0008
1456 #define IDO_SHGIOI_SHARE            0x0FFFFFFF
1457 #define IDO_SHGIOI_LINK             0x0FFFFFFE
1458 #define IDO_SHGIOI_SLOWFILE         0x0FFFFFFD
1459 #define IDO_SHGIOI_DEFAULT          0x0FFFFFFC
1460
1461 INT WINAPI SHGetIconOverlayIndexW(LPCWSTR pszIconPath, int iIconIndex);
1462 INT WINAPI SHGetIconOverlayIndexA(LPCSTR pszIconPath, int iIconIndex);
1463 INT WINAPI SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES);
1464 INT WINAPI SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES);
1465 HRESULT WINAPI SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*);
1466 void WINAPI SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL);
1467 BOOL WINAPI ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST);
1468 BOOL WINAPI ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL);
1469 BOOL WINAPI ILRemoveLastID(LPITEMIDLIST);
1470 HRESULT WINAPI ILLoadFromStream(IStream*, LPITEMIDLIST*);
1471 HRESULT WINAPI ILSaveToStream(IStream*, LPCITEMIDLIST);
1472 LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL);
1473 LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
1474 LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
1475 LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST, LPCITEMIDLIST);
1476 LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST);
1477 LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
1478 LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
1479 UINT WINAPI ILGetSize(LPCITEMIDLIST);
1480 void WINAPI ILFree(LPITEMIDLIST);
1481 HRESULT WINAPI SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**);
1482 #define SHGetIconOverlayIndex __AW(SHGetIconOverlayIndex)
1483 #define SHCreateDirectoryEx __AW(SHCreateDirectoryEx)
1484
1485 #endif /* _WIN32_WINNT >= _WIN32_WINNT_WIN2K */
1486
1487 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
1488 typedef _COM_interface IFolderView *LPFOLDERVIEW;
1489
1490 #define INTERFACE IFolderView
1491 DECLARE_INTERFACE_(IFolderView,IUnknown)
1492 {
1493    STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1494    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1495    STDMETHOD_(ULONG,Release)(THIS) PURE;
1496    STDMETHOD(GetAutoArrange)(THIS) PURE;
1497    STDMETHOD(GetCurrentViewMode)(THIS_ UINT) PURE;
1498    STDMETHOD(GetDefaultSpacing)(THIS_ POINT*) PURE;
1499    STDMETHOD(GetFocusedItem)(THIS_ int*) PURE;
1500    STDMETHOD(GetFolder)(THIS_ REFIID,PVOID*) PURE;
1501    STDMETHOD(GetItemPosition)(THIS_ LPCITEMIDLIST,POINT*) PURE;
1502    STDMETHOD(GetSelectionMarkedItem)(THIS_ int*) PURE;
1503    STDMETHOD(GetSpacing)(THIS_ POINT*) PURE;
1504    STDMETHOD(Item)(THIS_ int,LPITEMIDLIST*) PURE;
1505    STDMETHOD(ItemCount)(THIS_ UINT,int*) PURE;
1506    STDMETHOD(Items)(THIS_ UINT,REFIID,PVOID*) PURE;
1507    STDMETHOD(SelectAndPositionItems)(THIS_ UINT,LPCITEMIDLIST*,POINT*,DWORD) PURE;
1508    STDMETHOD(SelectItem)(THIS_ int,DWORD) PURE;
1509    STDMETHOD(SetCurrentViewMode)(THIS_ UINT) PURE;
1510 };
1511 #undef INTERFACE
1512
1513 HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
1514 HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
1515 HRESULT WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST,SFGAOF,SFGAOF*);
1516 #define SHGetFolderPathAndSubDir __AW(SHGetFolderPathAndSubDir)
1517
1518 #endif /* _WIN32_WINNT >= _WIN32_WINNT_WINXP */
1519
1520 #pragma pack(pop)
1521
1522 #ifdef __cplusplus
1523 }
1524 #endif
1525
1526 #endif /* _SHLOBJ_H */