diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/win32/shlobj.d	Tue Apr 05 20:44:01 2011 +0200
@@ -0,0 +1,1351 @@
+/***********************************************************************\
+*                                shlobj.d                               *
+*                                                                       *
+*                       Windows API header module                       *
+*                                                                       *
+*                 Translated from MinGW Windows headers                 *
+*                                                                       *
+*                       Placed into public domain                       *
+\***********************************************************************/
+module win32.shlobj;
+pragma(lib, "shell32.lib");
+
+// TODO: fix bitfields
+// TODO: CMIC_VALID_SEE_FLAGS
+// SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K
+
+import win32.commctrl, win32.ole2, win32.shlguid, win32.shellapi;
+private import win32.prsht, win32.unknwn, win32.w32api, win32.winbase,
+  win32.winnt, win32.winuser, win32.wtypes, win32.objfwd, win32.objidl;
+private import win32.winnetwk; // for NETRESOURCE
+
+
+// FIXME: clean up Windows version support
+
+align(1):
+
+const BIF_RETURNONLYFSDIRS = 1;
+const BIF_DONTGOBELOWDOMAIN = 2;
+const BIF_STATUSTEXT = 4;
+const BIF_RETURNFSANCESTORS = 8;
+const BIF_EDITBOX = 16;
+const BIF_VALIDATE = 32;
+const BIF_NEWDIALOGSTYLE = 64;
+const BIF_BROWSEINCLUDEURLS = 128;
+const BIF_USENEWUI =  BIF_EDITBOX | BIF_NEWDIALOGSTYLE;
+const BIF_BROWSEFORCOMPUTER = 0x1000;
+const BIF_BROWSEFORPRINTER = 0x2000;
+const BIF_BROWSEINCLUDEFILES = 0x4000;
+const BIF_SHAREABLE = 0x8000;
+const BFFM_INITIALIZED = 1;
+const BFFM_SELCHANGED = 2;
+const BFFM_VALIDATEFAILEDA = 3;
+const BFFM_VALIDATEFAILEDW = 4;
+const BFFM_SETSTATUSTEXTA = WM_USER + 100;
+const BFFM_ENABLEOK = WM_USER + 101;
+const BFFM_SETSELECTIONA = WM_USER + 102;
+const BFFM_SETSELECTIONW = WM_USER + 103;
+const BFFM_SETSTATUSTEXTW = WM_USER + 104;
+const BFFM_SETOKTEXT = WM_USER + 105;
+const BFFM_SETEXPANDED = WM_USER + 106;
+
+version(Unicode) {
+	alias BFFM_SETSTATUSTEXTW BFFM_SETSTATUSTEXT;
+	alias BFFM_SETSELECTIONW BFFM_SETSELECTION;
+	alias BFFM_VALIDATEFAILEDW BFFM_VALIDATEFAILED;
+} else {
+	alias BFFM_SETSTATUSTEXTA BFFM_SETSTATUSTEXT;
+	alias BFFM_SETSELECTIONA BFFM_SETSELECTION;
+	alias BFFM_VALIDATEFAILEDA BFFM_VALIDATEFAILED;
+}
+
+const DVASPECT_SHORTNAME = 2;
+
+const SHARD_PIDL = 1;
+const SHARD_PATH = 2;
+
+const SHCNE_RENAMEITEM = 1;
+const SHCNE_CREATE = 2;
+const SHCNE_DELETE = 4;
+const SHCNE_MKDIR = 8;
+const SHCNE_RMDIR = 16;
+const SHCNE_MEDIAINSERTED = 32;
+const SHCNE_MEDIAREMOVED = 64;
+const SHCNE_DRIVEREMOVED = 128;
+const SHCNE_DRIVEADD = 256;
+const SHCNE_NETSHARE = 512;
+const SHCNE_NETUNSHARE = 1024;
+const SHCNE_ATTRIBUTES = 2048;
+const SHCNE_UPDATEDIR = 4096;
+const SHCNE_UPDATEITEM = 8192;
+const SHCNE_SERVERDISCONNECT = 16384;
+const SHCNE_UPDATEIMAGE = 32768;
+const SHCNE_DRIVEADDGUI = 65536;
+const SHCNE_RENAMEFOLDER = 0x20000;
+const SHCNE_FREESPACE = 0x40000;
+const SHCNE_ASSOCCHANGED = 0x8000000;
+const SHCNE_DISKEVENTS = 0x2381F;
+const SHCNE_GLOBALEVENTS = 0xC0581E0;
+const SHCNE_ALLEVENTS = 0x7FFFFFFF;
+const SHCNE_INTERRUPT = 0x80000000;
+
+const SHCNF_IDLIST = 0;
+const SHCNF_PATHA = 1;
+const SHCNF_PRINTERA = 2;
+const SHCNF_DWORD = 3;
+const SHCNF_PATHW = 5;
+const SHCNF_PRINTERW = 6;
+const SHCNF_TYPE = 0xFF;
+const SHCNF_FLUSH = 0x1000;
+const SHCNF_FLUSHNOWAIT = 0x2000;
+
+version(Unicode) {
+	alias SHCNF_PATHW SHCNF_PATH;
+	alias SHCNF_PRINTERW SHCNF_PRINTER;
+} else {
+	alias SHCNF_PATHA SHCNF_PATH;
+	alias SHCNF_PRINTERA SHCNF_PRINTER;
+}
+
+const SFGAO_CANCOPY = DROPEFFECT.DROPEFFECT_COPY;
+const SFGAO_CANMOVE = DROPEFFECT.DROPEFFECT_MOVE;
+const SFGAO_CANLINK = DROPEFFECT.DROPEFFECT_LINK;
+const SFGAO_CANRENAME = 0x00000010L;
+const SFGAO_CANDELETE = 0x00000020L;
+const SFGAO_HASPROPSHEET = 0x00000040L;
+const SFGAO_DROPTARGET = 0x00000100L;
+const SFGAO_CAPABILITYMASK = 0x00000177L;
+const SFGAO_GHOSTED = 0x00008000L;
+const SFGAO_LINK = 0x00010000L;
+const SFGAO_SHARE = 0x00020000L;
+const SFGAO_READONLY = 0x00040000L;
+const SFGAO_HIDDEN = 0x00080000L;
+const SFGAO_DISPLAYATTRMASK = 0x000F0000L;
+const SFGAO_FILESYSANCESTOR = 0x10000000L;
+const SFGAO_FOLDER = 0x20000000L;
+const SFGAO_FILESYSTEM = 0x40000000L;
+const SFGAO_HASSUBFOLDER = 0x80000000L;
+const SFGAO_CONTENTSMASK = 0x80000000L;
+const SFGAO_VALIDATE = 0x01000000L;
+const SFGAO_REMOVABLE = 0x02000000L;
+const SFGAO_COMPRESSED = 0x04000000L;
+const STRRET_WSTR = 0;
+const STRRET_OFFSET = 1;
+const STRRET_CSTR = 2;
+
+enum {
+	SHGDFIL_FINDDATA = 1,
+	SHGDFIL_NETRESOURCE,
+	SHGDFIL_DESCRIPTIONID
+}
+
+enum {
+	SHDID_ROOT_REGITEM = 1,
+	SHDID_FS_FILE,
+	SHDID_FS_DIRECTORY,
+	SHDID_FS_OTHER,
+	SHDID_COMPUTER_DRIVE35,
+	SHDID_COMPUTER_DRIVE525,
+	SHDID_COMPUTER_REMOVABLE,
+	SHDID_COMPUTER_FIXED,
+	SHDID_COMPUTER_NETDRIVE,
+	SHDID_COMPUTER_CDROM,
+	SHDID_COMPUTER_RAMDISK,
+	SHDID_COMPUTER_OTHER,
+	SHDID_NET_DOMAIN,
+	SHDID_NET_SERVER,
+	SHDID_NET_SHARE,
+	SHDID_NET_RESTOFNET,
+	SHDID_NET_OTHER
+}
+
+const TCHAR[] REGSTR_PATH_EXPLORER = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
+const TCHAR[] REGSTR_PATH_SPECIAL_FOLDERS=REGSTR_PATH_EXPLORER ~ "\\Shell Folders";
+
+enum {
+	CSIDL_DESKTOP = 0,
+	CSIDL_INTERNET,
+	CSIDL_PROGRAMS,
+	CSIDL_CONTROLS,
+	CSIDL_PRINTERS,
+	CSIDL_PERSONAL,
+	CSIDL_FAVORITES,
+	CSIDL_STARTUP,
+	CSIDL_RECENT,
+	CSIDL_SENDTO,
+	CSIDL_BITBUCKET,
+	CSIDL_STARTMENU, // = 11
+	CSIDL_DESKTOPDIRECTORY = 16,
+	CSIDL_DRIVES,
+	CSIDL_NETWORK,
+	CSIDL_NETHOOD,
+	CSIDL_FONTS,
+	CSIDL_TEMPLATES,
+	CSIDL_COMMON_STARTMENU,
+	CSIDL_COMMON_PROGRAMS,
+	CSIDL_COMMON_STARTUP,
+	CSIDL_COMMON_DESKTOPDIRECTORY,
+	CSIDL_APPDATA,
+	CSIDL_PRINTHOOD,
+	CSIDL_LOCAL_APPDATA,
+	CSIDL_ALTSTARTUP,
+	CSIDL_COMMON_ALTSTARTUP,
+	CSIDL_COMMON_FAVORITES,
+	CSIDL_INTERNET_CACHE,
+	CSIDL_COOKIES,
+	CSIDL_HISTORY,
+	CSIDL_COMMON_APPDATA,
+	CSIDL_WINDOWS,
+	CSIDL_SYSTEM,
+	CSIDL_PROGRAM_FILES,
+	CSIDL_MYPICTURES,
+	CSIDL_PROFILE,
+	CSIDL_SYSTEMX86,
+	CSIDL_PROGRAM_FILESX86,
+	CSIDL_PROGRAM_FILES_COMMON,
+	CSIDL_PROGRAM_FILES_COMMONX86,
+	CSIDL_COMMON_TEMPLATES,
+	CSIDL_COMMON_DOCUMENTS,
+	CSIDL_COMMON_ADMINTOOLS,
+	CSIDL_ADMINTOOLS,
+	CSIDL_CONNECTIONS, // =49
+	CSIDL_COMMON_MUSIC = 53,
+	CSIDL_COMMON_PICTURES,
+	CSIDL_COMMON_VIDEO,
+	CSIDL_RESOURCES,
+	CSIDL_RESOURCES_LOCALIZED,
+	CSIDL_COMMON_OEM_LINKS,
+	CSIDL_CDBURN_AREA, // = 59
+	CSIDL_COMPUTERSNEARME = 61,
+	CSIDL_FLAG_DONT_VERIFY = 0x4000,
+	CSIDL_FLAG_CREATE = 0x8000,
+	CSIDL_FLAG_MASK = 0xFF00
+}
+
+const TCHAR[]
+	CFSTR_SHELLIDLIST       = "Shell IDList Array",
+	CFSTR_SHELLIDLISTOFFSET = "Shell Object Offsets",
+	CFSTR_NETRESOURCES      = "Net Resource",
+	CFSTR_FILECONTENTS      = "FileContents",
+	CFSTR_FILENAMEA         = "FileName",
+	CFSTR_FILENAMEMAPA      = "FileNameMap",
+	CFSTR_FILEDESCRIPTORA   = "FileGroupDescriptor",
+	CFSTR_INETURLA          = "UniformResourceLocator",
+	CFSTR_SHELLURL          = CFSTR_INETURLA,
+	CFSTR_FILENAMEW         = "FileNameW",
+	CFSTR_FILENAMEMAPW      = "FileNameMapW",
+	CFSTR_FILEDESCRIPTORW   = "FileGroupDescriptorW",
+	CFSTR_INETURLW          = "UniformResourceLocatorW";
+
+version(Unicode) {
+	alias CFSTR_FILENAMEW CFSTR_FILENAME;
+	alias CFSTR_FILENAMEMAPW CFSTR_FILENAMEMAP;
+	alias CFSTR_FILEDESCRIPTORW CFSTR_FILEDESCRIPTOR;
+	alias CFSTR_INETURLW CFSTR_INETURL;
+} else {
+	alias CFSTR_FILENAMEA CFSTR_FILENAME;
+	alias CFSTR_FILENAMEMAPA CFSTR_FILENAMEMAP;
+	alias CFSTR_FILEDESCRIPTORA CFSTR_FILEDESCRIPTOR;
+	alias CFSTR_INETURLA CFSTR_INETURL;
+}
+const TCHAR[]
+	CFSTR_PRINTERGROUP        = "PrinterFriendlyName",
+	CFSTR_INDRAGLOOP          = "InShellDragLoop",
+	CFSTR_PASTESUCCEEDED      = "Paste Succeeded",
+	CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect",
+	CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect";
+
+const CMF_NORMAL=0;
+const CMF_DEFAULTONLY=1;
+const CMF_VERBSONLY=2;
+const CMF_EXPLORE=4;
+const CMF_NOVERBS=8;
+const CMF_CANRENAME=16;
+const CMF_NODEFAULT=32;
+const CMF_INCLUDESTATIC=64;
+const CMF_RESERVED=0xffff0000;
+const GCS_VERBA=0;
+const GCS_HELPTEXTA=1;
+const GCS_VALIDATEA=2;
+const GCS_VERBW=4;
+const GCS_HELPTEXTW=5;
+const GCS_VALIDATEW=6;
+const GCS_UNICODE=4;
+
+version(Unicode) {
+	alias GCS_VERBW GCS_VERB;
+	alias GCS_HELPTEXTW GCS_HELPTEXT;
+	alias GCS_VALIDATEW GCS_VALIDATE;
+} else {
+	alias GCS_VERBA GCS_VERB;
+	alias GCS_HELPTEXTA GCS_HELPTEXT;
+	alias GCS_VALIDATEA GCS_VALIDATE;
+}
+
+const TCHAR[]
+	CMDSTR_NEWFOLDER   = "NewFolder",
+	CMDSTR_VIEWLIST    = "ViewList",
+	CMDSTR_VIEWDETAILS = "ViewDetails";
+
+const CMIC_MASK_HOTKEY     = SEE_MASK_HOTKEY;
+const CMIC_MASK_ICON       = SEE_MASK_ICON;
+const CMIC_MASK_FLAG_NO_UI = SEE_MASK_FLAG_NO_UI;
+const CMIC_MASK_MODAL      = 0x80000000;
+// TODO: This isn't defined anywhere in MinGW.
+//const CMIC_VALID_SEE_FLAGS=SEE_VALID_CMIC_FLAGS;
+
+const GIL_OPENICON = 1;
+const GIL_FORSHELL = 2;
+const GIL_SIMULATEDOC = 1;
+const GIL_PERINSTANCE = 2;
+const GIL_PERCLASS = 4;
+const GIL_NOTFILENAME = 8;
+const GIL_DONTCACHE = 16;
+
+const FVSIF_RECT = 1;
+const FVSIF_PINNED = 2;
+const FVSIF_NEWFAILED = 0x8000000;
+const FVSIF_NEWFILE = 0x80000000;
+const FVSIF_CANVIEWIT = 0x40000000;
+
+const CDBOSC_SETFOCUS = 0;
+const CDBOSC_KILLFOCUS = 1;
+const CDBOSC_SELCHANGE = 2;
+const CDBOSC_RENAME = 3;
+
+const FCIDM_SHVIEWFIRST = 0;
+const FCIDM_SHVIEWLAST = 0x7fff;
+const FCIDM_BROWSERFIRST = 0xa000;
+const FCIDM_BROWSERLAST = 0xbf00;
+const FCIDM_GLOBALFIRST = 0x8000;
+const FCIDM_GLOBALLAST = 0x9fff;
+const FCIDM_MENU_FILE = FCIDM_GLOBALFIRST;
+const FCIDM_MENU_EDIT = FCIDM_GLOBALFIRST+0x0040;
+const FCIDM_MENU_VIEW = FCIDM_GLOBALFIRST+0x0080;
+const FCIDM_MENU_VIEW_SEP_OPTIONS = FCIDM_GLOBALFIRST+0x0081;
+const FCIDM_MENU_TOOLS = FCIDM_GLOBALFIRST+0x00c0;
+const FCIDM_MENU_TOOLS_SEP_GOTO = FCIDM_GLOBALFIRST+0x00c1;
+const FCIDM_MENU_HELP = FCIDM_GLOBALFIRST+0x0100;
+const FCIDM_MENU_FIND = FCIDM_GLOBALFIRST+0x0140;
+const FCIDM_MENU_EXPLORE = FCIDM_GLOBALFIRST+0x0150;
+const FCIDM_MENU_FAVORITES = FCIDM_GLOBALFIRST+0x0170;
+const FCIDM_TOOLBAR = FCIDM_BROWSERFIRST;
+const FCIDM_STATUS = FCIDM_BROWSERFIRST+1;
+
+const SBSP_DEFBROWSER = 0;
+const SBSP_SAMEBROWSER = 1;
+const SBSP_NEWBROWSER = 2;
+const SBSP_DEFMODE = 0;
+const SBSP_OPENMODE = 16;
+const SBSP_EXPLOREMODE = 32;
+const SBSP_ABSOLUTE = 0;
+const SBSP_RELATIVE = 0x1000;
+const SBSP_PARENT = 0x2000;
+const SBSP_INITIATEDBYHLINKFRAME = 0x80000000;
+const SBSP_REDIRECT = 0x40000000;
+
+enum {
+	FCW_STATUS=1,
+	FCW_TOOLBAR,
+	FCW_TREE
+}
+
+const FCT_MERGE=1;
+const FCT_CONFIGABLE=2;
+const FCT_ADDTOEND=4;
+
+const SVSI_DESELECT=0;
+const SVSI_SELECT=1;
+const SVSI_EDIT=3;
+const SVSI_DESELECTOTHERS=4;
+const SVSI_ENSUREVISIBLE=8;
+const SVSI_FOCUSED=16;
+
+const SVGIO_BACKGROUND=0;
+const SVGIO_SELECTION=1;
+const SVGIO_ALLVIEW=2;
+
+const UINT SV2GV_CURRENTVIEW=-1;
+const UINT SV2GV_DEFAULTVIEW=-2;
+
+alias ULONG SFGAOF;
+alias DWORD SHGDNF;
+
+struct CIDA {
+	UINT    cidl;
+	UINT[1] aoffset;
+}
+alias CIDA* LPIDA;
+
+struct SHITEMID {
+	USHORT  cb;
+	BYTE[1] abID;
+}
+alias SHITEMID* LPSHITEMID, LPCSHITEMID;
+
+struct ITEMIDLIST {
+	SHITEMID mkid;
+}
+alias ITEMIDLIST* LPITEMIDLIST, LPCITEMIDLIST;
+
+alias int function(HWND,UINT,LPARAM,LPARAM) BFFCALLBACK;
+
+struct BROWSEINFOA {
+	HWND          hwndOwner;
+	LPCITEMIDLIST pidlRoot;
+	LPSTR         pszDisplayName;
+	LPCSTR        lpszTitle;
+	UINT          ulFlags;
+	BFFCALLBACK   lpfn;
+	LPARAM        lParam;
+	int           iImage;
+}
+alias BROWSEINFOA* PBROWSEINFOA, LPBROWSEINFOA;
+
+struct BROWSEINFOW {
+	HWND          hwndOwner;
+	LPCITEMIDLIST pidlRoot;
+	LPWSTR        pszDisplayName;
+	LPCWSTR       lpszTitle;
+	UINT          ulFlags;
+	BFFCALLBACK   lpfn;
+	LPARAM        lParam;
+	int           iImage;
+}
+alias BROWSEINFOW* PBROWSEINFOW, LPBROWSEINFOW;
+
+struct CMINVOKECOMMANDINFO {
+	DWORD cbSize = this.sizeof;
+	DWORD fMask;
+	HWND hwnd;
+	LPCSTR lpVerb;
+	LPCSTR lpParameters;
+	LPCSTR lpDirectory;
+	int nShow;
+	DWORD dwHotKey;
+	HANDLE hIcon;
+}
+alias CMINVOKECOMMANDINFO* LPCMINVOKECOMMANDINFO;
+
+struct DROPFILES {
+	DWORD pFiles;
+	POINT pt;
+	BOOL fNC;
+	BOOL fWide;
+}
+alias DROPFILES* LPDROPFILES;
+
+enum SHGNO {
+	SHGDN_NORMAL             = 0,
+	SHGDN_INFOLDER,
+	SHGDN_FOREDITING         = 0x1000,
+	SHGDN_INCLUDE_NONFILESYS = 0x2000,
+	SHGDN_FORADDRESSBAR      = 0x4000,
+	SHGDN_FORPARSING         = 0x8000
+}
+
+enum SHCONTF {
+	SHCONTF_FOLDERS            = 32,
+	SHCONTF_NONFOLDERS         = 64,
+	SHCONTF_INCLUDEHIDDEN      = 128,
+	SHCONTF_INIT_ON_FIRST_NEXT = 256,
+	SHCONTF_NETPRINTERSRCH     = 512,
+	SHCONTF_SHAREABLE          = 1024,
+	SHCONTF_STORAGE            = 2048
+}
+
+struct STRRET {
+	UINT uType;
+	union {
+		LPWSTR pOleStr;
+		UINT uOffset;
+		char cStr[MAX_PATH];
+	}
+}
+alias STRRET* LPSTRRET;
+
+enum FD_FLAGS {
+	FD_CLSID      = 1,
+	FD_SIZEPOINT  = 2,
+	FD_ATTRIBUTES = 4,
+	FD_CREATETIME = 8,
+	FD_ACCESSTIME = 16,
+	FD_WRITESTIME = 32,
+	FD_FILESIZE   = 64,
+	FD_LINKUI     = 0x8000
+}
+
+struct FILEDESCRIPTORA {
+	DWORD dwFlags;
+	CLSID clsid;
+	SIZEL sizel;
+	POINTL pointl;
+	DWORD dwFileAttributes;
+	FILETIME ftCreationTime;
+	FILETIME ftLastAccessTime;
+	FILETIME ftLastWriteTime;
+	DWORD nFileSizeHigh;
+	DWORD nFileSizeLow;
+	CHAR cFileName[MAX_PATH];
+}
+alias FILEDESCRIPTORA* LPFILEDESCRIPTORA;
+
+struct FILEDESCRIPTORW {
+	DWORD dwFlags;
+	CLSID clsid;
+	SIZEL sizel;
+	POINTL pointl;
+	DWORD dwFileAttributes;
+	FILETIME ftCreationTime;
+	FILETIME ftLastAccessTime;
+	FILETIME ftLastWriteTime;
+	DWORD nFileSizeHigh;
+	DWORD nFileSizeLow;
+	WCHAR cFileName[MAX_PATH];
+}
+alias FILEDESCRIPTORW* LPFILEDESCRIPTORW;
+
+struct FILEGROUPDESCRIPTORA {
+	UINT cItems;
+	FILEDESCRIPTORA fgd[1];
+}
+alias FILEGROUPDESCRIPTORA* LPFILEGROUPDESCRIPTORA;
+
+struct FILEGROUPDESCRIPTORW {
+	UINT cItems;
+	FILEDESCRIPTORW fgd[1];
+}
+alias FILEGROUPDESCRIPTORW* LPFILEGROUPDESCRIPTORW;
+
+enum SLR_FLAGS {
+	SLR_NO_UI      = 1,
+	SLR_ANY_MATCH  = 2,
+	SLR_UPDATE     = 4,
+	SLR_NOUPDATE   = 8,
+	SLR_NOSEARCH   = 16,
+	SLR_NOTRACK    = 32,
+	SLR_NOLINKINFO = 64,
+	SLR_INVOKE_MSI = 128
+}
+
+enum SLGP_FLAGS {
+	SLGP_SHORTPATH=1,
+	SLGP_UNCPRIORITY=2,
+	SLGP_RAWPATH=4
+}
+
+alias PBYTE LPVIEWSETTINGS;
+
+enum FOLDERFLAGS {
+	FWF_AUTOARRANGE         = 1,
+	FWF_ABBREVIATEDNAMES    = 2,
+	FWF_SNAPTOGRID          = 4,
+	FWF_OWNERDATA           = 8,
+	FWF_BESTFITWINDOW       = 16,
+	FWF_DESKTOP             = 32,
+	FWF_SINGLESEL           = 64,
+	FWF_NOSUBFOLDERS        = 128,
+	FWF_TRANSPARENT         = 256,
+	FWF_NOCLIENTEDGE        = 512,
+	FWF_NOSCROLL            = 0x400,
+	FWF_ALIGNLEFT           = 0x800,
+	FWF_SINGLECLICKACTIVATE = 0x8000
+}
+
+enum FOLDERVIEWMODE {
+	FVM_ICON      = 1,
+	FVM_SMALLICON,
+	FVM_LIST,
+	FVM_DETAILS
+}
+
+struct FOLDERSETTINGS {
+	UINT ViewMode;
+	UINT fFlags;
+}
+alias FOLDERSETTINGS* LPFOLDERSETTINGS, LPCFOLDERSETTINGS;
+
+struct FVSHOWINFO {
+	DWORD cbSize = this.sizeof;
+	HWND hwndOwner;
+	int iShow;
+	DWORD dwFlags;
+	RECT rect;
+	LPUNKNOWN punkRel;
+	OLECHAR strNewFile[MAX_PATH];
+}
+alias FVSHOWINFO* LPFVSHOWINFO;
+
+struct NRESARRAY {
+	UINT cItems;
+	NETRESOURCE nr[1];
+}
+alias NRESARRAY* LPNRESARRAY;
+
+enum {
+	SBSC_HIDE,
+	SBSC_SHOW,
+	SBSC_TOGGLE,
+	SBSC_QUERY
+}
+
+enum {
+	SBCMDID_ENABLESHOWTREE,
+	SBCMDID_SHOWCONTROL,
+	SBCMDID_CANCELNAVIGATION,
+	SBCMDID_MAYSAVECHANGES,
+	SBCMDID_SETHLINKFRAME,
+	SBCMDID_ENABLESTOP,
+	SBCMDID_OPTIONS
+}
+enum SVUIA_STATUS {
+	SVUIA_DEACTIVATE,
+	SVUIA_ACTIVATE_NOFOCUS,
+	SVUIA_ACTIVATE_FOCUS,
+	SVUIA_INPLACEACTIVATE
+}
+
+static if (_WIN32_IE >= 0x0500) {
+
+	struct EXTRASEARCH
+	 {
+		GUID guidSearch;
+		WCHAR wszFriendlyName[80];
+		WCHAR wszUrl[2084];
+	}
+	alias EXTRASEARCH* LPEXTRASEARCH;
+
+	alias DWORD SHCOLSTATEF;
+
+	struct SHCOLUMNID {
+		GUID fmtid;
+		DWORD pid;
+	}
+	alias SHCOLUMNID* LPSHCOLUMNID, LPCSHCOLUMNID;
+
+	struct SHELLDETAILS {
+		int fmt;
+		int cxChar;
+		STRRET str;
+	}
+	alias SHELLDETAILS* LPSHELLDETAILS;
+
+	struct PERSIST_FOLDER_TARGET_INFO
+	 {
+		LPITEMIDLIST pidlTargetFolder;
+		WCHAR szTargetParsingName[MAX_PATH];
+		WCHAR szNetworkProvider[MAX_PATH];
+		DWORD dwAttributes;
+		int csidl;
+	}
+
+	enum SHGFP_TYPE {
+		SHGFP_TYPE_CURRENT = 0,
+		SHGFP_TYPE_DEFAULT = 1,
+	}
+
+}
+
+interface IEnumIDList: public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Next(ULONG,LPITEMIDLIST*,ULONG*);
+	HRESULT Skip(ULONG);
+	HRESULT Reset();
+	HRESULT Clone(IEnumIDList**);
+}
+alias IEnumIDList *LPENUMIDLIST;
+
+interface IObjMgr : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Append(IUnknown*);
+	HRESULT Remove(IUnknown*);
+}
+
+interface IContextMenu : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT);
+	HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO);
+	HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT);
+}
+alias IContextMenu* LPCONTEXTMENU;
+
+interface IContextMenu2 : public IContextMenu
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT);
+	HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO);
+	HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT);
+	HRESULT HandleMenuMsg(UINT,WPARAM,LPARAM);
+};
+alias IContextMenu2* LPCONTEXTMENU2;
+
+static if (_WIN32_IE >= 0x0500) {
+
+	align(8):
+	struct SHCOLUMNINIT {
+		ULONG dwFlags;
+		ULONG dwReserved;
+		WCHAR wszFolder[MAX_PATH];
+	}
+	alias SHCOLUMNINIT* LPSHCOLUMNINIT, LPCSHCOLUMNINIT;
+
+	struct SHCOLUMNDATA {
+		ULONG dwFlags;
+		DWORD dwFileAttributes;
+		ULONG dwReserved;
+		WCHAR *pwszExt;
+		WCHAR wszFile[MAX_PATH];
+	}
+	alias SHCOLUMNDATA* LPSHCOLUMNDATA, LPCSHCOLUMNDATA;
+	align:
+
+	const MAX_COLUMN_NAME_LEN = 80;
+	const MAX_COLUMN_DESC_LEN = 128;
+
+	align(1):
+	struct SHCOLUMNINFO {
+		SHCOLUMNID scid;
+		VARTYPE vt;
+		DWORD fmt;
+		UINT cChars;
+		DWORD csFlags;
+		WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
+		WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
+	}
+	alias SHCOLUMNINFO* LPSHCOLUMNINFO, LPCSHCOLUMNINFO;
+	align:
+
+	enum SHCOLSTATE {
+		SHCOLSTATE_TYPE_STR      = 0x00000001,
+		SHCOLSTATE_TYPE_INT      = 0x00000002,
+		SHCOLSTATE_TYPE_DATE     = 0x00000003,
+		SHCOLSTATE_TYPEMASK      = 0x0000000f,
+		SHCOLSTATE_ONBYDEFAULT   = 0x00000010,
+		SHCOLSTATE_SLOW          = 0x00000020,
+		SHCOLSTATE_EXTENDED      = 0x00000040,
+		SHCOLSTATE_SECONDARYUI   = 0x00000080,
+		SHCOLSTATE_HIDDEN        = 0x00000100,
+		SHCOLSTATE_PREFER_VARCMP = 0x00000200
+	}
+
+	interface IColumnProvider : public IUnknown
+	 {
+		HRESULT QueryInterface(REFIID,PVOID*);
+		ULONG AddRef();
+		ULONG Release();
+		HRESULT Initialize(LPCSHCOLUMNINIT);
+		HRESULT GetColumnInfo(DWORD,SHCOLUMNINFO*);
+		HRESULT GetItemData(LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*);
+	}
+}/* _WIN32_IE >= 0x0500 */
+
+interface IQueryInfo : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetInfoTip(DWORD,WCHAR**);
+	HRESULT GetInfoFlags(DWORD*);
+}
+
+interface IShellExtInit : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Initialize(LPCITEMIDLIST,LPDATAOBJECT,HKEY);
+}
+alias IShellExtInit *LPSHELLEXTINIT;
+
+interface IShellPropSheetExt : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT AddPages(LPFNADDPROPSHEETPAGE,LPARAM);
+	HRESULT ReplacePage(UINT,LPFNADDPROPSHEETPAGE,LPARAM);
+}
+alias IShellPropSheetExt *LPSHELLPROPSHEETEXT;
+
+interface IExtractIconA : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetIconLocation(UINT,LPSTR,UINT,int*,PUINT);
+	HRESULT Extract(LPCSTR,UINT,HICON*,HICON*,UINT);
+};
+alias IExtractIconA *LPEXTRACTICONA;
+
+interface IExtractIconW : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetIconLocation(UINT,LPWSTR,UINT,int*,PUINT);
+	HRESULT Extract(LPCWSTR,UINT,HICON*,HICON*,UINT);
+}
+alias IExtractIconW *LPEXTRACTICONW;
+
+version(Unicode) {
+	alias IExtractIconW IExtractIcon;
+	alias LPEXTRACTICONW LPEXTRACTICON;
+} else {
+	alias IExtractIconA IExtractIcon;
+	alias LPEXTRACTICONA LPEXTRACTICON;
+}
+
+interface IShellLinkA : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetPath(LPSTR,int,WIN32_FIND_DATAA*,DWORD);
+	HRESULT GetIDList(LPITEMIDLIST*);
+	HRESULT SetIDList(LPCITEMIDLIST);
+	HRESULT GetDescription(LPSTR,int);
+	HRESULT SetDescription(LPCSTR);
+	HRESULT GetWorkingDirectory(LPSTR,int);
+	HRESULT SetWorkingDirectory(LPCSTR);
+	HRESULT GetArguments(LPSTR,int);
+	HRESULT SetArguments(LPCSTR);
+	HRESULT GetHotkey(PWORD);
+	HRESULT SetHotkey(WORD);
+	HRESULT GetShowCmd(int*);
+	HRESULT SetShowCmd(int);
+	HRESULT GetIconLocation(LPSTR,int,int*);
+	HRESULT SetIconLocation(LPCSTR,int);
+	HRESULT SetRelativePath(LPCSTR ,DWORD);
+	HRESULT Resolve(HWND,DWORD);
+	HRESULT SetPath(LPCSTR);
+}
+
+interface IShellLinkW : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetPath(LPWSTR,int,WIN32_FIND_DATAW*,DWORD);
+	HRESULT GetIDList(LPITEMIDLIST*);
+	HRESULT SetIDList(LPCITEMIDLIST);
+	HRESULT GetDescription(LPWSTR,int);
+	HRESULT SetDescription(LPCWSTR);
+	HRESULT GetWorkingDirectory(LPWSTR,int);
+	HRESULT SetWorkingDirectory(LPCWSTR);
+	HRESULT GetArguments(LPWSTR,int);
+	HRESULT SetArguments(LPCWSTR);
+	HRESULT GetHotkey(PWORD);
+	HRESULT SetHotkey(WORD);
+	HRESULT GetShowCmd(int*);
+	HRESULT SetShowCmd(int);
+	HRESULT GetIconLocation(LPWSTR,int,int*);
+	HRESULT SetIconLocation(LPCWSTR,int);
+	HRESULT SetRelativePath(LPCWSTR ,DWORD);
+	HRESULT Resolve(HWND,DWORD);
+	HRESULT SetPath(LPCWSTR);
+}
+
+
+interface IShellFolder : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
+	HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
+	HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
+	HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
+	HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST);
+	HRESULT CreateViewObject(HWND,REFIID,PVOID*);
+	HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG);
+	HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*);
+	HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET);
+	HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*);
+}
+alias IShellFolder *LPSHELLFOLDER;
+
+static if (_WIN32_IE >= 0x0500) {
+
+interface IEnumExtraSearch: public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Next(ULONG,LPEXTRASEARCH*,ULONG*);
+	HRESULT Skip(ULONG);
+	HRESULT Reset();
+	HRESULT Clone(IEnumExtraSearch**);
+}
+alias IEnumExtraSearch *LPENUMEXTRASEARCH;
+
+interface IShellFolder2 : public IShellFolder
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
+	HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
+	HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
+	HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*);
+	HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST);
+	HRESULT CreateViewObject(HWND,REFIID,PVOID*);
+	HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG);
+	HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*);
+	HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET);
+	HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*);
+	HRESULT GetDefaultSearchGUID(GUID*);
+	HRESULT EnumSearches(IEnumExtraSearch**);
+	HRESULT GetDefaultColumn(DWORD,ULONG*,ULONG*);
+	HRESULT GetDefaultColumnState(UINT,SHCOLSTATEF*);
+	HRESULT GetDetailsEx(LPCITEMIDLIST, SHCOLUMNID*,VARIANT*);
+	HRESULT GetDetailsOf(LPCITEMIDLIST,UINT,SHELLDETAILS*);
+	HRESULT MapColumnToSCID(UINT,SHCOLUMNID*);
+}
+alias IShellFolder2 *LPSHELLFOLDER2;
+
+} /* _WIN32_IE >= 0x0500 */
+
+interface ICopyHook : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	UINT CopyCallback(HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD);
+}
+alias ICopyHook *LPCOPYHOOK;
+
+interface IFileViewerSite : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT SetPinnedWindow(HWND);
+	HRESULT GetPinnedWindow(HWND*);
+}
+alias IFileViewerSite *LPFILEVIEWERSITE;
+
+interface IFileViewer : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT ShowInitialize(LPFILEVIEWERSITE);
+	HRESULT Show(LPFVSHOWINFO);
+	HRESULT PrintTo(LPSTR,BOOL);
+}
+alias IFileViewer *LPFILEVIEWER;
+
+interface IFileSystemBindData : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT SetFindData( WIN32_FIND_DATAW*);
+	HRESULT GetFindData(WIN32_FIND_DATAW*);
+}
+
+interface IPersistFolder : public IPersist
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetClassID(CLSID*);
+	HRESULT Initialize(LPCITEMIDLIST);
+}
+alias IPersistFolder *LPPERSISTFOLDER;
+
+static if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500) {
+
+interface IPersistFolder2 : public IPersistFolder
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetClassID(CLSID*);
+	HRESULT Initialize(LPCITEMIDLIST);
+	HRESULT GetCurFolder(LPITEMIDLIST*);
+}
+alias IPersistFolder2 *LPPERSISTFOLDER2;
+
+}/* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500 */
+
+static if (_WIN32_IE >= 0x0500) {
+
+interface IPersistFolder3 : public IPersistFolder2
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetClassID(CLSID*);
+	HRESULT Initialize(LPCITEMIDLIST);
+	HRESULT GetCurFolder(LPITEMIDLIST*);
+	HRESULT InitializeEx(IBindCtx*,LPCITEMIDLIST, PERSIST_FOLDER_TARGET_INFO*);
+	HRESULT GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO*);
+}
+alias IPersistFolder3 *LPPERSISTFOLDER3;
+
+} /* _WIN32_IE >= 0x0500 */
+
+alias IShellBrowser* LPSHELLBROWSER;
+alias IShellView* LPSHELLVIEW;
+
+interface IShellBrowser : public IOleWindow
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetWindow(HWND*);
+	HRESULT ContextSensitiveHelp(BOOL);
+	HRESULT InsertMenusSB(HMENU,LPOLEMENUGROUPWIDTHS);
+	HRESULT SetMenuSB(HMENU,HOLEMENU,HWND);
+	HRESULT RemoveMenusSB(HMENU);
+	HRESULT SetStatusTextSB(LPCOLESTR);
+	HRESULT EnableModelessSB(BOOL);
+	HRESULT TranslateAcceleratorSB(LPMSG,WORD);
+	HRESULT BrowseObject(LPCITEMIDLIST,UINT);
+	HRESULT GetViewStateStream(DWORD,LPSTREAM*);
+	HRESULT GetControlWindow(UINT,HWND*);
+	HRESULT SendControlMsg(UINT,UINT,WPARAM,LPARAM,LRESULT*);
+	HRESULT QueryActiveShellView(LPSHELLVIEW*);
+	HRESULT OnViewWindowActive(LPSHELLVIEW);
+	HRESULT SetToolbarItems(LPTBBUTTON,UINT,UINT);
+}
+
+interface IShellView : public IOleWindow
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetWindow(HWND*);
+	HRESULT ContextSensitiveHelp(BOOL);
+	HRESULT TranslateAccelerator(LPMSG);
+//[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT
+//[No] 	STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+//[Yes] #else
+	HRESULT EnableModeless(BOOL);
+//[Yes] #endif
+	HRESULT UIActivate(UINT);
+	HRESULT Refresh();
+	HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*);
+	HRESULT DestroyViewWindow();
+	HRESULT GetCurrentInfo(LPFOLDERSETTINGS);
+	HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM);
+	HRESULT SaveViewState();
+	HRESULT SelectItem(LPCITEMIDLIST,UINT);
+	HRESULT GetItemObject(UINT,REFIID,PVOID*);
+}
+
+interface ICommDlgBrowser : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT OnDefaultCommand(IShellView*);
+	HRESULT OnStateChange(IShellView*,ULONG);
+	HRESULT IncludeObject(IShellView*,LPCITEMIDLIST);
+}
+alias ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+alias GUID SHELLVIEWID;
+
+struct SV2CVW2_PARAMS {
+	DWORD cbSize = this.sizeof;
+	IShellView *psvPrev;
+	FOLDERSETTINGS  *pfs;
+	IShellBrowser *psbOwner;
+	RECT *prcView;
+	SHELLVIEWID  *pvid;
+	HWND hwndView;
+}
+alias SV2CVW2_PARAMS* LPSV2CVW2_PARAMS;
+
+interface IShellView2 : public IShellView
+{
+
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetWindow(HWND*);
+	HRESULT ContextSensitiveHelp(BOOL);
+	HRESULT TranslateAccelerator(LPMSG);
+//[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT
+//[No] 	STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+//[Yes] #else
+	HRESULT EnableModeless(BOOL);
+//[Yes] #endif
+	HRESULT UIActivate(UINT);
+	HRESULT Refresh();
+	HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*);
+	HRESULT DestroyViewWindow();
+	HRESULT GetCurrentInfo(LPFOLDERSETTINGS);
+	HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM);
+	HRESULT SaveViewState();
+	HRESULT SelectItem(LPCITEMIDLIST,UINT);
+	HRESULT GetItemObject(UINT,REFIID,PVOID*);
+	HRESULT GetView(SHELLVIEWID*,ULONG);
+	HRESULT CreateViewWindow2(LPSV2CVW2_PARAMS);
+}
+
+interface IShellExecuteHookA : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Execute(LPSHELLEXECUTEINFOA);
+}
+
+interface IShellExecuteHookW : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT Execute(LPSHELLEXECUTEINFOW);
+}
+
+interface IShellIcon : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT GetIconOf(LPCITEMIDLIST,UINT,PINT);
+}
+alias IShellIcon* LPSHELLICON;
+
+struct SHELLFLAGSTATE {
+// TODO
+ short bitflags_; // for D.
+ /*
+	BOOL fShowAllObjects : 1;
+	BOOL fShowExtensions : 1;
+	BOOL fNoConfirmRecycle : 1;
+	BOOL fShowSysFiles : 1;
+	BOOL fShowCompColor : 1;
+	BOOL fDoubleClickInWebView : 1;
+	BOOL fDesktopHTML : 1;
+	BOOL fWin95Classic : 1;
+	BOOL fDontPrettyPath : 1;
+	BOOL fShowAttribCol : 1;
+	BOOL fMapNetDrvBtn : 1;
+	BOOL fShowInfoTip : 1;
+	BOOL fHideIcons : 1;
+	UINT fRestFlags : 3;
+*/
+}
+alias SHELLFLAGSTATE* LPSHELLFLAGSTATE;
+
+const SSF_SHOWALLOBJECTS = 0x1;
+const SSF_SHOWEXTENSIONS = 0x2;
+const SSF_SHOWCOMPCOLOR = 0x8;
+const SSF_SHOWSYSFILES = 0x20;
+const SSF_DOUBLECLICKINWEBVIEW = 0x80;
+const SSF_SHOWATTRIBCOL = 0x100;
+const SSF_DESKTOPHTML = 0x200;
+const SSF_WIN95CLASSIC = 0x400;
+const SSF_DONTPRETTYPATH = 0x800;
+const SSF_MAPNETDRVBUTTON = 0x1000;
+const SSF_SHOWINFOTIP = 0x2000;
+const SSF_HIDEICONS = 0x4000;
+const SSF_NOCONFIRMRECYCLE = 0x8000;
+
+interface IShellIconOverlayIdentifier : public IUnknown
+{
+	HRESULT QueryInterface(REFIID,PVOID*);
+	ULONG AddRef();
+	ULONG Release();
+	HRESULT IsMemberOf(LPCWSTR,DWORD);
+	HRESULT GetOverlayInfo(LPWSTR,int,int*,DWORD*);
+	HRESULT GetPriority(int*);
+}
+
+const ISIOI_ICONFILE  = 0x00000001;
+const ISIOI_ICONINDEX = 0x00000002;
+
+static if (_WIN32_WINNT >= 0x0500) {/* W2K */
+	struct SHELLSTATE {
+	//TODO:
+	/*
+		BOOL fShowAllObjects : 1;
+		BOOL fShowExtensions : 1;
+		BOOL fNoConfirmRecycle : 1;
+		BOOL fShowSysFiles : 1;
+		BOOL fShowCompColor : 1;
+		BOOL fDoubleClickInWebView : 1;
+		BOOL fDesktopHTML : 1;
+		BOOL fWin95Classic : 1;
+		BOOL fDontPrettyPath : 1;
+		BOOL fShowAttribCol : 1;
+		BOOL fMapNetDrvBtn : 1;
+		BOOL fShowInfoTip : 1;
+		BOOL fHideIcons : 1;
+		BOOL fWebView : 1;
+		BOOL fFilter : 1;
+		BOOL fShowSuperHidden : 1;
+		BOOL fNoNetCrawling : 1;
+		DWORD dwWin95Unused;
+		UINT uWin95Unused;
+		LONG lParamSort;
+		int iSortDirection;
+		UINT version;
+		UINT uNotUsed;
+		BOOL fSepProcess : 1;
+		BOOL fStartPanelOn : 1;
+		BOOL fShowStartPage : 1;
+		UINT fSpareFlags : 13;
+*/
+	}
+	alias SHELLSTATE* LPSHELLSTATE;
+}
+
+static if (_WIN32_IE >= 0x0500) {
+	align(8):
+	struct SHDRAGIMAGE {
+		SIZE sizeDragImage;
+		POINT ptOffset;
+		HBITMAP hbmpDragImage;
+		COLORREF crColorKey;
+	}
+	alias SHDRAGIMAGE* LPSHDRAGIMAGE;
+	align:
+
+	interface IDragSourceHelper : public IUnknown
+	 {
+		HRESULT QueryInterface(REFIID riid, void **ppv);
+		ULONG AddRef();
+		ULONG Release();
+		HRESULT InitializeFromBitmap(LPSHDRAGIMAGE pshdi, IDataObject* pDataObject);
+		HRESULT InitializeFromWindow(HWND hwnd, POINT* ppt, IDataObject* pDataObject);
+	}
+
+	interface IDropTargetHelper : public IUnknown
+	 {
+		HRESULT QueryInterface(REFIID riid, void** ppv);
+		ULONG AddRef();
+		ULONG Release();
+		HRESULT DragEnter(HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect);
+		HRESULT DragLeave();
+		HRESULT DragOver(POINT* ppt, DWORD dwEffect);
+		HRESULT Drop(IDataObject* pDataObject, POINT* ppt, DWORD dwEffect);
+		HRESULT Show(BOOL fShow);
+	}
+}
+
+extern (Windows):
+void SHAddToRecentDocs(UINT,PCVOID);
+LPITEMIDLIST SHBrowseForFolderA(PBROWSEINFOA);
+LPITEMIDLIST SHBrowseForFolderW(PBROWSEINFOW);
+void SHChangeNotify(LONG,UINT,PCVOID,PCVOID);
+HRESULT SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT SHGetDesktopFolder(LPSHELLFOLDER*);
+HRESULT SHGetInstanceExplorer(IUnknown **);
+HRESULT SHGetMalloc(LPMALLOC*);
+BOOL SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
+BOOL SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
+HRESULT SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*);
+HRESULT SHLoadInProc(REFCLSID);
+
+static if (_WIN32_IE >= 0x0400) {
+	BOOL SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL);
+	BOOL SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL);
+}
+
+/* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */
+HRESULT SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR);
+HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR);
+
+static if ((_WIN32_WINDOWS >= 0x0490) || (_WIN32_WINNT >= 0x0500)) {/* ME or W2K */
+	HRESULT SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*);
+}
+
+static if (_WIN32_WINNT >= 0x0500) {
+	INT SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES);
+	INT SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES);
+	HRESULT SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*);
+}
+
+static if (_WIN32_WINNT >= 0x0501) {/* XP */
+	HRESULT SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
+	HRESULT SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
+}
+
+void SHGetSettings(LPSHELLFLAGSTATE,DWORD);
+
+static if (_WIN32_WINNT >= 0x0500) {/* W2K */
+	void SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL);
+}
+
+static if (_WIN32_WINNT >= 0x0500) {/* W2K */
+	BOOL ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST);
+	BOOL ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL);
+	BOOL ILRemoveLastID(LPITEMIDLIST);
+	HRESULT ILLoadFromStream(IStream*, LPITEMIDLIST*);
+	HRESULT ILSaveToStream(IStream*, LPCITEMIDLIST);
+	LPITEMIDLIST ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL);
+	LPITEMIDLIST ILClone(LPCITEMIDLIST);
+	LPITEMIDLIST ILCloneFirst(LPCITEMIDLIST);
+	LPITEMIDLIST ILCombine(LPCITEMIDLIST, LPCITEMIDLIST);
+	LPITEMIDLIST ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST);
+	LPITEMIDLIST ILFindLastID(LPCITEMIDLIST);
+	LPITEMIDLIST ILGetNext(LPCITEMIDLIST);
+	UINT ILGetSize(LPCITEMIDLIST);
+	void ILFree(LPITEMIDLIST);
+
+	HRESULT SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**);
+}
+
+version(Unicode) {
+	alias IShellExecuteHookW IShellExecuteHook;
+	alias IShellLinkW IShellLink;
+	alias BROWSEINFOW BROWSEINFO;
+	alias SHBrowseForFolderW SHBrowseForFolder;
+	alias SHGetDataFromIDListW SHGetDataFromIDList;
+	alias SHGetPathFromIDListW SHGetPathFromIDList;
+	static if (_WIN32_IE >= 0x0400) {
+		alias SHGetSpecialFolderPathW SHGetSpecialFolderPath;
+	}
+	alias SHGetFolderPathW SHGetFolderPath;
+	static if (_WIN32_WINNT >= 0x0500) {
+		alias SHCreateDirectoryExW SHCreateDirectoryEx;
+	}
+	static if (_WIN32_WINNT >= 0x0501) {
+		alias SHGetFolderPathAndSubDirW SHGetFolderPathAndSubDir;
+	}
+	alias FILEDESCRIPTORW FILEDESCRIPTOR;
+	alias LPFILEDESCRIPTORW LPFILEDESCRIPTOR;
+	alias FILEGROUPDESCRIPTORW FILEGROUPDESCRIPTOR;
+	alias LPFILEGROUPDESCRIPTORW LPFILEGROUPDESCRIPTOR;
+
+} else {
+	alias IShellExecuteHookA IShellExecuteHook;
+	alias IShellLinkA IShellLink;
+	alias BROWSEINFOA BROWSEINFO;
+	alias SHBrowseForFolderA SHBrowseForFolder;
+	alias SHGetDataFromIDListA SHGetDataFromIDList;
+	alias SHGetPathFromIDListA SHGetPathFromIDList;
+	static if (_WIN32_IE >= 0x0400) {
+		alias SHGetSpecialFolderPathA SHGetSpecialFolderPath;
+	}
+	alias SHGetFolderPathA SHGetFolderPath;
+	static if (_WIN32_WINNT >= 0x0500) {
+		alias SHCreateDirectoryExA SHCreateDirectoryEx;
+	}
+	static if (_WIN32_WINNT >= 0x0501) {
+		alias SHGetFolderPathAndSubDirA SHGetFolderPathAndSubDir;
+	}
+	alias FILEDESCRIPTORA FILEDESCRIPTOR;
+	alias LPFILEDESCRIPTORA LPFILEDESCRIPTOR;
+	alias FILEGROUPDESCRIPTORA FILEGROUPDESCRIPTOR;
+	alias LPFILEGROUPDESCRIPTORA LPFILEGROUPDESCRIPTOR;
+}
+alias BROWSEINFO* PBROWSEINFO, LPBROWSEINFO;