root/trunk/win32/shlobj.d

Revision 378, 36.3 kB (checked in by CyberShadow, 2 months ago)

Fix version=IE7

Line 
1 /***********************************************************************\
2 *                                shlobj.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                                                                       *
8 *                       Placed into public domain                       *
9 \***********************************************************************/
10 module win32.shlobj;
11 pragma(lib, "shell32.lib");
12
13 // TODO: fix bitfields
14 // TODO: CMIC_VALID_SEE_FLAGS
15 // SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K
16
17 import win32.commctrl, win32.ole2, win32.shlguid, win32.shellapi;
18 private import win32.prsht, win32.unknwn, win32.w32api, win32.winbase,
19   win32.winnt, win32.winuser, win32.wtypes, win32.objfwd, win32.objidl;
20 private import win32.winnetwk; // for NETRESOURCE
21 private import win32.oaidl : VARIANT;
22
23
24 // FIXME: clean up Windows version support
25
26 align(1):
27
28 const BIF_RETURNONLYFSDIRS = 1;
29 const BIF_DONTGOBELOWDOMAIN = 2;
30 const BIF_STATUSTEXT = 4;
31 const BIF_RETURNFSANCESTORS = 8;
32 const BIF_EDITBOX = 16;
33 const BIF_VALIDATE = 32;
34 const BIF_NEWDIALOGSTYLE = 64;
35 const BIF_BROWSEINCLUDEURLS = 128;
36 const BIF_USENEWUI =  BIF_EDITBOX | BIF_NEWDIALOGSTYLE;
37 const BIF_BROWSEFORCOMPUTER = 0x1000;
38 const BIF_BROWSEFORPRINTER = 0x2000;
39 const BIF_BROWSEINCLUDEFILES = 0x4000;
40 const BIF_SHAREABLE = 0x8000;
41 const BFFM_INITIALIZED = 1;
42 const BFFM_SELCHANGED = 2;
43 const BFFM_VALIDATEFAILEDA = 3;
44 const BFFM_VALIDATEFAILEDW = 4;
45 const BFFM_SETSTATUSTEXTA = WM_USER + 100;
46 const BFFM_ENABLEOK = WM_USER + 101;
47 const BFFM_SETSELECTIONA = WM_USER + 102;
48 const BFFM_SETSELECTIONW = WM_USER + 103;
49 const BFFM_SETSTATUSTEXTW = WM_USER + 104;
50 const BFFM_SETOKTEXT = WM_USER + 105;
51 const BFFM_SETEXPANDED = WM_USER + 106;
52
53 version(Unicode) {
54     alias BFFM_SETSTATUSTEXTW BFFM_SETSTATUSTEXT;
55     alias BFFM_SETSELECTIONW BFFM_SETSELECTION;
56     alias BFFM_VALIDATEFAILEDW BFFM_VALIDATEFAILED;
57 } else {
58     alias BFFM_SETSTATUSTEXTA BFFM_SETSTATUSTEXT;
59     alias BFFM_SETSELECTIONA BFFM_SETSELECTION;
60     alias BFFM_VALIDATEFAILEDA BFFM_VALIDATEFAILED;
61 }
62
63 const DVASPECT_SHORTNAME = 2;
64
65 const SHARD_PIDL = 1;
66 const SHARD_PATH = 2;
67
68 const SHCNE_RENAMEITEM = 1;
69 const SHCNE_CREATE = 2;
70 const SHCNE_DELETE = 4;
71 const SHCNE_MKDIR = 8;
72 const SHCNE_RMDIR = 16;
73 const SHCNE_MEDIAINSERTED = 32;
74 const SHCNE_MEDIAREMOVED = 64;
75 const SHCNE_DRIVEREMOVED = 128;
76 const SHCNE_DRIVEADD = 256;
77 const SHCNE_NETSHARE = 512;
78 const SHCNE_NETUNSHARE = 1024;
79 const SHCNE_ATTRIBUTES = 2048;
80 const SHCNE_UPDATEDIR = 4096;
81 const SHCNE_UPDATEITEM = 8192;
82 const SHCNE_SERVERDISCONNECT = 16384;
83 const SHCNE_UPDATEIMAGE = 32768;
84 const SHCNE_DRIVEADDGUI = 65536;
85 const SHCNE_RENAMEFOLDER = 0x20000;
86 const SHCNE_FREESPACE = 0x40000;
87 const SHCNE_ASSOCCHANGED = 0x8000000;
88 const SHCNE_DISKEVENTS = 0x2381F;
89 const SHCNE_GLOBALEVENTS = 0xC0581E0;
90 const SHCNE_ALLEVENTS = 0x7FFFFFFF;
91 const SHCNE_INTERRUPT = 0x80000000;
92
93 const SHCNF_IDLIST = 0;
94 const SHCNF_PATHA = 1;
95 const SHCNF_PRINTERA = 2;
96 const SHCNF_DWORD = 3;
97 const SHCNF_PATHW = 5;
98 const SHCNF_PRINTERW = 6;
99 const SHCNF_TYPE = 0xFF;
100 const SHCNF_FLUSH = 0x1000;
101 const SHCNF_FLUSHNOWAIT = 0x2000;
102
103 version(Unicode) {
104     alias SHCNF_PATHW SHCNF_PATH;
105     alias SHCNF_PRINTERW SHCNF_PRINTER;
106 } else {
107     alias SHCNF_PATHA SHCNF_PATH;
108     alias SHCNF_PRINTERA SHCNF_PRINTER;
109 }
110
111 const SFGAO_CANCOPY = DROPEFFECT.DROPEFFECT_COPY;
112 const SFGAO_CANMOVE = DROPEFFECT.DROPEFFECT_MOVE;
113 const SFGAO_CANLINK = DROPEFFECT.DROPEFFECT_LINK;
114 const SFGAO_CANRENAME = 0x00000010L;
115 const SFGAO_CANDELETE = 0x00000020L;
116 const SFGAO_HASPROPSHEET = 0x00000040L;
117 const SFGAO_DROPTARGET = 0x00000100L;
118 const SFGAO_CAPABILITYMASK = 0x00000177L;
119 const SFGAO_GHOSTED = 0x00008000L;
120 const SFGAO_LINK = 0x00010000L;
121 const SFGAO_SHARE = 0x00020000L;
122 const SFGAO_READONLY = 0x00040000L;
123 const SFGAO_HIDDEN = 0x00080000L;
124 const SFGAO_DISPLAYATTRMASK = 0x000F0000L;
125 const SFGAO_FILESYSANCESTOR = 0x10000000L;
126 const SFGAO_FOLDER = 0x20000000L;
127 const SFGAO_FILESYSTEM = 0x40000000L;
128 const SFGAO_HASSUBFOLDER = 0x80000000L;
129 const SFGAO_CONTENTSMASK = 0x80000000L;
130 const SFGAO_VALIDATE = 0x01000000L;
131 const SFGAO_REMOVABLE = 0x02000000L;
132 const SFGAO_COMPRESSED = 0x04000000L;
133 const STRRET_WSTR = 0;
134 const STRRET_OFFSET = 1;
135 const STRRET_CSTR = 2;
136
137 enum {
138     SHGDFIL_FINDDATA = 1,
139     SHGDFIL_NETRESOURCE,
140     SHGDFIL_DESCRIPTIONID
141 }
142
143 enum {
144     SHDID_ROOT_REGITEM = 1,
145     SHDID_FS_FILE,
146     SHDID_FS_DIRECTORY,
147     SHDID_FS_OTHER,
148     SHDID_COMPUTER_DRIVE35,
149     SHDID_COMPUTER_DRIVE525,
150     SHDID_COMPUTER_REMOVABLE,
151     SHDID_COMPUTER_FIXED,
152     SHDID_COMPUTER_NETDRIVE,
153     SHDID_COMPUTER_CDROM,
154     SHDID_COMPUTER_RAMDISK,
155     SHDID_COMPUTER_OTHER,
156     SHDID_NET_DOMAIN,
157     SHDID_NET_SERVER,
158     SHDID_NET_SHARE,
159     SHDID_NET_RESTOFNET,
160     SHDID_NET_OTHER
161 }
162
163 const TCHAR[] REGSTR_PATH_EXPLORER = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
164 const TCHAR[] REGSTR_PATH_SPECIAL_FOLDERS=REGSTR_PATH_EXPLORER ~ "\\Shell Folders";
165
166 enum {
167     CSIDL_DESKTOP = 0,
168     CSIDL_INTERNET,
169     CSIDL_PROGRAMS,
170     CSIDL_CONTROLS,
171     CSIDL_PRINTERS,
172     CSIDL_PERSONAL,
173     CSIDL_FAVORITES,
174     CSIDL_STARTUP,
175     CSIDL_RECENT,
176     CSIDL_SENDTO,
177     CSIDL_BITBUCKET,
178     CSIDL_STARTMENU, // = 11
179     CSIDL_DESKTOPDIRECTORY = 16,
180     CSIDL_DRIVES,
181     CSIDL_NETWORK,
182     CSIDL_NETHOOD,
183     CSIDL_FONTS,
184     CSIDL_TEMPLATES,
185     CSIDL_COMMON_STARTMENU,
186     CSIDL_COMMON_PROGRAMS,
187     CSIDL_COMMON_STARTUP,
188     CSIDL_COMMON_DESKTOPDIRECTORY,
189     CSIDL_APPDATA,
190     CSIDL_PRINTHOOD,
191     CSIDL_LOCAL_APPDATA,
192     CSIDL_ALTSTARTUP,
193     CSIDL_COMMON_ALTSTARTUP,
194     CSIDL_COMMON_FAVORITES,
195     CSIDL_INTERNET_CACHE,
196     CSIDL_COOKIES,
197     CSIDL_HISTORY,
198     CSIDL_COMMON_APPDATA,
199     CSIDL_WINDOWS,
200     CSIDL_SYSTEM,
201     CSIDL_PROGRAM_FILES,
202     CSIDL_MYPICTURES,
203     CSIDL_PROFILE,
204     CSIDL_SYSTEMX86,
205     CSIDL_PROGRAM_FILESX86,
206     CSIDL_PROGRAM_FILES_COMMON,
207     CSIDL_PROGRAM_FILES_COMMONX86,
208     CSIDL_COMMON_TEMPLATES,
209     CSIDL_COMMON_DOCUMENTS,
210     CSIDL_COMMON_ADMINTOOLS,
211     CSIDL_ADMINTOOLS,
212     CSIDL_CONNECTIONS, // =49
213     CSIDL_COMMON_MUSIC = 53,
214     CSIDL_COMMON_PICTURES,
215     CSIDL_COMMON_VIDEO,
216     CSIDL_RESOURCES,
217     CSIDL_RESOURCES_LOCALIZED,
218     CSIDL_COMMON_OEM_LINKS,
219     CSIDL_CDBURN_AREA, // = 59
220     CSIDL_COMPUTERSNEARME = 61,
221     CSIDL_FLAG_DONT_VERIFY = 0x4000,
222     CSIDL_FLAG_CREATE = 0x8000,
223     CSIDL_FLAG_MASK = 0xFF00
224 }
225
226 const TCHAR[]
227     CFSTR_SHELLIDLIST       = "Shell IDList Array",
228     CFSTR_SHELLIDLISTOFFSET = "Shell Object Offsets",
229     CFSTR_NETRESOURCES      = "Net Resource",
230     CFSTR_FILECONTENTS      = "FileContents",
231     CFSTR_FILENAMEA         = "FileName",
232     CFSTR_FILENAMEMAPA      = "FileNameMap",
233     CFSTR_FILEDESCRIPTORA   = "FileGroupDescriptor",
234     CFSTR_INETURLA          = "UniformResourceLocator",
235     CFSTR_SHELLURL          = CFSTR_INETURLA,
236     CFSTR_FILENAMEW         = "FileNameW",
237     CFSTR_FILENAMEMAPW      = "FileNameMapW",
238     CFSTR_FILEDESCRIPTORW   = "FileGroupDescriptorW",
239     CFSTR_INETURLW          = "UniformResourceLocatorW";
240
241 version(Unicode) {
242     alias CFSTR_FILENAMEW CFSTR_FILENAME;
243     alias CFSTR_FILENAMEMAPW CFSTR_FILENAMEMAP;
244     alias CFSTR_FILEDESCRIPTORW CFSTR_FILEDESCRIPTOR;
245     alias CFSTR_INETURLW CFSTR_INETURL;
246 } else {
247     alias CFSTR_FILENAMEA CFSTR_FILENAME;
248     alias CFSTR_FILENAMEMAPA CFSTR_FILENAMEMAP;
249     alias CFSTR_FILEDESCRIPTORA CFSTR_FILEDESCRIPTOR;
250     alias CFSTR_INETURLA CFSTR_INETURL;
251 }
252 const TCHAR[]
253     CFSTR_PRINTERGROUP        = "PrinterFriendlyName",
254     CFSTR_INDRAGLOOP          = "InShellDragLoop",
255     CFSTR_PASTESUCCEEDED      = "Paste Succeeded",
256     CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect",
257     CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect";
258
259 const CMF_NORMAL=0;
260 const CMF_DEFAULTONLY=1;
261 const CMF_VERBSONLY=2;
262 const CMF_EXPLORE=4;
263 const CMF_NOVERBS=8;
264 const CMF_CANRENAME=16;
265 const CMF_NODEFAULT=32;
266 const CMF_INCLUDESTATIC=64;
267 const CMF_RESERVED=0xffff0000;
268 const GCS_VERBA=0;
269 const GCS_HELPTEXTA=1;
270 const GCS_VALIDATEA=2;
271 const GCS_VERBW=4;
272 const GCS_HELPTEXTW=5;
273 const GCS_VALIDATEW=6;
274 const GCS_UNICODE=4;
275
276 version(Unicode) {
277     alias GCS_VERBW GCS_VERB;
278     alias GCS_HELPTEXTW GCS_HELPTEXT;
279     alias GCS_VALIDATEW GCS_VALIDATE;
280 } else {
281     alias GCS_VERBA GCS_VERB;
282     alias GCS_HELPTEXTA GCS_HELPTEXT;
283     alias GCS_VALIDATEA GCS_VALIDATE;
284 }
285
286 const TCHAR[]
287     CMDSTR_NEWFOLDER   = "NewFolder",
288     CMDSTR_VIEWLIST    = "ViewList",
289     CMDSTR_VIEWDETAILS = "ViewDetails";
290
291 const CMIC_MASK_HOTKEY     = SEE_MASK_HOTKEY;
292 const CMIC_MASK_ICON       = SEE_MASK_ICON;
293 const CMIC_MASK_FLAG_NO_UI = SEE_MASK_FLAG_NO_UI;
294 const CMIC_MASK_MODAL      = 0x80000000;
295 // TODO: This isn't defined anywhere in MinGW.
296 //const CMIC_VALID_SEE_FLAGS=SEE_VALID_CMIC_FLAGS;
297
298 const GIL_OPENICON = 1;
299 const GIL_FORSHELL = 2;
300 const GIL_SIMULATEDOC = 1;
301 const GIL_PERINSTANCE = 2;
302 const GIL_PERCLASS = 4;
303 const GIL_NOTFILENAME = 8;
304 const GIL_DONTCACHE = 16;
305
306 const FVSIF_RECT = 1;
307 const FVSIF_PINNED = 2;
308 const FVSIF_NEWFAILED = 0x8000000;
309 const FVSIF_NEWFILE = 0x80000000;
310 const FVSIF_CANVIEWIT = 0x40000000;
311
312 const CDBOSC_SETFOCUS = 0;
313 const CDBOSC_KILLFOCUS = 1;
314 const CDBOSC_SELCHANGE = 2;
315 const CDBOSC_RENAME = 3;
316
317 const FCIDM_SHVIEWFIRST = 0;
318 const FCIDM_SHVIEWLAST = 0x7fff;
319 const FCIDM_BROWSERFIRST = 0xa000;
320 const FCIDM_BROWSERLAST = 0xbf00;
321 const FCIDM_GLOBALFIRST = 0x8000;
322 const FCIDM_GLOBALLAST = 0x9fff;
323 const FCIDM_MENU_FILE = FCIDM_GLOBALFIRST;
324 const FCIDM_MENU_EDIT = FCIDM_GLOBALFIRST+0x0040;
325 const FCIDM_MENU_VIEW = FCIDM_GLOBALFIRST+0x0080;
326 const FCIDM_MENU_VIEW_SEP_OPTIONS = FCIDM_GLOBALFIRST+0x0081;
327 const FCIDM_MENU_TOOLS = FCIDM_GLOBALFIRST+0x00c0;
328 const FCIDM_MENU_TOOLS_SEP_GOTO = FCIDM_GLOBALFIRST+0x00c1;
329 const FCIDM_MENU_HELP = FCIDM_GLOBALFIRST+0x0100;
330 const FCIDM_MENU_FIND = FCIDM_GLOBALFIRST+0x0140;
331 const FCIDM_MENU_EXPLORE = FCIDM_GLOBALFIRST+0x0150;
332 const FCIDM_MENU_FAVORITES = FCIDM_GLOBALFIRST+0x0170;
333 const FCIDM_TOOLBAR = FCIDM_BROWSERFIRST;
334 const FCIDM_STATUS = FCIDM_BROWSERFIRST+1;
335
336 const SBSP_DEFBROWSER = 0;
337 const SBSP_SAMEBROWSER = 1;
338 const SBSP_NEWBROWSER = 2;
339 const SBSP_DEFMODE = 0;
340 const SBSP_OPENMODE = 16;
341 const SBSP_EXPLOREMODE = 32;
342 const SBSP_ABSOLUTE = 0;
343 const SBSP_RELATIVE = 0x1000;
344 const SBSP_PARENT = 0x2000;
345 const SBSP_INITIATEDBYHLINKFRAME = 0x80000000;
346 const SBSP_REDIRECT = 0x40000000;
347
348 enum {
349     FCW_STATUS=1,
350     FCW_TOOLBAR,
351     FCW_TREE
352 }
353
354 const FCT_MERGE=1;
355 const FCT_CONFIGABLE=2;
356 const FCT_ADDTOEND=4;
357
358 const SVSI_DESELECT=0;
359 const SVSI_SELECT=1;
360 const SVSI_EDIT=3;
361 const SVSI_DESELECTOTHERS=4;
362 const SVSI_ENSUREVISIBLE=8;
363 const SVSI_FOCUSED=16;
364
365 const SVGIO_BACKGROUND=0;
366 const SVGIO_SELECTION=1;
367 const SVGIO_ALLVIEW=2;
368
369 const UINT SV2GV_CURRENTVIEW=-1;
370 const UINT SV2GV_DEFAULTVIEW=-2;
371
372 alias ULONG SFGAOF;
373 alias DWORD SHGDNF;
374
375 struct CIDA {
376     UINT    cidl;
377     UINT[1] aoffset;
378 }
379 alias CIDA* LPIDA;
380
381 struct SHITEMID {
382     USHORT  cb;
383     BYTE[1] abID;
384 }
385 alias SHITEMID*       LPSHITEMID;
386 alias CPtr!(SHITEMID) LPCSHITEMID;
387
388 struct ITEMIDLIST {
389     SHITEMID mkid;
390 }
391 alias ITEMIDLIST*       LPITEMIDLIST;
392 alias CPtr!(ITEMIDLIST) LPCITEMIDLIST;
393
394 alias int function(HWND,UINT,LPARAM,LPARAM) BFFCALLBACK;
395
396 struct BROWSEINFOA {
397     HWND          hwndOwner;
398     LPCITEMIDLIST pidlRoot;
399     LPSTR         pszDisplayName;
400     LPCSTR        lpszTitle;
401     UINT          ulFlags;
402     BFFCALLBACK   lpfn;
403     LPARAM        lParam;
404     int           iImage;
405 }
406 alias BROWSEINFOA* PBROWSEINFOA, LPBROWSEINFOA;
407
408 struct BROWSEINFOW {
409     HWND          hwndOwner;
410     LPCITEMIDLIST pidlRoot;
411     LPWSTR        pszDisplayName;
412     LPCWSTR       lpszTitle;
413     UINT          ulFlags;
414     BFFCALLBACK   lpfn;
415     LPARAM        lParam;
416     int           iImage;
417 }
418 alias BROWSEINFOW* PBROWSEINFOW, LPBROWSEINFOW;
419
420 struct CMINVOKECOMMANDINFO {
421     DWORD cbSize = this.sizeof;
422     DWORD fMask;
423     HWND hwnd;
424     LPCSTR lpVerb;
425     LPCSTR lpParameters;
426     LPCSTR lpDirectory;
427     int nShow;
428     DWORD dwHotKey;
429     HANDLE hIcon;
430 }
431 alias CMINVOKECOMMANDINFO* LPCMINVOKECOMMANDINFO;
432
433 struct DROPFILES {
434     DWORD pFiles;
435     POINT pt;
436     BOOL fNC;
437     BOOL fWide;
438 }
439 alias DROPFILES* LPDROPFILES;
440
441 enum SHGNO {
442     SHGDN_NORMAL             = 0,
443     SHGDN_INFOLDER,
444     SHGDN_FOREDITING         = 0x1000,
445     SHGDN_INCLUDE_NONFILESYS = 0x2000,
446     SHGDN_FORADDRESSBAR      = 0x4000,
447     SHGDN_FORPARSING         = 0x8000
448 }
449
450 enum SHCONTF {
451     SHCONTF_FOLDERS            = 32,
452     SHCONTF_NONFOLDERS         = 64,
453     SHCONTF_INCLUDEHIDDEN      = 128,
454     SHCONTF_INIT_ON_FIRST_NEXT = 256,
455     SHCONTF_NETPRINTERSRCH     = 512,
456     SHCONTF_SHAREABLE          = 1024,
457     SHCONTF_STORAGE            = 2048
458 }
459
460 struct STRRET {
461     UINT uType;
462     union {
463         LPWSTR pOleStr;
464         UINT uOffset;
465         char cStr[MAX_PATH];
466     }
467 }
468 alias STRRET* LPSTRRET;
469
470 enum FD_FLAGS {
471     FD_CLSID      = 1,
472     FD_SIZEPOINT  = 2,
473     FD_ATTRIBUTES = 4,
474     FD_CREATETIME = 8,
475     FD_ACCESSTIME = 16,
476     FD_WRITESTIME = 32,
477     FD_FILESIZE   = 64,
478     FD_LINKUI     = 0x8000
479 }
480
481 struct FILEDESCRIPTORA {
482     DWORD dwFlags;
483     CLSID clsid;
484     SIZEL sizel;
485     POINTL pointl;
486     DWORD dwFileAttributes;
487     FILETIME ftCreationTime;
488     FILETIME ftLastAccessTime;
489     FILETIME ftLastWriteTime;
490     DWORD nFileSizeHigh;
491     DWORD nFileSizeLow;
492     CHAR cFileName[MAX_PATH];
493 }
494 alias FILEDESCRIPTORA* LPFILEDESCRIPTORA;
495
496 struct FILEDESCRIPTORW {
497     DWORD dwFlags;
498     CLSID clsid;
499     SIZEL sizel;
500     POINTL pointl;
501     DWORD dwFileAttributes;
502     FILETIME ftCreationTime;
503     FILETIME ftLastAccessTime;
504     FILETIME ftLastWriteTime;
505     DWORD nFileSizeHigh;
506     DWORD nFileSizeLow;
507     WCHAR cFileName[MAX_PATH];
508 }
509 alias FILEDESCRIPTORW* LPFILEDESCRIPTORW;
510
511 struct FILEGROUPDESCRIPTORA {
512     UINT cItems;
513     FILEDESCRIPTORA fgd[1];
514 }
515 alias FILEGROUPDESCRIPTORA* LPFILEGROUPDESCRIPTORA;
516
517 struct FILEGROUPDESCRIPTORW {
518     UINT cItems;
519     FILEDESCRIPTORW fgd[1];
520 }
521 alias FILEGROUPDESCRIPTORW* LPFILEGROUPDESCRIPTORW;
522
523 enum SLR_FLAGS {
524     SLR_NO_UI      = 1,
525     SLR_ANY_MATCH  = 2,
526     SLR_UPDATE     = 4,
527     SLR_NOUPDATE   = 8,
528     SLR_NOSEARCH   = 16,
529     SLR_NOTRACK    = 32,
530     SLR_NOLINKINFO = 64,
531     SLR_INVOKE_MSI = 128
532 }
533
534 enum SLGP_FLAGS {
535     SLGP_SHORTPATH=1,
536     SLGP_UNCPRIORITY=2,
537     SLGP_RAWPATH=4
538 }
539
540 alias PBYTE LPVIEWSETTINGS;
541
542 enum FOLDERFLAGS {
543     FWF_AUTOARRANGE         = 1,
544     FWF_ABBREVIATEDNAMES    = 2,
545     FWF_SNAPTOGRID          = 4,
546     FWF_OWNERDATA           = 8,
547     FWF_BESTFITWINDOW       = 16,
548     FWF_DESKTOP             = 32,
549     FWF_SINGLESEL           = 64,
550     FWF_NOSUBFOLDERS        = 128,
551     FWF_TRANSPARENT         = 256,
552     FWF_NOCLIENTEDGE        = 512,
553     FWF_NOSCROLL            = 0x400,
554     FWF_ALIGNLEFT           = 0x800,
555     FWF_SINGLECLICKACTIVATE = 0x8000
556 }
557
558 enum FOLDERVIEWMODE {
559     FVM_ICON      = 1,
560     FVM_SMALLICON,
561     FVM_LIST,
562     FVM_DETAILS
563 }
564
565 struct FOLDERSETTINGS {
566     UINT ViewMode;
567     UINT fFlags;
568 }
569 alias FOLDERSETTINGS*       LPFOLDERSETTINGS;
570 alias CPtr!(FOLDERSETTINGS) LPCFOLDERSETTINGS;
571
572 struct FVSHOWINFO {
573     DWORD cbSize = this.sizeof;
574     HWND hwndOwner;
575     int iShow;
576     DWORD dwFlags;
577     RECT rect;
578     LPUNKNOWN punkRel;
579     OLECHAR strNewFile[MAX_PATH];
580 }
581 alias FVSHOWINFO* LPFVSHOWINFO;
582
583 struct NRESARRAY {
584     UINT cItems;
585     NETRESOURCE nr[1];
586 }
587 alias NRESARRAY* LPNRESARRAY;
588
589 enum {
590     SBSC_HIDE,
591     SBSC_SHOW,
592     SBSC_TOGGLE,
593     SBSC_QUERY
594 }
595
596 enum {
597     SBCMDID_ENABLESHOWTREE,
598     SBCMDID_SHOWCONTROL,
599     SBCMDID_CANCELNAVIGATION,
600     SBCMDID_MAYSAVECHANGES,
601     SBCMDID_SETHLINKFRAME,
602     SBCMDID_ENABLESTOP,
603     SBCMDID_OPTIONS
604 }
605 enum SVUIA_STATUS {
606     SVUIA_DEACTIVATE,
607     SVUIA_ACTIVATE_NOFOCUS,
608     SVUIA_ACTIVATE_FOCUS,
609     SVUIA_INPLACEACTIVATE
610 }
611
612 static if (_WIN32_IE >= 0x0500) {
613
614     struct EXTRASEARCH
615      {
616         GUID guidSearch;
617         WCHAR wszFriendlyName[80];
618         WCHAR wszUrl[2084];
619     }
620     alias EXTRASEARCH* LPEXTRASEARCH;
621
622     alias DWORD SHCOLSTATEF;
623
624     struct SHCOLUMNID {
625         GUID fmtid;
626         DWORD pid;
627     }
628     alias SHCOLUMNID*       LPSHCOLUMNID;
629     alias CPtr!(SHCOLUMNID) LPCSHCOLUMNID;
630
631     struct SHELLDETAILS {
632         int fmt;
633         int cxChar;
634         STRRET str;
635     }
636     alias SHELLDETAILS* LPSHELLDETAILS;
637
638     struct PERSIST_FOLDER_TARGET_INFO
639      {
640         LPITEMIDLIST pidlTargetFolder;
641         WCHAR szTargetParsingName[MAX_PATH];
642         WCHAR szNetworkProvider[MAX_PATH];
643         DWORD dwAttributes;
644         int csidl;
645     }
646
647     enum SHGFP_TYPE {
648         SHGFP_TYPE_CURRENT = 0,
649         SHGFP_TYPE_DEFAULT = 1,
650     }
651
652 }
653
654 interface IEnumIDList: IUnknown
655 {
656     HRESULT QueryInterface(REFIID,PVOID*);
657     ULONG AddRef();
658     ULONG Release();
659     HRESULT Next(ULONG,LPITEMIDLIST*,ULONG*);
660     HRESULT Skip(ULONG);
661     HRESULT Reset();
662     HRESULT Clone(IEnumIDList**);
663 }
664 alias IEnumIDList *LPENUMIDLIST;
665
666 interface IObjMgr : IUnknown
667 {
668     HRESULT QueryInterface(REFIID,PVOID*);
669     ULONG AddRef();
670     ULONG Release();
671     HRESULT Append(IUnknown*);
672     HRESULT Remove(IUnknown*);
673 }
674
675 interface IContextMenu : IUnknown
676 {
677     HRESULT QueryInterface(REFIID,PVOID*);
678     ULONG AddRef();
679     ULONG Release();
680     HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT);
681     HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO);
682     HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT);
683 }
684 alias IContextMenu* LPCONTEXTMENU;
685
686 interface IContextMenu2 : IContextMenu
687 {
688     HRESULT QueryInterface(REFIID,PVOID*);
689     ULONG AddRef();
690     ULONG Release();
691     HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT);
692     HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO);
693     HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT);
694     HRESULT HandleMenuMsg(UINT,WPARAM,LPARAM);
695 };
696 alias IContextMenu2* LPCONTEXTMENU2;
697
698 static if (_WIN32_IE >= 0x0500) {
699
700     align(8):
701     struct SHCOLUMNINIT {
702         ULONG dwFlags;
703         ULONG dwReserved;
704         WCHAR wszFolder[MAX_PATH];
705     }
706     alias SHCOLUMNINIT*       LPSHCOLUMNINIT;
707     alias CPtr!(SHCOLUMNINIT) LPCSHCOLUMNINIT;
708
709     struct SHCOLUMNDATA {
710         ULONG dwFlags;
711         DWORD dwFileAttributes;
712         ULONG dwReserved;
713         WCHAR *pwszExt;
714         WCHAR wszFile[MAX_PATH];
715     }
716     alias SHCOLUMNDATA*       LPSHCOLUMNDATA;
717     alias CPtr!(SHCOLUMNDATA) LPCSHCOLUMNDATA;
718     align:
719
720     const MAX_COLUMN_NAME_LEN = 80;
721     const MAX_COLUMN_DESC_LEN = 128;
722
723     align(1):
724     struct SHCOLUMNINFO {
725         SHCOLUMNID scid;
726         VARTYPE vt;
727         DWORD fmt;
728         UINT cChars;
729         DWORD csFlags;
730         WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
731         WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
732     }
733     alias SHCOLUMNINFO*       LPSHCOLUMNINFO;
734     alias CPtr!(SHCOLUMNINFO) LPCSHCOLUMNINFO;
735     align:
736
737     enum SHCOLSTATE {
738         SHCOLSTATE_TYPE_STR      = 0x00000001,
739         SHCOLSTATE_TYPE_INT      = 0x00000002,
740         SHCOLSTATE_TYPE_DATE     = 0x00000003,
741         SHCOLSTATE_TYPEMASK      = 0x0000000f,
742         SHCOLSTATE_ONBYDEFAULT   = 0x00000010,
743         SHCOLSTATE_SLOW          = 0x00000020,
744         SHCOLSTATE_EXTENDED      = 0x00000040,
745         SHCOLSTATE_SECONDARYUI   = 0x00000080,
746         SHCOLSTATE_HIDDEN        = 0x00000100,
747         SHCOLSTATE_PREFER_VARCMP = 0x00000200
748     }
749
750     interface IColumnProvider : IUnknown
751      {
752         HRESULT QueryInterface(REFIID,PVOID*);
753         ULONG AddRef();
754         ULONG Release();
755         HRESULT Initialize(LPCSHCOLUMNINIT);
756         HRESULT GetColumnInfo(DWORD,SHCOLUMNINFO*);
757         HRESULT GetItemData(LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*);
758     }
759 }/* _WIN32_IE >= 0x0500 */
760
761 interface IQueryInfo : IUnknown
762 {
763     HRESULT QueryInterface(REFIID,PVOID*);
764     ULONG AddRef();
765     ULONG Release();
766     HRESULT GetInfoTip(DWORD,WCHAR**);
767     HRESULT GetInfoFlags(DWORD*);
768 }
769
770 interface IShellExtInit : IUnknown
771 {
772     HRESULT QueryInterface(REFIID,PVOID*);
773     ULONG AddRef();
774     ULONG Release();
775     HRESULT Initialize(LPCITEMIDLIST,LPDATAOBJECT,HKEY);
776 }
777 alias IShellExtInit *LPSHELLEXTINIT;
778
779 interface IShellPropSheetExt : IUnknown
780 {
781     HRESULT QueryInterface(REFIID,PVOID*);
782     ULONG AddRef();
783     ULONG Release();
784     HRESULT AddPages(LPFNADDPROPSHEETPAGE,LPARAM);
785     HRESULT ReplacePage(UINT,LPFNADDPROPSHEETPAGE,LPARAM);
786 }
787 alias IShellPropSheetExt *LPSHELLPROPSHEETEXT;
788
789 interface IExtractIconA : IUnknown
790 {
791     HRESULT QueryInterface(REFIID,PVOID*);
792     ULONG AddRef();
793     ULONG Release();
794     HRESULT GetIconLocation(UINT,LPSTR,UINT,int*,PUINT);
795     HRESULT Extract(LPCSTR,UINT,HICON*,HICON*,UINT);
796 };
797 alias IExtractIconA *LPEXTRACTICONA;
798
799 interface IExtractIconW : IUnknown
800 {
801     HRESULT QueryInterface(REFIID,PVOID*);
802     ULONG AddRef();
803     ULONG Release();
804     HRESULT GetIconLocation(UINT,LPWSTR,UINT,int*,PUINT);
805     HRESULT Extract(LPCWSTR,UINT,HICON*,HICON*,UINT);
806 }
807 alias IExtractIconW *LPEXTRACTICONW;
808
809 version(Unicode) {
810     alias IExtractIconW IExtractIcon;
811     alias LPEXTRACTICONW LPEXTRACTICON;
812 } else {
813     alias IExtractIconA IExtractIcon;
814     alias LPEXTRACTICONA LPEXTRACTICON;
815 }
816
817 interface IShellLinkA : IUnknown
818 {
819     HRESULT QueryInterface(REFIID,PVOID*);
820     ULONG AddRef();
821     ULONG Release();
822     HRESULT GetPath(LPSTR,int,WIN32_FIND_DATAA*,DWORD);
823     HRESULT GetIDList(LPITEMIDLIST*);
824     HRESULT SetIDList(LPCITEMIDLIST);
825     HRESULT GetDescription(LPSTR,int);
826     HRESULT SetDescription(LPCSTR);
827     HRESULT GetWorkingDirectory(LPSTR,int);
828     HRESULT SetWorkingDirectory(LPCSTR);
829     HRESULT GetArguments(LPSTR,int);
830     HRESULT SetArguments(LPCSTR);
831     HRESULT GetHotkey(PWORD);
832     HRESULT SetHotkey(WORD);
833     HRESULT GetShowCmd(int*);
834     HRESULT SetShowCmd(int);
835     HRESULT GetIconLocation(LPSTR,int,int*);
836     HRESULT SetIconLocation(LPCSTR,int);
837     HRESULT SetRelativePath(LPCSTR ,DWORD);
838     HRESULT Resolve(HWND,DWORD);
839     HRESULT SetPath(LPCSTR);
840 }
841
842 interface IShellLinkW : IUnknown
843 {
844     HRESULT QueryInterface(REFIID,PVOID*);
845     ULONG AddRef();
846     ULONG Release();
847     HRESULT GetPath(LPWSTR,int,WIN32_FIND_DATAW*,DWORD);
848     HRESULT GetIDList(LPITEMIDLIST*);
849     HRESULT SetIDList(LPCITEMIDLIST);
850     HRESULT GetDescription(LPWSTR,int);
851     HRESULT SetDescription(LPCWSTR);
852     HRESULT GetWorkingDirectory(LPWSTR,int);
853     HRESULT SetWorkingDirectory(LPCWSTR);
854     HRESULT GetArguments(LPWSTR,int);
855     HRESULT SetArguments(LPCWSTR);
856     HRESULT GetHotkey(PWORD);
857     HRESULT SetHotkey(WORD);
858     HRESULT GetShowCmd(int*);
859     HRESULT SetShowCmd(int);
860     HRESULT GetIconLocation(LPWSTR,int,int*);
861     HRESULT SetIconLocation(LPCWSTR,int);
862     HRESULT SetRelativePath(LPCWSTR ,DWORD);
863     HRESULT Resolve(HWND,DWORD);
864     HRESULT SetPath(LPCWSTR);
865 }
866
867
868 interface IShellFolder : IUnknown
869 {
870     HRESULT QueryInterface(REFIID,PVOID*);
871     ULONG AddRef();
872     ULONG Release();
873     HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
874     HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
875     HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
876     HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
877     HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST);
878     HRESULT CreateViewObject(HWND,REFIID,PVOID*);
879     HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG);
880     HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*);
881     HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET);
882     HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*);
883 }
884 alias IShellFolder *LPSHELLFOLDER;
885
886 static if (_WIN32_IE >= 0x0500) {
887
888 interface IEnumExtraSearch: IUnknown
889 {
890     HRESULT QueryInterface(REFIID,PVOID*);
891     ULONG AddRef();
892     ULONG Release();
893     HRESULT Next(ULONG,LPEXTRASEARCH*,ULONG*);
894     HRESULT Skip(ULONG);
895     HRESULT Reset();
896     HRESULT Clone(IEnumExtraSearch**);
897 }
898 alias IEnumExtraSearch *LPENUMEXTRASEARCH;
899
900 interface IShellFolder2 : IShellFolder
901 {
902     HRESULT QueryInterface(REFIID,PVOID*);
903     ULONG AddRef();
904     ULONG Release();
905     HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
906     HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
907     HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
908     HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
909     HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST);
910     HRESULT CreateViewObject(HWND,REFIID,PVOID*);
911     HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG);
912     HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*);
913     HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET);
914     HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*);
915     HRESULT GetDefaultSearchGUID(GUID*);
916     HRESULT EnumSearches(IEnumExtraSearch**);
917     HRESULT GetDefaultColumn(DWORD,ULONG*,ULONG*);
918     HRESULT GetDefaultColumnState(UINT,SHCOLSTATEF*);
919     HRESULT GetDetailsEx(LPCITEMIDLIST, CPtr!(SHCOLUMNID),VARIANT*);
920     HRESULT GetDetailsOf(LPCITEMIDLIST,UINT,SHELLDETAILS*);
921     HRESULT MapColumnToSCID(UINT,SHCOLUMNID*);
922 }
923 alias IShellFolder2 *LPSHELLFOLDER2;
924
925 } /* _WIN32_IE >= 0x0500 */
926
927 interface ICopyHook : IUnknown
928 {
929     HRESULT QueryInterface(REFIID,PVOID*);
930     ULONG AddRef();
931     ULONG Release();
932     UINT CopyCallback(HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD);
933 }
934 alias ICopyHook *LPCOPYHOOK;
935
936 interface IFileViewerSite : IUnknown
937 {
938     HRESULT QueryInterface(REFIID,PVOID*);
939     ULONG AddRef();
940     ULONG Release();
941     HRESULT SetPinnedWindow(HWND);
942     HRESULT GetPinnedWindow(HWND*);
943 }
944 alias IFileViewerSite *LPFILEVIEWERSITE;
945
946 interface IFileViewer : IUnknown
947 {
948     HRESULT QueryInterface(REFIID,PVOID*);
949     ULONG AddRef();
950     ULONG Release();
951     HRESULT ShowInitialize(LPFILEVIEWERSITE);
952     HRESULT Show(LPFVSHOWINFO);
953     HRESULT PrintTo(LPSTR,BOOL);
954 }
955 alias IFileViewer *LPFILEVIEWER;
956
957 interface IFileSystemBindData : IUnknown
958 {
959     HRESULT QueryInterface(REFIID,PVOID*);
960     ULONG AddRef();
961     ULONG Release();
962     HRESULT SetFindData(CPtr!(WIN32_FIND_DATAW));
963     HRESULT GetFindData(WIN32_FIND_DATAW*);
964 }
965
966 interface IPersistFolder : IPersist
967 {
968     HRESULT QueryInterface(REFIID,PVOID*);
969     ULONG AddRef();
970     ULONG Release();
971     HRESULT GetClassID(CLSID*);
972     HRESULT Initialize(LPCITEMIDLIST);
973 }
974 alias IPersistFolder *LPPERSISTFOLDER;
975
976 static if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500) {
977
978 interface IPersistFolder2 : IPersistFolder
979 {
980     HRESULT QueryInterface(REFIID,PVOID*);
981     ULONG AddRef();
982     ULONG Release();
983     HRESULT GetClassID(CLSID*);
984     HRESULT Initialize(LPCITEMIDLIST);
985     HRESULT GetCurFolder(LPITEMIDLIST*);
986 }
987 alias IPersistFolder2 *LPPERSISTFOLDER2;
988
989 }/* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500 */
990
991 static if (_WIN32_IE >= 0x0500) {
992
993 interface IPersistFolder3 : IPersistFolder2
994 {
995     HRESULT QueryInterface(REFIID,PVOID*);
996     ULONG AddRef();
997     ULONG Release();
998     HRESULT GetClassID(CLSID*);
999     HRESULT Initialize(LPCITEMIDLIST);
1000     HRESULT GetCurFolder(LPITEMIDLIST*);
1001     HRESULT InitializeEx(IBindCtx*,LPCITEMIDLIST, CPtr!(PERSIST_FOLDER_TARGET_INFO));
1002     HRESULT GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO*);
1003 }
1004 alias IPersistFolder3 *LPPERSISTFOLDER3;
1005
1006 } /* _WIN32_IE >= 0x0500 */
1007
1008 alias IShellBrowser* LPSHELLBROWSER;
1009 alias IShellView* LPSHELLVIEW;
1010
1011 interface IShellBrowser : IOleWindow
1012 {
1013     HRESULT QueryInterface(REFIID,PVOID*);
1014     ULONG AddRef();
1015     ULONG Release();
1016     HRESULT GetWindow(HWND*);
1017     HRESULT ContextSensitiveHelp(BOOL);
1018     HRESULT InsertMenusSB(HMENU,LPOLEMENUGROUPWIDTHS);
1019     HRESULT SetMenuSB(HMENU,HOLEMENU,HWND);
1020     HRESULT RemoveMenusSB(HMENU);
1021     HRESULT SetStatusTextSB(LPCOLESTR);
1022     HRESULT EnableModelessSB(BOOL);
1023     HRESULT TranslateAcceleratorSB(LPMSG,WORD);
1024     HRESULT BrowseObject(LPCITEMIDLIST,UINT);
1025     HRESULT GetViewStateStream(DWORD,LPSTREAM*);
1026     HRESULT GetControlWindow(UINT,HWND*);
1027     HRESULT SendControlMsg(UINT,UINT,WPARAM,LPARAM,LRESULT*);
1028     HRESULT QueryActiveShellView(LPSHELLVIEW*);
1029     HRESULT OnViewWindowActive(LPSHELLVIEW);
1030     HRESULT SetToolbarItems(LPTBBUTTON,UINT,UINT);
1031 }
1032
1033 interface IShellView : IOleWindow
1034 {
1035     HRESULT QueryInterface(REFIID,PVOID*);
1036     ULONG AddRef();
1037     ULONG Release();
1038     HRESULT GetWindow(HWND*);
1039     HRESULT ContextSensitiveHelp(BOOL);
1040     HRESULT TranslateAccelerator(LPMSG);
1041 //[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT
1042 //[No]  STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
1043 //[Yes] #else
1044     HRESULT EnableModeless(BOOL);
1045 //[Yes] #endif
1046     HRESULT UIActivate(UINT);
1047     HRESULT Refresh();
1048     HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*);
1049     HRESULT DestroyViewWindow();
1050     HRESULT GetCurrentInfo(LPFOLDERSETTINGS);
1051     HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM);
1052     HRESULT SaveViewState();
1053     HRESULT SelectItem(LPCITEMIDLIST,UINT);
1054     HRESULT GetItemObject(UINT,REFIID,PVOID*);
1055 }
1056
1057 interface ICommDlgBrowser : IUnknown
1058 {
1059     HRESULT QueryInterface(REFIID,PVOID*);
1060     ULONG AddRef();
1061     ULONG Release();
1062     HRESULT OnDefaultCommand(IShellView*);
1063     HRESULT OnStateChange(IShellView*,ULONG);
1064     HRESULT IncludeObject(IShellView*,LPCITEMIDLIST);
1065 }
1066 alias ICommDlgBrowser *LPCOMMDLGBROWSER;
1067
1068 alias GUID SHELLVIEWID;
1069
1070 struct SV2CVW2_PARAMS {
1071     DWORD cbSize = this.sizeof;
1072     IShellView *psvPrev;
1073     FOLDERSETTINGS  *pfs;
1074     IShellBrowser *psbOwner;
1075     RECT *prcView;
1076     CPtr!(SHELLVIEWID) pvid;
1077     HWND hwndView;
1078 }
1079 alias SV2CVW2_PARAMS* LPSV2CVW2_PARAMS;
1080
1081 interface IShellView2 : IShellView
1082 {
1083
1084     HRESULT QueryInterface(REFIID,PVOID*);
1085     ULONG AddRef();
1086     ULONG Release();
1087     HRESULT GetWindow(HWND*);
1088     HRESULT ContextSensitiveHelp(BOOL);
1089     HRESULT TranslateAccelerator(LPMSG);
1090 //[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT
1091 //[No]  STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
1092 //[Yes] #else
1093     HRESULT EnableModeless(BOOL);
1094 //[Yes] #endif
1095     HRESULT UIActivate(UINT);
1096     HRESULT Refresh();
1097     HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*);
1098     HRESULT DestroyViewWindow();
1099     HRESULT GetCurrentInfo(LPFOLDERSETTINGS);
1100     HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM);
1101     HRESULT SaveViewState();
1102     HRESULT SelectItem(LPCITEMIDLIST,UINT);
1103     HRESULT GetItemObject(UINT,REFIID,PVOID*);
1104     HRESULT GetView(SHELLVIEWID*,ULONG);
1105     HRESULT CreateViewWindow2(LPSV2CVW2_PARAMS);
1106 }
1107
1108 interface IShellExecuteHookA : IUnknown
1109 {
1110     HRESULT QueryInterface(REFIID,PVOID*);
1111     ULONG AddRef();
1112     ULONG Release();
1113     HRESULT Execute(LPSHELLEXECUTEINFOA);
1114 }
1115
1116 interface IShellExecuteHookW : IUnknown
1117 {
1118     HRESULT QueryInterface(REFIID,PVOID*);
1119     ULONG AddRef();
1120     ULONG Release();
1121     HRESULT Execute(LPSHELLEXECUTEINFOW);
1122 }
1123
1124 interface IShellIcon : IUnknown
1125 {
1126     HRESULT QueryInterface(REFIID,PVOID*);
1127     ULONG AddRef();
1128     ULONG Release();
1129     HRESULT GetIconOf(LPCITEMIDLIST,UINT,PINT);
1130 }
1131 alias IShellIcon* LPSHELLICON;
1132
1133 struct SHELLFLAGSTATE {
1134 // TODO
1135  short bitflags_; // for D.
1136  /*
1137     BOOL fShowAllObjects : 1;
1138     BOOL fShowExtensions : 1;
1139     BOOL fNoConfirmRecycle : 1;
1140     BOOL fShowSysFiles : 1;
1141     BOOL fShowCompColor : 1;
1142     BOOL fDoubleClickInWebView : 1;
1143     BOOL fDesktopHTML : 1;
1144     BOOL fWin95Classic : 1;
1145     BOOL fDontPrettyPath : 1;
1146     BOOL fShowAttribCol : 1;
1147     BOOL fMapNetDrvBtn : 1;
1148     BOOL fShowInfoTip : 1;
1149     BOOL fHideIcons : 1;
1150     UINT fRestFlags : 3;
1151 */
1152 }
1153 alias SHELLFLAGSTATE* LPSHELLFLAGSTATE;
1154
1155 const SSF_SHOWALLOBJECTS = 0x1;
1156 const SSF_SHOWEXTENSIONS = 0x2;
1157 const SSF_SHOWCOMPCOLOR = 0x8;
1158 const SSF_SHOWSYSFILES = 0x20;
1159 const SSF_DOUBLECLICKINWEBVIEW = 0x80;
1160 const SSF_SHOWATTRIBCOL = 0x100;
1161 const SSF_DESKTOPHTML = 0x200;
1162 const SSF_WIN95CLASSIC = 0x400;
1163 const SSF_DONTPRETTYPATH = 0x800;
1164 const SSF_MAPNETDRVBUTTON = 0x1000;
1165 const SSF_SHOWINFOTIP = 0x2000;
1166 const SSF_HIDEICONS = 0x4000;
1167 const SSF_NOCONFIRMRECYCLE = 0x8000;
1168
1169 interface IShellIconOverlayIdentifier : IUnknown
1170 {
1171     HRESULT QueryInterface(REFIID,PVOID*);
1172     ULONG AddRef();
1173     ULONG Release();
1174     HRESULT IsMemberOf(LPCWSTR,DWORD);
1175     HRESULT GetOverlayInfo(LPWSTR,int,int*,DWORD*);
1176     HRESULT GetPriority(int*);
1177 }
1178
1179 const ISIOI_ICONFILE  = 0x00000001;
1180 const ISIOI_ICONINDEX = 0x00000002;
1181
1182 static if (_WIN32_WINNT >= 0x0500) {/* W2K */
1183     struct SHELLSTATE {
1184     //TODO:
1185     /*
1186         BOOL fShowAllObjects : 1;
1187         BOOL fShowExtensions : 1;
1188         BOOL fNoConfirmRecycle : 1;
1189         BOOL fShowSysFiles : 1;
1190         BOOL fShowCompColor : 1;
1191         BOOL fDoubleClickInWebView : 1;
1192         BOOL fDesktopHTML : 1;
1193         BOOL fWin95Classic : 1;
1194         BOOL fDontPrettyPath : 1;
1195         BOOL fShowAttribCol : 1;
1196         BOOL fMapNetDrvBtn : 1;
1197         BOOL fShowInfoTip : 1;
1198         BOOL fHideIcons : 1;
1199         BOOL fWebView : 1;
1200         BOOL fFilter : 1;
1201         BOOL fShowSuperHidden : 1;
1202         BOOL fNoNetCrawling : 1;
1203         DWORD dwWin95Unused;
1204         UINT uWin95Unused;
1205         LONG lParamSort;
1206         int iSortDirection;
1207         UINT version;
1208         UINT uNotUsed;
1209         BOOL fSepProcess : 1;
1210         BOOL fStartPanelOn : 1;
1211         BOOL fShowStartPage : 1;
1212         UINT fSpareFlags : 13;
1213 */
1214     }
1215     alias SHELLSTATE* LPSHELLSTATE;
1216 }
1217
1218 static if (_WIN32_IE >= 0x0500) {
1219     align(8):
1220     struct SHDRAGIMAGE {
1221         SIZE sizeDragImage;
1222         POINT ptOffset;
1223         HBITMAP hbmpDragImage;
1224         COLORREF crColorKey;
1225     }
1226     alias SHDRAGIMAGE* LPSHDRAGIMAGE;
1227     align:
1228
1229     interface IDragSourceHelper : IUnknown
1230      {
1231         HRESULT QueryInterface(REFIID riid, void **ppv);
1232         ULONG AddRef();
1233         ULONG Release();
1234         HRESULT InitializeFromBitmap(LPSHDRAGIMAGE pshdi, IDataObject* pDataObject);
1235         HRESULT InitializeFromWindow(HWND hwnd, POINT* ppt, IDataObject* pDataObject);
1236     }
1237
1238     interface IDropTargetHelper : IUnknown
1239      {
1240         HRESULT QueryInterface(REFIID riid, void** ppv);
1241         ULONG AddRef();
1242         ULONG Release();
1243         HRESULT DragEnter(HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect);
1244         HRESULT DragLeave();
1245         HRESULT DragOver(POINT* ppt, DWORD dwEffect);
1246         HRESULT Drop(IDataObject* pDataObject, POINT* ppt, DWORD dwEffect);
1247         HRESULT Show(BOOL fShow);
1248     }
1249 }
1250
1251 extern (Windows):
1252 void SHAddToRecentDocs(UINT,PCVOID);
1253 LPITEMIDLIST SHBrowseForFolderA(PBROWSEINFOA);
1254 LPITEMIDLIST SHBrowseForFolderW(PBROWSEINFOW);
1255 void SHChangeNotify(LONG,UINT,PCVOID,PCVOID);
1256 HRESULT SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
1257 HRESULT SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
1258 HRESULT SHGetDesktopFolder(LPSHELLFOLDER*);
1259 HRESULT SHGetInstanceExplorer(IUnknown **);
1260 HRESULT SHGetMalloc(LPMALLOC*);
1261 BOOL SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
1262 BOOL SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
1263 HRESULT SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*);
1264 HRESULT SHLoadInProc(REFCLSID);
1265
1266 static if (_WIN32_IE >= 0x0400) {
1267     BOOL SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL);
1268     BOOL SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL);
1269 }
1270
1271 /* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */
1272 HRESULT SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR);
1273 HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR);
1274
1275 static if ((_WIN32_WINDOWS >= 0x0490) || (_WIN32_WINNT >= 0x0500)) {/* ME or W2K */
1276     HRESULT SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*);
1277 }
1278
1279 static if (_WIN32_WINNT >= 0x0500) {
1280     INT SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES);
1281     INT SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES);
1282     HRESULT SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*);
1283 }
1284
1285 static if (_WIN32_WINNT >= 0x0501) {/* XP */
1286     HRESULT SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
1287     HRESULT SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
1288 }
1289
1290 void SHGetSettings(LPSHELLFLAGSTATE,DWORD);
1291
1292 static if (_WIN32_WINNT >= 0x0500) {/* W2K */
1293     void SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL);
1294 }
1295
1296 static if (_WIN32_WINNT >= 0x0500) {/* W2K */
1297     BOOL ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST);
1298     BOOL ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL);
1299     BOOL ILRemoveLastID(LPITEMIDLIST);
1300     HRESULT ILLoadFromStream(IStream*, LPITEMIDLIST*);
1301     HRESULT ILSaveToStream(IStream*, LPCITEMIDLIST);
1302     LPITEMIDLIST ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL);
1303     LPITEMIDLIST ILClone(LPCITEMIDLIST);
1304     LPITEMIDLIST ILCloneFirst(LPCITEMIDLIST);
1305     LPITEMIDLIST ILCombine(LPCITEMIDLIST, LPCITEMIDLIST);
1306     LPITEMIDLIST ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST);
1307     LPITEMIDLIST ILFindLastID(LPCITEMIDLIST);
1308     LPITEMIDLIST ILGetNext(LPCITEMIDLIST);
1309     UINT ILGetSize(LPCITEMIDLIST);
1310     void ILFree(LPITEMIDLIST);
1311
1312     HRESULT SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**);
1313 }
1314
1315 version(Unicode) {
1316     alias IShellExecuteHookW IShellExecuteHook;
1317     alias IShellLinkW IShellLink;
1318     alias BROWSEINFOW BROWSEINFO;
1319     alias SHBrowseForFolderW SHBrowseForFolder;
1320     alias SHGetDataFromIDListW SHGetDataFromIDList;
1321     alias SHGetPathFromIDListW SHGetPathFromIDList;
1322     static if (_WIN32_IE >= 0x0400) {
1323         alias SHGetSpecialFolderPathW SHGetSpecialFolderPath;
1324     }
1325     alias SHGetFolderPathW SHGetFolderPath;
1326     static if (_WIN32_WINNT >= 0x0500) {
1327         alias SHCreateDirectoryExW SHCreateDirectoryEx;
1328     }
1329     static if (_WIN32_WINNT >= 0x0501) {
1330         alias SHGetFolderPathAndSubDirW SHGetFolderPathAndSubDir;
1331     }
1332     alias FILEDESCRIPTORW FILEDESCRIPTOR;
1333     alias LPFILEDESCRIPTORW LPFILEDESCRIPTOR;
1334     alias FILEGROUPDESCRIPTORW FILEGROUPDESCRIPTOR;
1335     alias LPFILEGROUPDESCRIPTORW LPFILEGROUPDESCRIPTOR;
1336
1337 } else {
1338     alias IShellExecuteHookA IShellExecuteHook;
1339     alias IShellLinkA IShellLink;
1340     alias BROWSEINFOA BROWSEINFO;
1341     alias SHBrowseForFolderA SHBrowseForFolder;
1342     alias SHGetDataFromIDListA SHGetDataFromIDList;
1343     alias SHGetPathFromIDListA SHGetPathFromIDList;
1344     static if (_WIN32_IE >= 0x0400) {
1345         alias SHGetSpecialFolderPathA SHGetSpecialFolderPath;
1346     }
1347     alias SHGetFolderPathA SHGetFolderPath;
1348     static if (_WIN32_WINNT >= 0x0500) {
1349         alias SHCreateDirectoryExA SHCreateDirectoryEx;
1350     }
1351     static if (_WIN32_WINNT >= 0x0501) {
1352         alias SHGetFolderPathAndSubDirA SHGetFolderPathAndSubDir;
1353     }
1354     alias FILEDESCRIPTORA FILEDESCRIPTOR;
1355     alias LPFILEDESCRIPTORA LPFILEDESCRIPTOR;
1356     alias FILEGROUPDESCRIPTORA FILEGROUPDESCRIPTOR;
1357     alias LPFILEGROUPDESCRIPTORA LPFILEGROUPDESCRIPTOR;
1358 }
1359 alias BROWSEINFO* PBROWSEINFO, LPBROWSEINFO;
Note: See TracBrowser for help on using the browser.