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