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