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