comparison win32/shlobj.d @ 1:4a9dcbd9e54f

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