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