Headers diff for shell32.dll between 6.00.3790.3959-Windows 5.0 and 6.0.6002.18005-Windows 6.0 versions



 shellapi.h (6.00.3790.3959-Windows 5.0)   shellapi.h (6.0.6002.18005-Windows 6.0) 
/*****************************************************************************\ /*****************************************************************************\
* * * *
* shellapi.h - SHELL.DLL functions, types, and definitions * * shellapi.h - SHELL.DLL functions, types, and definitions *
* * * *
* Copyright (c) Microsoft Corporation. All rights reserved. * * Copyright (c) Microsoft Corporation. All rights reserved. *
* * * *
\*****************************************************************************/ \*****************************************************************************/
#ifndef _INC_SHELLAPI #ifndef _INC_SHELLAPI
#define _INC_SHELLAPI #define _INC_SHELLAPI
#include <SpecStrings.h>
// //
// Define API decoration for direct importing of DLL references. // Define API decoration for direct importing of DLL references.
// //
#ifndef WINSHELLAPI #ifndef WINSHELLAPI
#if !defined(_SHELL32_) #if !defined(_SHELL32_)
#define WINSHELLAPI DECLSPEC_IMPORT #define WINSHELLAPI DECLSPEC_IMPORT
#else #else
#define WINSHELLAPI #define WINSHELLAPI
#endif #endif
#endif // WINSHELLAPI #endif // WINSHELLAPI
skipping to change at line 53 skipping to change at line 55
#if !defined(_WIN64) #if !defined(_WIN64)
#include <pshpack1.h> #include <pshpack1.h>
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */ extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */ #endif /* __cplusplus */
DECLARE_HANDLE(HDROP); DECLARE_HANDLE(HDROP);
SHSTDAPI_(UINT) DragQueryFileA(HDROP,UINT,LPSTR,UINT); SHSTDAPI_(UINT) DragQueryFileA(HDROP hDrop, UINT iFile, __out_ecount_opt(cch) LP
SHSTDAPI_(UINT) DragQueryFileW(HDROP,UINT,LPWSTR,UINT); STR lpszFile, UINT cch);
SHSTDAPI_(UINT) DragQueryFileW(HDROP hDrop, UINT iFile, __out_ecount_opt(cch) LP
WSTR lpszFile, UINT cch);
#ifdef UNICODE #ifdef UNICODE
#define DragQueryFile DragQueryFileW #define DragQueryFile DragQueryFileW
#else #else
#define DragQueryFile DragQueryFileA #define DragQueryFile DragQueryFileA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(BOOL) DragQueryPoint(HDROP,LPPOINT); SHSTDAPI_(BOOL) DragQueryPoint(HDROP hDrop,__out LPPOINT lppt);
SHSTDAPI_(void) DragFinish(HDROP); SHSTDAPI_(void) DragFinish(__in HDROP hDrop);
SHSTDAPI_(void) DragAcceptFiles(HWND,BOOL); SHSTDAPI_(void) DragAcceptFiles(__in HWND hWnd, __in BOOL fAccept);
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile,
LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); LPCSTR lpParameters,
SHSTDAPI_(HINSTANCE) ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFil LPCSTR lpDirectory, INT nShowCmd);
e, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); SHSTDAPI_(HINSTANCE) ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFil
e, LPCWSTR lpParameters,
LPCWSTR lpDirectory, INT nShowCmd);
#ifdef UNICODE #ifdef UNICODE
#define ShellExecute ShellExecuteW #define ShellExecute ShellExecuteW
#else #else
#define ShellExecute ShellExecuteA #define ShellExecute ShellExecuteA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(HINSTANCE) FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lp SHSTDAPI_(HINSTANCE) FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, __out_ec
Result); ount(MAX_PATH) LPSTR lpResult);
SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, __out_
lpResult); ecount(MAX_PATH) LPWSTR lpResult);
#ifdef UNICODE #ifdef UNICODE
#define FindExecutable FindExecutableW #define FindExecutable FindExecutableW
#else #else
#define FindExecutable FindExecutableA #define FindExecutable FindExecutableA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(LPWSTR *) CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs); SHSTDAPI_(LPWSTR *) CommandLineToArgvW(LPCWSTR lpCmdLine, __out int* pNumArgs);
SHSTDAPI_(INT) ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON h Icon); SHSTDAPI_(INT) ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON h Icon);
SHSTDAPI_(INT) ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon); SHSTDAPI_(INT) ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon);
#ifdef UNICODE #ifdef UNICODE
#define ShellAbout ShellAboutW #define ShellAbout ShellAboutW
#else #else
#define ShellAbout ShellAboutA #define ShellAbout ShellAboutA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(HICON) DuplicateIcon(HINSTANCE hInst, HICON hIcon); SHSTDAPI_(HICON) DuplicateIcon(HINSTANCE hInst, HICON hIcon);
SHSTDAPI_(HICON) ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWOR SHSTDAPI_(HICON) ExtractAssociatedIconA(HINSTANCE hInst, __inout_ecount(128) LP
D lpiIcon); STR lpIconPath, __inout LPWORD lpiIcon);
SHSTDAPI_(HICON) ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWO SHSTDAPI_(HICON) ExtractAssociatedIconW(HINSTANCE hInst, __inout_ecount(128) LP
RD lpiIcon); WSTR lpIconPath, __inout LPWORD lpiIcon);
#ifdef UNICODE #ifdef UNICODE
#define ExtractAssociatedIcon ExtractAssociatedIconW #define ExtractAssociatedIcon ExtractAssociatedIconW
#else #else
#define ExtractAssociatedIcon ExtractAssociatedIconA #define ExtractAssociatedIcon ExtractAssociatedIconA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_IE >= 0x0601) SHSTDAPI_(HICON) ExtractAssociatedIconExA(HINSTANCE hInst, __inout_ecount(128) L
SHSTDAPI_(HICON) ExtractAssociatedIconExA(HINSTANCE hInst,LPSTR lpIconPath,LPWOR PSTR lpIconPath, __inout LPWORD lpiIconIndex, __out LPWORD lpiIconId);
D lpiIconIndex, LPWORD lpiIconId); SHSTDAPI_(HICON) ExtractAssociatedIconExW(HINSTANCE hInst, __inout_ecount(128) L
SHSTDAPI_(HICON) ExtractAssociatedIconExW(HINSTANCE hInst,LPWSTR lpIconPath,LPWO PWSTR lpIconPath, __inout LPWORD lpiIconIndex, __out LPWORD lpiIconId);
RD lpiIconIndex, LPWORD lpiIconId);
#ifdef UNICODE #ifdef UNICODE
#define ExtractAssociatedIconEx ExtractAssociatedIconExW #define ExtractAssociatedIconEx ExtractAssociatedIconExW
#else #else
#define ExtractAssociatedIconEx ExtractAssociatedIconExA #define ExtractAssociatedIconEx ExtractAssociatedIconExA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_IE >= 0x0601)
SHSTDAPI_(HICON) ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIco nIndex); SHSTDAPI_(HICON) ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIco nIndex);
SHSTDAPI_(HICON) ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIc onIndex); SHSTDAPI_(HICON) ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIc onIndex);
#ifdef UNICODE #ifdef UNICODE
#define ExtractIcon ExtractIconW #define ExtractIcon ExtractIconW
#else #else
#define ExtractIcon ExtractIconA #define ExtractIcon ExtractIconA
#endif // !UNICODE #endif // !UNICODE
#if(WINVER >= 0x0400) #if(WINVER >= 0x0400)
typedef struct _DRAGINFOA { typedef struct _DRAGINFOA {
skipping to change at line 150 skipping to change at line 152
#define ABM_QUERYPOS 0x00000002 #define ABM_QUERYPOS 0x00000002
#define ABM_SETPOS 0x00000003 #define ABM_SETPOS 0x00000003
#define ABM_GETSTATE 0x00000004 #define ABM_GETSTATE 0x00000004
#define ABM_GETTASKBARPOS 0x00000005 #define ABM_GETTASKBARPOS 0x00000005
#define ABM_ACTIVATE 0x00000006 // lParam == TRUE/FALSE means activate/dea ctivate #define ABM_ACTIVATE 0x00000006 // lParam == TRUE/FALSE means activate/dea ctivate
#define ABM_GETAUTOHIDEBAR 0x00000007 #define ABM_GETAUTOHIDEBAR 0x00000007
#define ABM_SETAUTOHIDEBAR 0x00000008 // this can fail at any time. MUST check the result #define ABM_SETAUTOHIDEBAR 0x00000008 // this can fail at any time. MUST check the result
// lParam = TRUE/FALSE Set/Unset // lParam = TRUE/FALSE Set/Unset
// uEdge = what edge // uEdge = what edge
#define ABM_WINDOWPOSCHANGED 0x0000009 #define ABM_WINDOWPOSCHANGED 0x0000009
#define ABM_SETSTATE 0x0000000a #if (NTDDI_VERSION >= NTDDI_WINXP)
#define ABM_SETSTATE 0x0000000a
#endif // (NTDDI_VERSION >= NTDDI_WINXP)
// these are put in the wparam of callback messages // these are put in the wparam of callback messages
#define ABN_STATECHANGE 0x0000000 #define ABN_STATECHANGE 0x0000000
#define ABN_POSCHANGED 0x0000001 #define ABN_POSCHANGED 0x0000001
#define ABN_FULLSCREENAPP 0x0000002 #define ABN_FULLSCREENAPP 0x0000002
#define ABN_WINDOWARRANGE 0x0000003 // lParam == TRUE means hide #define ABN_WINDOWARRANGE 0x0000003 // lParam == TRUE means hide
// flags for get state // flags for get state
#define ABS_AUTOHIDE 0x0000001 #define ABS_AUTOHIDE 0x0000001
#define ABS_ALWAYSONTOP 0x0000002 #define ABS_ALWAYSONTOP 0x0000002
skipping to change at line 177 skipping to change at line 181
typedef struct _AppBarData typedef struct _AppBarData
{ {
DWORD cbSize; DWORD cbSize;
HWND hWnd; HWND hWnd;
UINT uCallbackMessage; UINT uCallbackMessage;
UINT uEdge; UINT uEdge;
RECT rc; RECT rc;
LPARAM lParam; // message specific LPARAM lParam; // message specific
} APPBARDATA, *PAPPBARDATA; } APPBARDATA, *PAPPBARDATA;
SHSTDAPI_(UINT_PTR) SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData); SHSTDAPI_(UINT_PTR) SHAppBarMessage(DWORD dwMessage, __in PAPPBARDATA pData);
//// ////
//// EndAppBar //// EndAppBar
//// ////
SHSTDAPI_(DWORD) DoEnvironmentSubstA(LPSTR szString, UINT cchString); SHSTDAPI_(DWORD) DoEnvironmentSubstA(__inout_ecount(cchString) LPSTR szString,
SHSTDAPI_(DWORD) DoEnvironmentSubstW(LPWSTR szString, UINT cchString); UINT cchString);
SHSTDAPI_(DWORD) DoEnvironmentSubstW(__inout_ecount(cchString) LPWSTR szString
, UINT cchString);
#ifdef UNICODE #ifdef UNICODE
#define DoEnvironmentSubst DoEnvironmentSubstW #define DoEnvironmentSubst DoEnvironmentSubstW
#else #else
#define DoEnvironmentSubst DoEnvironmentSubstA #define DoEnvironmentSubst DoEnvironmentSubstA
#endif // !UNICODE #endif // !UNICODE
#define EIRESID(x) (-1 * (int)(x)) #define EIRESID(x) (-1 * (int)(x))
SHSTDAPI_(UINT) ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON *phiconLar SHSTDAPI_(UINT) ExtractIconExA(LPCSTR lpszFile, int nIconIndex, __out_ecount_opt
ge, HICON *phiconSmall, UINT nIcons); (nIcons) HICON *phiconLarge, __out_ecount_opt(nIcons) HICON *phiconSmall, UINT n
SHSTDAPI_(UINT) ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON *phiconLa Icons);
rge, HICON *phiconSmall, UINT nIcons); SHSTDAPI_(UINT) ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, __out_ecount_op
t(nIcons) HICON *phiconLarge, __out_ecount_opt(nIcons) HICON *phiconSmall, UINT
nIcons);
#ifdef UNICODE #ifdef UNICODE
#define ExtractIconEx ExtractIconExW #define ExtractIconEx ExtractIconExW
#else #else
#define ExtractIconEx ExtractIconExA #define ExtractIconEx ExtractIconExA
#endif // !UNICODE #endif // !UNICODE
//// // Shell File Operations
//// Shell File Operations
////
#ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h
#define FO_MOVE 0x0001 #define FO_MOVE 0x0001
#define FO_COPY 0x0002 #define FO_COPY 0x0002
#define FO_DELETE 0x0003 #define FO_DELETE 0x0003
#define FO_RENAME 0x0004 #define FO_RENAME 0x0004
// SHFILEOPSTRUCT.fFlags and IFileOperation::SetOperationFlags() flag values
#define FOF_MULTIDESTFILES 0x0001 #define FOF_MULTIDESTFILES 0x0001
#define FOF_CONFIRMMOUSE 0x0002 #define FOF_CONFIRMMOUSE 0x0002
#define FOF_SILENT 0x0004 // don't create progress/report #define FOF_SILENT 0x0004 // don't display progress UI (confirm
#define FOF_RENAMEONCOLLISION 0x0008 prompts may be displayed still)
#define FOF_NOCONFIRMATION 0x0010 // Don't prompt the user. #define FOF_RENAMEONCOLLISION 0x0008 // automatically rename the source fi
les to avoid the collisions
#define FOF_NOCONFIRMATION 0x0010 // don't display confirmation UI, ass
ume "yes" for cases that can be bypassed, "no" for those that can not
#define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappin gs #define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappin gs
// Must be freed using SHFreeNameMappings // Must be freed using SHFreeNameMapp
#define FOF_ALLOWUNDO 0x0040 ings
#define FOF_FILESONLY 0x0080 // on *.*, do only files #define FOF_ALLOWUNDO 0x0040 // enable undo including Recycle beha
vior for IFileOperation::Delete()
#define FOF_FILESONLY 0x0080 // only operate on the files (non fol
ders), both files and folders are assumed without this
#define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files #define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files
#define FOF_NOCONFIRMMKDIR 0x0200 // don't confirm making any needed di #define FOF_NOCONFIRMMKDIR 0x0200 // don't dispplay confirmatino UI bef
rs ore making any needed directories, assume "Yes" in these cases
#define FOF_NOERRORUI 0x0400 // don't put up error UI #define FOF_NOERRORUI 0x0400 // don't put up error UI, other UI ma
#define FOF_NOCOPYSECURITYATTRIBS 0x0800 // dont copy NT file Security Attribu y be displayed, progress, confirmations
tes
#define FOF_NORECURSION 0x1000 // don't recurse into directories.
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define FOF_NO_CONNECTED_ELEMENTS 0x2000 // don't operate on connected element #define FOF_NOCOPYSECURITYATTRIBS 0x0800 // dont copy file security attributes
s. (ACLs)
#define FOF_NORECURSION 0x1000 // don't recurse into directories for
operations that would recurse
#define FOF_NO_CONNECTED_ELEMENTS 0x2000 // don't operate on connected element
s ("xxx_files" folders that go with .htm files)
#define FOF_WANTNUKEWARNING 0x4000 // during delete operation, warn if n uking instead of recycling (partially overrides FOF_NOCONFIRMATION) #define FOF_WANTNUKEWARNING 0x4000 // during delete operation, warn if n uking instead of recycling (partially overrides FOF_NOCONFIRMATION)
#endif // (_WIN32_IE >= 0x500) #endif // (_WIN32_IE >= 0x500)
#if (_WIN32_WINNT >= 0x0501) #if (_WIN32_WINNT >= 0x0501)
#define FOF_NORECURSEREPARSE 0x8000 // treat reparse points as objects, n ot containers #define FOF_NORECURSEREPARSE 0x8000 // deprecated; the operations engine always does the right thing on FolderLink objects (symlinks, reparse points, fol der shortcuts)
#endif // (_WIN32_WINNT >= 0x501) #endif // (_WIN32_WINNT >= 0x501)
#define FOF_NO_UI (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERR ORUI | FOF_NOCONFIRMMKDIR) // don't display any UI at all
typedef WORD FILEOP_FLAGS; typedef WORD FILEOP_FLAGS;
#define PO_DELETE 0x0013 // printer is being deleted #define PO_DELETE 0x0013 // printer is being deleted
#define PO_RENAME 0x0014 // printer is being renamed #define PO_RENAME 0x0014 // printer is being renamed
#define PO_PORTCHANGE 0x0020 // port this printer connected to is being chang ed #define PO_PORTCHANGE 0x0020 // port this printer connected to is being chang ed
// if this id is set, the strings received by // if this id is set, the strings received by
// the copyhook are a doubly-null terminated // the copyhook are a doubly-null terminated
// list of strings. The first is the printer // list of strings. The first is the printer
// name and the second is the printer port. // name and the second is the printer port.
#define PO_REN_PORT 0x0034 // PO_RENAME and PO_PORTCHANGE at same time. #define PO_REN_PORT 0x0034 // PO_RENAME and PO_PORTCHANGE at same time.
// no POF_ flags currently defined // no POF_ flags currently defined
typedef WORD PRINTEROP_FLAGS; typedef WORD PRINTEROP_FLAGS;
#endif // FO_MOVE
// implicit parameters are: // implicit parameters are:
// if pFrom or pTo are unqualified names the current directories are // if pFrom or pTo are unqualified names the current directories are
// taken from the global current drive/directory settings managed // taken from the global current drive/directory settings managed
// by Get/SetCurrentDrive/Directory // by Get/SetCurrentDrive/Directory
// //
// the global confirmation settings // the global confirmation settings
typedef struct _SHFILEOPSTRUCTA typedef struct _SHFILEOPSTRUCTA
{ {
HWND hwnd; HWND hwnd;
UINT wFunc; UINT wFunc;
LPCSTR pFrom; LPCSTR pFrom;
LPCSTR pTo; LPCSTR pTo;
FILEOP_FLAGS fFlags; FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted; BOOL fAnyOperationsAborted;
LPVOID hNameMappings; LPVOID hNameMappings;
LPCSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS LPCSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS
} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
typedef struct _SHFILEOPSTRUCTW typedef struct _SHFILEOPSTRUCTW
{ {
HWND hwnd; HWND hwnd;
UINT wFunc; UINT wFunc;
LPCWSTR pFrom; LPCWSTR pFrom;
LPCWSTR pTo; LPCWSTR pTo;
FILEOP_FLAGS fFlags; FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted; BOOL fAnyOperationsAborted;
LPVOID hNameMappings; LPVOID hNameMappings;
LPCWSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS LPCWSTR lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS
} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; } SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
#ifdef UNICODE #ifdef UNICODE
typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT; typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT;
typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT; typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT;
#else #else
typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT;
typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT;
#endif // UNICODE #endif // UNICODE
SHSTDAPI_(int) SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); SHSTDAPI_(int) SHFileOperationA(__inout LPSHFILEOPSTRUCTA lpFileOp);
SHSTDAPI_(int) SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp); SHSTDAPI_(int) SHFileOperationW(__inout LPSHFILEOPSTRUCTW lpFileOp);
#ifdef UNICODE #ifdef UNICODE
#define SHFileOperation SHFileOperationW #define SHFileOperation SHFileOperationW
#else #else
#define SHFileOperation SHFileOperationA #define SHFileOperation SHFileOperationA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(void) SHFreeNameMappings(HANDLE hNameMappings); SHSTDAPI_(void) SHFreeNameMappings(HANDLE hNameMappings);
typedef struct _SHNAMEMAPPINGA typedef struct _SHNAMEMAPPINGA
{ {
LPSTR pszOldPath; LPSTR pszOldPath;
skipping to change at line 352 skipping to change at line 354
#define SE_ERR_NOASSOC 31 #define SE_ERR_NOASSOC 31
#if(WINVER >= 0x0400) #if(WINVER >= 0x0400)
// Note CLASSKEY overrides CLASSNAME // Note CLASSKEY overrides CLASSNAME
#define SEE_MASK_CLASSNAME 0x00000001 #define SEE_MASK_CLASSNAME 0x00000001
#define SEE_MASK_CLASSKEY 0x00000003 #define SEE_MASK_CLASSKEY 0x00000003
// Note INVOKEIDLIST overrides IDLIST // Note INVOKEIDLIST overrides IDLIST
#define SEE_MASK_IDLIST 0x00000004 #define SEE_MASK_IDLIST 0x00000004
#define SEE_MASK_INVOKEIDLIST 0x0000000c #define SEE_MASK_INVOKEIDLIST 0x0000000c
#define SEE_MASK_ICON 0x00000010 #if (NTDDI_VERSION < NTDDI_LONGHORN)
#define SEE_MASK_ICON 0x00000010 // not used
#endif // (NTDDI_VERSION < NTDDI_LONGHORN)
#define SEE_MASK_HOTKEY 0x00000020 #define SEE_MASK_HOTKEY 0x00000020
#define SEE_MASK_NOCLOSEPROCESS 0x00000040 #define SEE_MASK_NOCLOSEPROCESS 0x00000040
#define SEE_MASK_CONNECTNETDRV 0x00000080 #define SEE_MASK_CONNECTNETDRV 0x00000080
#define SEE_MASK_FLAG_DDEWAIT 0x00000100 #define SEE_MASK_NOASYNC 0x00000100
#define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC // Use SEE_MASK_NOASYNC inst
ead of SEE_MASK_FLAG_DDEWAIT as it more accuratly describes the behavior
#define SEE_MASK_DOENVSUBST 0x00000200 #define SEE_MASK_DOENVSUBST 0x00000200
#define SEE_MASK_FLAG_NO_UI 0x00000400 #define SEE_MASK_FLAG_NO_UI 0x00000400
#define SEE_MASK_UNICODE 0x00004000 #define SEE_MASK_UNICODE 0x00004000
#define SEE_MASK_NO_CONSOLE 0x00008000 #define SEE_MASK_NO_CONSOLE 0x00008000
#define SEE_MASK_ASYNCOK 0x00100000 #define SEE_MASK_ASYNCOK 0x00100000
#if (NTDDI_VERSION >= NTDDI_WIN2K)
#define SEE_MASK_HMONITOR 0x00200000 #define SEE_MASK_HMONITOR 0x00200000
#if (_WIN32_IE >= 0x0560) #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#if (NTDDI_VERSION >= NTDDI_WINXPSP1)
#define SEE_MASK_NOZONECHECKS 0x00800000 #define SEE_MASK_NOZONECHECKS 0x00800000
#endif // (_WIN32_IE >= 0x560) #endif // (NTDDI_VERSION >= NTDDI_WINXPSP1)
#if (_WIN32_IE >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K)
#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
#define SEE_MASK_WAITFORINPUTIDLE 0x02000000 #define SEE_MASK_WAITFORINPUTIDLE 0x02000000
#endif // (_WIN32_IE >= 0x500) #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#if (_WIN32_IE >= 0x0560) #if (NTDDI_VERSION >= NTDDI_WINXP)
#define SEE_MASK_FLAG_LOG_USAGE 0x04000000 #define SEE_MASK_FLAG_LOG_USAGE 0x04000000
#endif // (_WIN32_IE >= 0x560) #endif // (NTDDI_VERSION >= NTDDI_WINXP)
// //
// For compilers that don't support nameless unions // For compilers that don't support nameless unions
// //
#ifndef DUMMYUNIONNAME #ifndef DUMMYUNIONNAME
#ifdef NONAMELESSUNION #ifdef NONAMELESSUNION
#define DUMMYUNIONNAME u #define DUMMYUNIONNAME u
#define DUMMYUNIONNAME2 u2 #define DUMMYUNIONNAME2 u2
#define DUMMYUNIONNAME3 u3 #define DUMMYUNIONNAME3 u3
#define DUMMYUNIONNAME4 u4 #define DUMMYUNIONNAME4 u4
#define DUMMYUNIONNAME5 u5 #define DUMMYUNIONNAME5 u5
#else #else
#define DUMMYUNIONNAME #define DUMMYUNIONNAME
#define DUMMYUNIONNAME2 #define DUMMYUNIONNAME2
#define DUMMYUNIONNAME3 #define DUMMYUNIONNAME3
#define DUMMYUNIONNAME4 #define DUMMYUNIONNAME4
#define DUMMYUNIONNAME5 #define DUMMYUNIONNAME5
#endif #endif
#endif // DUMMYUNIONNAME #endif // DUMMYUNIONNAME
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(push)
#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/un
ion */
#pragma once
#endif
typedef struct _SHELLEXECUTEINFOA typedef struct _SHELLEXECUTEINFOA
{ {
DWORD cbSize; DWORD cbSize;
ULONG fMask; ULONG fMask;
HWND hwnd; HWND hwnd;
LPCSTR lpVerb; LPCSTR lpVerb;
LPCSTR lpFile; LPCSTR lpFile;
LPCSTR lpParameters; LPCSTR lpParameters;
LPCSTR lpDirectory; LPCSTR lpDirectory;
int nShow; int nShow;
HINSTANCE hInstApp; HINSTANCE hInstApp;
// Optional fields // Optional fields
LPVOID lpIDList; LPVOID lpIDList;
LPCSTR lpClass; LPCSTR lpClass;
HKEY hkeyClass; HKEY hkeyClass;
DWORD dwHotKey; DWORD dwHotKey;
union { union {
HANDLE hIcon; HANDLE hIcon;
#if (NTDDI_VERSION >= NTDDI_WIN2K)
HANDLE hMonitor; HANDLE hMonitor;
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
HANDLE hProcess; HANDLE hProcess;
} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; } SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;
typedef struct _SHELLEXECUTEINFOW typedef struct _SHELLEXECUTEINFOW
{ {
DWORD cbSize; DWORD cbSize;
ULONG fMask; ULONG fMask;
HWND hwnd; HWND hwnd;
LPCWSTR lpVerb; LPCWSTR lpVerb;
LPCWSTR lpFile; LPCWSTR lpFile;
skipping to change at line 433 skipping to change at line 448
LPCWSTR lpDirectory; LPCWSTR lpDirectory;
int nShow; int nShow;
HINSTANCE hInstApp; HINSTANCE hInstApp;
// Optional fields // Optional fields
LPVOID lpIDList; LPVOID lpIDList;
LPCWSTR lpClass; LPCWSTR lpClass;
HKEY hkeyClass; HKEY hkeyClass;
DWORD dwHotKey; DWORD dwHotKey;
union { union {
HANDLE hIcon; HANDLE hIcon;
#if (NTDDI_VERSION >= NTDDI_WIN2K)
HANDLE hMonitor; HANDLE hMonitor;
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
HANDLE hProcess; HANDLE hProcess;
} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW; } SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
#ifdef UNICODE #ifdef UNICODE
typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO; typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO;
typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO; typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO;
#else #else
typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO;
typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO;
#endif // UNICODE #endif // UNICODE
SHSTDAPI_(BOOL) ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); SHSTDAPI_(BOOL) ShellExecuteExA(__inout LPSHELLEXECUTEINFOA lpExecInfo);
SHSTDAPI_(BOOL) ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); SHSTDAPI_(BOOL) ShellExecuteExW(__inout LPSHELLEXECUTEINFOW lpExecInfo);
#ifdef UNICODE #ifdef UNICODE
#define ShellExecuteEx ShellExecuteExW #define ShellExecuteEx ShellExecuteExW
#else #else
#define ShellExecuteEx ShellExecuteExA #define ShellExecuteEx ShellExecuteExA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(void) WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR
lpstrTitle);
SHSTDAPI_(void) WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWS
TR lpstrTitle);
#ifdef UNICODE
#define WinExecError WinExecErrorW
#else
#define WinExecError WinExecErrorA
#endif // !UNICODE
#if (NTDDI_VERSION >= NTDDI_WIN2K)
// //
// SHCreateProcessAsUser() // SHCreateProcessAsUser()
typedef struct _SHCREATEPROCESSINFOW typedef struct _SHCREATEPROCESSINFOW
{ {
DWORD cbSize; DWORD cbSize;
ULONG fMask; ULONG fMask;
HWND hwnd; HWND hwnd;
LPCWSTR pszFile; LPCWSTR pszFile;
LPCWSTR pszParameters; LPCWSTR pszParameters;
LPCWSTR pszCurrentDirectory; LPCWSTR pszCurrentDirectory;
IN HANDLE hUserToken; HANDLE hUserToken;
IN LPSECURITY_ATTRIBUTES lpProcessAttributes; LPSECURITY_ATTRIBUTES lpProcessAttributes;
IN LPSECURITY_ATTRIBUTES lpThreadAttributes; LPSECURITY_ATTRIBUTES lpThreadAttributes;
IN BOOL bInheritHandles; BOOL bInheritHandles;
IN DWORD dwCreationFlags; DWORD dwCreationFlags;
IN LPSTARTUPINFOW lpStartupInfo; LPSTARTUPINFOW lpStartupInfo;
OUT LPPROCESS_INFORMATION lpProcessInformation; LPPROCESS_INFORMATION lpProcessInformation;
} SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW; } SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW;
SHSTDAPI_(BOOL) SHCreateProcessAsUserW(PSHCREATEPROCESSINFOW pscpi); SHSTDAPI_(BOOL) SHCreateProcessAsUserW(__inout PSHCREATEPROCESSINFOW pscpi);
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
SHSTDAPI SHEvaluateSystemCommandTemplate(PCWSTR pszCmdTemplate, __out PWSTR *pps
zApplication, __out_opt PWSTR *ppszCommandLine, __out_opt PWSTR *ppszParameters)
;
//
// SHEvaluateSystemCommandTemplate()
// * enforces stricter validation before calling CreateProcess(). may al
so be
// used before calling ShellExecute().
// * should be used when caller wants the deterministic behavior from a c
ommand template
// regardless of execution context. it ignores the current process
state,
// such as the %PATH%, GetCurrentDirectory(), and parent process di
rectory.
// * should be used when the command is hardcoded.
// * is used by ShellExecute() when handling file associations from HKCR.
// * reduces CreateProcess() commandline exploits
// * is not designed for processing user input, and may generate unexpect
ed failures.
//
// INPUT:
// pszCmdTemplate = command line, this may or may not include parameters
.
// if the parameters are substitution parameters then t
his API
// should be called before parameters have been replace
d.
// (check the examples below to see sample supported in
puts.)
//
// OUTPUT on return: S_OK
// ppszApplication = verified path to the Application. this should be pa
ssed as the lpApplication
// parameter to CreateProcess() or the lpFile parameter
to ShellExecute().
// (allocated using CoTaskMemAlloc(), free with CoTaskM
emFree())
//
// ppszCommandLine = OPTIONAL - use if planning to call CreateProcess().
// resulting command line template. parameters should
be replaced based on this template,
// and then passed as the lpCommandLine parameter to Cr
eateProcess().
// it is guaranteed to be of a form that PathGetArgs()
will always succeed correctly.
// (allocated using CoTaskMemAlloc(), free with CoTaskM
emFree())
//
// ppszParameters = OPTIONAL - use if planning to call ShellExecute().
// resulting parameter list template. parameters shoul
d be replaced based on this template,
// and then passed as the lpParameters parameter to She
llExecute().
// NOTE: identical to PathGetArgs(*ppszCommandLine).
// (allocated using CoTaskMemAlloc(), free with CoTaskM
emFree())
//
// OUTPUT on return: FAILED()
// all outputs will be NULL'ed on failure
//
// NOTES: the parsing logic to determine a valid Application path is non-trivi
al, although
// the extension is not required and if missing will be completed
// in the following standard order: { .PIF, .COM, .EXE, .BAT, .CMD
}
//
// Relative Paths are System Paths - if the first token has no path qualifi
ers
// then the token is first checked to see if a key of the same name
has
// been installed under HKLM\Software\Microsoft\Windows\CurrentVers
ion\App Paths.
// if the key or default value does not exist, it is assumed to be
a child
// of the system directories. the following directories will be se
arched
// in order for the relative token: { CSIDL_SYSTEM, CSIDL_WINDOWS }
//
// Prefer Quoted Paths - if the first token in pszCmdTemplate is quoted and
appears
// to be an absolute path then the token is the only possible resul
t.
//
// Limit Forms of Unquoted Paths - if the first token is unquoted and appea
rs
// to be an absolute path, then it is subject to more stringent lim
itations.
// if the token is a substring of CSIDL_PROGRAM_FILES or does not
// exist on the file system, then SHEvaluateSystemCommandTemplate()
will
// attempt to complete using a token delimited by the first space o
f the
// last valid path segment (usually the file name). if this token
also doesnt exist,
// then the next space will be used, etc.
//
// USAGE: used before calling into CreateProcess() or ShellExecute(), call
ers
// would typically look like the following:
/* #if 0 // SAMPLE CODE
HRESULT MyCreateProcessPriv(PCWSTR pszCmd)
{
PWSTR pszApp;
PWSTR pszCmdLine;
HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
if (SUCCEEDED(hr))
{
// if this was a real template, maybe some kind of wnsprintf() first?
PROCESS_INFORMATION pi;
STARTUPINFO si = {0};
si.cb = sizeof(startup);
si.wShowWindow = SW_SHOWNORMAL;
if (CreateProcess(pszApp, pszCmdLine, NULL, NULL, FALSE,
CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi))
{
// we are good
ASSERT(hr == S_OK);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
CoTaskMemFree(pszApp);
CoTaskMemFree(pszCmdLine);
}
return hr;
}
HRESULT MyShellExec(PCWSTR pszCmd)
{
PWSTR pszApp;
PWSTR pszCmdLine;
HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
if (SUCCEEDED(hr))
{
// if this was a real template, maybe some kind of wnsprintf() first?
SHELLEXECUTEINFOW sei = {
sizeof(sei), // cbSize;
0, // fMask
NULL, // hwnd
NULL, // lpVerb
pszApp, // lpFile
PathGetArgs(pszCmdLine), // lpParameters
NULL, // lpDirectory
SW_SHOWNORMAL, // nShow
0, // hInstApp
NULL, // lpIDList
NULL, // lpClass
NULL, // hkeyClass
0, // dwHotKey
NULL, // hIcon
NULL // hProcess
};
if (ShellExecuteEx(&sei))
{
// we are good
ASSERT(hr == S_OK);
}
else
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
CoTaskMemFree(pszApp);
CoTaskMemFree(pszCmdLine);
}
return hr;
}
#endif // 0 // SAMPLE CODE
*/
// EXAMPLE: Each example will show an input parameter and the results returne
d by
// SHEvaluateSystemCommandTemplate(). Also included is the alterna
te result
// of what CreateProcess() would have created if pszCmdTemplate wer
e
// passed directly as lpCommandLine and lpApplication were NULL.
// (results marked with an asterisk (*) indicate differences.)
//
// Assume for the examples that the following paths and values exist:
//
// SHGetFolderPath() values:
// CSIDL_SYSTEM = C:\windows\system32
// CSIDL_WINDOWS = C:\windows
// CSIDL_PROGRAM_FILES = C:\Program Files
//
// Environment settings
// GetModuleFileName(NULL) = C:\Program Files\Example\sample.exe
// GetCurrentDirectory() = \\server\share\foo
// HKLM\...\App Paths\pbrush.exe = C:\windows\system32\mspaint.exe
// HKLM\...\App Paths\mycl.exe = C:\Program Files\Compilers\mycl.exe
// PATH = c:\windows\system32;C:\windows;c:\;C:\Pr
ogram Files\Compilers\
//
// Valid Application paths:
// C:\Program Files\Internet Explorer\iexplore.exe
// C:\windows\system32\rundll32.exe
// C:\windows\system32\notepad.exe
// C:\windows\notepad.exe
// C:\Program Files\Example\sample.exe
// C:\Program Files\Compilers\cl.exe
// C:\Other Programs\prog.exe
//
// Suspicious (possibly hostile) Application paths:
// C:\Program.exe
// C:\Program Files\Internet.exe
// C:\Program Files\Example\regedit.bat
// C:\mycl.exe
// \\server\share\foo\rundll32.exe
// \\server\share\foo\myapp.exe
//
//
// Relative Path Example #1
// pszCmdTemplate = notepad.exe %1
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\windows\system32\notepad.exe
// pszCommandLine = "notepad.exe" %1
// CreateProcess() would return TRUE
// new process = C:\windows\system32\notepad.exe
//
// Relative Path Example #2
// pszCmdTemplate = rundll32.exe shell32.dll,RunDll
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\windows\system32\rundll32.exe
// pszCommandLine = "rundll32.exe" shell32.dll,RunDll
// * CreateProcess() would return TRUE
// new process = \\server\share\foo\rundll32.exe
//
// Relative Path Example #3
// pszCmdTemplate = regedit %1
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\windows\system32\regedit.exe
// pszCommandLine = "regedit.exe" %1
// * CreateProcess() would return TRUE
// new process = C:\Program Files\Example\regedit.bat
//
// Relative Path Example #4
// pszCmdTemplate = pbrush "%1"
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\windows\system32\mspaint.exe
// pszCommandLine = "mspaint.exe" "%1"
// * CreateProcess() would return FALSE
//
// Relative Path Example #5
// pszCmdTemplate = mycl "%1" "%2"
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Compilers\mycl.exe
// pszCommandLine = "mycl.exe" "%1" "%2"
// * CreateProcess() would return TRUE
// new process = C:\mycl.exe
//
// Relative Path Example #6
// pszCmdTemplate = myapp.exe
// SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
// * CreateProcess() would return TRUE
// new process = \\server\share\foo\myapp.exe
//
// Quoted Path Example #1
// pszCmdTemplate = "C:\Program Files\Internet Explorer\iexplore.exe
" -nohome
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet Explorer\iexplore.
exe
// pszCommandLine = "C:\Program Files\Internet Explorer\iexplore
.exe" -nohome
// CreateProcess() would return TRUE
// new process = C:\Program Files\Internet Explorer\iexplore.exe
//
// Quoted Path Example #2
// pszCmdTemplate = "C:\Program Files\Internet" -url
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet.exe
// pszCommandLine = "C:\Program Files\Internet.exe" -url
// CreateProcess() would return TRUE
// new process = C:\Program Files\internet.exe
//
// Quoted Path Example #3
// pszCmdTemplate = "C:\Program" -url
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program.exe
// pszCommandLine = "C:\Program.exe" -url
// CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #1
// pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe
-nohome
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet Explorer\iexplore.
exe
// pszCommandLine = "C:\Program Files\Internet Explorer\iexplore
.exe" -nohome
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #2
// pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe
-url fool.htm
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet Explorer\iexplore.
exe
// pszCommandLine = "C:\Program Files\Internet Explorer\iexplore
.exe" -url fool.htm
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #3
// pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe
-url C:\fool.htm
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet Explorer\iexplore.
exe
// pszCommandLine = "C:\Program Files\Internet Explorer\iexplore
.exe" -url C:\fool.htm
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #4
// pszCmdTemplate = C:\Program Files\Internet -url
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Program Files\Internet.exe
// pszCommandLine = "C:\Program Files\Internet.exe" -url
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #5
// pszCmdTemplate = C:\Other Programs\prog.exe -go %1 \fool %2
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Other Programs\prog.exe
// pszCommandLine = "C:\Other Programs\prog.exe" %1 \fool %2
// * CreateProcess() would return TRUE
// new process = C:\Other Programs\prog.exe
//
// Unquoted Example #6
// pszCmdTemplate = C:\Other Programs\prog.exe -go "\fool" "%1"
// SHEvaluateSystemCommandTemplate() returns: S_OK
// pszApplication = C:\Other Programs\prog.exe
// pszCommandLine = "C:\Other Programs\prog.exe" -go "\fool" "%1
"
// * CreateProcess() would return TRUE
// new process = C:\Other Programs\prog.exe
//
// Unquoted Example #7
// pszCmdTemplate = C:\Program Files\Internet Explorer\iexplore.exe
-url \fool.htm
// SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #8
// pszCmdTemplate = C:\Program -url
// SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #9
// pszCmdTemplate = C:\Other Programs\prog.exe -go \fool us
// SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
// * CreateProcess() would return TRUE
// new process = C:\Other Programs\prog.exe
//
// Unquoted Example #10
// pszCmdTemplate = C:\Other Programs\prog.exe -go \fool %1
// SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND
// * CreateProcess() would return TRUE
// new process = C:\Other Programs\prog.exe
//
// Unquoted Example #11
// pszCmdTemplate = C:\Program "%1"
// SHEvaluateSystemCommandTemplate() returns: E_ACCESSDENIED
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// Unquoted Example #12
// pszCmdTemplate = C:\Program
// SHEvaluateSystemCommandTemplate() returns: E_ACCESSDENIED
// * CreateProcess() would return TRUE
// new process = C:\Program.exe
//
// used for implementing IShellFolder::GetUIObject(IID_IQueryAssociations)
// designed for namespace extensions with registered extensible types
// SHCreateDefaultContextMenu() and others use IQueryAssociations to build up d
ata sets
typedef enum ASSOCCLASS
{ // which other members are used
ASSOCCLASS_SHELL_KEY = 0, // hkeyClass
ASSOCCLASS_PROGID_KEY, // hkeyClass
ASSOCCLASS_PROGID_STR, // pszClass (HKCR\pszClass)
ASSOCCLASS_CLSID_KEY, // hkeyClass
ASSOCCLASS_CLSID_STR, // pszClass (HKCR\CLSID\pszClass)
ASSOCCLASS_APP_KEY, // hkeyClass
ASSOCCLASS_APP_STR, // pszClass (HKCR\Applications\PathFindFileName
(pszClass))
ASSOCCLASS_SYSTEM_STR, // pszClass
ASSOCCLASS_FOLDER, // none
ASSOCCLASS_STAR, // none
} ASSOCCLASS;
typedef struct ASSOCIATIONELEMENT_
{
ASSOCCLASS ac; // required
HKEY hkClass; // may be NULL
PCWSTR pszClass; // may be NULL
} ASSOCIATIONELEMENT;
// the object returned from this API implements IQueryAssociations
SHSTDAPI AssocCreateForClasses(__in const ASSOCIATIONELEMENT *rgClasses, ULONG c
Classes, REFIID riid, __out void **ppv);
/* #if 0 // SAMPLE CODE
HRESULT CCustomFolder::_AssocCreate(PCUITEMID_CHILD pidl, REFIID riid, __out voi
d **ppv)
{
*ppv = NULL;
ASSOCIATIONELEMENT rgAssoc[] =
{
{ ASSOCCLASS_PROGID_STR, NULL, CCustomFolder::_MapChildToType(pidl)},
{ ASSOCCLASS_FOLDER, NULL, NULL},
};
if (CCustomFolder::_IsFolder(pidl))
{
return AssocCreateForClasses(rgAssoc, ARRAYSIZE(rgAssoc), riid, ppv);
}
else
{
// skip FOLDER at the end
return AssocCreateForClasses(rgAssoc, ARRAYSIZE(rgAssoc)-1, riid, ppv);
}
}
HRESULT CCustomFolder::GetUIObjectOf(...)
{
// validate parameters
if (riid == IID_IQueryAssociations)
{
hr = _AssocCreate(apidl[0], riid, ppv);
}
// else if ...
}
#endif // SAMPLE CODE
*/
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
//// ////
//// End ShellExecuteEx and family //// End ShellExecuteEx and family
//// ////
#if (NTDDI_VERSION >= NTDDI_WIN2K)
// //
// RecycleBin // RecycleBin
// //
// struct for query recycle bin info // struct for query recycle bin info
typedef struct _SHQUERYRBINFO { typedef struct _SHQUERYRBINFO {
DWORD cbSize; DWORD cbSize;
#if !defined(_MAC) || defined(_MAC_INT_64) #if !defined(_MAC) || defined(_MAC_INT_64)
__int64 i64Size; __int64 i64Size;
__int64 i64NumItems; __int64 i64NumItems;
skipping to change at line 507 skipping to change at line 916
DWORDLONG i64NumItems; DWORDLONG i64NumItems;
#endif #endif
} SHQUERYRBINFO, *LPSHQUERYRBINFO; } SHQUERYRBINFO, *LPSHQUERYRBINFO;
// flags for SHEmptyRecycleBin // flags for SHEmptyRecycleBin
// //
#define SHERB_NOCONFIRMATION 0x00000001 #define SHERB_NOCONFIRMATION 0x00000001
#define SHERB_NOPROGRESSUI 0x00000002 #define SHERB_NOPROGRESSUI 0x00000002
#define SHERB_NOSOUND 0x00000004 #define SHERB_NOSOUND 0x00000004
SHSTDAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo); SHSTDAPI SHQueryRecycleBinA(LPCSTR pszRootPath, __inout LPSHQUERYRBINFO pSHQuery
SHSTDAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) RBInfo);
; SHSTDAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, __inout LPSHQUERYRBINFO pSHQuer
yRBInfo);
#ifdef UNICODE #ifdef UNICODE
#define SHQueryRecycleBin SHQueryRecycleBinW #define SHQueryRecycleBin SHQueryRecycleBinW
#else #else
#define SHQueryRecycleBin SHQueryRecycleBinA #define SHQueryRecycleBin SHQueryRecycleBinA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags); SHSTDAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags);
SHSTDAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags); SHSTDAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags);
#ifdef UNICODE #ifdef UNICODE
#define SHEmptyRecycleBin SHEmptyRecycleBinW #define SHEmptyRecycleBin SHEmptyRecycleBinW
#else #else
#define SHEmptyRecycleBin SHEmptyRecycleBinA #define SHEmptyRecycleBin SHEmptyRecycleBinA
#endif // !UNICODE #endif // !UNICODE
//// ////
//// end of RecycleBin //// end of RecycleBin
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
//// ////
//// Tray notification definitions //// Taskbar notification definitions
//// ////
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef enum
{
QUNS_NOT_PRESENT = 1, // The user is not present. Heuristi
c check for modes like: screen saver, locked machine, non-active FUS session
QUNS_BUSY = 2, // The user is busy. Heuristic check
for modes like: full-screen app
QUNS_RUNNING_D3D_FULL_SCREEN = 3, // full-screen (exlusive-mode) D3D ap
p
QUNS_PRESENTATION_MODE = 4, // Windows presentation mode (laptop
feature) is turned on
QUNS_ACCEPTS_NOTIFICATIONS = 5, // none of the above
} QUERY_USER_NOTIFICATION_STATE;
SHSTDAPI SHQueryUserNotificationState(__out QUERY_USER_NOTIFICATION_STATE *pquns
);
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef struct _NOTIFYICONDATAA { typedef struct _NOTIFYICONDATAA {
DWORD cbSize; DWORD cbSize;
HWND hWnd; HWND hWnd;
UINT uID; UINT uID;
UINT uFlags; UINT uFlags;
UINT uCallbackMessage; UINT uCallbackMessage;
HICON hIcon; HICON hIcon;
#if (_WIN32_IE < 0x0500) #if (NTDDI_VERSION < NTDDI_WIN2K)
CHAR szTip[64]; CHAR szTip[64];
#else
CHAR szTip[128];
#endif #endif
#if (_WIN32_IE >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K)
DWORD dwState; CHAR szTip[128];
DWORD dwStateMask; DWORD dwState;
CHAR szInfo[256]; DWORD dwStateMask;
union { CHAR szInfo[256];
UINT uTimeout; union {
UINT uVersion; UINT uTimeout;
} DUMMYUNIONNAME; UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
CHAR szInfoTitle[64]; } DUMMYUNIONNAME;
DWORD dwInfoFlags; CHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif #endif
#if (_WIN32_IE >= 0x600) #if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem; GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
HICON hBalloonIcon;
#endif #endif
} NOTIFYICONDATAA, *PNOTIFYICONDATAA; } NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW { typedef struct _NOTIFYICONDATAW {
DWORD cbSize; DWORD cbSize;
HWND hWnd; HWND hWnd;
UINT uID; UINT uID;
UINT uFlags; UINT uFlags;
UINT uCallbackMessage; UINT uCallbackMessage;
HICON hIcon; HICON hIcon;
#if (_WIN32_IE < 0x0500) #if (NTDDI_VERSION < NTDDI_WIN2K)
WCHAR szTip[64]; WCHAR szTip[64];
#else
WCHAR szTip[128];
#endif #endif
#if (_WIN32_IE >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K)
DWORD dwState; WCHAR szTip[128];
DWORD dwStateMask; DWORD dwState;
WCHAR szInfo[256]; DWORD dwStateMask;
union { WCHAR szInfo[256];
UINT uTimeout; union {
UINT uVersion; UINT uTimeout;
} DUMMYUNIONNAME; UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
WCHAR szInfoTitle[64]; } DUMMYUNIONNAME;
DWORD dwInfoFlags; WCHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif #endif
#if (_WIN32_IE >= 0x600) #if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem; GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
HICON hBalloonIcon;
#endif #endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW; } NOTIFYICONDATAW, *PNOTIFYICONDATAW;
#ifdef UNICODE #ifdef UNICODE
typedef NOTIFYICONDATAW NOTIFYICONDATA; typedef NOTIFYICONDATAW NOTIFYICONDATA;
typedef PNOTIFYICONDATAW PNOTIFYICONDATA; typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
#else #else
typedef NOTIFYICONDATAA NOTIFYICONDATA; typedef NOTIFYICONDATAA NOTIFYICONDATA;
typedef PNOTIFYICONDATAA PNOTIFYICONDATA; typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
#endif // UNICODE #endif // UNICODE
skipping to change at line 607 skipping to change at line 1034
#endif #endif
#define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem) #define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
#define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem) #define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
#ifdef UNICODE #ifdef UNICODE
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
#else #else
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE
#endif #endif
#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)
#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)
#ifdef UNICODE
#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAW_V3_SIZE
#else
#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAA_V3_SIZE
#endif
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define NIN_SELECT (WM_USER + 0) #define NIN_SELECT (WM_USER + 0)
#define NINF_KEY 0x1 #define NINF_KEY 0x1
#define NIN_KEYSELECT (NIN_SELECT | NINF_KEY) #define NIN_KEYSELECT (NIN_SELECT | NINF_KEY)
#endif #endif
#if (_WIN32_IE >= 0x0501) #if (_WIN32_IE >= 0x0501)
#define NIN_BALLOONSHOW (WM_USER + 2) #define NIN_BALLOONSHOW (WM_USER + 2)
#define NIN_BALLOONHIDE (WM_USER + 3) #define NIN_BALLOONHIDE (WM_USER + 3)
#define NIN_BALLOONTIMEOUT (WM_USER + 4) #define NIN_BALLOONTIMEOUT (WM_USER + 4)
#define NIN_BALLOONUSERCLICK (WM_USER + 5) #define NIN_BALLOONUSERCLICK (WM_USER + 5)
#endif #endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define NIN_POPUPOPEN (WM_USER + 6)
#define NIN_POPUPCLOSE (WM_USER + 7)
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#define NIM_ADD 0x00000000 #define NIM_ADD 0x00000000
#define NIM_MODIFY 0x00000001 #define NIM_MODIFY 0x00000001
#define NIM_DELETE 0x00000002 #define NIM_DELETE 0x00000002
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define NIM_SETFOCUS 0x00000003 #define NIM_SETFOCUS 0x00000003
#define NIM_SETVERSION 0x00000004 #define NIM_SETVERSION 0x00000004
#define NOTIFYICON_VERSION 3 // set NOTIFYICONDATA.uVersion with 0, 3 or 4
// please read the documentation on the behavior difference that the different v
ersions imply
#define NOTIFYICON_VERSION 3
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define NOTIFYICON_VERSION_4 4
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif #endif
#define NIF_MESSAGE 0x00000001 #define NIF_MESSAGE 0x00000001
#define NIF_ICON 0x00000002 #define NIF_ICON 0x00000002
#define NIF_TIP 0x00000004 #define NIF_TIP 0x00000004
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define NIF_STATE 0x00000008 #define NIF_STATE 0x00000008
#define NIF_INFO 0x00000010 #define NIF_INFO 0x00000010
#endif #endif
#if (_WIN32_IE >= 0x600) #if (_WIN32_IE >= 0x600)
#define NIF_GUID 0x00000020 #define NIF_GUID 0x00000020
#endif #endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define NIF_REALTIME 0x00000040
#define NIF_SHOWTIP 0x00000080
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define NIS_HIDDEN 0x00000001 #define NIS_HIDDEN 0x00000001
#define NIS_SHAREDICON 0x00000002 #define NIS_SHAREDICON 0x00000002
// says this is the source of a shared icon // says this is the source of a shared icon
// Notify Icon Infotip flags // Notify Icon Infotip flags
#define NIIF_NONE 0x00000000 #define NIIF_NONE 0x00000000
// icon flags are mutually exclusive // icon flags are mutually exclusive
// and take only the lowest 2 bits // and take only the lowest 2 bits
#define NIIF_INFO 0x00000001 #define NIIF_INFO 0x00000001
#define NIIF_WARNING 0x00000002 #define NIIF_WARNING 0x00000002
#define NIIF_ERROR 0x00000003 #define NIIF_ERROR 0x00000003
#if (_WIN32_IE >= 0x0600) #if (NTDDI_VERSION >= NTDDI_XPSP2) // also available in NTDDI_WS03SP1
#define NIIF_USER 0x00000004 #define NIIF_USER 0x00000004
#endif #endif // (NTDDI_VERSION >= NTDDI_XPSP2)
#define NIIF_ICON_MASK 0x0000000F #define NIIF_ICON_MASK 0x0000000F
#if (_WIN32_IE >= 0x0501) #if (_WIN32_IE >= 0x0501)
#define NIIF_NOSOUND 0x00000010 #define NIIF_NOSOUND 0x00000010
#endif #endif
#endif #endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define NIIF_LARGE_ICON 0x00000020
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, __in PNOTIFYICONDATAA lpData)
SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); ;
SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, __in PNOTIFYICONDATAW lpData)
;
#ifdef UNICODE #ifdef UNICODE
#define Shell_NotifyIcon Shell_NotifyIconW #define Shell_NotifyIcon Shell_NotifyIconW
#else #else
#define Shell_NotifyIcon Shell_NotifyIconA #define Shell_NotifyIcon Shell_NotifyIconA
#endif // !UNICODE #endif // !UNICODE
//// ////
//// End Tray Notification Icons //// End Taskbar Notification Icons
//// ////
#ifndef SHFILEINFO_DEFINED #ifndef SHFILEINFO_DEFINED
#define SHFILEINFO_DEFINED #define SHFILEINFO_DEFINED
//// ////
//// Begin SHGetFileInfo //// Begin SHGetFileInfo
//// ////
/* /*
* The SHGetFileInfo API provides an easy way to get attributes * The SHGetFileInfo API provides an easy way to get attributes
skipping to change at line 730 skipping to change at line 1181
#define SHGFI_ICON 0x000000100 // get icon #define SHGFI_ICON 0x000000100 // get icon
#define SHGFI_DISPLAYNAME 0x000000200 // get display name #define SHGFI_DISPLAYNAME 0x000000200 // get display name
#define SHGFI_TYPENAME 0x000000400 // get type name #define SHGFI_TYPENAME 0x000000400 // get type name
#define SHGFI_ATTRIBUTES 0x000000800 // get attributes #define SHGFI_ATTRIBUTES 0x000000800 // get attributes
#define SHGFI_ICONLOCATION 0x000001000 // get icon location #define SHGFI_ICONLOCATION 0x000001000 // get icon location
#define SHGFI_EXETYPE 0x000002000 // return exe type #define SHGFI_EXETYPE 0x000002000 // return exe type
#define SHGFI_SYSICONINDEX 0x000004000 // get system icon index #define SHGFI_SYSICONINDEX 0x000004000 // get system icon index
#define SHGFI_LINKOVERLAY 0x000008000 // put a link overlay on icon #define SHGFI_LINKOVERLAY 0x000008000 // put a link overlay on icon
#define SHGFI_SELECTED 0x000010000 // show icon in selected state #define SHGFI_SELECTED 0x000010000 // show icon in selected state
#if (NTDDI_VERSION >= NTDDI_WIN2K)
#define SHGFI_ATTR_SPECIFIED 0x000020000 // get only specified attributes #define SHGFI_ATTR_SPECIFIED 0x000020000 // get only specified attributes
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#define SHGFI_LARGEICON 0x000000000 // get large icon #define SHGFI_LARGEICON 0x000000000 // get large icon
#define SHGFI_SMALLICON 0x000000001 // get small icon #define SHGFI_SMALLICON 0x000000001 // get small icon
#define SHGFI_OPENICON 0x000000002 // get open icon #define SHGFI_OPENICON 0x000000002 // get open icon
#define SHGFI_SHELLICONSIZE 0x000000004 // get shell size icon #define SHGFI_SHELLICONSIZE 0x000000004 // get shell size icon
#define SHGFI_PIDL 0x000000008 // pszPath is a pidl #define SHGFI_PIDL 0x000000008 // pszPath is a pidl
#define SHGFI_USEFILEATTRIBUTES 0x000000010 // use passed dwFileAttribute #define SHGFI_USEFILEATTRIBUTES 0x000000010 // use passed dwFileAttribute
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define SHGFI_ADDOVERLAYS 0x000000020 // apply the appropriate overlay s #define SHGFI_ADDOVERLAYS 0x000000020 // apply the appropriate overlay s
#define SHGFI_OVERLAYINDEX 0x000000040 // Get the index of the overlay #define SHGFI_OVERLAYINDEX 0x000000040 // Get the index of the overlay
// in the upper 8 bits of the iI con // in the upper 8 bits of the iI con
#endif #endif
SHSTDAPI_(DWORD_PTR) SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFI SHSTDAPI_(DWORD_PTR) SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, __in
LEINFOA *psfi, UINT cbFileInfo, UINT uFlags); out_bcount_opt(cbFileInfo) SHFILEINFOA *psfi,
SHSTDAPI_(DWORD_PTR) SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHF UINT cbFileInfo, UINT uFlags);
ILEINFOW *psfi, UINT cbFileInfo, UINT uFlags); SHSTDAPI_(DWORD_PTR) SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, __i
nout_bcount_opt(cbFileInfo) SHFILEINFOW *psfi,
UINT cbFileInfo, UINT uFlags);
#ifdef UNICODE #ifdef UNICODE
#define SHGetFileInfo SHGetFileInfoW #define SHGetFileInfo SHGetFileInfoW
#else #else
#define SHGetFileInfo SHGetFileInfoA #define SHGetFileInfo SHGetFileInfoA
#endif // !UNICODE #endif // !UNICODE
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef struct _SHSTOCKICONINFO
{
DWORD cbSize;
HICON hIcon;
int iSysImageIndex;
int iIcon;
WCHAR szPath[MAX_PATH];
} SHSTOCKICONINFO;
#define SHGSI_ICONLOCATION 0 // you always get the icon location
#define SHGSI_ICON SHGFI_ICON
#define SHGSI_SYSICONINDEX SHGFI_SYSICONINDEX
#define SHGSI_LINKOVERLAY SHGFI_LINKOVERLAY
#define SHGSI_SELECTED SHGFI_SELECTED
#define SHGSI_LARGEICON SHGFI_LARGEICON
#define SHGSI_SMALLICON SHGFI_SMALLICON
#define SHGSI_SHELLICONSIZE SHGFI_SHELLICONSIZE
// Shell icons
typedef enum SHSTOCKICONID
{
SIID_DOCNOASSOC = 0, // document (blank page), no associated progra
m
SIID_DOCASSOC = 1, // document with an associated program
SIID_APPLICATION = 2, // generic application with no custom icon
SIID_FOLDER = 3, // folder (closed)
SIID_FOLDEROPEN = 4, // folder (open)
SIID_DRIVE525 = 5, // 5.25" floppy disk drive
SIID_DRIVE35 = 6, // 3.5" floppy disk drive
SIID_DRIVEREMOVE = 7, // removable drive
SIID_DRIVEFIXED = 8, // fixed (hard disk) drive
SIID_DRIVENET = 9, // network drive
SIID_DRIVENETDISABLED = 10, // disconnected network drive
SIID_DRIVECD = 11, // CD drive
SIID_DRIVERAM = 12, // RAM disk drive
SIID_WORLD = 13, // entire network
SIID_SERVER = 15, // a computer on the network
SIID_PRINTER = 16, // printer
SIID_MYNETWORK = 17, // My network places
SIID_FIND = 22, // Find
SIID_HELP = 23, // Help
SIID_SHARE = 28, // overlay for shared items
SIID_LINK = 29, // overlay for shortcuts to items
SIID_SLOWFILE = 30, // overlay for slow items
SIID_RECYCLER = 31, // empty recycle bin
SIID_RECYCLERFULL = 32, // full recycle bin
SIID_MEDIACDAUDIO = 40, // Audio CD Media
SIID_LOCK = 47, // Security lock
SIID_AUTOLIST = 49, // AutoList
SIID_PRINTERNET = 50, // Network printer
SIID_SERVERSHARE = 51, // Server share
SIID_PRINTERFAX = 52, // Fax printer
SIID_PRINTERFAXNET = 53, // Networked Fax Printer
SIID_PRINTERFILE = 54, // Print to File
SIID_STACK = 55, // Stack
SIID_MEDIASVCD = 56, // SVCD Media
SIID_STUFFEDFOLDER = 57, // Folder containing other items
SIID_DRIVEUNKNOWN = 58, // Unknown drive
SIID_DRIVEDVD = 59, // DVD Drive
SIID_MEDIADVD = 60, // DVD Media
SIID_MEDIADVDRAM = 61, // DVD-RAM Media
SIID_MEDIADVDRW = 62, // DVD-RW Media
SIID_MEDIADVDR = 63, // DVD-R Media
SIID_MEDIADVDROM = 64, // DVD-ROM Media
SIID_MEDIACDAUDIOPLUS = 65, // CD+ (Enhanced CD) Media
SIID_MEDIACDRW = 66, // CD-RW Media
SIID_MEDIACDR = 67, // CD-R Media
SIID_MEDIACDBURN = 68, // Burning CD
SIID_MEDIABLANKCD = 69, // Blank CD Media
SIID_MEDIACDROM = 70, // CD-ROM Media
SIID_AUDIOFILES = 71, // Audio files
SIID_IMAGEFILES = 72, // Image files
SIID_VIDEOFILES = 73, // Video files
SIID_MIXEDFILES = 74, // Mixed files
SIID_FOLDERBACK = 75, // Folder back
SIID_FOLDERFRONT = 76, // Folder front
SIID_SHIELD = 77, // Security shield. Use for UAC prompts only.
SIID_WARNING = 78, // Warning
SIID_INFO = 79, // Informational
SIID_ERROR = 80, // Error
SIID_KEY = 81, // Key / Secure
SIID_SOFTWARE = 82, // Software
SIID_RENAME = 83, // Rename
SIID_DELETE = 84, // Delete
SIID_MEDIAAUDIODVD = 85, // Audio DVD Media
SIID_MEDIAMOVIEDVD = 86, // Movie DVD Media
SIID_MEDIAENHANCEDCD = 87, // Enhanced CD Media
SIID_MEDIAENHANCEDDVD = 88, // Enhanced DVD Media
SIID_MEDIAHDDVD = 89, // HD-DVD Media
SIID_MEDIABLURAY = 90, // BluRay Media
SIID_MEDIAVCD = 91, // VCD Media
SIID_MEDIADVDPLUSR = 92, // DVD+R Media
SIID_MEDIADVDPLUSRW = 93, // DVD+RW Media
SIID_DESKTOPPC = 94, // desktop computer
SIID_MOBILEPC = 95, // mobile computer (laptop/notebook)
SIID_USERS = 96, // users
SIID_MEDIASMARTMEDIA = 97, // Smart Media
SIID_MEDIACOMPACTFLASH = 98, // Compact Flash
SIID_DEVICECELLPHONE = 99, // Cell phone
SIID_DEVICECAMERA = 100, // Camera
SIID_DEVICEVIDEOCAMERA = 101, // Video camera
SIID_DEVICEAUDIOPLAYER = 102, // Audio player
SIID_NETWORKCONNECT = 103, // Connect to network
SIID_INTERNET = 104, // Internet
SIID_ZIPFILE = 105, // ZIP file
SIID_SETTINGS = 106, // Settings
SIID_MAX_ICONS = 107,
} SHSTOCKICONID;
#define SIID_INVALID ((SHSTOCKICONID)-1)
SHSTDAPI SHGetStockIconInfo(SHSTOCKICONID siid, UINT uFlags, __inout SHSTOCKICON
INFO *psii);
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#if (NTDDI_VERSION >= NTDDI_WIN2K)
#define SHGetDiskFreeSpace SHGetDiskFreeSpaceEx #define SHGetDiskFreeSpace SHGetDiskFreeSpaceEx
SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName, ULARGE_INTEGER* p SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName, __out_opt ULARGE_
ulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INTE INTEGER* pulFreeBytesAvailableToCaller,
GER* pulTotalNumberOfFreeBytes); __out_opt ULARGE_INTEGER* pulTotalNumberOfBytes, __out_opt ULARGE_INTEGER* p
SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName, ULARGE_INTEGER* ulTotalNumberOfFreeBytes);
pulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INT SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName, __out_opt ULARGE
EGER* pulTotalNumberOfFreeBytes); _INTEGER* pulFreeBytesAvailableToCaller,
__out_opt ULARGE_INTEGER* pulTotalNumberOfBytes, __out_opt ULARGE_INTEGER* p
ulTotalNumberOfFreeBytes);
#ifdef UNICODE #ifdef UNICODE
#define SHGetDiskFreeSpaceEx SHGetDiskFreeSpaceExW #define SHGetDiskFreeSpaceEx SHGetDiskFreeSpaceExW
#else #else
#define SHGetDiskFreeSpaceEx SHGetDiskFreeSpaceExA #define SHGetDiskFreeSpaceEx SHGetDiskFreeSpaceExA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(BOOL) SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName SHSTDAPI_(BOOL) SHGetNewLinkInfoA(__in LPCSTR pszLinkTo, __in LPCSTR pszDir, __o
, BOOL *pfMustCopy, UINT uFlags); ut_ecount(MAX_PATH) LPSTR pszName, __out BOOL *pfMustCopy, __in UINT uFlags);
SHSTDAPI_(BOOL) SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszN SHSTDAPI_(BOOL) SHGetNewLinkInfoW(__in LPCWSTR pszLinkTo, __in LPCWSTR pszDir, _
ame, BOOL *pfMustCopy, UINT uFlags); _out_ecount(MAX_PATH) LPWSTR pszName, __out BOOL *pfMustCopy, __in UINT uFlags);
#ifdef UNICODE #ifdef UNICODE
#define SHGetNewLinkInfo SHGetNewLinkInfoW #define SHGetNewLinkInfo SHGetNewLinkInfoW
#else #else
#define SHGetNewLinkInfo SHGetNewLinkInfoA #define SHGetNewLinkInfo SHGetNewLinkInfoA
#endif // !UNICODE #endif // !UNICODE
#define SHGNLI_PIDL 0x000000001 // pszLinkTo is a pidl #define SHGNLI_PIDL 0x000000001 // pszLinkTo is a pidl
#define SHGNLI_PREFIXNAME 0x000000002 // Make name "Shortcut to xxx" #define SHGNLI_PREFIXNAME 0x000000002 // Make name "Shortcut to xxx"
#define SHGNLI_NOUNIQUE 0x000000004 // don't do the unique name gene ration #define SHGNLI_NOUNIQUE 0x000000004 // don't do the unique name gene ration
#if (_WIN32_IE >= 0x0501) #if (_WIN32_IE >= 0x0501)
#define SHGNLI_NOLNK 0x000000008 // don't add ".lnk" extension #define SHGNLI_NOLNK 0x000000008 // don't add ".lnk" extension
#endif // _WIN2_IE >= 0x0501 #endif // _WIN2_IE >= 0x0501
#if (_WIN32_IE >= 0x0600)
#define SHGNLI_NOLOCNAME 0x000000010 // use non localized (parsing) n
ame from the target
#endif
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
//// ////
//// End SHGetFileInfo //// End SHGetFileInfo
//// ////
#if (NTDDI_VERSION >= NTDDI_WIN2K)
// Printer stuff // Printer stuff
#define PRINTACTION_OPEN 0 #define PRINTACTION_OPEN 0
#define PRINTACTION_PROPERTIES 1 #define PRINTACTION_PROPERTIES 1
#define PRINTACTION_NETINSTALL 2 #define PRINTACTION_NETINSTALL 2
#define PRINTACTION_NETINSTALLLINK 3 #define PRINTACTION_NETINSTALLLINK 3
#define PRINTACTION_TESTPAGE 4 #define PRINTACTION_TESTPAGE 4
#define PRINTACTION_OPENNETPRN 5 #define PRINTACTION_OPENNETPRN 5
#ifdef WINNT #ifdef WINNT
#define PRINTACTION_DOCUMENTDEFAULTS 6 #define PRINTACTION_DOCUMENTDEFAULTS 6
#define PRINTACTION_SERVERPROPERTIES 7 #define PRINTACTION_SERVERPROPERTIES 7
#endif #endif
SHSTDAPI_(BOOL) SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, LPCSTR lpBuf2, BOOL fModal); SHSTDAPI_(BOOL) SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, LPCSTR lpBuf2, BOOL fModal);
SHSTDAPI_(BOOL) SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1, LPCWSTR lpBuf2, BOOL fModal); SHSTDAPI_(BOOL) SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1, LPCWSTR lpBuf2, BOOL fModal);
#ifdef UNICODE #ifdef UNICODE
#define SHInvokePrinterCommand SHInvokePrinterCommandW #define SHInvokePrinterCommand SHInvokePrinterCommandW
#else #else
#define SHInvokePrinterCommand SHInvokePrinterCommandA #define SHInvokePrinterCommand SHInvokePrinterCommandA
#endif // !UNICODE #endif // !UNICODE
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef struct _OPEN_PRINTER_PROPS_INFOA
{
DWORD dwSize;
LPSTR pszSheetName;
UINT uSheetIndex;
DWORD dwFlags;
BOOL bModal;
} OPEN_PRINTER_PROPS_INFOA, *POPEN_PRINTER_PROPS_INFOA;
typedef struct _OPEN_PRINTER_PROPS_INFOW
{
DWORD dwSize;
LPWSTR pszSheetName;
UINT uSheetIndex;
DWORD dwFlags;
BOOL bModal;
} OPEN_PRINTER_PROPS_INFOW, *POPEN_PRINTER_PROPS_INFOW;
#ifdef UNICODE
typedef OPEN_PRINTER_PROPS_INFOW OPEN_PRINTER_PROPS_INFO;
typedef POPEN_PRINTER_PROPS_INFOW POPEN_PRINTER_PROPS_INFO;
#else
typedef OPEN_PRINTER_PROPS_INFOA OPEN_PRINTER_PROPS_INFO;
typedef POPEN_PRINTER_PROPS_INFOA POPEN_PRINTER_PROPS_INFO;
#endif // UNICODE
#define PRINT_PROP_FORCE_NAME 0x01
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#endif /* WINVER >= 0x0400 */ #endif /* WINVER >= 0x0400 */
#if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) #if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500)
// //
// The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's // The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's
// icon overlay manager to load any registered icon overlay // icon overlay manager to load any registered icon overlay
// identifers that are not currently loaded. This is useful if an // identifers that are not currently loaded. This is useful if an
// overlay identifier did not load at shell startup but is needed // overlay identifier did not load at shell startup but is needed
skipping to change at line 837 skipping to change at line 1444
// S_OK File/directory is available offline, unless // S_OK File/directory is available offline, unless
// OFFLINE_STATUS_INCOMPLETE is returned. // OFFLINE_STATUS_INCOMPLETE is returned.
// E_INVALIDARG Path is invalid, or not a net path // E_INVALIDARG Path is invalid, or not a net path
// E_FAIL File/directory is not available offline // E_FAIL File/directory is not available offline
// //
// Notes: // Notes:
// OFFLINE_STATUS_INCOMPLETE is never returned for directories. // OFFLINE_STATUS_INCOMPLETE is never returned for directories.
// Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned, // Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned,
// indicating "open in both places." This is common when the server is onlin e. // indicating "open in both places." This is common when the server is onlin e.
// //
SHSTDAPI SHIsFileAvailableOffline(LPCWSTR pwszPath, LPDWORD pdwStatus); SHSTDAPI SHIsFileAvailableOffline(__in LPCWSTR pwszPath, __out_opt LPDWORD pdwSt atus);
#define OFFLINE_STATUS_LOCAL 0x0001 // If open, it's open locally #define OFFLINE_STATUS_LOCAL 0x0001 // If open, it's open locally
#define OFFLINE_STATUS_REMOTE 0x0002 // If open, it's open remotely #define OFFLINE_STATUS_REMOTE 0x0002 // If open, it's open remotely
#define OFFLINE_STATUS_INCOMPLETE 0x0004 // The local copy is currently imcom plete. #define OFFLINE_STATUS_INCOMPLETE 0x0004 // The local copy is currently imcom plete.
// The file will not be available of fline // The file will not be available of fline
// until it has been synchronized. // until it has been synchronized.
#endif #endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
// sets the specified path to use the string resource // sets the specified path to use the string resource
// as the UI instead of the file system name // as the UI instead of the file system name
SHSTDAPI SHSetLocalizedName(LPWSTR pszPath, LPCWSTR pszResModule, int idsRes); SHSTDAPI SHSetLocalizedName(LPCWSTR pszPath, LPCWSTR pszResModule, int idsRes);
#endif // (NTDDI_VERSION >= NTDDI_WINXP)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
// sets the specified path to use the string resource
// as the UI instead of the file system name
SHSTDAPI SHRemoveLocalizedName(LPCWSTR pszPath);
// gets the string resource for the specified path
SHSTDAPI SHGetLocalizedName(__in LPCWSTR pszPath, __out_ecount(cch) LPWSTR pszRe
sModule, UINT cch, __out int *pidsRes);
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
//====== ShellMessageBox ================================================ //====== ShellMessageBox ================================================
// If lpcTitle is NULL, the title is taken from hWnd // If lpcTitle is NULL, the title is taken from hWnd
// If lpcText is NULL, this is assumed to be an Out Of Memory message // If lpcText is NULL, this is assumed to be an Out Of Memory message
// If the selector of lpcTitle or lpcText is NULL, the offset should be a // If the selector of lpcTitle or lpcText is NULL, the offset should be a
// string resource ID // string resource ID
// The variable arguments must all be 32-bit values (even if fewer bits // The variable arguments must all be 32-bit values (even if fewer bits
// are actually used) // are actually used)
// lpcText (or whatever string resource it causes to be loaded) should // lpcText (or whatever string resource it causes to be loaded) should
// be a formatting string similar to wsprintf except that only the // be a formatting string similar to wsprintf except that only the
// following formats are available: // following formats are available:
// %% formats to a single '%' // %% formats to a single '%'
// %nn%s the nn-th arg is a string which is inserted // %nn%s the nn-th arg is a string which is inserted
// %nn%ld the nn-th arg is a DWORD, and formatted decimal // %nn%ld the nn-th arg is a DWORD, and formatted decimal
// %nn%lx the nn-th arg is a DWORD, and formatted hex // %nn%lx the nn-th arg is a DWORD, and formatted hex
// note that lengths are allowed on the %s, %ld, and %lx, just // note that lengths are allowed on the %s, %ld, and %lx, just
// like wsprintf // like wsprintf
// //
#if (_WIN32_IE >= 0x0601)
int _cdecl ShellMessageBoxA( #if !defined(_SHLWAPI_)
HINSTANCE hAppInst, #define LWSTDAPIV_(type) EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE
HWND hWnd, #else
LPCSTR lpcText, #define LWSTDAPIV_(type) STDAPIV_(type)
LPCSTR lpcTitle, #endif
UINT fuStyle,
...); LWSTDAPIV_(int) ShellMessageBoxA(
int _cdecl ShellMessageBoxW( __in_opt HINSTANCE hAppInst,
HINSTANCE hAppInst, __in_opt HWND hWnd,
HWND hWnd, __in LPCSTR lpcText,
LPCWSTR lpcText, __in_opt LPCSTR lpcTitle,
LPCWSTR lpcTitle, __in UINT fuStyle, ...);
UINT fuStyle, LWSTDAPIV_(int) ShellMessageBoxW(
...); __in_opt HINSTANCE hAppInst,
__in_opt HWND hWnd,
__in LPCWSTR lpcText,
__in_opt LPCWSTR lpcTitle,
__in UINT fuStyle, ...);
#ifdef UNICODE #ifdef UNICODE
#define ShellMessageBox ShellMessageBoxW #define ShellMessageBox ShellMessageBoxW
#else #else
#define ShellMessageBox ShellMessageBoxA #define ShellMessageBox ShellMessageBoxA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_IE >= 0x0601) #if (NTDDI_VERSION >= NTDDI_WIN2K)
#if (_WIN32_IE >= 0x0601)
SHSTDAPI_(BOOL) IsLFNDriveA(LPCSTR pszPath); SHSTDAPI_(BOOL) IsLFNDriveA(LPCSTR pszPath);
SHSTDAPI_(BOOL) IsLFNDriveW(LPCWSTR pszPath); SHSTDAPI_(BOOL) IsLFNDriveW(LPCWSTR pszPath);
#ifdef UNICODE #ifdef UNICODE
#define IsLFNDrive IsLFNDriveW #define IsLFNDrive IsLFNDriveW
#else #else
#define IsLFNDrive IsLFNDriveA #define IsLFNDrive IsLFNDriveA
#endif // !UNICODE #endif // !UNICODE
#endif // (_WIN32_IE >= 0x0601) #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
#if _WIN32_IE >= 0x0600 #if _WIN32_IE >= 0x0600
STDAPI SHEnumerateUnreadMailAccountsA(HKEY hKeyUser, DWORD dwIndex, LPS STDAPI SHEnumerateUnreadMailAccountsA(HKEY hKeyUser, DWORD dwIndex, __o
TR pszMailAddress, int cchMailAddress); ut_ecount(cchMailAddress) LPSTR pszMailAddress, int cchMailAddress);
STDAPI SHEnumerateUnreadMailAccountsW(HKEY hKeyUser, DWORD dwIndex, LPW STDAPI SHEnumerateUnreadMailAccountsW(HKEY hKeyUser, DWORD dwIndex, __o
STR pszMailAddress, int cchMailAddress); ut_ecount(cchMailAddress) LPWSTR pszMailAddress, int cchMailAddress);
#ifdef UNICODE #ifdef UNICODE
#define SHEnumerateUnreadMailAccounts SHEnumerateUnreadMailAccountsW #define SHEnumerateUnreadMailAccounts SHEnumerateUnreadMailAccountsW
#else #else
#define SHEnumerateUnreadMailAccounts SHEnumerateUnreadMailAccountsA #define SHEnumerateUnreadMailAccounts SHEnumerateUnreadMailAccountsA
#endif // !UNICODE #endif // !UNICODE
STDAPI SHGetUnreadMailCountA(HKEY hKeyUser, LPCSTR pszMailAddress, DWOR STDAPI SHGetUnreadMailCountA(HKEY hKeyUser, LPCSTR pszMailAddress, __ou
D *pdwCount, FILETIME *pFileTime, LPSTR pszShellExecuteCommand, int cchShellExec t_opt DWORD *pdwCount, __out_opt FILETIME *pFileTime, __out_ecount_opt(cchShellE
uteCommand); xecuteCommand) LPSTR pszShellExecuteCommand, int cchShellExecuteCommand);
STDAPI SHGetUnreadMailCountW(HKEY hKeyUser, LPCWSTR pszMailAddress, DWO STDAPI SHGetUnreadMailCountW(HKEY hKeyUser, LPCWSTR pszMailAddress, __o
RD *pdwCount, FILETIME *pFileTime, LPWSTR pszShellExecuteCommand, int cchShellEx ut_opt DWORD *pdwCount, __out_opt FILETIME *pFileTime, __out_ecount_opt(cchShell
ecuteCommand); ExecuteCommand) LPWSTR pszShellExecuteCommand, int cchShellExecuteCommand);
#ifdef UNICODE #ifdef UNICODE
#define SHGetUnreadMailCount SHGetUnreadMailCountW #define SHGetUnreadMailCount SHGetUnreadMailCountW
#else #else
#define SHGetUnreadMailCount SHGetUnreadMailCountA #define SHGetUnreadMailCount SHGetUnreadMailCountA
#endif // !UNICODE #endif // !UNICODE
STDAPI SHSetUnreadMailCountA(LPCSTR pszMailAddress, DWORD dwCount, LPCS TR pszShellExecuteCommand); STDAPI SHSetUnreadMailCountA(LPCSTR pszMailAddress, DWORD dwCount, LPCS TR pszShellExecuteCommand);
STDAPI SHSetUnreadMailCountW(LPCWSTR pszMailAddress, DWORD dwCount, LPC WSTR pszShellExecuteCommand); STDAPI SHSetUnreadMailCountW(LPCWSTR pszMailAddress, DWORD dwCount, LPC WSTR pszShellExecuteCommand);
#ifdef UNICODE #ifdef UNICODE
#define SHSetUnreadMailCount SHSetUnreadMailCountW #define SHSetUnreadMailCount SHSetUnreadMailCountW
#else #else
#define SHSetUnreadMailCount SHSetUnreadMailCountA #define SHSetUnreadMailCount SHSetUnreadMailCountA
#endif // !UNICODE #endif // !UNICODE
#endif /* _WIN32_IE >= 0x0600 */ #endif /* _WIN32_IE >= 0x0600 */
#if (_WIN32_IE >= 0x0601) #if (_WIN32_IE >= 0x0601)
STDAPI_(BOOL) SHTestTokenMembership(HANDLE hToken, ULONG ulRID); STDAPI_(BOOL) SHTestTokenMembership(__in_opt HANDLE hToken, __in ULONG ulRID);
#endif // (_WIN32_IE >= 0x0601) #endif // (_WIN32_IE >= 0x0601)
#if _WIN32_IE >= 0x0600 #if _WIN32_IE >= 0x0600
STDAPI SHGetImageList(int iImageList, REFIID riid, void **ppvObj); #if (NTDDI_VERSION >= NTDDI_WINXP)
SHSTDAPI SHGetImageList(int iImageList, REFIID riid, __out void **ppvObj);
#endif // (NTDDI_VERSION >= NTDDI_WINXP)
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define SHIL_LARGE 0 // normally 32x32 #define SHIL_LARGE 0 // normally 32x32
#define SHIL_SMALL 1 // normally 16x16 #define SHIL_SMALL 1 // normally 16x16
#define SHIL_EXTRALARGE 2 #define SHIL_EXTRALARGE 2
#define SHIL_SYSSMALL 3 // like SHIL_SMALL, but tracks system small icon metric correctly #define SHIL_SYSSMALL 3 // like SHIL_SMALL, but tracks system small icon metric correctly
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define SHIL_JUMBO 4 // normally 256x256
#define SHIL_LAST SHIL_JUMBO
#else
#define SHIL_LAST SHIL_SYSSMALL #define SHIL_LAST SHIL_SYSSMALL
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // (NTDDI_VERSION >= NTDDI_WINXP)
// Function call types for ntshrui folder sharing helpers // Function call types for ntshrui folder sharing helpers
typedef HRESULT (STDMETHODCALLTYPE *PFNCANSHAREFOLDERW)(IN LPCWSTR pszPath); typedef HRESULT (STDMETHODCALLTYPE *PFNCANSHAREFOLDERW)(LPCWSTR pszPath);
typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(IN HWND hwndParent, I typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(HWND hwndParent, LPCW
N LPCWSTR pszPath); STR pszPath);
#endif /* _WIN32_IE >= 0x0600 */ #endif /* _WIN32_IE >= 0x0600 */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#if !defined(_WIN64) #if !defined(_WIN64)
#include <poppack.h> #include <poppack.h>
#endif #endif
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
// API for new Network Address Control
// Instantiation
#define WC_NETADDRESS L"msctls_netaddress"
SHSTDAPI_(BOOL) InitNetworkAddressControl();
// Address Control Messages
// NCM_GETADDRESS returns the type of address that is present in the
// control (based on TBD Net Address flags). If the input string has
// not been validated using this message will force the validation of
// the input string. The WPARAM is a BOOL to determine to show the
// balloon tip. The LPARAM is a pointer to the structure to fill in
// with the address type and address string.
#define NCM_GETADDRESS (WM_USER+1)
#define NetAddr_GetAddress(hwnd,pv) \
(HRESULT)SNDMSG(hwnd,NCM_GETADDRESS,0,(LPARAM)pv)
typedef struct tagNC_ADDRESS
{
struct NET_ADDRESS_INFO_ *pAddrInfo; // defined in iphlpapi.h
USHORT PortNumber;
BYTE PrefixLength;
} NC_ADDRESS, *PNC_ADDRESS;
// NCM_SETALLOWTYPE sets the type of addresses that the control will allow.
// The address flags are defined in iphlpapi.h
#define NCM_SETALLOWTYPE (WM_USER+2)
#define NetAddr_SetAllowType(hwnd,addrMask) \
(HRESULT)SNDMSG(hwnd,NCM_SETALLOWTYPE,(WPARAM)addrMask,0)
// NCM_GETALLOWTYPE returns the currently allowed type mask.
#define NCM_GETALLOWTYPE (WM_USER+3)
#define NetAddr_GetAllowType(hwnd) \
(DWORD)SNDMSG(hwnd,NCM_GETALLOWTYPE,0,0)
// NCM_DISPLAYERRORTIP displays the error balloon tip with the correct
// error string (based on the last failure from the NCM_GETADDRESS call
#define NCM_DISPLAYERRORTIP (WM_USER+4)
#define NetAddr_DisplayErrorTip(hwnd) \
(HRESULT)SNDMSG(hwnd,NCM_DISPLAYERRORTIP,0,0)
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
// Returns the type of media (CD, DVD, Blank, etc) that is in the drive.
// dwMediaContent is set to a combination of ARCONTENT flags.
STDAPI SHGetDriveMedia(LPCWSTR pszDrive, __out DWORD *pdwMediaContent);
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
// CPL task apis
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
// Windows Parental Controls (WPC) query apis
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif /* _INC_SHELLAPI */ #endif /* _INC_SHELLAPI */
 End of changes. 89 change blocks. 
212 lines changed or deleted 986 lines changed or added


 shlobj.h (6.00.3790.3959-Windows 5.0)   shlobj.h (6.0.6002.18005-Windows 6.0) 
skipping to change at line 12 skipping to change at line 12
// //
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// //
// File: shlobj.h // File: shlobj.h
// //
//=========================================================================== //===========================================================================
#ifndef _SHLOBJ_H_ #ifndef _SHLOBJ_H_
#define _SHLOBJ_H_ #define _SHLOBJ_H_
#ifndef _WINRESRC_
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
#else
#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
#error _WIN32_IE setting conflicts with _WIN32_WINNT setting
#endif
#endif
#endif
#ifndef SNDMSG #ifndef SNDMSG
#ifdef __cplusplus #ifdef __cplusplus
#define SNDMSG ::SendMessage #define SNDMSG ::SendMessage
#else #else
#define SNDMSG SendMessage #define SNDMSG SendMessage
#endif #endif
#endif // ifndef SNDMSG #endif // ifndef SNDMSG
// //
// Define API decoration for direct importing of DLL references. // Define API decoration for direct importing of DLL references.
skipping to change at line 103 skipping to change at line 93
#include <prsht.h> #include <prsht.h>
#endif #endif
#ifndef _INC_COMMCTRL #ifndef _INC_COMMCTRL
#include <commctrl.h> // for LPTBBUTTON #include <commctrl.h> // for LPTBBUTTON
#endif #endif
#ifndef INITGUID #ifndef INITGUID
#include <shlguid.h> #include <shlguid.h>
#endif /* !INITGUID */ #endif /* !INITGUID */
#include <pshpack1.h> /* Assume byte packing throughout */
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
#include <shtypes.h> #include <shtypes.h>
#include <shobjidl.h> #include <shobjidl.h>
//=========================================================================== #if defined(_MSC_VER) && (_MSC_VER >= 1200)
// #pragma once
// Task allocator API #endif
//
// All the shell extensions MUST use the task allocator (see OLE 2.0
// programming guild for its definition) when they allocate or free
// memory objects (mostly ITEMIDLIST) that are returned across any
// shell interfaces. There are two ways to access the task allocator
// from a shell extension depending on whether or not it is linked with
// OLE32.DLL or not (purely for efficiency).
//
// (1) A shell extension which calls any OLE API (i.e., linked with
// OLE32.DLL) should call OLE's task allocator (by retrieving
// the task allocator by calling CoGetMalloc API).
//
// (2) A shell extension which does not call any OLE API (i.e., not linked
// with OLE32.DLL) should call the shell task allocator API (defined
// below), so that the shell can quickly loads it when OLE32.DLL is not
// loaded by any application at that point.
//
// Notes:
// In next version of Windowso release, SHGetMalloc will be replaced by
// the following macro.
//
// #define SHGetMalloc(ppmem) CoGetMalloc(MEMCTX_TASK, ppmem)
//
//===========================================================================
SHSTDAPI SHGetMalloc(LPMALLOC * ppMalloc); #ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
#if (_WIN32_IE >= 0x0601) #include <pshpack1.h> /* Assume byte packing throughout */
SHSTDAPI_(void *) SHAlloc(SIZE_T cb);
SHSTDAPI_(void) SHFree(void * pv);
#endif // (_WIN32_IE >= 0x0601)
//=========================================================================== //===========================================================================
// //
// IContextMenu interface // Legacy exports that are no longer needed, call the COM API instead
//
// [OverView]
//
// The shell uses the IContextMenu interface in following three cases.
//
// case-1: The shell is loading context menu extensions.
//
// When the user clicks the right mouse button on an item within the shell's
// name space (i.g., file, directory, server, work-group, etc.), it creates
// the default context menu for its type, then loads context menu extensions
// that are registered for that type (and its base type) so that they can
// add extra menu items. Those context menu extensions are registered at
// HKCR\{ProgID}\shellex\ContextMenuHandlers.
//
// case-2: The shell is retrieving a context menu of sub-folders in extended
// name-space.
//
// When the explorer's name space is extended by name space extensions,
// the shell calls their IShellFolder::GetUIObjectOf to get the IContextMenu
// objects when it creates context menus for folders under those extended
// name spaces.
//
// case-3: The shell is loading non-default drag and drop handler for directorie
s.
//
// When the user performed a non-default drag and drop onto one of file
// system folders (i.e., directories), it loads shell extensions that are
// registered at HKCR\{ProgID}\DragDropHandlers.
//
//
// [Member functions]
//
//
// IContextMenu::QueryContextMenu
//
// This member function may insert one or more menuitems to the specified
// menu (hmenu) at the specified location (indexMenu which is never be -1).
// The IDs of those menuitem must be in the specified range (idCmdFirst and
// idCmdLast). It returns the maximum menuitem ID offset (ushort) in the
// 'code' field (low word) of the scode.
//
// The uFlags specify the context. It may have one or more of following
// flags.
//
// CMF_DEFAULTONLY: This flag is passed if the user is invoking the default
// action (typically by double-clicking, case 1 and 2 only). Context menu
// extensions (case 1) should not add any menu items, and returns NOERROR.
//
// CMF_VERBSONLY: The explorer passes this flag if it is constructing
// a context menu for a short-cut object (case 1 and case 2 only). If this
// flag is passed, it should not add any menu-items that is not appropriate
// from a short-cut.
// A good example is the "Delete" menuitem, which confuses the user
// because it is not clear whether it deletes the link source item or the
// link itself.
//
// CMF_EXPLORER: The explorer passes this flag if it has the left-side pane
// (case 1 and 2 only). Context menu extensions should ignore this flag.
//
// High word (16-bit) are reserved for context specific communications
// and the rest of flags (13-bit) are reserved by the system.
//
//
// IContextMenu::InvokeCommand
//
// This member is called when the user has selected one of menuitems that
// are inserted by previous QueryContextMenu member. In this case, the
// LOWORD(lpici->lpVerb) contains the menuitem ID offset (menuitem ID -
// idCmdFirst).
//
// This member function may also be called programmatically. In such a case,
// lpici->lpVerb specifies the canonical name of the command to be invoked,
// which is typically retrieved by GetCommandString member previously.
//
// Parameters in lpci:
// cbSize -- Specifies the size of this structure (sizeof(*lpci))
// hwnd -- Specifies the owner window for any message/dialog box.
// fMask -- Specifies whether or not dwHotkey/hIcon paramter is valid.
// lpVerb -- Specifies the command to be invoked.
// lpParameters -- Parameters (optional)
// lpDirectory -- Working directory (optional)
// nShow -- Specifies the flag to be passed to ShowWindow (SW_*).
// dwHotKey -- Hot key to be assigned to the app after invoked (optional).
// hIcon -- Specifies the icon (optional).
// hMonitor -- Specifies the default monitor (optional).
//
//
// IContextMenu::GetCommandString
//
// This member function is called by the explorer either to get the
// canonical (language independent) command name (uFlags == GCS_VERB) or
// the help text ((uFlags & GCS_HELPTEXT) != 0) for the specified command.
// The retrieved canonical string may be passed to its InvokeCommand
// member function to invoke a command programmatically. The explorer
// displays the help texts in its status bar; therefore, the length of
// the help text should be reasonably short (<40 characters).
//
// Parameters:
// idCmd -- Specifies menuitem ID offset (from idCmdFirst)
// uFlags -- Either GCS_VERB or GCS_HELPTEXT
// pwReserved -- Reserved (must pass NULL when calling, must ignore when calle
d)
// pszName -- Specifies the string buffer.
// cchMax -- Specifies the size of the string buffer.
// //
//=========================================================================== //===========================================================================
// QueryContextMenu uFlags SHSTDAPI SHGetMalloc(__out IMalloc **ppMalloc); // CoGetMalloc(MEMCTX_TASK,ppMal
#define CMF_NORMAL 0x00000000 loc)
#define CMF_DEFAULTONLY 0x00000001 SHSTDAPI_(void *) SHAlloc(SIZE_T cb); // CoTaskMemAlloc(cb)
#define CMF_VERBSONLY 0x00000002 SHSTDAPI_(void) SHFree(__in_opt void * pv); // CoTaskMemFree(pv)
#define CMF_EXPLORE 0x00000004
#define CMF_NOVERBS 0x00000008
#define CMF_CANRENAME 0x00000010
#define CMF_NODEFAULT 0x00000020
#define CMF_INCLUDESTATIC 0x00000040
#define CMF_EXTENDEDVERBS 0x00000100 // rarely used verbs
#define CMF_RESERVED 0xffff0000 // View specific
// GetCommandString uFlags
#define GCS_VERBA 0x00000000 // canonical verb
#define GCS_HELPTEXTA 0x00000001 // help text (for status bar)
#define GCS_VALIDATEA 0x00000002 // validate command exists
#define GCS_VERBW 0x00000004 // canonical verb (unicode)
#define GCS_HELPTEXTW 0x00000005 // help text (unicode version)
#define GCS_VALIDATEW 0x00000006 // validate command exists (unicode)
#define GCS_UNICODE 0x00000004 // for bit testing - Unicode string
#ifdef UNICODE
#define GCS_VERB GCS_VERBW
#define GCS_HELPTEXT GCS_HELPTEXTW
#define GCS_VALIDATE GCS_VALIDATEW
#else
#define GCS_VERB GCS_VERBA
#define GCS_HELPTEXT GCS_HELPTEXTA
#define GCS_VALIDATE GCS_VALIDATEA
#endif
#define CMDSTR_NEWFOLDERA "NewFolder"
#define CMDSTR_VIEWLISTA "ViewList"
#define CMDSTR_VIEWDETAILSA "ViewDetails"
#define CMDSTR_NEWFOLDERW L"NewFolder"
#define CMDSTR_VIEWLISTW L"ViewList"
#define CMDSTR_VIEWDETAILSW L"ViewDetails"
#ifdef UNICODE
#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERW
#define CMDSTR_VIEWLIST CMDSTR_VIEWLISTW
#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSW
#else
#define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERA
#define CMDSTR_VIEWLIST CMDSTR_VIEWLISTA
#define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSA
#endif
#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY
#define CMIC_MASK_ICON SEE_MASK_ICON
#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI
#define CMIC_MASK_UNICODE SEE_MASK_UNICODE
#define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE
#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME
#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM
#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE
#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK
#if (_WIN32_IE >= 0x0603)
#define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS
#endif // (_WIN32_IE >= 0x0603)
#if (_WIN32_IE >= 0x0501)
#define CMIC_MASK_SHIFT_DOWN 0x10000000
#define CMIC_MASK_CONTROL_DOWN 0x40000000
#endif // (_WIN32_IE >= 0x501)
#if (_WIN32_IE >= 0x0560)
#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE
#define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS
#endif // (_WIN32_IE >= 0x560)
#if (_WIN32_IE >= 0x0400)
#define CMIC_MASK_PTINVOKE 0x20000000
#endif
#include <pshpack8.h>
//NOTE: When SEE_MASK_HMONITOR is set, hIcon is treated as hMonitor
typedef struct _CMINVOKECOMMANDINFO {
DWORD cbSize; // sizeof(CMINVOKECOMMANDINFO)
DWORD fMask; // any combination of CMIC_MASK_*
HWND hwnd; // might be NULL (indicating no owner window)
LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset)
LPCSTR lpParameters; // might be NULL (indicating no parameter)
LPCSTR lpDirectory; // might be NULL (indicating no specific directory)
int nShow; // one of SW_ values for ShowWindow() API
DWORD dwHotKey;
HANDLE hIcon;
} CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
typedef struct _CMInvokeCommandInfoEx {
DWORD cbSize; // must be sizeof(CMINVOKECOMMANDINFOEX)
DWORD fMask; // any combination of CMIC_MASK_*
HWND hwnd; // might be NULL (indicating no owner window)
LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset)
LPCSTR lpParameters; // might be NULL (indicating no parameter)
LPCSTR lpDirectory; // might be NULL (indicating no specific directory)
int nShow; // one of SW_ values for ShowWindow() API
DWORD dwHotKey;
HANDLE hIcon;
LPCSTR lpTitle; // For CreateProcess-StartupInfo.lpTitle
LPCWSTR lpVerbW; // Unicode verb (for those who can use it)
LPCWSTR lpParametersW; // Unicode parameters (for those who can use it)
LPCWSTR lpDirectoryW; // Unicode directory (for those who can use it)
LPCWSTR lpTitleW; // Unicode title (for those who can use it)
#if (_WIN32_IE >= 0x0400)
POINT ptInvoke; // Point where it's invoked
#endif
} CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
#include <poppack.h> /* Return to byte packing */
#undef INTERFACE
#define INTERFACE IContextMenu
DECLARE_INTERFACE_(IContextMenu, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(QueryContextMenu)(THIS_
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags) PURE;
STDMETHOD(InvokeCommand)(THIS_
LPCMINVOKECOMMANDINFO lpici) PURE;
STDMETHOD(GetCommandString)(THIS_
UINT_PTR idCmd,
UINT uType,
UINT * pwReserved,
LPSTR pszName,
UINT cchMax) PURE;
};
typedef IContextMenu * LPCONTEXTMENU;
//
// IContextMenu2 (IContextMenu with one new member)
//
// IContextMenu2::HandleMenuMsg
//
// This function is called, if the client of IContextMenu is aware of
// IContextMenu2 interface and receives one of following messages while
// it is calling TrackPopupMenu (in the window proc of hwnd):
// WM_INITPOPUP, WM_DRAWITEM and WM_MEASUREITEM
// The callee may handle these messages to draw owner draw menuitems.
//
#undef INTERFACE
#define INTERFACE IContextMenu2
DECLARE_INTERFACE_(IContextMenu2, IContextMenu)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IContextMenu methods ***
STDMETHOD(QueryContextMenu)(THIS_
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags) PURE;
STDMETHOD(InvokeCommand)(THIS_
LPCMINVOKECOMMANDINFO lpici) PURE;
STDMETHOD(GetCommandString)(THIS_
UINT_PTR idCmd,
UINT uType,
UINT * pwReserved,
LPSTR pszName,
UINT cchMax) PURE;
// *** IContextMenu2 methods ***
STDMETHOD(HandleMenuMsg)(THIS_
UINT uMsg,
WPARAM wParam,
LPARAM lParam) PURE;
};
typedef IContextMenu2 * LPCONTEXTMENU2;
//
// IContextMenu3 (IContextMenu with one new member)
//
// IContextMenu3::HandleMenuMsg2
//
// This function is called, if the client of IContextMenu is aware of
// IContextMenu3 interface and receives a menu message while
// it is calling TrackPopupMenu (in the window proc of hwnd):
//
#undef INTERFACE
#define INTERFACE IContextMenu3
DECLARE_INTERFACE_(IContextMenu3, IContextMenu2)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IContextMenu methods ***
STDMETHOD(QueryContextMenu)(THIS_
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags) PURE;
STDMETHOD(InvokeCommand)(THIS_
LPCMINVOKECOMMANDINFO lpici) PURE;
STDMETHOD(GetCommandString)(THIS_
UINT_PTR idCmd,
UINT uType,
UINT * pwReserved,
LPSTR pszName,
UINT cchMax) PURE;
// *** IContextMenu2 methods ***
STDMETHOD(HandleMenuMsg)(THIS_
UINT uMsg,
WPARAM wParam,
LPARAM lParam) PURE;
// *** IContextMenu3 methods ***
STDMETHOD(HandleMenuMsg2)(THIS_
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT* plResult) PURE;
};
typedef IContextMenu3 * LPCONTEXTMENU3;
#if (_WIN32_IE >= 0x0500)
#undef INTERFACE
#define INTERFACE IPersistFolder3
#define CSIDL_FLAG_PFTI_TRACKTARGET CSIDL_FLAG_DONT_VERIFY
// DESCRIPTION: PERSIST_FOLDER_TARGET_INFO
// This stucture is used for Folder Shortcuts which allow the shell to
// have a file system folder act like another area in the name space.
// One of pidlTargetFolder, szTargetParsingName, or csidl needs to
// specify the destination name space.
//
// pidlTargetFolder: This is a full pidl to the target folder. Can be NULL in t
he IPersistFolder3::InitializeEx()
// call but not in the GetFolderTargetInfo() return structure.
// szTargetParsingName: Empty string if not specified. Ortherwise, it is the par
sible name
// to the target. This name can be parsed by IShellFolder
::
// ParsedName() from the desktop.
// szNetworkProvider: Can be an empty string. If not empty, it specifies the ty
pe of network
// provider that will be used when binding to the target. Th
is is used
// for performance optimizations for the WNet APIs.
// dwAttributes: -1 if not known. These are the SFGAO_ flags for IShellFolder::
GetAttributesOf()
// csidl: This is -1 if it's not used. This can be used instead of pidlTargetFo
lder or
// szTargetParsingName to indicate the TargetFolder. See the list of CSI
DL_ folders
// below. CSIDL_FLAG_PFTI_TRACKTARGET means that the IShellFolder's targ
et folder
// should change if the user changes the target of the underlying CSIDL v
alue.
// You can also pass CSIDL_FLAG_CREATE to indicate that the target folder
// should be created if it does not exist. No other CSIDL_FLAG_* values
are supported.
#include <pshpack8.h>
typedef struct
{
LPITEMIDLIST pidlTargetFolder; // pidl for the folder we want
to intiailize
WCHAR szTargetParsingName[MAX_PATH]; // optional parsing name for t
he target
WCHAR szNetworkProvider[MAX_PATH]; // optional network provider
DWORD dwAttributes; // optional FILE_ATTRIBUTES_ f
lags (-1 if not used)
int csidl; // optional folder index (SHGe
tFolderPath()) -1 if not used
} PERSIST_FOLDER_TARGET_INFO;
#include <poppack.h> /* Return to byte packing */
// DESCRIPTION: IPersistFolder3
// This interface is implemented by an IShellFolder object that wants non-def
ault
// handling of Folder Shortcuts. In general, shell name space extensions should
use
// pidlRoot (the alias pidl) as their location in the name space and pass it to
public
// APIs, such as ShellExecute(). The one exception is that pidlTarget should be
used
// when sending ChangeNotifies or registering to listen for change notifies
// (see SFVM_GETNOTIFY).
//
// InitializeEx: This method initializes an IShellFolder and specifies where
// it is rooted in the name space.
// pbc: May be NULL.
// pidlRoot: This is the same parameter as IPersistFolder::Initialize(). Ca
ller allocates
// and frees this parameter.
// ppfti: May be NULL, in which case this is the same as a call to IPersist
Folder::Initialize().
// Otherwise this is a Folder Shortcut and this structure specifies
the target
// folder and it's attributes.
// GetFolderTargetInfo: This is used by the caller to find information about
// the folder shortcut. This structure may not be initialized by th
e caller,
// so the callee needs to initialize every member. The callee alloc
ates
// pidlTargetFolder and the caller will free it. Filling in pidlTar
getFolder is
// ALWAYS required.
DECLARE_INTERFACE_(IPersistFolder3, IPersistFolder2)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
// *** IPersist methods ***
STDMETHOD(GetClassID)(THIS_ LPCLSID lpClassID) PURE;
// *** IPersistFolder methods ***
STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidl) PURE;
// *** IPersistFolder2 methods ***
STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST *ppidl) PURE;
// *** IPersistFolder3 methods ***
STDMETHOD(InitializeEx)(THIS_ IBindCtx *pbc, LPCITEMIDLIST pidlRoot, const P
ERSIST_FOLDER_TARGET_INFO *ppfti) PURE;
STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO *ppfti) PURE
;
};
#endif
//
//=========================================================================== //===========================================================================
// //
// IExtractIcon interface // IExtractIcon interface
// //
// This interface is used in two different places in the shell. // This interface is used in two different places in the shell.
// //
// Case-1: Icons of sub-folders for the scope-pane of the explorer. // Case-1: Icons of sub-folders for the scope-pane of the explorer.
// //
// It is used by the explorer to get the "icon location" of // It is used by the explorer to get the "icon location" of
skipping to change at line 626 skipping to change at line 147
// Case-2: Extracting an icon image from a file // Case-2: Extracting an icon image from a file
// //
// It is used by the shell when it extracts an icon image // It is used by the shell when it extracts an icon image
// from a file. When the shell is extracting an icon from a file, // from a file. When the shell is extracting an icon from a file,
// it does following: // it does following:
// (1) creates the icon extraction handler object (by getting its CLSID // (1) creates the icon extraction handler object (by getting its CLSID
// under the {ProgID}\shell\ExtractIconHanler key and calling // under the {ProgID}\shell\ExtractIconHanler key and calling
// CoCreateInstance requesting for IExtractIcon interface). // CoCreateInstance requesting for IExtractIcon interface).
// (2) Calls IExtractIcon::GetIconLocation. // (2) Calls IExtractIcon::GetIconLocation.
// (3) Then, calls IExtractIcon::ExtractIcon with the location/index pair. // (3) Then, calls IExtractIcon::ExtractIcon with the location/index pair.
// (4) If (3) returns NOERROR, it uses the returned icon. // (4) If (3) returns S_OK, it uses the returned icon.
// (5) Otherwise, it recursively calls this logic with new location // (5) Otherwise, it recursively calls this logic with new location
// assuming that the location string contains a fully qualified path name. // assuming that the location string contains a fully qualified path name.
// //
// From extension programmer's point of view, there are only two cases // From extension programmer's point of view, there are only two cases
// where they provide implementations of IExtractIcon: // where they provide implementations of IExtractIcon:
// Case-1) providing explorer extensions (i.e., IShellFolder). // Case-1) providing explorer extensions (i.e., IShellFolder).
// Case-2) providing per-instance icons for some types of files. // Case-2) providing per-instance icons for some types of files.
// //
// Because Case-1 is described above, we'll explain only Case-2 here. // Because Case-1 is described above, we'll explain only Case-2 here.
// //
skipping to change at line 671 skipping to change at line 192
// //
// This function returns an icon location. // This function returns an icon location.
// //
// Parameters: // Parameters:
// uFlags [in] -- Specifies if it is opened or not (GIL_OPENICON or 0) // uFlags [in] -- Specifies if it is opened or not (GIL_OPENICON or 0)
// szIconFile [out] -- Specifies the string buffer buffer for a location name. // szIconFile [out] -- Specifies the string buffer buffer for a location name.
// cchMax [in] -- Specifies the size of szIconFile (almost always MAX_PAT H) // cchMax [in] -- Specifies the size of szIconFile (almost always MAX_PAT H)
// piIndex [out] -- Sepcifies the address of UINT for the index. // piIndex [out] -- Sepcifies the address of UINT for the index.
// pwFlags [out] -- Returns GIL_* flags // pwFlags [out] -- Returns GIL_* flags
// Returns: // Returns:
// NOERROR, if it returns a valid location; S_FALSE, if the shell use a // S_OK, if it returns a valid location; S_FALSE, if the shell use a
// default icon. // default icon.
// //
// Notes: The location may or may not be a path to a file. The caller can // Notes: The location may or may not be a path to a file. The caller can
// not assume anything unless the subsequent Extract member call returns // not assume anything unless the subsequent Extract member call returns
// S_FALSE. // S_FALSE.
// //
// if the returned location is not a path to a file, GIL_NOTFILENAME should // if the returned location is not a path to a file, GIL_NOTFILENAME should
// be set in the returned flags. // be set in the returned flags.
// //
// IExtractIcon::Extract // IExtractIcon::Extract
skipping to change at line 694 skipping to change at line 215
// //
// Parameters: // Parameters:
// pszFile [in] -- Specifies the icon location (typically a path to a file). // pszFile [in] -- Specifies the icon location (typically a path to a file).
// nIconIndex [in] -- Specifies the icon index. // nIconIndex [in] -- Specifies the icon index.
// phiconLarge [out] -- Specifies the HICON variable for large icon. // phiconLarge [out] -- Specifies the HICON variable for large icon.
// phiconSmall [out] -- Specifies the HICON variable for small icon. // phiconSmall [out] -- Specifies the HICON variable for small icon.
// nIconSize [in] -- Specifies the size icon required (size of large icon) // nIconSize [in] -- Specifies the size icon required (size of large icon)
// LOWORD is the requested large icon size // LOWORD is the requested large icon size
// HIWORD is the requested small icon size // HIWORD is the requested small icon size
// Returns: // Returns:
// NOERROR, if it extracted the from the file. // S_OK, if it extracted the from the file.
// S_FALSE, if the caller should extract from the file specified in the // S_FALSE, if the caller should extract from the file specified in the
// location. // location.
// //
//=========================================================================== //===========================================================================
// GetIconLocation() input flags // GetIconLocation() input flags
#define GIL_OPENICON 0x0001 // allows containers to specify an "open" l #define GIL_OPENICON 0x0001 // allows containers to specify an "
ook open" look
#define GIL_FORSHELL 0x0002 // icon is to be displayed in a ShellFolder #define GIL_FORSHELL 0x0002 // icon is to be displayed in a Shel
#define GIL_ASYNC 0x0020 // this is an async extract, return E_PENDI lFolder
NG #define GIL_ASYNC 0x0020 // this is an async extract, return
#define GIL_DEFAULTICON 0x0040 // get the default icon location if the fin E_PENDING
al one takes too long to get #define GIL_DEFAULTICON 0x0040 // get the default icon location if
#define GIL_FORSHORTCUT 0x0080 // the icon is for a shortcut to the object the final one takes too long to get
#define GIL_FORSHORTCUT 0x0080 // the icon is for a shortcut to the
object
#define GIL_CHECKSHIELD 0x0200 // return GIL_SHIELD or GIL_FORCENOS
HIELD, don't block if GIL_ASYNC is set
// GetIconLocation() return flags // GetIconLocation() return flags
#define GIL_SIMULATEDOC 0x0001 // simulate this document icon for this #define GIL_SIMULATEDOC 0x0001 // simulate this document icon for this
#define GIL_PERINSTANCE 0x0002 // icons from this class are per instance ( #define GIL_PERINSTANCE 0x0002 // icons from this class are per instance
each file has its own) (each file has its own)
#define GIL_PERCLASS 0x0004 // icons from this class per class (shared #define GIL_PERCLASS 0x0004 // icons from this class per class (shared
for all files of this type) for all files of this type)
#define GIL_NOTFILENAME 0x0008 // location is not a filename, must call :: #define GIL_NOTFILENAME 0x0008 // location is not a filename, must call :
ExtractIcon :ExtractIcon
#define GIL_DONTCACHE 0x0010 // this icon should not be cached #define GIL_DONTCACHE 0x0010 // this icon should not be cached
#define GIL_SHIELD 0x0200 // icon should be "stamped" with the LUA s
hield
#define GIL_FORCENOSHIELD 0x0400 // icon must *not* be "stamped" with the L
UA shield
#undef INTERFACE #undef INTERFACE
#define INTERFACE IExtractIconA #define INTERFACE IExtractIconA
DECLARE_INTERFACE_(IExtractIconA, IUnknown) // exic DECLARE_INTERFACE_IID_(IExtractIconA, IUnknown, "000214eb-0000-0000-c000-0000000 00046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IExtractIcon methods *** // *** IExtractIcon methods ***
STDMETHOD(GetIconLocation)(THIS_ STDMETHOD(GetIconLocation)(THIS_
UINT uFlags, UINT uFlags,
LPSTR szIconFile, __out_ecount(cchMax) LPSTR szIconFile,
UINT cchMax, UINT cchMax,
int * piIndex, __out int * piIndex,
UINT * pwFlags) PURE; __out UINT * pwFlags) PURE;
STDMETHOD(Extract)(THIS_ STDMETHOD(Extract)(THIS_
LPCSTR pszFile, LPCSTR pszFile,
UINT nIconIndex, UINT nIconIndex,
HICON *phiconLarge, __out_opt HICON *phiconLarge,
HICON *phiconSmall, __out_opt HICON *phiconSmall,
UINT nIconSize) PURE; UINT nIconSize) PURE;
}; };
typedef IExtractIconA * LPEXTRACTICONA; typedef IExtractIconA * LPEXTRACTICONA;
#undef INTERFACE #undef INTERFACE
#define INTERFACE IExtractIconW #define INTERFACE IExtractIconW
DECLARE_INTERFACE_(IExtractIconW, IUnknown) // exic DECLARE_INTERFACE_IID_(IExtractIconW, IUnknown, "000214fa-0000-0000-c000-0000000 00046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IExtractIcon methods *** // *** IExtractIcon methods ***
STDMETHOD(GetIconLocation)(THIS_ STDMETHOD(GetIconLocation)(THIS_
UINT uFlags, UINT uFlags,
LPWSTR szIconFile, __out_ecount(cchMax) LPWSTR pszIconFile,
UINT cchMax, UINT cchMax,
int * piIndex, __out int * piIndex,
UINT * pwFlags) PURE; __out UINT * pwFlags) PURE;
STDMETHOD(Extract)(THIS_ STDMETHOD(Extract)(THIS_
LPCWSTR pszFile, LPCWSTR pszFile,
UINT nIconIndex, UINT nIconIndex,
HICON *phiconLarge, __out_opt HICON *phiconLarge,
HICON *phiconSmall, __out_opt HICON *phiconSmall,
UINT nIconSize) PURE; UINT nIconSize) PURE;
}; };
typedef IExtractIconW * LPEXTRACTICONW; typedef IExtractIconW * LPEXTRACTICONW;
#ifdef UNICODE #ifdef UNICODE
#define IExtractIcon IExtractIconW #define IExtractIcon IExtractIconW
#define IExtractIconVtbl IExtractIconWVtbl #define IExtractIconVtbl IExtractIconWVtbl
#define LPEXTRACTICON LPEXTRACTICONW #define LPEXTRACTICON LPEXTRACTICONW
#else #else
#define IExtractIcon IExtractIconA #define IExtractIcon IExtractIconA
#define IExtractIconVtbl IExtractIconAVtbl #define IExtractIconVtbl IExtractIconAVtbl
#define LPEXTRACTICON LPEXTRACTICONA #define LPEXTRACTICON LPEXTRACTICONA
#endif #endif
//=========================================================================== //===========================================================================
// //
// IShellIcon Interface
//
// used to get a icon index for a IShellFolder object.
//
// this interface can be implemented by a IShellFolder, as a quick way to
// return the icon for a object in the folder.
//
// a instance of this interface is only created once for the folder, unlike
// IExtractIcon witch is created once for each object.
//
// if a ShellFolder does not implement this interface, the standard
// GetUIObject(....IExtractIcon) method will be used to get a icon
// for all objects.
//
// the following standard imagelist indexs can be returned:
//
// 0 document (blank page) (not associated)
// 1 document (with stuff on the page)
// 2 application (exe, com, bat)
// 3 folder (plain)
// 4 folder (open)
//
// IShellIcon:GetIconOf(pidl, flags, lpIconIndex)
//
// pidl object to get icon for.
// flags GIL_* input flags (GIL_OPEN, ...)
// lpIconIndex place to return icon index.
//
// returns:
// NOERROR, if lpIconIndex contains the correct system imagelist index.
// S_FALSE, if unable to get icon for this object, go through
// GetUIObject, IExtractIcon, methods.
//
//===========================================================================
#undef INTERFACE
#define INTERFACE IShellIcon
DECLARE_INTERFACE_(IShellIcon, IUnknown) // shi
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellIcon methods ***
STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags,
LPINT lpIconIndex) PURE;
};
typedef IShellIcon *LPSHELLICON;
//===========================================================================
//
// IShellIconOverlayIdentifier // IShellIconOverlayIdentifier
// //
// Used to identify a file as a member of the group of files that have this spec ific // Used to identify a file as a member of the group of files that have this spec ific
// icon overlay // icon overlay
// //
// Users can create new IconOverlayIdentifiers and place them in the following r egistry // Users can create new IconOverlayIdentifiers and place them in the following r egistry
// location together with the Icon overlay image and their priority. // location together with the Icon overlay image and their priority.
// HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\ShellIconOv erlayIdentifiers" // HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\ShellIconOv erlayIdentifiers"
// //
// The shell will enumerate through all IconOverlayIdentifiers at start, and pri oritize // The shell will enumerate through all IconOverlayIdentifiers at start, and pri oritize
skipping to change at line 873 skipping to change at line 343
// dwFlags defined below // dwFlags defined below
// //
// IShellIconOverlayIdentifier::GetPriority(int * pIPriority) PURE; // IShellIconOverlayIdentifier::GetPriority(int * pIPriority) PURE;
// pIPriority the priority of this Overlay Identifier // pIPriority the priority of this Overlay Identifier
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellIconOverlayIdentifier #define INTERFACE IShellIconOverlayIdentifier
DECLARE_INTERFACE_(IShellIconOverlayIdentifier, IUnknown) DECLARE_INTERFACE_IID_(IShellIconOverlayIdentifier, IUnknown, "0c6c4200-c589-11d 0-999a-00c04fd655e1")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellIconOverlayIdentifier methods *** // *** IShellIconOverlayIdentifier methods ***
STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE; STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE;
STDMETHOD (GetOverlayInfo)(THIS_ LPWSTR pwszIconFile, int cchMax, int * pInd STDMETHOD (GetOverlayInfo)(THIS_ __out_ecount(cchMax) LPWSTR pwszIconFile, i
ex, DWORD * pdwFlags) PURE; nt cchMax, __out int * pIndex, __out DWORD * pdwFlags) PURE;
STDMETHOD (GetPriority)(THIS_ int * pIPriority) PURE; STDMETHOD (GetPriority)(THIS_ __out int * pIPriority) PURE;
}; };
#define ISIOI_ICONFILE 0x00000001 // path is returned throug h pwszIconFile #define ISIOI_ICONFILE 0x00000001 // path is returned throug h pwszIconFile
#define ISIOI_ICONINDEX 0x00000002 // icon index in pwszIconF ile is returned through pIndex #define ISIOI_ICONINDEX 0x00000002 // icon index in pwszIconF ile is returned through pIndex
//=========================================================================== //===========================================================================
// //
// IShellIconOverlayManager // IShellIconOverlayManager
// //
// Used to return the icon overlay information including OverlayIndex, Image Ind ex or Priority for an IShellFolder object. // Used to return the icon overlay information including OverlayIndex, Image Ind ex or Priority for an IShellFolder object.
skipping to change at line 919 skipping to change at line 389
// It will reload the icons into the imagelist, when passed SIOM_ICONINDEX // It will reload the icons into the imagelist, when passed SIOM_ICONINDEX
// IShellIconOverlayManager::LoadNonloadedOverlayIdentifiers() // IShellIconOverlayManager::LoadNonloadedOverlayIdentifiers()
// This method loads any registered overlay identifiers (handlers) that // This method loads any registered overlay identifiers (handlers) that
// are not currently loaded. // are not currently loaded.
// IShellIconOverlayManager::OverlayIndexFromImageIndex(int iImage, int *piIndex , BOOL fAdd) // IShellIconOverlayManager::OverlayIndexFromImageIndex(int iImage, int *piIndex , BOOL fAdd)
// iImage existing shell image list index to look for // iImage existing shell image list index to look for
// piIndex returned overlay index // piIndex returned overlay index
// fAdd Add image if not already present? // fAdd Add image if not already present?
//=========================================================================== //===========================================================================
#if (_WIN32_IE >= 0x0601)
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellIconOverlayManager #define INTERFACE IShellIconOverlayManager
DECLARE_INTERFACE_(IShellIconOverlayManager, IUnknown) DECLARE_INTERFACE_IID_(IShellIconOverlayManager, IUnknown, "f10b5e34-dd3b-42a7-a a7d-2f4ec54bb09b")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellIconOverlayManager methods *** // *** IShellIconOverlayManager methods ***
STDMETHOD(GetFileOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, int * STDMETHOD(GetFileOverlayInfo)(THIS_ __in LPCWSTR pwszPath, DWORD dwAttrib, _
pIndex, DWORD dwflags) PURE; _out int * pIndex, DWORD dwflags) PURE;
STDMETHOD(GetReservedOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, in STDMETHOD(GetReservedOverlayInfo)(THIS_ __in_opt LPCWSTR pwszPath, DWORD dwA
t * pIndex, DWORD dwflags, int iReservedID) PURE; ttrib, __out int * pIndex, DWORD dwflags, int iReservedID) PURE;
STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE; STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE;
STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE; STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE;
STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, int * piIndex, BOOL fAdd) PURE; STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, __out int * piIndex, BOOL fAdd) PURE;
}; };
#define SIOM_OVERLAYINDEX 1 #define SIOM_OVERLAYINDEX 1
#define SIOM_ICONINDEX 2 #define SIOM_ICONINDEX 2
// #define SIOM_PRIORITY 3 // #define SIOM_PRIORITY 3
#define SIOM_RESERVED_SHARED 0 #define SIOM_RESERVED_SHARED 0
#define SIOM_RESERVED_LINK 1 #define SIOM_RESERVED_LINK 1
#define SIOM_RESERVED_SLOWFILE 2 #define SIOM_RESERVED_SLOWFILE 2
#endif // (_WIN32_IE >= 0x0601)
//=========================================================================== //===========================================================================
// //
// IShellIconOverlay // IShellIconOverlay
// //
// Used to return the icon overlay index or its icon index for an IShellFolder o bject, // Used to return the icon overlay index or its icon index for an IShellFolder o bject,
// this is always implemented with IShellFolder // this is always implemented with IShellFolder
// //
// IShellIconOverlay:GetOverlayIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex) // IShellIconOverlay:GetOverlayIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex)
// pidl object to identify icon overlay for. // pidl object to identify icon overlay for.
skipping to change at line 971 skipping to change at line 440
// returns: // returns:
// S_OK, if the index of an Overlay is found // S_OK, if the index of an Overlay is found
// S_FALSE, if no Overlay exists for this file // S_FALSE, if no Overlay exists for this file
// E_FAIL, if pidl is bad // E_FAIL, if pidl is bad
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellIconOverlay #define INTERFACE IShellIconOverlay
DECLARE_INTERFACE_(IShellIconOverlay, IUnknown) DECLARE_INTERFACE_IID_(IShellIconOverlay, IUnknown, "7d688a70-c613-11d0-999b-00c 04fd655e1")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellIconOverlay methods *** // *** IShellIconOverlay methods ***
STDMETHOD(GetOverlayIndex)(THIS_ LPCITEMIDLIST pidl, int * pIndex) PURE; STDMETHOD(GetOverlayIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIndex)
STDMETHOD(GetOverlayIconIndex)(THIS_ LPCITEMIDLIST pidl, int * pIconIndex) P PURE;
URE; STDMETHOD(GetOverlayIconIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIc
onIndex) PURE;
}; };
#define OI_DEFAULT 0x00000000
#define OI_ASYNC 0xFFFFEEEE #define OI_ASYNC 0xFFFFEEEE
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// SHGetIconOverlayIndex // SHGetIconOverlayIndex
// //
// This function takes the path and icon/res id to the icon and convert it into // This function takes the path and icon/res id to the icon and convert it into
// an overlay index in the system image list. // an overlay index in the system image list.
// Note: there are totally only 15 slots for system image overlays, some of whic h // Note: there are totally only 15 slots for system image overlays, some of whic h
// was reserved by the system, or taken by the overlayidentifiers, so it's possi ble // was reserved by the system, or taken by the overlayidentifiers, so it's possi ble
skipping to change at line 1014 skipping to change at line 484
#ifdef UNICODE #ifdef UNICODE
#define SHGetIconOverlayIndex SHGetIconOverlayIndexW #define SHGetIconOverlayIndex SHGetIconOverlayIndexW
#else #else
#define SHGetIconOverlayIndex SHGetIconOverlayIndexA #define SHGetIconOverlayIndex SHGetIconOverlayIndexA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
// IShellLinkDataList::GetFlags()/SetFlags() // IShellLinkDataList::GetFlags()/SetFlags()
typedef enum { typedef enum {
SLDF_HAS_ID_LIST = 0x00000001, // Shell link saved with ID list SLDF_HAS_ID_LIST = 0x00000001, // Shell link sa
SLDF_HAS_LINK_INFO = 0x00000002, // Shell link saved with LinkInfo ved with ID list
SLDF_HAS_NAME = 0x00000004, SLDF_HAS_LINK_INFO = 0x00000002, // Shell link sa
SLDF_HAS_RELPATH = 0x00000008, ved with LinkInfo
SLDF_HAS_WORKINGDIR = 0x00000010, SLDF_HAS_NAME = 0x00000004,
SLDF_HAS_ARGS = 0x00000020, SLDF_HAS_RELPATH = 0x00000008,
SLDF_HAS_ICONLOCATION = 0x00000040, SLDF_HAS_WORKINGDIR = 0x00000010,
SLDF_UNICODE = 0x00000080, // the strings are unicode SLDF_HAS_ARGS = 0x00000020,
SLDF_FORCE_NO_LINKINFO = 0x00000100, // don't create a LINKINFO (make a d SLDF_HAS_ICONLOCATION = 0x00000040,
umb link) SLDF_UNICODE = 0x00000080, // the strings a
SLDF_HAS_EXP_SZ = 0x00000200, // the link contains expandable env re unicode
strings SLDF_FORCE_NO_LINKINFO = 0x00000100, // disable LINKI
SLDF_RUN_IN_SEPARATE = 0x00000400, // Run the 16-bit target exe in a se NFO tracking information (used to track network drives and compute UNC paths if
parate VDM/WOW one exists)
SLDF_HAS_LOGO3ID = 0x00000800, // this link is a special Logo3/MSIC SLDF_HAS_EXP_SZ = 0x00000200, // the link cont
D link ains expandable env strings
SLDF_HAS_DARWINID = 0x00001000, // this link is a special Darwin lin SLDF_RUN_IN_SEPARATE = 0x00000400, // Run the 16-bi
k t target exe in a separate VDM/WOW
SLDF_RUNAS_USER = 0x00002000, // Run this link as a different user #if (NTDDI_VERSION < NTDDI_LONGHORN)
SLDF_HAS_EXP_ICON_SZ = 0x00004000, // contains expandable env string fo SLDF_HAS_LOGO3ID = 0x00000800, // not used anym
r icon path ore
SLDF_NO_PIDL_ALIAS = 0x00008000, // don't ever resolve to a logical l #endif
ocation SLDF_HAS_DARWINID = 0x00001000, // MSI (Darwin)
SLDF_FORCE_UNCNAME = 0x00010000, // make GetPath() prefer the UNC nam link that can be installed on demand
e to the local name SLDF_RUNAS_USER = 0x00002000, // Run target as
SLDF_RUN_WITH_SHIMLAYER = 0x00020000, // Launch the target of this link w/ a different user
shim layer active SLDF_HAS_EXP_ICON_SZ = 0x00004000, // contains expa
SLDF_RESERVED = 0x80000000, // Reserved-- so we can use the low ndable env string for icon path
word as an index value in the future #if (NTDDI_VERSION >= NTDDI_WINXP)
SLDF_NO_PIDL_ALIAS = 0x00008000, // disable IDLis
t alias mapping when parsing the IDList from the path
SLDF_FORCE_UNCNAME = 0x00010000, // make GetPath(
) prefer the UNC name to the local name
SLDF_RUN_WITH_SHIMLAYER = 0x00020000, // activate targ
et of this link with shim layer active
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
SLDF_FORCE_NO_LINKTRACK = 0x00040000, // disable Objec
tID tracking information
SLDF_ENABLE_TARGET_METADATA = 0x00080000, // enable cachin
g of target metadata into link
SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000, // disable Known
Folder tracking information (EXP_KNOWN_FOLDER)
SLDF_VALID = 0x003FF7FF, // bits that are
valid for ::SetFlags()
#endif
SLDF_RESERVED = 0x80000000, // Reserved-- so
we can use the low word as an index value in the future
#endif
} SHELL_LINK_DATA_FLAGS; } SHELL_LINK_DATA_FLAGS;
#if !defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(push)
#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/un
ion */
#endif
typedef struct tagDATABLOCKHEADER typedef struct tagDATABLOCKHEADER
{ {
DWORD cbSize; // Size of this extra data block DWORD cbSize; // Size of this extra data block
DWORD dwSignature; // signature of this extra data block DWORD dwSignature; // signature of this extra data block
} DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; } DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST;
typedef struct { typedef struct {
#ifdef __cplusplus #ifdef __cplusplus
DATABLOCK_HEADER dbh; DATABLOCK_HEADER dbh;
#else #else
skipping to change at line 1092 skipping to change at line 577
typedef struct { typedef struct {
#ifdef __cplusplus #ifdef __cplusplus
DATABLOCK_HEADER dbh; DATABLOCK_HEADER dbh;
#else #else
DATABLOCK_HEADER; DATABLOCK_HEADER;
#endif #endif
CHAR szDarwinID[MAX_PATH]; // ANSI darwin ID associated with link CHAR szDarwinID[MAX_PATH]; // ANSI darwin ID associated with link
WCHAR szwDarwinID[MAX_PATH]; // UNICODE darwin ID associated with link WCHAR szwDarwinID[MAX_PATH]; // UNICODE darwin ID associated with link
} EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK; } EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK;
#define EXP_DARWIN_ID_SIG 0xA0000006 #define EXP_DARWIN_ID_SIG 0xA0000006
#define EXP_LOGO3_ID_SIG 0xA0000007 #endif
#if !defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif #endif
#define EXP_SPECIAL_FOLDER_SIG 0xA0000005 // LPEXP_SPECIAL_FOLDER #define EXP_SPECIAL_FOLDER_SIG 0xA0000005 // LPEXP_SPECIAL_FOLDER
typedef struct typedef struct
{ {
DWORD cbSize; // Size of this extra data block DWORD cbSize; // Size of this extra data block
DWORD dwSignature; // signature of this extra data block DWORD dwSignature; // signature of this extra data block
DWORD idSpecialFolder; // special folder id this link points into DWORD idSpecialFolder; // special folder id this link points into
DWORD cbOffset; // ofset into pidl from SLDF_HAS_ID_LIST for child DWORD cbOffset; // ofset into pidl from SLDF_HAS_ID_LIST for child
skipping to change at line 1115 skipping to change at line 603
typedef struct typedef struct
{ {
DWORD cbSize; // Size of this extra data block DWORD cbSize; // Size of this extra data block
DWORD dwSignature; // signature of this extra data block DWORD dwSignature; // signature of this extra data block
CHAR szTarget[ MAX_PATH ]; // ANSI target name w/EXP_SZ in it CHAR szTarget[ MAX_PATH ]; // ANSI target name w/EXP_SZ in it
WCHAR swzTarget[ MAX_PATH ]; // UNICODE target name w/EXP_SZ in it WCHAR swzTarget[ MAX_PATH ]; // UNICODE target name w/EXP_SZ in it
} EXP_SZ_LINK, *LPEXP_SZ_LINK; } EXP_SZ_LINK, *LPEXP_SZ_LINK;
#define EXP_SZ_LINK_SIG 0xA0000001 // LPEXP_SZ_LINK (target) #define EXP_SZ_LINK_SIG 0xA0000001 // LPEXP_SZ_LINK (target)
#define EXP_SZ_ICON_SIG 0xA0000007 // LPEXP_SZ_LINK (icon) #define EXP_SZ_ICON_SIG 0xA0000007 // LPEXP_SZ_LINK (icon)
#undef INTERFACE #if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define INTERFACE IShellLinkDataList typedef struct
DECLARE_INTERFACE_(IShellLinkDataList, IUnknown)
{ {
// *** IUnknown methods *** DWORD cbSize; // Size of this extra data block
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; DWORD dwSignature; // signature of this extra data block
STDMETHOD_(ULONG, AddRef) (THIS) PURE; BYTE abPropertyStorage[1];
STDMETHOD_(ULONG, Release) (THIS) PURE; } EXP_PROPERTYSTORAGE;
#define EXP_PROPERTYSTORAGE_SIG 0xA0000009
// *** IShellLinkDataList methods *** #endif
STDMETHOD(AddDataBlock)(THIS_ void * pDataBlock) PURE;
STDMETHOD(CopyDataBlock)(THIS_ DWORD dwSig, void **ppDataBlock) PURE;
STDMETHOD(RemoveDataBlock)(THIS_ DWORD dwSig) PURE;
STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE;
STDMETHOD(SetFlags)(THIS_ DWORD dwFlags) PURE;
};
#endif // (_WIN32_IE >= 0x0400) #endif // (_WIN32_IE >= 0x0400)
#if (_WIN32_IE >= 0x0500)
#undef INTERFACE
#define INTERFACE IResolveShellLink
DECLARE_INTERFACE_(IResolveShellLink, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IResolveShellLink methods ***
STDMETHOD(ResolveShellLink)(THIS_ IUnknown* punk, HWND hwnd, DWORD fFlags) P
URE;
};
#endif // (_WIN32_IE >= 0x0500)
#ifdef _INC_SHELLAPI /* for LPSHELLEXECUTEINFO */ #ifdef _INC_SHELLAPI /* for LPSHELLEXECUTEINFO */
//=========================================================================== //===========================================================================
// //
// IShellExecuteHook Interface // IShellExecuteHook Interface
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellExecuteHookA #define INTERFACE IShellExecuteHookA
DECLARE_INTERFACE_(IShellExecuteHookA, IUnknown) // shexhk DECLARE_INTERFACE_IID_(IShellExecuteHookA, IUnknown, "000214f5-0000-0000-c000-00 0000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IShellExecuteHookA methods *** // *** IShellExecuteHookA methods ***
STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA pei) PURE; STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOA pei) PURE;
}; };
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellExecuteHookW #define INTERFACE IShellExecuteHookW
DECLARE_INTERFACE_(IShellExecuteHookW, IUnknown) // shexhk DECLARE_INTERFACE_IID_(IShellExecuteHookW, IUnknown, "000214fb-0000-0000-c000-00 0000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IShellExecuteHookW methods *** // *** IShellExecuteHookW methods ***
STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW pei) PURE; STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOW pei) PURE;
}; };
#ifdef UNICODE #ifdef UNICODE
#define IShellExecuteHook IShellExecuteHookW #define IShellExecuteHook IShellExecuteHookW
#define IShellExecuteHookVtbl IShellExecuteHookWVtbl #define IShellExecuteHookVtbl IShellExecuteHookWVtbl
#else #else
#define IShellExecuteHook IShellExecuteHookA #define IShellExecuteHook IShellExecuteHookA
#define IShellExecuteHookVtbl IShellExecuteHookAVtbl #define IShellExecuteHookVtbl IShellExecuteHookAVtbl
#endif #endif
#endif #endif
//=========================================================================== //===========================================================================
// //
// IURLSearchHook Interface // IURLSearchHook Interface
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE IURLSearchHook #define INTERFACE IURLSearchHook
DECLARE_INTERFACE_(IURLSearchHook, IUnknown) DECLARE_INTERFACE_IID_(IURLSearchHook, IUnknown, "ac60f6a0-0fd9-11d0-99cb-00c04f d64497")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IURLSearchHook methods *** // *** IURLSearchHook methods ***
STDMETHOD(Translate)(THIS_ LPWSTR lpwszSearchURL, DWORD cchBufferSize) PURE; STDMETHOD(Translate)(THIS_ __out_ecount(cchBufferSize) LPWSTR lpwszSearchURL , DWORD cchBufferSize) PURE;
}; };
#undef INTERFACE #undef INTERFACE
#define INTERFACE ISearchContext #define INTERFACE ISearchContext
DECLARE_INTERFACE_(ISearchContext, IUnknown) DECLARE_INTERFACE_IID_(ISearchContext, IUnknown, "09F656A2-41AF-480C-88F7-16CC0D 164615")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** ISearchContext methods *** // *** ISearchContext methods ***
STDMETHOD(GetSearchUrl)(THIS_ BSTR * pbstrSearchUrl) PURE; STDMETHOD(GetSearchUrl)(THIS_ __out BSTR * pbstrSearchUrl) PURE;
STDMETHOD(GetSearchText)(THIS_ BSTR * pbstrSearchText) PURE; STDMETHOD(GetSearchText)(THIS_ __out BSTR * pbstrSearchText) PURE;
STDMETHOD(GetSearchStyle)(THIS_ DWORD * pdwSearchStyle) PURE; STDMETHOD(GetSearchStyle)(THIS_ __out DWORD * pdwSearchStyle) PURE;
}; };
#undef INTERFACE #undef INTERFACE
#define INTERFACE IURLSearchHook2 #define INTERFACE IURLSearchHook2
DECLARE_INTERFACE_(IURLSearchHook2, IURLSearchHook) DECLARE_INTERFACE_IID_(IURLSearchHook2, IURLSearchHook, "5ee44da4-6d32-46e3-86bc -07540dedd0e0")
{ {
// *** IURLSearchHook2 methods *** // *** IURLSearchHook2 methods ***
STDMETHOD(TranslateWithSearchContext)(THIS_ LPWSTR lpwszSearchURL, DWORD cch BufferSize, ISearchContext * pSearchContext) PURE; STDMETHOD(TranslateWithSearchContext)(THIS_ __out_ecount(cchBufferSize) LPWS TR lpwszSearchURL, DWORD cchBufferSize, __in_opt ISearchContext * pSearchContext ) PURE;
}; };
//=========================================================================== //===========================================================================
// //
// INewShortcutHook Interface // INewShortcutHook Interface
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE INewShortcutHookA #define INTERFACE INewShortcutHookA
DECLARE_INTERFACE_(INewShortcutHookA, IUnknown) // nshhk DECLARE_INTERFACE_IID_(INewShortcutHookA, IUnknown, "000214e1-0000-0000-c000-000 000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** INewShortcutHook methods *** // *** INewShortcutHook methods ***
STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE; STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE;
STDMETHOD(GetReferent)(THIS_ LPSTR pszReferent, int cchReferent) PURE; STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPSTR pszReferent, in t cchReferent) PURE;
STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE; STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE;
STDMETHOD(GetFolder)(THIS_ LPSTR pszFolder, int cchFolder) PURE; STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPSTR pszFolder, int cchF
STDMETHOD(GetName)(THIS_ LPSTR pszName, int cchName) PURE; older) PURE;
STDMETHOD(GetExtension)(THIS_ LPSTR pszExtension, int cchExtension) PURE; STDMETHOD(GetName)(THIS_ __out_ecount(cchName) LPSTR pszName, int cchName) P
URE;
STDMETHOD(GetExtension)(THIS_ __out_ecount(cchExtension) LPSTR pszExtension,
int cchExtension) PURE;
}; };
#undef INTERFACE #undef INTERFACE
#define INTERFACE INewShortcutHookW #define INTERFACE INewShortcutHookW
DECLARE_INTERFACE_(INewShortcutHookW, IUnknown) // nshhk DECLARE_INTERFACE_IID_(INewShortcutHookW, IUnknown, "000214f7-0000-0000-c000-000 000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** INewShortcutHook methods *** // *** INewShortcutHook methods ***
STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE; STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE;
STDMETHOD(GetReferent)(THIS_ LPWSTR pszReferent, int cchReferent) PURE; STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPWSTR pszReferent, i nt cchReferent) PURE;
STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE; STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE;
STDMETHOD(GetFolder)(THIS_ LPWSTR pszFolder, int cchFolder) PURE; STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPWSTR pszFolder, int cch
STDMETHOD(GetName)(THIS_ LPWSTR pszName, int cchName) PURE; Folder) PURE;
STDMETHOD(GetExtension)(THIS_ LPWSTR pszExtension, int cchExtension) PURE; STDMETHOD(GetName)(THIS_ __out_ecount(cchName) LPWSTR pszName, int cchName)
PURE;
STDMETHOD(GetExtension)(THIS_ __out_ecount(cchExtension) LPWSTR pszExtension
, int cchExtension) PURE;
}; };
#ifdef UNICODE #ifdef UNICODE
#define INewShortcutHook INewShortcutHookW #define INewShortcutHook INewShortcutHookW
#define INewShortcutHookVtbl INewShortcutHookWVtbl #define INewShortcutHookVtbl INewShortcutHookWVtbl
#else #else
#define INewShortcutHook INewShortcutHookA #define INewShortcutHook INewShortcutHookA
#define INewShortcutHookVtbl INewShortcutHookAVtbl #define INewShortcutHookVtbl INewShortcutHookAVtbl
#endif #endif
skipping to change at line 1322 skipping to change at line 786
// wFunc - what operation is being done // wFunc - what operation is being done
// wFlags - and flags (FOF_*) set in the initial call to the file operation // wFlags - and flags (FOF_*) set in the initial call to the file operation
// pszSrcFile - name of the source file // pszSrcFile - name of the source file
// dwSrcAttribs - file attributes of the source file // dwSrcAttribs - file attributes of the source file
// pszDestFile - name of the destiation file (for move and renames) // pszDestFile - name of the destiation file (for move and renames)
// dwDestAttribs - file attributes of the destination file // dwDestAttribs - file attributes of the destination file
// //
// //
//=========================================================================== //===========================================================================
#ifndef FO_MOVE //these need to be kept in sync with the ones in shellapi.h
// file operations
#define FO_MOVE 0x0001
#define FO_COPY 0x0002
#define FO_DELETE 0x0003
#define FO_RENAME 0x0004
#define FOF_MULTIDESTFILES 0x0001
#define FOF_CONFIRMMOUSE 0x0002
#define FOF_SILENT 0x0004 // don't create progress/report
#define FOF_RENAMEONCOLLISION 0x0008
#define FOF_NOCONFIRMATION 0x0010 // Don't prompt the user.
#define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappin
gs
// Must be freed using SHFreeNameMappings
#define FOF_ALLOWUNDO 0x0040
#define FOF_FILESONLY 0x0080 // on *.*, do only files
#define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files
#define FOF_NOCONFIRMMKDIR 0x0200 // don't confirm making any needed di
rs
#define FOF_NOERRORUI 0x0400 // don't put up error UI
#define FOF_NOCOPYSECURITYATTRIBS 0x0800 // dont copy NT file Security Attribu
tes
#define FOF_NORECURSION 0x1000 // don't recurse into directories.
#if (_WIN32_IE >= 0x500)
#define FOF_NO_CONNECTED_ELEMENTS 0x2000 // don't operate on connected file el
ements.
#define FOF_WANTNUKEWARNING 0x4000 // during delete operation, warn if n
uking instead of recycling (partially overrides FOF_NOCONFIRMATION)
#endif // _WIN32_IE >= 0x500
#if (_WIN32_WINNT >= 0x0501)
#define FOF_NORECURSEREPARSE 0x8000 // treat reparse points as objects, n
ot containers
#endif // (_WIN32_WINNT >= 0x501)
typedef WORD FILEOP_FLAGS;
// printer operations
#define PO_DELETE 0x0013 // printer is being deleted
#define PO_RENAME 0x0014 // printer is being renamed
#define PO_PORTCHANGE 0x0020 // port this printer connected to is being chang
ed
// if this id is set, the strings received by
// the copyhook are a doubly-null terminated
// list of strings. The first is the printer
// name and the second is the printer port.
#define PO_REN_PORT 0x0034 // PO_RENAME and PO_PORTCHANGE at same time.
// no POF_ flags currently defined
typedef UINT PRINTEROP_FLAGS;
#endif // FO_MOVE
#undef INTERFACE #undef INTERFACE
#define INTERFACE ICopyHookA #define INTERFACE ICopyHookA
DECLARE_INTERFACE_(ICopyHookA, IUnknown) // sl DECLARE_INTERFACE_IID_(ICopyHookA, IUnknown, "000214EF-0000-0000-c000-0000000000 46")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** ICopyHook methods *** // *** ICopyHook methods ***
STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC STR pszSrcFile, DWORD dwSrcAttribs, STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC STR pszSrcFile, DWORD dwSrcAttribs,
LPCSTR pszDestFile, DWORD dwDestAttribs) PURE ; LPCSTR pszDestFile, DWORD dwDestAttribs) PURE ;
}; };
typedef ICopyHookA * LPCOPYHOOKA; typedef ICopyHookA * LPCOPYHOOKA;
#undef INTERFACE #undef INTERFACE
#define INTERFACE ICopyHookW #define INTERFACE ICopyHookW
DECLARE_INTERFACE_(ICopyHookW, IUnknown) // sl DECLARE_INTERFACE_IID_(ICopyHookW, IUnknown, "000214FC-0000-0000-c000-0000000000 46")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** ICopyHook methods *** // *** ICopyHook methods ***
STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC WSTR pszSrcFile, DWORD dwSrcAttribs, STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC WSTR pszSrcFile, DWORD dwSrcAttribs,
LPCWSTR pszDestFile, DWORD dwDestAttribs) PUR E; LPCWSTR pszDestFile, DWORD dwDestAttribs) PUR E;
}; };
typedef ICopyHookW * LPCOPYHOOKW; typedef ICopyHookW * LPCOPYHOOKW;
#ifdef UNICODE #ifdef UNICODE
#define ICopyHook ICopyHookW #define ICopyHook ICopyHookW
#define ICopyHookVtbl ICopyHookWVtbl #define ICopyHookVtbl ICopyHookWVtbl
#define LPCOPYHOOK LPCOPYHOOKW #define LPCOPYHOOK LPCOPYHOOKW
#else #else
#define ICopyHook ICopyHookA #define ICopyHook ICopyHookA
#define ICopyHookVtbl ICopyHookAVtbl #define ICopyHookVtbl ICopyHookAVtbl
#define LPCOPYHOOK LPCOPYHOOKA #define LPCOPYHOOK LPCOPYHOOKA
#endif #endif
// IFileViewer, IFileViewerSite not supported as of win2k
#if (NTDDI_VERSION < NTDDI_WIN2K)
//=========================================================================== //===========================================================================
// //
// IFileViewerSite Interface // IFileViewerSite Interface
// //
//=========================================================================== //===========================================================================
#undef INTERFACE #undef INTERFACE
#define INTERFACE IFileViewerSite #define INTERFACE IFileViewerSite
DECLARE_INTERFACE_(IFileViewerSite, IUnknown) DECLARE_INTERFACE_IID_(IFileViewerSite, IUnknown, "000214f3-0000-0000-c000-00000 0000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IFileViewerSite methods *** // *** IFileViewerSite methods ***
STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE; STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE;
STDMETHOD(GetPinnedWindow) (THIS_ HWND *phwnd) PURE; STDMETHOD(GetPinnedWindow) (THIS_ __out HWND *phwnd) PURE;
}; };
typedef IFileViewerSite * LPFILEVIEWERSITE; typedef IFileViewerSite * LPFILEVIEWERSITE;
//=========================================================================== //===========================================================================
// //
// IFileViewer Interface // IFileViewer Interface
// //
// Implemented in a FileViewer component object. Used to tell a // Implemented in a FileViewer component object. Used to tell a
// FileViewer to PrintTo or to view, the latter happening though // FileViewer to PrintTo or to view, the latter happening though
skipping to change at line 1484 skipping to change at line 901
#define FVSIF_NEWFAILED 0x08000000 // The new file passed back failed #define FVSIF_NEWFAILED 0x08000000 // The new file passed back failed
// to be viewed. // to be viewed.
#define FVSIF_NEWFILE 0x80000000 // A new file to view has been returned #define FVSIF_NEWFILE 0x80000000 // A new file to view has been returned
#define FVSIF_CANVIEWIT 0x40000000 // The viewer can view it. #define FVSIF_CANVIEWIT 0x40000000 // The viewer can view it.
#undef INTERFACE #undef INTERFACE
#define INTERFACE IFileViewerA #define INTERFACE IFileViewerA
DECLARE_INTERFACE(IFileViewerA) DECLARE_INTERFACE_IID(IFileViewerA, "000214f0-0000-0000-c000-000000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IFileViewer methods *** // *** IFileViewer methods ***
STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE; STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE;
STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE; STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE;
STDMETHOD(PrintTo) (THIS_ LPSTR pszDriver, BOOL fSuppressUI) PURE; STDMETHOD(PrintTo) (THIS_ __in_opt LPSTR pszDriver, BOOL fSuppressUI) PURE;
}; };
typedef IFileViewerA * LPFILEVIEWERA; typedef IFileViewerA * LPFILEVIEWERA;
#undef INTERFACE #undef INTERFACE
#define INTERFACE IFileViewerW #define INTERFACE IFileViewerW
DECLARE_INTERFACE(IFileViewerW) DECLARE_INTERFACE_IID(IFileViewerW, "000214f8-0000-0000-c000-000000000046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IFileViewer methods *** // *** IFileViewer methods ***
STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE; STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE;
STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE; STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE;
STDMETHOD(PrintTo) (THIS_ LPWSTR pszDriver, BOOL fSuppressUI) PURE; STDMETHOD(PrintTo) (THIS_ __in_opt LPWSTR pszDriver, BOOL fSuppressUI) PURE;
}; };
typedef IFileViewerW * LPFILEVIEWERW; typedef IFileViewerW * LPFILEVIEWERW;
#ifdef UNICODE #ifdef UNICODE
#define IFileViewer IFileViewerW #define IFileViewer IFileViewerW
#define LPFILEVIEWER LPFILEVIEWERW #define LPFILEVIEWER LPFILEVIEWERW
#else #else
#define IFileViewer IFileViewerA #define IFileViewer IFileViewerA
#define LPFILEVIEWER LPFILEVIEWERA #define LPFILEVIEWER LPFILEVIEWERA
#endif #endif
//========================================================================== // IFileViewer, IFileViewerSite not supported as of win2k
// #endif // (NTDDI_VERSION < NTDDI_WIN2K)
// IShellBrowser/IShellView/IShellFolder interface
//
// These three interfaces are used when the shell communicates with
// name space extensions. The shell (explorer) provides IShellBrowser
// interface, and extensions implements IShellFolder and IShellView
// interfaces.
//
//==========================================================================
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// //
// Command/menuitem IDs // Command/menuitem IDs
// //
// The explorer dispatches WM_COMMAND messages based on the range of // The explorer dispatches WM_COMMAND messages based on the range of
// command/menuitem IDs. All the IDs of menuitems that the view (right // command/menuitem IDs. All the IDs of menuitems that the view (right
// pane) inserts must be in FCIDM_SHVIEWFIRST/LAST (otherwise, the explorer // pane) inserts must be in FCIDM_SHVIEWFIRST/LAST (otherwise, the explorer
// won't dispatch them). The view should not deal with any menuitems // won't dispatch them). The view should not deal with any menuitems
// in FCIDM_BROWSERFIRST/LAST (otherwise, it won't work with the future // in FCIDM_BROWSERFIRST/LAST (otherwise, it won't work with the future
skipping to change at line 1587 skipping to change at line 996
#define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0) #define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0)
#define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1) #define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1)
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// //
// The resource id of the offline cursor // The resource id of the offline cursor
// This cursor is avaialble in shdocvw.dll // This cursor is avaialble in shdocvw.dll
#define IDC_OFFLINE_HAND 103 #define IDC_OFFLINE_HAND 103
#if (_WIN32_IE >= _WIN32_IE_IE70)
#define IDC_PANTOOL_HAND_OPEN 104
#define IDC_PANTOOL_HAND_CLOSED 105
#endif
// //
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
#endif #endif
// SBCMDID_GETPANE - not necessarily in order // SBCMDID_GETPANE - not necessarily in order
#define PANE_NONE -1 #define PANE_NONE ((DWORD)-1)
#define PANE_ZONE 1 #define PANE_ZONE 1
#define PANE_OFFLINE 2 #define PANE_OFFLINE 2
#define PANE_PRINTER 3 #define PANE_PRINTER 3
#define PANE_SSL 4 #define PANE_SSL 4
#define PANE_NAVIGATION 5 #define PANE_NAVIGATION 5
#define PANE_PROGRESS 6 #define PANE_PROGRESS 6
#if (_WIN32_IE >= _WIN32_IE_IE60)
#define PANE_PRIVACY 7 #define PANE_PRIVACY 7
#endif
//------------------------------------------------------------------------- // SHGetPathFromIDListEx returns a win32 file system path for the item in the na
// ICommDlgBrowser interface me space.
// // and has a few special cases that include returning UNC printer names too!
// ICommDlgBrowser interface is the interface that is provided by the new typedef enum tagGPFIDL_FLAGS
// common dialog window to hook and modify the behavior of IShellView. When
// a default view is created, it queries its parent IShellBrowser for the
// ICommDlgBrowser interface. If supported, it calls out to that interface
// in several cases that need to behave differently in a dialog.
//
// Member functions:
//
// ICommDlgBrowser::OnDefaultCommand()
// Called when the user double-clicks in the view or presses Enter. The
// browser should return S_OK if it processed the action itself, S_FALSE
// to let the view perform the default action.
//
// ICommDlgBrowser::OnStateChange(ULONG uChange)
// Called when some states in the view change. 'uChange' is one of the
// CDBOSC_* values. This call is made after the state (selection, focus,
// etc) has changed. There is no return value.
//
// ICommDlgBrowser::IncludeObject(LPCITEMIDLIST pidl)
// Called when the view is enumerating objects. 'pidl' is a relative
// IDLIST. The browser should return S_OK to include the object in the
// view, S_FALSE to hide it
//
//-------------------------------------------------------------------------
#define CDBOSC_SETFOCUS 0x00000000
#define CDBOSC_KILLFOCUS 0x00000001
#define CDBOSC_SELCHANGE 0x00000002
#define CDBOSC_RENAME 0x00000003
#define CDBOSC_STATECHANGE 0x00000004
#undef INTERFACE
#define INTERFACE ICommDlgBrowser
DECLARE_INTERFACE_(ICommDlgBrowser, IUnknown)
{ {
// *** IUnknown methods *** GPFIDL_DEFAULT = 0x0000, // normal Win32 file name, servers and driv
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; e roots included
STDMETHOD_(ULONG,AddRef) (THIS) PURE; GPFIDL_ALTNAME = 0x0001, // short file name
STDMETHOD_(ULONG,Release) (THIS) PURE; GPFIDL_UNCPRINTER = 0x0002, // include UNC printer names too (non file
system item)
// *** ICommDlgBrowser methods ***
STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE;
STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv,
ULONG uChange) PURE;
STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv,
LPCITEMIDLIST pidl) PURE;
}; };
typedef int GPFIDL_FLAGS;
typedef ICommDlgBrowser * LPCOMMDLGBROWSER; SHSTDAPI_(BOOL) SHGetPathFromIDListEx(__in PCIDLIST_ABSOLUTE pidl, __out_ecount(
cchPath) PWSTR pszPath, __in DWORD cchPath, __in GPFIDL_FLAGS uOpts);
//-------------------------------------------------------------------------
// ICommDlgBrowser2 interface
//
// Member functions:
//
// ICommDlgBrowser2::Notify(IShellView *pshv, DWORD dwNotfyType)
// Called when the view is wants to notify common dialog when an event
// occurrs.
//
// CDB2N_CONTEXTMENU_START indicates the context menu has started.
// CDB2N_CONTEXTMENU_DONE indicates the context menu has completed.
//
// ICommDlgBrowser2::GetDefaultMenuText(IShellView *pshv,
// WCHAR *pszText, INT cchMax)
// Called when the view wants to get the default context menu text.
// pszText points to buffer and cchMax specifies the size of the
// buffer in characters. The browser on return has filled the buffer
// with the default context menu text. The Shell will call this method
// with at least a buffer size of MAX_PATH. The browser should return
// S_OK if it returned a new default menu text, S_FALSE to let the view
// to use the normal default menu text.
// //
// ICommDlgBrowser2::GetViewFlags(DWORD *pdwFlags) // SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes
// Called when the view wants to determine if special customization needs t the size of the buffer (MAX_PATH).
o // The pidl should point to a file system object.
// be done for the common dialog browser. For example View calls this functio SHSTDAPI_(BOOL) SHGetPathFromIDListA(PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PA
n to TH) LPSTR pszPath);
// determin if all files(hidden and system)needs to be shown. If the GetViewF
lags returns a DWORD with
// CDB2GVF_SHOWALLFILES flag set then it will show all the files.
//-------------------------------------------------------------------------
#define CDB2N_CONTEXTMENU_DONE 0x00000001
#define CDB2N_CONTEXTMENU_START 0x00000002
//GetViewFlags
#define CDB2GVF_SHOWALLFILES 0x00000001
#undef INTERFACE
#define INTERFACE ICommDlgBrowser2
DECLARE_INTERFACE_(ICommDlgBrowser2, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** ICommDlgBrowser methods ***
STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE;
STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv,
ULONG uChange) PURE;
STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv,
LPCITEMIDLIST pidl) PURE;
// *** ICommDlgBrowser2 methods ***
STDMETHOD(Notify) (THIS_ struct IShellView * ppshv,
DWORD dwNotifyType) PURE;
STDMETHOD(GetDefaultMenuText) (THIS_ struct IShellView * ppshv,
WCHAR *pszText, INT cchMax) PURE;
STDMETHOD(GetViewFlags)(THIS_ DWORD *pdwFlags) PURE;
};
typedef ICommDlgBrowser2 * LPCOMMDLGBROWSER2;
// //
// function assumes the size of the buffer (MAX_PATH). The pidl // SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes
// should point to a file system object. the size of the buffer (MAX_PATH).
// The pidl should point to a file system object.
SHSTDAPI_(BOOL) SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath); SHSTDAPI_(BOOL) SHGetPathFromIDListW(PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PA
SHSTDAPI_(BOOL) SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath); TH) LPWSTR pszPath);
#ifdef UNICODE #ifdef UNICODE
#define SHGetPathFromIDList SHGetPathFromIDListW #define SHGetPathFromIDList SHGetPathFromIDListW
#else #else
#define SHGetPathFromIDList SHGetPathFromIDListA #define SHGetPathFromIDList SHGetPathFromIDListA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_IE >= 0x0601)
SHSTDAPI_(int) SHCreateDirectory(HWND hwnd, LPCWSTR pszPath); SHSTDAPI_(int) SHCreateDirectory(HWND hwnd, LPCWSTR pszPath);
#endif // (_WIN32_IE >= 0x0601) SHSTDAPI_(int) SHCreateDirectoryExA(HWND hwnd, LPCSTR pszPath, const SECURITY_AT
SHSTDAPI_(int) SHCreateDirectoryExA(HWND hwnd, LPCSTR pszPath, SECURITY_ATTRIBUT TRIBUTES *psa);
ES *psa); SHSTDAPI_(int) SHCreateDirectoryExW(HWND hwnd, LPCWSTR pszPath, const SECURITY_A
SHSTDAPI_(int) SHCreateDirectoryExW(HWND hwnd, LPCWSTR pszPath, SECURITY_ATTRIBU TTRIBUTES *psa);
TES *psa);
#ifdef UNICODE #ifdef UNICODE
#define SHCreateDirectoryEx SHCreateDirectoryExW #define SHCreateDirectoryEx SHCreateDirectoryExW
#else #else
#define SHCreateDirectoryEx SHCreateDirectoryExA #define SHCreateDirectoryEx SHCreateDirectoryExA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI SHOpenFolderAndSelectItems(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEM #if (NTDDI_VERSION >= NTDDI_LONGHORN)
IDLIST *apidl, DWORD dwFlags); #define OFASI_EDIT 0x0001
#define OFASI_OPENDESKTOP 0x0002
#endif
#if (_WIN32_IE >= 0x0601) #if (NTDDI_VERSION >= NTDDI_WINXP)
SHSTDAPI SHCreateShellItem(LPCITEMIDLIST pidlParent, IShellFolder *psfParent, LP
CITEMIDLIST pidl, IShellItem **ppsi); SHSTDAPI SHOpenFolderAndSelectItems(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, __i
#endif // (_WIN32_IE >= 0x0601) n_ecount_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, DWORD dwFlags);
// deprecated because of parameter ambiguity
// call SHCreateItemWithParent() or SHCreateItemFromIDList() instead
SHSTDAPI SHCreateShellItem(__in_opt PCIDLIST_ABSOLUTE pidlParent, __in_opt IShel
lFolder *psfParent, __in PCUITEMID_CHILD pidl, __out IShellItem **ppsi);
#endif
//-------------------------------------------------------------------------
// //
// SHGetSpecialFolderLocation // SHGetSpecialFolderLocation
// //
// Caller should use SHGetMalloc to obtain an allocator that can free the pidl // Caller should use SHGetMalloc to obtain an allocator that can free the pidl
// //
//
//-------------------------------------------------------------------------
//
// registry entries for special paths are kept in : // registry entries for special paths are kept in :
#define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT("\\Shell Folder s") #define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT("\\Shell Folde rs")
#define CSIDL_DESKTOP 0x0000 // <desktop> #define CSIDL_DESKTOP 0x0000 // <desktop>
#define CSIDL_INTERNET 0x0001 // Internet Explorer (icon on desktop) #define CSIDL_INTERNET 0x0001 // Internet Explorer (icon on desktop)
#define CSIDL_PROGRAMS 0x0002 // Start Menu\Programs #define CSIDL_PROGRAMS 0x0002 // Start Menu\Programs
#define CSIDL_CONTROLS 0x0003 // My Computer\Control Pan el #define CSIDL_CONTROLS 0x0003 // My Computer\Control Pan el
#define CSIDL_PRINTERS 0x0004 // My Computer\Printers #define CSIDL_PRINTERS 0x0004 // My Computer\Printers
#define CSIDL_PERSONAL 0x0005 // My Documents #define CSIDL_PERSONAL 0x0005 // My Documents
#define CSIDL_FAVORITES 0x0006 // <user name>\Favorites #define CSIDL_FAVORITES 0x0006 // <user name>\Favorites
#define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Sta rtup #define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Sta rtup
#define CSIDL_RECENT 0x0008 // <user name>\Recent #define CSIDL_RECENT 0x0008 // <user name>\Recent
#define CSIDL_SENDTO 0x0009 // <user name>\SendTo #define CSIDL_SENDTO 0x0009 // <user name>\SendTo
#define CSIDL_BITBUCKET 0x000a // <desktop>\Recycle Bin #define CSIDL_BITBUCKET 0x000a // <desktop>\Recycle Bin
#define CSIDL_STARTMENU 0x000b // <user name>\Start Menu #define CSIDL_STARTMENU 0x000b // <user name>\Start Menu
#define CSIDL_MYDOCUMENTS 0x000c // logical "My Documents" desktop icon #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal was just a s illy name for My Documents
#define CSIDL_MYMUSIC 0x000d // "My Music" folder #define CSIDL_MYMUSIC 0x000d // "My Music" folder
#define CSIDL_MYVIDEO 0x000e // "My Videos" folder #define CSIDL_MYVIDEO 0x000e // "My Videos" folder
#define CSIDL_DESKTOPDIRECTORY 0x0010 // <user name>\Desktop #define CSIDL_DESKTOPDIRECTORY 0x0010 // <user name>\Desktop
#define CSIDL_DRIVES 0x0011 // My Computer #define CSIDL_DRIVES 0x0011 // My Computer
#define CSIDL_NETWORK 0x0012 // Network Neighborhood (M y Network Places) #define CSIDL_NETWORK 0x0012 // Network Neighborhood (M y Network Places)
#define CSIDL_NETHOOD 0x0013 // <user name>\nethood #define CSIDL_NETHOOD 0x0013 // <user name>\nethood
#define CSIDL_FONTS 0x0014 // windows\fonts #define CSIDL_FONTS 0x0014 // windows\fonts
#define CSIDL_TEMPLATES 0x0015 #define CSIDL_TEMPLATES 0x0015
#define CSIDL_COMMON_STARTMENU 0x0016 // All Users\Start Menu #define CSIDL_COMMON_STARTMENU 0x0016 // All Users\Start Menu
#define CSIDL_COMMON_PROGRAMS 0X0017 // All Users\Start Menu\Pr ograms #define CSIDL_COMMON_PROGRAMS 0X0017 // All Users\Start Menu\Pr ograms
skipping to change at line 1843 skipping to change at line 1156
#define CSIDL_COMMON_OEM_LINKS 0x003a // Links to All Users OEM specific apps #define CSIDL_COMMON_OEM_LINKS 0x003a // Links to All Users OEM specific apps
#define CSIDL_CDBURN_AREA 0x003b // USERPROFILE\Local Setti ngs\Application Data\Microsoft\CD Burning #define CSIDL_CDBURN_AREA 0x003b // USERPROFILE\Local Setti ngs\Application Data\Microsoft\CD Burning
// unused 0x003c // unused 0x003c
#define CSIDL_COMPUTERSNEARME 0x003d // Computers Near Me (comp utered from Workgroup membership) #define CSIDL_COMPUTERSNEARME 0x003d // Computers Near Me (comp utered from Workgroup membership)
#ifndef _SHFOLDER_H_ #ifndef _SHFOLDER_H_
#define CSIDL_FLAG_CREATE 0x8000 // combine with CSIDL_ val ue to force folder creation in SHGetFolderPath() #define CSIDL_FLAG_CREATE 0x8000 // combine with CSIDL_ val ue to force folder creation in SHGetFolderPath()
#endif // _SHFOLDER_H_ #endif // _SHFOLDER_H_
#define CSIDL_FLAG_DONT_VERIFY 0x4000 // combine with CSIDL_ val ue to return an unverified folder path #define CSIDL_FLAG_DONT_VERIFY 0x4000 // combine with CSIDL_ val ue to return an unverified folder path
#define CSIDL_FLAG_DONT_UNEXPAND 0x2000 // combine with CSIDL_ val
ue to avoid unexpanding environment variables
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define CSIDL_FLAG_NO_ALIAS 0x1000 // combine with CSIDL_ val ue to insure non-alias versions of the pidl #define CSIDL_FLAG_NO_ALIAS 0x1000 // combine with CSIDL_ val ue to insure non-alias versions of the pidl
#define CSIDL_FLAG_PER_USER_INIT 0x0800 // combine with CSIDL_ val ue to indicate per-user init (eg. upgrade) #define CSIDL_FLAG_PER_USER_INIT 0x0800 // combine with CSIDL_ val ue to indicate per-user init (eg. upgrade)
#endif // NTDDI_WINXP
#define CSIDL_FLAG_MASK 0xFF00 // mask for all possible f lag values #define CSIDL_FLAG_MASK 0xFF00 // mask for all possible f lag values
SHSTDAPI SHGetSpecialFolderLocation(HWND hwnd, int csidl, LPITEMIDLIST *ppidl); SHSTDAPI SHGetSpecialFolderLocation(HWND hwnd, int csidl, __out PIDLIST_ABSOLUTE
*ppidl);
#if (_WIN32_IE >= 0x0400)
SHSTDAPI_(void) SHFlushSFCache(void);
SHSTDAPI_(LPITEMIDLIST) SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate)
;
SHSTDAPI_(BOOL) SHGetSpecialFolderPathA(HWND hwnd, LPSTR pszPath, int csidl, BOO SHSTDAPI_(PIDLIST_ABSOLUTE) SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCre
L fCreate); ate);
SHSTDAPI_(BOOL) SHGetSpecialFolderPathW(HWND hwnd, LPWSTR pszPath, int csidl, BO SHSTDAPI_(BOOL) SHGetSpecialFolderPathA(HWND hwnd, __out_ecount(MAX_PATH) LPSTR
OL fCreate); pszPath, int csidl, BOOL fCreate);
SHSTDAPI_(BOOL) SHGetSpecialFolderPathW(HWND hwnd, __out_ecount(MAX_PATH) LPWSTR
pszPath, int csidl, BOOL fCreate);
#ifdef UNICODE #ifdef UNICODE
#define SHGetSpecialFolderPath SHGetSpecialFolderPathW #define SHGetSpecialFolderPath SHGetSpecialFolderPathW
#else #else
#define SHGetSpecialFolderPath SHGetSpecialFolderPathA #define SHGetSpecialFolderPath SHGetSpecialFolderPathA
#endif // !UNICODE #endif // !UNICODE
#if (_WIN32_IE >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K)
SHSTDAPI_(void) SHFlushSFCache(void);
typedef enum { typedef enum {
SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists
SHGFP_TYPE_DEFAULT = 1, // default value, may not exist SHGFP_TYPE_DEFAULT = 1, // default value, may not exist
} SHGFP_TYPE; } SHGFP_TYPE;
SHFOLDERAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, SHFOLDERAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags,
LPSTR pszPath); __out_ecount(MAX_PATH) LPSTR pszPath);
SHFOLDERAPI SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, SHFOLDERAPI SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags,
LPWSTR pszPath); __out_ecount(MAX_PATH) LPWSTR pszPath);
#ifdef UNICODE #ifdef UNICODE
#define SHGetFolderPath SHGetFolderPathW #define SHGetFolderPath SHGetFolderPathW
#else #else
#define SHGetFolderPath SHGetFolderPathA #define SHGetFolderPath SHGetFolderPathA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags,
LPITEMIDLIST *ppidl); __out PIDLIST_ABSOLUTE *ppidl);
SHSTDAPI SHSetFolderPathA(int csidl, HANDLE hToken, DWORD dwFlags, LPCSTR pszPat
h);
SHSTDAPI SHSetFolderPathW(int csidl, HANDLE hToken, DWORD dwFlags, LPCWSTR pszPa
th);
#ifdef UNICODE
#define SHSetFolderPath SHSetFolderPathW
#else
#define SHSetFolderPath SHSetFolderPathA
#endif // !UNICODE
#endif // NTDDI_WIN2K
SHFOLDERAPI SHGetFolderPathAndSubDirA(HWND hwnd, int csidl, HANDLE hToken, DWORD #if (NTDDI_VERSION >= NTDDI_WINXP)
dwFlags, LPCSTR pszSubDir, LPSTR pszPath); SHSTDAPI SHGetFolderPathAndSubDirA(HWND hwnd, int csidl, HANDLE hToken, DWORD dw
SHFOLDERAPI SHGetFolderPathAndSubDirW(HWND hwnd, int csidl, HANDLE hToken, DWORD Flags, LPCSTR pszSubDir, __out_ecount(MAX_PATH) LPSTR pszPath);
dwFlags, LPCWSTR pszSubDir, LPWSTR pszPath); SHSTDAPI SHGetFolderPathAndSubDirW(HWND hwnd, int csidl, HANDLE hToken, DWORD dw
Flags, LPCWSTR pszSubDir, __out_ecount(MAX_PATH) LPWSTR pszPath);
#ifdef UNICODE #ifdef UNICODE
#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirW #define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirW
#else #else
#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirA #define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirA
#endif // !UNICODE #endif // !UNICODE
#endif
#endif // _WIN32_IE >= 0x0500 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // _WIN32_IE >= 0x0400 //
// KNOWNFOLDERID based APIs
//
#if (_WIN32_IE >= 0x0500) #define KF_FLAG_CREATE 0x00008000 // Make sure that the folder alr
eady exists or create it and apply security specified in folder definition
// If folder can not be created
then function will return failure and no folder path (IDList) will be returned
// If folder is located on the n
etwork the function may take long time to execute
#define KF_FLAG_DONT_VERIFY 0x00004000 // If this flag is specified the
n the folder path is returned and no verification is performed
// Use this flag is you want to
get folder's path (IDList) and do not need to verify folder's existence
//
// If this flag is NOT specified
then Known Folder API will try to verify that the folder exists
// If folder does not exist
or can not be accessed then function will return failure and no folder path (IDL
ist) will be returned
// If folder is located on t
he network the function may take long time to execute
#define KF_FLAG_DONT_UNEXPAND 0x00002000 // Set folder path as is and do
not try to substitute parts of the path with environments variables.
// If flag is not specified then
Known Folder will try to replace parts of the path with some
// known environment variables (
%USERPROFILE%, %APPDATA% etc.)
#define KF_FLAG_NO_ALIAS 0x00001000 // Get file system based IDList
if available. If the flag is not specified the Known Folder API
// will try to return aliased ID
List by default. Example for FOLDERID_Documents -
// Aliased - [desktop]\[user]\[D
ocuments] - exact location is determined by shell namespace layout and might cha
nge
// Non aliased - [desktop]\[comp
uter]\[disk_c]\[users]\[user]\[Documents] - location is determined by folder loc
ation in the file system
#define KF_FLAG_INIT 0x00000800 // Initialize the folder with de
sktop.ini settings
// If folder can not be initiali
zed then function will return failure and no folder path will be returned
// If folder is located on the n
etwork the function may take long time to execute
#define KF_FLAG_DEFAULT_PATH 0x00000400 // Get the default path, will al
so verify folder existence unless KF_FLAG_DONT_VERIFY is also specified
#define KF_FLAG_NOT_PARENT_RELATIVE 0x00000200 // Get the not-parent-relative d
efault path. Only valid with KF_FLAG_DEFAULT_PATH
#define KF_FLAG_SIMPLE_IDLIST 0x00000100 // Build simple pidl
STDAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid,
DWORD dwFlags,
HANDLE hToken,
__out PIDLIST_ABSOLUTE *ppidl);
STDAPI SHSetKnownFolderPath(REFKNOWNFOLDERID rfid,
DWORD dwFlags,
HANDLE hToken,
__in_opt PCWSTR pszPath);
STDAPI SHGetKnownFolderPath(REFKNOWNFOLDERID rfid,
DWORD dwFlags,
HANDLE hToken,
__out PWSTR *ppszPath); // free *ppszPath with CoTaskMe
mFree
#endif // NTDDI_LONGHORN
#if (NTDDI_VERSION >= NTDDI_WIN2K)
#define FCS_READ 0x00000001 #define FCS_READ 0x00000001
#define FCS_FORCEWRITE 0x00000002 #define FCS_FORCEWRITE 0x00000002
#define FCS_WRITE (FCS_READ | FCS_FORCEWRITE) #define FCS_WRITE (FCS_READ | FCS_FORCEWRITE)
#define FCS_FLAG_DRAGDROP 2 #define FCS_FLAG_DRAGDROP 2
// Mask which values have been retreived or being set. // Mask which values have been retreived or being set.
#define FCSM_VIEWID 0x00000001 #define FCSM_VIEWID 0x00000001 // deprecated
#define FCSM_WEBVIEWTEMPLATE 0x00000002 #define FCSM_WEBVIEWTEMPLATE 0x00000002 // deprecated
#define FCSM_INFOTIP 0x00000004 #define FCSM_INFOTIP 0x00000004
#define FCSM_CLSID 0x00000008 #define FCSM_CLSID 0x00000008
#define FCSM_ICONFILE 0x00000010 #define FCSM_ICONFILE 0x00000010
#define FCSM_LOGO 0x00000020 #define FCSM_LOGO 0x00000020
#define FCSM_FLAGS 0x00000040 #define FCSM_FLAGS 0x00000040
#include <pshpack8.h> #include <pshpack8.h>
// Used by SHGetSetFolderCustomSettingsA // Used by SHGetSetFolderCustomSettings
typedef struct
{
DWORD dwSize;
DWORD dwMask; // IN/OUT Which Attributes to Get/Set
SHELLVIEWID* pvid; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
// The folder's WebView template path
LPSTR pszWebViewTemplate; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
DWORD cchWebViewTemplate; // IN - Specifies the size of the buffe
r pointed to by pszWebViewTemplate
// Ignored if dwReadWrite is FCS_READ
LPSTR pszWebViewTemplateVersion; // currently IN only
// Infotip for the folder
LPSTR pszInfoTip; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
DWORD cchInfoTip; // IN - Specifies the size of the buffer
pointed to by pszInfoTip
// Ignored if dwReadWrite is FCS_READ
// CLSID that points to more info in the registry
CLSID* pclsid; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
// Other flags for the folder. Takes FCS_FLAG_* values
DWORD dwFlags; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
LPSTR pszIconFile; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
DWORD cchIconFile; // IN - Specifies the size of the buffer
pointed to by pszIconFile
// Ignored if dwReadWrite is FCS_READ
int iIconIndex; // OUT - if dwReadWrite is FCS_READ, IN
- otherwise
LPSTR pszLogo; // OUT - if dwReadWrite is FCS_READ, IN - ot
herwise
DWORD cchLogo; // IN - Specifies the size of the buffer poi
nted to by pszIconFile
// Ignored if dwReadWrite is FCS_READ
} SHFOLDERCUSTOMSETTINGSA, *LPSHFOLDERCUSTOMSETTINGSA;
// Used by SHGetSetFolderCustomSettingsW
typedef struct typedef struct
{ {
DWORD dwSize; DWORD dwSize;
DWORD dwMask; // IN/OUT Which Attributes to Get/Set DWORD dwMask; // IN/OUT Which Attributes to Get/Set
SHELLVIEWID* pvid; // OUT - if dwReadWrite is FCS_READ, IN - otherwise SHELLVIEWID* pvid; // OUT - if dwReadWrite is FCS_READ, IN - otherwise
// The folder's WebView template path // The folder's WebView template path
LPWSTR pszWebViewTemplate; // OUT - if dwReadWrite is FCS_READ, I N - otherwise LPWSTR pszWebViewTemplate; // OUT - if dwReadWrite is FCS_READ, I N - otherwise
DWORD cchWebViewTemplate; // IN - Specifies the size of the buff er pointed to by pszWebViewTemplate DWORD cchWebViewTemplate; // IN - Specifies the size of the buff er pointed to by pszWebViewTemplate
// Ignored if dwReadWrite is FCS_READ // Ignored if dwReadWrite is FCS_READ
LPWSTR pszWebViewTemplateVersion; // currently IN only LPWSTR pszWebViewTemplateVersion; // currently IN only
skipping to change at line 1969 skipping to change at line 1309
LPWSTR pszIconFile; // OUT - if dwReadWrite is FCS_READ, IN - otherwise LPWSTR pszIconFile; // OUT - if dwReadWrite is FCS_READ, IN - otherwise
DWORD cchIconFile; // IN - Specifies the size of the buffe r pointed to by pszIconFile DWORD cchIconFile; // IN - Specifies the size of the buffe r pointed to by pszIconFile
// Ignored if dwReadWrite is FCS_READ // Ignored if dwReadWrite is FCS_READ
int iIconIndex; // OUT - if dwReadWrite is FCS_READ, IN - otherwise int iIconIndex; // OUT - if dwReadWrite is FCS_READ, IN - otherwise
LPWSTR pszLogo; // OUT - if dwReadWrite is FCS_READ, IN - o therwise LPWSTR pszLogo; // OUT - if dwReadWrite is FCS_READ, IN - o therwise
DWORD cchLogo; // IN - Specifies the size of the buffer po inted to by pszIconFile DWORD cchLogo; // IN - Specifies the size of the buffer po inted to by pszIconFile
// Ignored if dwReadWrite is FCS_READ // Ignored if dwReadWrite is FCS_READ
} SHFOLDERCUSTOMSETTINGSW, *LPSHFOLDERCUSTOMSETTINGSW; } SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
// Gets/Sets the Folder Custom Settings for pszPath based on dwReadWrite. dwRead Write can be FCS_READ/FCS_WRITE/FCS_FORCEWRITE // Gets/Sets the Folder Custom Settings for pszPath based on dwReadWrite. dwRead Write can be FCS_READ/FCS_WRITE/FCS_FORCEWRITE
SHSTDAPI SHGetSetFolderCustomSettingsA(LPSHFOLDERCUSTOMSETTINGSA pfcs, LPCSTR ps SHSTDAPI SHGetSetFolderCustomSettings(__inout LPSHFOLDERCUSTOMSETTINGS pfcs, LPC
zPath, DWORD dwReadWrite); WSTR pszPath, DWORD dwReadWrite);
SHSTDAPI SHGetSetFolderCustomSettingsW(LPSHFOLDERCUSTOMSETTINGSW pfcs, LPCWSTR p
szPath, DWORD dwReadWrite);
#ifdef UNICODE
#define SHFOLDERCUSTOMSETTINGS SHFOLDERCUSTOMSETTINGSW
#define SHGetSetFolderCustomSettings SHGetSetFolderCustomSettingsW
#define LPSHFOLDERCUSTOMSETTINGS LPSHFOLDERCUSTOMSETTINGSW
#else
#define SHFOLDERCUSTOMSETTINGS SHFOLDERCUSTOMSETTINGSA
#define SHGetSetFolderCustomSettings SHGetSetFolderCustomSettingsA
#define LPSHFOLDERCUSTOMSETTINGS LPSHFOLDERCUSTOMSETTINGSA
#endif
#endif // _WIN32_IE >= 0x0500 #endif // NTDDI_WIN2K
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// SHBrowseForFolder API // SHBrowseForFolder API
// //
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData); typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
#include <pshpack8.h> #include <pshpack8.h>
typedef struct _browseinfoA { typedef struct _browseinfoA {
HWND hwndOwner; HWND hwndOwner;
LPCITEMIDLIST pidlRoot; PCIDLIST_ABSOLUTE pidlRoot;
LPSTR pszDisplayName; // Return display name of item selected. LPSTR pszDisplayName; // Return display name of item selected.
LPCSTR lpszTitle; // text to go in the banner over the tree. LPCSTR lpszTitle; // text to go in the banner over the tree.
UINT ulFlags; // Flags that control the return stuff UINT ulFlags; // Flags that control the return stuff
BFFCALLBACK lpfn; BFFCALLBACK lpfn;
LPARAM lParam; // extra info that's passed back in callbacks LPARAM lParam; // extra info that's passed back in callbacks
int iImage; // output var: where to return t he Image index. int iImage; // output var: where to return t he Image index.
} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA; } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
typedef struct _browseinfoW { typedef struct _browseinfoW {
HWND hwndOwner; HWND hwndOwner;
LPCITEMIDLIST pidlRoot; PCIDLIST_ABSOLUTE pidlRoot;
LPWSTR pszDisplayName; // Return display name of item selected. LPWSTR pszDisplayName; // Return display name of item selected.
LPCWSTR lpszTitle; // text to go in the banner over the tree. LPCWSTR lpszTitle; // text to go in the banner over the tree.
UINT ulFlags; // Flags that control the return stuff UINT ulFlags; // Flags that control the return stuff
BFFCALLBACK lpfn; BFFCALLBACK lpfn;
LPARAM lParam; // extra info that's passed back in callbacks LPARAM lParam; // extra info that's passed back in callbacks
int iImage; // output var: where to return t he Image index. int iImage; // output var: where to return t he Image index.
} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
skipping to change at line 2076 skipping to change at line 1405
// messages to browser // messages to browser
#define BFFM_SETSTATUSTEXTA (WM_USER + 100) #define BFFM_SETSTATUSTEXTA (WM_USER + 100)
#define BFFM_ENABLEOK (WM_USER + 101) #define BFFM_ENABLEOK (WM_USER + 101)
#define BFFM_SETSELECTIONA (WM_USER + 102) #define BFFM_SETSELECTIONA (WM_USER + 102)
#define BFFM_SETSELECTIONW (WM_USER + 103) #define BFFM_SETSELECTIONW (WM_USER + 103)
#define BFFM_SETSTATUSTEXTW (WM_USER + 104) #define BFFM_SETSTATUSTEXTW (WM_USER + 104)
#define BFFM_SETOKTEXT (WM_USER + 105) // Unicode only #define BFFM_SETOKTEXT (WM_USER + 105) // Unicode only
#define BFFM_SETEXPANDED (WM_USER + 106) // Unicode only #define BFFM_SETEXPANDED (WM_USER + 106) // Unicode only
SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderA(LPBROWSEINFOA lpbi); SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderA(LPBROWSEINFOA lpbi);
SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderW(LPBROWSEINFOW lpbi); SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderW(LPBROWSEINFOW lpbi);
#ifdef UNICODE #ifdef UNICODE
#define SHBrowseForFolder SHBrowseForFolderW #define SHBrowseForFolder SHBrowseForFolderW
#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTW #define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTW
#define BFFM_SETSELECTION BFFM_SETSELECTIONW #define BFFM_SETSELECTION BFFM_SETSELECTIONW
#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW
#else #else
#define SHBrowseForFolder SHBrowseForFolderA #define SHBrowseForFolder SHBrowseForFolderA
#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTA #define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTA
#define BFFM_SETSELECTION BFFM_SETSELECTIONA #define BFFM_SETSELECTION BFFM_SETSELECTIONA
#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA
#endif #endif
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// SHLoadInProc // SHLoadInProc
// //
// When this function is called, the shell calls CoCreateInstance // This function is no longer implemented. It will return E_NOTIMPL.
// (or equivalent) with CLSCTX_INPROC_SERVER and the specified CLSID
// from within the shell's process and release it immediately.
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
SHSTDAPI SHLoadInProc(REFCLSID rclsid); SHSTDAPI SHLoadInProc(REFCLSID rclsid);
#if (_WIN32_IE >= 0x0600)
//-------------------------------------------------------------------------
//
// SHEnableServiceObject
//
// Like SHLoadInProc, but gives control over the object's lifetime
// via fEnable parameter. TRUE tells the shell to create the object
// and hold onto it, FALSE tells the shell to look for the previously
// created instance of the object and release it.
//
//-------------------------------------------------------------------------
SHSTDAPI SHEnableServiceObject(REFCLSID rclsid, BOOL fEnable);
#endif
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// Internet Shortcut Object // Internet Shortcut Object
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Cmds for CGID_ShortCut // Cmds for CGID_ShortCut
enum { #if (_WIN32_IE >= _WIN32_IE_IE501)
ISHCUTCMDID_DOWNLOADICON = 0, enum
{
ISHCUTCMDID_DOWNLOADICON = 0,
ISHCUTCMDID_INTSHORTCUTCREATE = 1, ISHCUTCMDID_INTSHORTCUTCREATE = 1,
#if (_WIN32_IE >= _WIN32_IE_IE70)
ISHCUTCMDID_COMMITHISTORY = 2,
ISHCUTCMDID_SETUSERAWURL = 3,
#endif
}; };
#define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE #define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE
#endif
// //
// Helper function which returns a IShellFolder interface to the desktop // Helper function which returns a IShellFolder interface to the desktop
// folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop. // folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop.
// //
// CoCreateInstance(CLSID_Desktop, NULL, // CoCreateInstance(CLSID_Desktop, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pshf));
// CLSCTX_INPROC, IID_IShellFolder, &pshf);
// //
SHSTDAPI SHGetDesktopFolder(IShellFolder **ppshf); SHSTDAPI SHGetDesktopFolder(__out IShellFolder **ppshf);
// IShellFolder IBindCtx* parameters. the IUnknown for these are
// accessed through IBindCtx::RegisterObjectParam/GetObjectParam
// use this to provide the data needed create IDLists through
// IShellFolder::ParseDisplayName(). this data applies to the last element
// of the name that is parsed (c:\foo\bar.txt, data applies to bar.txt)
// this makes creating these IDLists much faster that suppling the name only
#define STR_FILE_SYS_BIND_DATA L"File System Bind Data"
#undef INTERFACE
#define INTERFACE IFileSystemBindData
DECLARE_INTERFACE_(IFileSystemBindData, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IFileSystemBindData methods *** // this interface is deprecated, data sources should
STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW *pfd) PURE; // implement IShellFolder2::GetDetailsOf()/GetDetailsEx() instead
STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW *pfd) PURE;
};
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellDetails #define INTERFACE IShellDetails
DECLARE_INTERFACE_(IShellDetails, IUnknown) DECLARE_INTERFACE_IID_(IShellDetails, IUnknown, "000214EC-0000-0000-c000-0000000 00046")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellDetails methods *** // *** IShellDetails methods ***
STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE; STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, __out SHEL LDETAILS *pDetails) PURE;
STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
}; };
//-------------------------------------------------------------------------
//
// IObjMgr interface
//
//
// [Member functions]
// //
// IObjMgr::Append(punk) // IObjMgr::Append(punk)
// This function adds an object to the end of a list of objects. // This function adds an object to the end of a list of objects.
// //
// IObjMgr::Remove(punk) // IObjMgr::Remove(punk)
// This function removes an object from a list of objects. // This function removes an object from a list of objects.
// //
// This is implemented by CLSID_ACLMulti so each AutoComplete List // This is implemented by CLSID_ACLMulti so each AutoComplete List
// (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added. // (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added.
// CLSID_ACLMulti's IEnumString will then be the union of the results // CLSID_ACLMulti's IEnumString will then be the union of the results
// from the COM Objects added. // from the COM Objects added.
//------------------------------------------------------------------------- //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IObjMgr #define INTERFACE IObjMgr
DECLARE_INTERFACE_(IObjMgr, IUnknown) DECLARE_INTERFACE_IID_(IObjMgr, IUnknown, "00BB2761-6A77-11D0-A535-00C04FD7D062" )
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IObjMgr specific methods *** // *** IObjMgr specific methods ***
STDMETHOD(Append) (THIS_ IUnknown *punk) PURE; STDMETHOD(Append) (THIS_ __in IUnknown *punk) PURE;
STDMETHOD(Remove) (THIS_ IUnknown *punk) PURE; STDMETHOD(Remove) (THIS_ __in IUnknown *punk) PURE;
}; };
//-------------------------------------------------------------------------
//
// ICurrentWorkingDirectory interface
//
//
// [Member functions]
// //
// ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize) // ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize)
// This function gets the Current Working Directory from a COM object that // This function gets the Current Working Directory from a COM object that
// stores such state. // stores such state.
// //
// ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath) // ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath)
// This function sets the Current Working Directory of a COM object that // This function sets the Current Working Directory of a COM object that
// stores such state. // stores such state.
// //
// This function can be used generically. One COM object that implements it // This function can be used generically. One COM object that implements it
// is CLSID_ACListISF so that the AutoComplete engine can complete relative // is CLSID_ACListISF so that the AutoComplete engine can complete relative
// paths. SetDirectory() will set the "Current Working Directory" and // paths. SetDirectory() will set the "Current Working Directory" and
// AutoComplete with then complete both absolute and relative paths. // AutoComplete with then complete both absolute and relative paths.
// For Example, if ::SetDirectory(L"C:\Program Files") is called, then // For Example, if ::SetDirectory(L"C:\Program Files") is called, then
// the user can AutoComplete "..\winnt". In order to set the current // the user can AutoComplete "..\winnt". In order to set the current
// working directory for non-file system paths, "ftp://ftp.microsoft.com/" or // working directory for non-file system paths, "ftp://ftp.microsoft.com/" or
// "Control Panel" for example, use IPersistFolder. // "Control Panel" for example, use IPersistFolder.
//------------------------------------------------------------------------- //
#undef INTERFACE #undef INTERFACE
#define INTERFACE ICurrentWorkingDirectory #define INTERFACE ICurrentWorkingDirectory
DECLARE_INTERFACE_(ICurrentWorkingDirectory, IUnknown) DECLARE_INTERFACE_IID_(ICurrentWorkingDirectory, IUnknown, "91956D21-9276-11d1-9 21A-006097DF5BD4")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** ICurrentWorkingDirectory specific methods *** // *** ICurrentWorkingDirectory specific methods ***
STDMETHOD(GetDirectory) (THIS_ LPWSTR pwzPath, DWORD cchSize) PURE; STDMETHOD(GetDirectory) (THIS_ __out_ecount(cchSize) LPWSTR pwzPath, DWORD c chSize) PURE;
STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE; STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE;
}; };
//-------------------------------------------------------------------------
// //
// IACList interface // IACList::Expand(LPCWSTR)
//
//
// [Member functions]
//
// IObjMgr::Expand(LPCOLESTR)
// This function tells an autocomplete list to expand a specific string. // This function tells an autocomplete list to expand a specific string.
// //
// If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete) // If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete)
// will use this interface to tell the "AutoComplete Lists" where to expand // will use this interface to tell the "AutoComplete Lists" where to expand
// the results. // the results.
// //
// For Example, if the user enters "C:\Program Files\Micros", AutoComplete // For Example, if the user enters "C:\Program Files\Micros", AutoComplete
// first completely enumerate the "AutoComplete Lists" via IEnumString. Then it // first completely enumerate the "AutoComplete Lists" via IEnumString. Then it
// will call the "AutoComplete Lists" with IACList::Expand(L"C:\Program Files"). // will call the "AutoComplete Lists" with IACList::Expand(L"C:\Program Files").
// It will then enumerate the IEnumString interface again to get results in // It will then enumerate the IEnumString interface again to get results in
// that directory. // that directory.
//------------------------------------------------------------------------- //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IACList #define INTERFACE IACList
DECLARE_INTERFACE_(IACList, IUnknown) DECLARE_INTERFACE_IID_(IACList, IUnknown, "77A130B0-94FD-11D0-A544-00C04FD7d062" )
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE;
STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE;
// *** IACList specific methods *** // *** IACList specific methods ***
STDMETHOD(Expand) (THIS_ LPCOLESTR pszExpand) PURE; STDMETHOD(Expand) (THIS_ LPCWSTR pszExpand) PURE;
}; };
//------------------------------------------------------------------------- // This interface exists to allow the caller to set filter criteria
//
// IACList2 interface
//
// [Description]
// This interface exists to allow the caller to set filter criteria
// for an AutoComplete List. AutoComplete Lists generates the list of // for an AutoComplete List. AutoComplete Lists generates the list of
// possible AutoComplete completions. CLSID_ACListISF is one AutoComplete // possible AutoComplete completions. CLSID_ACListISF is one AutoComplete
// List COM object that implements this interface. // List COM object that implements this interface.
//-------------------------------------------------------------------------
#undef INTERFACE #undef INTERFACE
#define INTERFACE IACList2 #define INTERFACE IACList2
typedef enum _tagAUTOCOMPLETELISTOPTIONS typedef enum _tagAUTOCOMPLETELISTOPTIONS
{ {
ACLO_NONE = 0, // don't enumerate anything ACLO_NONE = 0, // don't enumerate anything
ACLO_CURRENTDIR = 1, // enumerate current directory ACLO_CURRENTDIR = 1, // enumerate current directory
ACLO_MYCOMPUTER = 2, // enumerate MyComputer ACLO_MYCOMPUTER = 2, // enumerate MyComputer
ACLO_DESKTOP = 4, // enumerate Desktop Folder ACLO_DESKTOP = 4, // enumerate Desktop Folder
ACLO_FAVORITES = 8, // enumerate Favorites Folder ACLO_FAVORITES = 8, // enumerate Favorites Folder
ACLO_FILESYSONLY = 16, // enumerate only the file system ACLO_FILESYSONLY = 16, // enumerate only the file system
#if (_WIN32_IE >= _WIN32_IE_IE60)
ACLO_FILESYSDIRS = 32, // enumerate only the file system dirs, UNC sha res, and UNC servers. ACLO_FILESYSDIRS = 32, // enumerate only the file system dirs, UNC sha res, and UNC servers.
#endif
#if (_WIN32_IE >= _WIN32_IE_IE70)
ACLO_VIRTUALNAMESPACE = 64, // enumereate on the virual namespace
#endif
} AUTOCOMPLETELISTOPTIONS; } AUTOCOMPLETELISTOPTIONS;
DECLARE_INTERFACE_(IACList2, IACList) DECLARE_INTERFACE_IID_(IACList2, IACList, "470141a0-5186-11d2-bbb6-0060977b464c" )
{ {
// *** IACList2 specific methods *** // *** IACList2 specific methods ***
STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE; STDMETHOD(GetOptions)(THIS_ __out DWORD* pdwFlag) PURE;
}; };
/*-------------------------------------------------------------------------*\ /*-------------------------------------------------------------------------*\
INTERFACE: IProgressDialog INTERFACE: IProgressDialog
DESCRIPTION: DESCRIPTION:
CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create
a progress dialog, set it's title, animation, text lines, progress, and a progress dialog, set it's title, animation, text lines, progress, and
it will do all the work of updating on a background thread, being modless, it will do all the work of updating on a background thread, being modeless,
handling the user cancelling the operation, and estimating the time remainin handling the user canceling the operation, and estimating the time remaining
g
until the operation completes. until the operation completes.
USAGE: USAGE:
This is how the dialog is used during operations that require progress This is how the dialog is used during operations that require progress
and the ability to cancel: and the ability to cancel:
{ {
DWORD dwComplete, dwTotal; DWORD dwComplete, dwTotal;
IProgressDialog * ppd; IProgressDialog * ppd;
CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_I ProgressDialog, (void **)&ppd); CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_I ProgressDialog, (void **)&ppd);
ppd->SetTitle(L"My Slow Operation"); // S et the title of the dialog. ppd->SetTitle(L"My Slow Operation"); // S et the title of the dialog.
skipping to change at line 2370 skipping to change at line 1646
ppd->SetProgress(dwCompleted, dwTotal); ppd->SetProgress(dwCompleted, dwTotal);
} }
ppd->StopProgressDialog(); ppd->StopProgressDialog();
ppd->Release(); ppd->Release();
} }
\*-------------------------------------------------------------------------*/ \*-------------------------------------------------------------------------*/
// Flags for IProgressDialog::StartProgressDialog() (dwFlags) // Flags for IProgressDialog::StartProgressDialog() (dwFlags)
// The flag space includes OPPROGDLG_ and PROGDLG_ values, please guarantee they don't conflict. See shobjidl.idl for OPPROGDLG_*
#define PROGDLG_NORMAL 0x00000000 // default normal progress dlg b ehavior #define PROGDLG_NORMAL 0x00000000 // default normal progress dlg b ehavior
#define PROGDLG_MODAL 0x00000001 // the dialog is modal to its hw ndParent (default is modeless) #define PROGDLG_MODAL 0x00000001 // the dialog is modal to its hw ndParent (default is modeless)
#define PROGDLG_AUTOTIME 0x00000002 // automatically updates the "Li ne3" text with the "time remaining" (you cant call SetLine3 if you passs this!) #define PROGDLG_AUTOTIME 0x00000002 // automatically updates the "Li ne3" text with the "time remaining" (you cant call SetLine3 if you passs this!)
#define PROGDLG_NOTIME 0x00000004 // we dont show the "time remain ing" if this is set. We need this if dwTotal < dwCompleted for sparse files #define PROGDLG_NOTIME 0x00000004 // we dont show the "time remain ing" if this is set. We need this if dwTotal < dwCompleted for sparse files
#define PROGDLG_NOMINIMIZE 0x00000008 // Do not have a minimize button in the caption bar. #define PROGDLG_NOMINIMIZE 0x00000008 // Do not have a minimize button in the caption bar.
#define PROGDLG_NOPROGRESSBAR 0x00000010 // Don't display the progress ba r #define PROGDLG_NOPROGRESSBAR 0x00000010 // Don't display the progress ba r
#if (_WIN32_IE >= _WIN32_IE_IE70)
#define PROGDLG_MARQUEEPROGRESS 0x00000020 // Use marquee progress (comctl3
2 v6 required)
#define PROGDLG_NOCANCEL 0x00000040 // No cancel button (operation c
annot be canceled) (use sparingly)
#endif
// Time Actions (dwTimerAction) // Time Actions (dwTimerAction)
#define PDTIMER_RESET 0x00000001 // Reset the timer so the progress will be calculated from now until the first ::SetProgress() is called so #define PDTIMER_RESET 0x00000001 // Reset the timer so the progress will be calculated from now until the first ::SetProgress() is called so
// those this time will correspond to the values passed to ::SetProgress(). Only do this before ::SetProgress() is called. // those this time will correspond to the values passed to ::SetProgress(). Only do this before ::SetProgress() is called.
#if (_WIN32_IE >= _WIN32_IE_IE70)
#define PDTIMER_PAUSE 0x00000002 // Progress has been suspended
#define PDTIMER_RESUME 0x00000003 // Progress has resumed
#endif
#undef INTERFACE #undef INTERFACE
#define INTERFACE IProgressDialog #define INTERFACE IProgressDialog
DECLARE_INTERFACE_(IProgressDialog, IUnknown) DECLARE_INTERFACE_IID_(IProgressDialog, IUnknown, "EBBC7C04-315E-11d2-B62F-00609 7DF5BD4")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IProgressDialog specific methods // *** IProgressDialog specific methods
STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown * punkEnableM odless, DWORD dwFlags, LPCVOID pvResevered) PURE; STDMETHOD(StartProgressDialog)(THIS_ __in_opt HWND hwndParent, __in_opt IUnk nown * punkEnableModless, DWORD dwFlags, __reserved LPCVOID pvResevered) PURE;
STDMETHOD(StopProgressDialog)(THIS) PURE; STDMETHOD(StopProgressDialog)(THIS) PURE;
STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE; STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;
STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PU RE; STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PU RE;
STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE; STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE;
STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE; STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) P URE; STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) P URE;
STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPa STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPa
th, LPCVOID pvResevered) PURE; th, __reserved LPCVOID pvResevered) PURE;
STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID pvResevered) PUR STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, __reserved LPCVOID pvRes
E; evered) PURE;
STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID pvResevered) PURE; STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, __reserved LPCVOID pvResevered)
}; PURE;
//==========================================================================
// IInputObjectSite/IInputObject interfaces
//
// These interfaces allow us (or ISVs) to install/update external Internet
// Toolbar for IE and the shell. The frame will simply get the CLSID from
// registry (to be defined) and CoCreateInstance it.
//
//==========================================================================
//-------------------------------------------------------------------------
//
// IInputObjectSite interface
//
// A site implements this interface so the object can communicate
// focus change to it.
//
// [Member functions]
//
// IInputObjectSite::OnFocusChangeIS(punkObj, fSetFocus)
// Object (punkObj) is getting or losing the focus.
//
//-------------------------------------------------------------------------
#undef INTERFACE
#define INTERFACE IInputObjectSite
DECLARE_INTERFACE_(IInputObjectSite, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IInputObjectSite specific methods ***
STDMETHOD(OnFocusChangeIS)(THIS_ IUnknown* punkObj, BOOL fSetFocus) PURE;
};
//-------------------------------------------------------------------------
//
// IInputObject interface
//
// An object implements this interface so the site can communicate
// activation and accelerator events to it.
//
// [Member functions]
//
// IInputObject::UIActivateIO(fActivate, lpMsg)
// Activates or deactivates the object. lpMsg may be NULL. Returns
// S_OK if the activation succeeded.
//
// IInputObject::HasFocusIO()
// Returns S_OK if the object has the focus, S_FALSE if not.
//
// IInputObject::TranslateAcceleratorIO(lpMsg)
// Allow the object to process the message. Returns S_OK if the
// message was processed (eaten).
//
//-------------------------------------------------------------------------
#undef INTERFACE
#define INTERFACE IInputObject
DECLARE_INTERFACE_(IInputObject, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IInputObject specific methods ***
STDMETHOD(UIActivateIO)(THIS_ BOOL fActivate, LPMSG lpMsg) PURE;
STDMETHOD(HasFocusIO)(THIS) PURE;
STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
}; };
//========================================================================== //==========================================================================
// IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces // IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces
// IInputObjectSite/IInputObject interfaces // IInputObjectSite/IInputObject interfaces
// //
// These interfaces allow us (or ISVs) to install/update external Internet // These interfaces allow us (or ISVs) to install/update external Internet
// Toolbar for IE and the shell. The frame will simply get the CLSID from // Toolbar for IE and the shell. The frame will simply get the CLSID from
// registry (to be defined) and CoCreateInstance it. // registry (to be defined) and CoCreateInstance it.
// //
skipping to change at line 2515 skipping to change at line 1725
// //
// IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw) // IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw)
// Object requests that the site set the border spacing to the size // Object requests that the site set the border spacing to the size
// specified in *pbw. // specified in *pbw.
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
#undef INTERFACE #undef INTERFACE
#define INTERFACE IDockingWindowSite #define INTERFACE IDockingWindowSite
DECLARE_INTERFACE_(IDockingWindowSite, IOleWindow) DECLARE_INTERFACE_IID_(IDockingWindowSite, IOleWindow, "2a342fc2-7b26-11d0-8ca9- 00a0c92dbfe8")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IOleWindow methods *** // *** IOleWindow methods ***
STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
skipping to change at line 2551 skipping to change at line 1761
// //
// IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv) // IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv)
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// flags for RemoveToolbar // flags for RemoveToolbar
#define DWFRF_NORMAL 0x0000 #define DWFRF_NORMAL 0x0000
#define DWFRF_DELETECONFIGDATA 0x0001 #define DWFRF_DELETECONFIGDATA 0x0001
// flags for AddToolbar // flags for AddToolbar
#define DWFAF_HIDDEN 0x0001 // add hidden #define DWFAF_HIDDEN 0x0001 // add hidden
#define DWFAF_GROUP1 0x0002 // insert at end of group 1
#define DWFAF_GROUP2 0x0004 // insert at end of group 2
#define DWFAF_AUTOHIDE 0x0010 // The toolbar will be subject to AutoHide in F
ull Screen mode
#undef INTERFACE #undef INTERFACE
#define INTERFACE IDockingWindowFrame #define INTERFACE IDockingWindowFrame
DECLARE_INTERFACE_(IDockingWindowFrame, IOleWindow) DECLARE_INTERFACE_IID_(IDockingWindowFrame, IOleWindow, "47d2657a-7b27-11d0-8ca9 -00a0c92dbfe8")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IOleWindow methods *** // *** IOleWindow methods ***
STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE;
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
// *** IDockingWindowFrame methods *** // *** IDockingWindowFrame methods ***
STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAd dFlags) PURE; STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAd dFlags) PURE;
STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE ; STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE ;
STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PUR E; STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PUR E;
}; };
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
//-------------------------------------------------------------------------
//
// IRunnableTask interface
//
// This is a free threaded interface used for putting items on a background
// scheduler for execution within the view. It allows a scheduler to start and
// stop tasks on as many worker threads as it deems necessary.
//
// Run(), Kill() and Suspend() may be called from different threads.
//
// [Member functions]
//
// IRunnableTask::Run(void)
// Initiate the task to run. This should return E_PENDING if the task
// has been suspended.
//
// IRunnableTask::Kill(void)
//
// IRunnableTask::Suspend(void)
//
// IRunnableTask::Resume(void)
//
// IRunnableTask::IsRunning(void)
//
//-------------------------------------------------------------------------
// Convenient state values
#define IRTIR_TASK_NOT_RUNNING 0
#define IRTIR_TASK_RUNNING 1
#define IRTIR_TASK_SUSPENDED 2
#define IRTIR_TASK_PENDING 3
#define IRTIR_TASK_FINISHED 4
#undef INTERFACE
#define INTERFACE IRunnableTask
DECLARE_INTERFACE_( IRunnableTask, IUnknown )
{
// *** IUnknown methods ***
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// *** IRunnableTask methods ***
STDMETHOD (Run)(THIS) PURE;
STDMETHOD (Kill)(THIS_ BOOL fWait ) PURE;
STDMETHOD (Suspend)(THIS) PURE;
STDMETHOD (Resume)(THIS) PURE;
STDMETHOD_(ULONG, IsRunning)(THIS) PURE;
};
typedef IRunnableTask * LPRUNNABLETASK;
#endif
#if (_WIN32_IE >= 0x0400)
#define TASKOWNERID GUID
#define REFTASKOWNERID REFGUID
// ---IShellTaskScheduler
// An interface for interacting with and controlling a task scheduler. This
// interface does not need to be free-threaded unless the items in the queue
// interact with the scheduler as well as the main execution thread on which the
// task scheduler was created.
// IShellTaskScheduler::AddTask()
// Adds Tasks to the scheduler's background queue. The TASKOWNERID allow pa
rticular types
// of tasks to be grouped so that they can be counted or removed. The lPara
m allows the task
// to be associated with a particular item (for example an item in a listvi
ew).
// IShellTaskScheduler::RemoveTasks()
// Removes tasks from the scheduler's queue. These can be sepcified in term
s of their TASKOWNERID
// or their LPARAM, or both, or neither (TOID_NULL && ITSAT_DEFAULT_LPARAM
results in all tasks being
// removed). If a task that matches is currently running and ITaskScheduler
::Status() has been
// passeed ITSSFLAG_KILL_ON_DESTROY then the scheduler will attempt to kill
the current task. The
// fWaitIfRunning parameter is then passed to IRunnableTask::Kill().
// IShellTaskScheduler::CountTasks()
// Counts the tasks in the queue depending upon the TASKOWNERID and the LPA
RAM passed. (TOID_NULL and
// ITSAT_DEFAULT_LPARAM will count all tasks in the queue)
// IShellTaskScheduler::Status()
// This sets the ReleaseStatus for the current task and the background thre
ad timeout. When
// ITaskScheduler::RemoveTasks() is called and there is a task currently ru
nning that matches
// ITSSFLAG_COMPLETE_ON_DESTROY will cause TRUE to be passed to the task's
IRunnableTask::Kill().
// The dwThreadTimeout parameter if not set to the default will cause the b
ackground thread to
// die if no new tasks have been added to the queue in the timeout period.
The Thread will be
// recreated when the next new task is added.
////////////////////////
// Status() flags,
// wait for the current task to complete before deleting the scheduler
#define ITSSFLAG_COMPLETE_ON_DESTROY 0x0000
// kill the current task (if there is one) when the task scheduler is deleted
#define ITSSFLAG_KILL_ON_DESTROY 0x0001
#define ITSSFLAG_SUPPORTS_TERMINATE 0x0002
#define ITSSFLAG_FLAGS_MASK 0x0003
// set the timeout for killing the thread when the object is terminated.
// this timeout can be used to stop the object from blocking the system
// indefinitely.
#define ITSSFLAG_THREAD_TERMINATE_TIMEOUT 0x0010
// set the timeout for threads that are idle in the thread pool
#define ITSSFLAG_THREAD_POOL_TIMEOUT 0x0020
// The default timeout passed to release Status to determine how long the thread
// can be asleep before the thread is expired
#define ITSS_THREAD_DESTROY_DEFAULT_TIMEOUT (60*1000)
// default, we won't kill it...
#define ITSS_THREAD_TERMINATE_TIMEOUT (INFINITE)
// there is no change to the thread timeout
#define ITSS_THREAD_TIMEOUT_NO_CHANGE (INFINITE - 1)
// the LPARAM allows task to be associated with items thus all tasks owned by a
// particular item can be accessed by passing a non default value for this param
eter
#define ITSAT_DEFAULT_LPARAM 0xffffffff
// Task priorities
// ---------------
// This depends on the cooperation of tasks currently under execution. New tasks
will
// be inserted in the queue in priority order. If a task of a low priority is cu
rrently
// under execution when a higher priority task is added, the scheduler will atte
mpt
// to suspend the task currently under execution. It will be resumed when the ot
her tasks
// have been completed.
#define ITSAT_DEFAULT_PRIORITY 0x10000000
#define ITSAT_MAX_PRIORITY 0x7fffffff
#define ITSAT_MIN_PRIORITY 0x00000000
#define TOID_NULL CLSID_NULL
#undef INTERFACE
#define INTERFACE IShellTaskScheduler
DECLARE_INTERFACE_( IShellTaskScheduler, IUnknown )
{
// *** IUnknown methods ***
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// *** IShellTaskScheduler methods ***
STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask,
REFTASKOWNERID rtoid,
DWORD_PTR lParam,
DWORD dwPriority ) PURE;
STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid,
DWORD_PTR lParam,
BOOL fWaitIfRunning ) PURE;
STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE;
STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE
;
};
typedef IShellTaskScheduler * LPSHELLTASKSCHEDULER;
#if (_WIN32_IE >= 0x0501)
#define ITSSFLAG_TASK_PLACEINFRONT 0x00000001
#define ITSSFLAG_TASK_PLACEINBACK 0x00000002
#undef INTERFACE
#define INTERFACE IShellTaskScheduler2
DECLARE_INTERFACE_( IShellTaskScheduler2, IShellTaskScheduler )
{
// *** IUnknown methods ***
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;
// *** IShellTaskScheduler methods ***
STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask,
REFTASKOWNERID rtoid,
DWORD_PTR lParam,
DWORD dwPriority ) PURE;
STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid,
DWORD_PTR lParam,
BOOL fWaitIfRunning ) PURE;
STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE;
STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE
;
// *** IShellTaskScheduler2 methods ***
STDMETHOD (AddTask2)(THIS_ IRunnableTask * pTask,
REFTASKOWNERID rtoid,
DWORD_PTR lParam,
DWORD dwPriority,
DWORD grfFlags ) PURE;
STDMETHOD (MoveTask)(THIS_ REFTASKOWNERID rtoid,
DWORD_PTR lParam,
DWORD dwPriority,
DWORD grfFlags ) PURE;
};
#endif // (_WIN32_IE >= 0x0501)
#endif // (_WIN32_IE >= 0x0400)
#if (_WIN32_IE >= 0x0400)
/* ***************** IThumbnailCapture /* ***************** IThumbnailCapture
* CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specifi ed * CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specifi ed
* size as an hbitmap * size as an hbitmap
*/ */
#undef INTERFACE #undef INTERFACE
#define INTERFACE IThumbnailCapture #define INTERFACE IThumbnailCapture
DECLARE_INTERFACE_ ( IThumbnailCapture, IUnknown ) DECLARE_INTERFACE_IID_(IThumbnailCapture, IUnknown, "4ea39266-7211-409f-b622-f63 dbd16c533")
{ {
// *** IThumbnailCapture methods *** // *** IThumbnailCapture methods ***
STDMETHOD (CaptureThumbnail) ( THIS_ const SIZE * pMaxSize, STDMETHOD (CaptureThumbnail) ( THIS_ const SIZE * pMaxSize,
IUnknown * pHTMLDoc2, IUnknown * pHTMLDoc2,
HBITMAP * phbmThumbnail ) PURE; HBITMAP * phbmThumbnail ) PURE;
}; };
typedef IThumbnailCapture * LPTHUMBNAILCAPTURE; typedef IThumbnailCapture * LPTHUMBNAILCAPTURE;
#endif #endif
#if (_WIN32_IE >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN)
#include <pshpack8.h> #include <pshpack8.h>
typedef struct _EnumImageStoreDATAtag typedef struct _EnumImageStoreDATAtag
{ {
WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH];
FILETIME ftTimeStamp; FILETIME ftTimeStamp;
} ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA; } ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
#undef INTERFACE #undef INTERFACE
#define INTERFACE IEnumShellImageStore #define INTERFACE IEnumShellImageStore
DECLARE_INTERFACE_( IEnumShellImageStore, IUnknown ) DECLARE_INTERFACE_IID_( IEnumShellImageStore, IUnknown, "6DFD582B-92E3-11D1-98A3 -00C04FB687DA" )
{ {
STDMETHOD ( QueryInterface ) ( THIS_ REFIID riid, void **ppv ) PURE; STDMETHOD ( QueryInterface ) ( THIS_ REFIID riid, void **ppv ) PURE;
STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE;
STDMETHOD_( ULONG, Release ) ( THIS ) PURE; STDMETHOD_( ULONG, Release ) ( THIS ) PURE;
STDMETHOD ( Reset ) ( THIS ) PURE; STDMETHOD ( Reset ) ( THIS ) PURE;
STDMETHOD ( Next ) ( THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA * prgElt, UL ONG * pceltFetched ) PURE; STDMETHOD ( Next ) ( THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA * prgElt, UL ONG * pceltFetched ) PURE;
STDMETHOD ( Skip ) ( THIS_ ULONG celt ) PURE; STDMETHOD ( Skip ) ( THIS_ ULONG celt ) PURE;
STDMETHOD ( Clone ) ( THIS_ IEnumShellImageStore ** ppEnum ) PURE; STDMETHOD ( Clone ) ( THIS_ IEnumShellImageStore ** ppEnum ) PURE;
}; };
skipping to change at line 2840 skipping to change at line 1845
// flags used to determine the capabilities of the storage for the images // flags used to determine the capabilities of the storage for the images
#define SHIMSTCAPFLAG_LOCKABLE 0x0001 // does the store require/support locking #define SHIMSTCAPFLAG_LOCKABLE 0x0001 // does the store require/support locking
#define SHIMSTCAPFLAG_PURGEABLE 0x0002 // does the store require dead it ems purging externally ? #define SHIMSTCAPFLAG_PURGEABLE 0x0002 // does the store require dead it ems purging externally ?
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellImageStore #define INTERFACE IShellImageStore
// this interface is used to manipulate the Image cache. It can potentially be u sed // this interface is used to manipulate the Image cache. It can potentially be u sed
// in a free threaded manner in conjunction with the Lock parameter to Open and close // in a free threaded manner in conjunction with the Lock parameter to Open and close
DECLARE_INTERFACE_( IShellImageStore, IUnknown ) DECLARE_INTERFACE_IID_( IShellImageStore, IUnknown, "48C8118C-B924-11D1-98D5-00C 04FB687DA" )
{ {
STDMETHOD ( QueryInterface )( THIS_ REFIID riid, void **ppv ) PURE; STDMETHOD ( QueryInterface )( THIS_ REFIID riid, void **ppv ) PURE;
STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE;
STDMETHOD_( ULONG, Release ) ( THIS ) PURE; STDMETHOD_( ULONG, Release ) ( THIS ) PURE;
// if the lock parameter is used, then all other calls into // if the lock parameter is used, then all other calls into
// open and/or create will block until the lock is released. // open and/or create will block until the lock is released.
STDMETHOD ( Open ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; STDMETHOD ( Open ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE;
STDMETHOD ( Create ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; STDMETHOD ( Create ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE;
skipping to change at line 2870 skipping to change at line 1875
STDMETHOD ( AddEntry ) ( THIS_ LPCWSTR pszName, const FILETIME * pftTimeStam p, DWORD dwMode, HBITMAP hImage ) PURE; STDMETHOD ( AddEntry ) ( THIS_ LPCWSTR pszName, const FILETIME * pftTimeStam p, DWORD dwMode, HBITMAP hImage ) PURE;
STDMETHOD ( GetEntry ) ( THIS_ LPCWSTR pszName, DWORD dwMode, HBITMAP * phIm age ) PURE; STDMETHOD ( GetEntry ) ( THIS_ LPCWSTR pszName, DWORD dwMode, HBITMAP * phIm age ) PURE;
STDMETHOD ( DeleteEntry ) ( THIS_ LPCWSTR pszName ) PURE; STDMETHOD ( DeleteEntry ) ( THIS_ LPCWSTR pszName ) PURE;
STDMETHOD ( IsEntryInStore ) ( THIS_ LPCWSTR pszName, FILETIME * pftTimeStam p ) PURE; STDMETHOD ( IsEntryInStore ) ( THIS_ LPCWSTR pszName, FILETIME * pftTimeStam p ) PURE;
STDMETHOD ( Enum ) ( THIS_ LPENUMSHELLIMAGESTORE * ppEnum ) PURE; STDMETHOD ( Enum ) ( THIS_ LPENUMSHELLIMAGESTORE * ppEnum ) PURE;
}; };
typedef IShellImageStore * LPSHELLIMAGESTORE; typedef IShellImageStore * LPSHELLIMAGESTORE;
#endif
#endif // (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN)
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
//// IShellFolderBand //// IShellFolderBand
// Field mask // Field mask
#define ISFB_MASK_STATE 0x00000001 // TRUE if dwStateMask and dwState i s valid #define ISFB_MASK_STATE 0x00000001 // TRUE if dwStateMask and dwState i s valid
#define ISFB_MASK_BKCOLOR 0x00000002 // TRUE if crBkgnd field is valid #define ISFB_MASK_BKCOLOR 0x00000002 // TRUE if crBkgnd field is valid
#define ISFB_MASK_VIEWMODE 0x00000004 // TRUE if wViewMode field is valid #define ISFB_MASK_VIEWMODE 0x00000004 // TRUE if wViewMode field is valid
#define ISFB_MASK_SHELLFOLDER 0x00000008 #define ISFB_MASK_SHELLFOLDER 0x00000008
skipping to change at line 2896 skipping to change at line 1902
#define ISFB_STATE_ALLOWRENAME 0x00000002 #define ISFB_STATE_ALLOWRENAME 0x00000002
#define ISFB_STATE_NOSHOWTEXT 0x00000004 // TRUE if _fNoShowText #define ISFB_STATE_NOSHOWTEXT 0x00000004 // TRUE if _fNoShowText
#define ISFB_STATE_CHANNELBAR 0x00000010 // TRUE if we want NavigateTarget su pport #define ISFB_STATE_CHANNELBAR 0x00000010 // TRUE if we want NavigateTarget su pport
#define ISFB_STATE_QLINKSMODE 0x00000020 // TRUE if we want to turn off drag & drop onto content items #define ISFB_STATE_QLINKSMODE 0x00000020 // TRUE if we want to turn off drag & drop onto content items
#define ISFB_STATE_FULLOPEN 0x00000040 // TRUE if band should maximize when opened #define ISFB_STATE_FULLOPEN 0x00000040 // TRUE if band should maximize when opened
#define ISFB_STATE_NONAMESORT 0x00000080 // TRUE if band should _not_ sort ic ons by name #define ISFB_STATE_NONAMESORT 0x00000080 // TRUE if band should _not_ sort ic ons by name
#define ISFB_STATE_BTNMINSIZE 0x00000100 // TRUE if band should report min th ickness of button #define ISFB_STATE_BTNMINSIZE 0x00000100 // TRUE if band should report min th ickness of button
#define ISFBVIEWMODE_SMALLICONS 0x0001 #define ISFBVIEWMODE_SMALLICONS 0x0001
#define ISFBVIEWMODE_LARGEICONS 0x0002 #define ISFBVIEWMODE_LARGEICONS 0x0002
#if (_WIN32_IE < _WIN32_IE_IE70)
#define ISFBVIEWMODE_LOGOS 0x0003 #define ISFBVIEWMODE_LOGOS 0x0003
#endif
#include <pshpack8.h> #include <pshpack8.h>
typedef struct { typedef struct {
DWORD dwMask; // [in] ISFB_MASK mask of valid fields from crBkgn d on DWORD dwMask; // [in] ISFB_MASK mask of valid fields from crBkgn d on
DWORD dwStateMask; // [in] ISFB_STATE mask of dwState bits being set/ queried DWORD dwStateMask; // [in] ISFB_STATE mask of dwState bits being set/ queried
DWORD dwState; // [in/out] ISFB_STATE bits DWORD dwState; // [in/out] ISFB_STATE bits
COLORREF crBkgnd; // [in/out] COLORREF crBkgnd; // [in/out]
COLORREF crBtnLt; // [in/out] COLORREF crBtnLt; // [in/out]
COLORREF crBtnDk; // [in/out] COLORREF crBtnDk; // [in/out]
WORD wViewMode; // [in/out] WORD wViewMode; // [in/out]
WORD wAlign; // not used (yet) WORD wAlign; // not used (yet)
IShellFolder * psf; // [out] IShellFolder * psf; // [out]
LPITEMIDLIST pidl; // [out] PIDLIST_ABSOLUTE pidl; // [out]
} BANDINFOSFB, *PBANDINFOSFB; } BANDINFOSFB, *PBANDINFOSFB;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellFolderBand #define INTERFACE IShellFolderBand
DECLARE_INTERFACE_(IShellFolderBand, IUnknown) DECLARE_INTERFACE_IID_(IShellFolderBand, IUnknown, "7FE80CC8-C247-11d0-B93A-00A0 C90312E1")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellFolderBand Methods *** // *** IShellFolderBand Methods ***
STDMETHOD(InitializeSFB)(THIS_ IShellFolder *psf, LPCITEMIDLIST pidl) PURE; STDMETHOD(InitializeSFB)(THIS_ __in_opt IShellFolder *psf, __in_opt PCIDLIST
STDMETHOD(SetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; _ABSOLUTE pidl) PURE;
STDMETHOD(GetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; STDMETHOD(SetBandInfoSFB)(THIS_ __in PBANDINFOSFB pbi) PURE;
STDMETHOD(GetBandInfoSFB)(THIS_ __inout PBANDINFOSFB pbi) PURE;
}; };
// Command Target IDs // Command Target IDs
enum { enum {
SFBID_PIDLCHANGED, SFBID_PIDLCHANGED,
}; };
//// IDeskBarClient //// IDeskBarClient
#undef INTERFACE #undef INTERFACE
#define INTERFACE IDeskBarClient #define INTERFACE IDeskBarClient
DECLARE_INTERFACE_(IDeskBarClient, IOleWindow) DECLARE_INTERFACE_IID_(IDeskBarClient, IOleWindow, "EB0FE175-1A3A-11D0-89B3-00A0 C90A90AC")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IOleWindow methods *** // *** IOleWindow methods ***
STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; STDMETHOD(GetWindow) (THIS_ __out HWND * lphwnd) PURE;
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
// *** IDeskBarClient methods *** // *** IDeskBarClient methods ***
STDMETHOD(SetDeskBarSite) (THIS_ IUnknown* punkSite) PURE; STDMETHOD(SetDeskBarSite) (THIS_ __in_opt IUnknown* punkSite) PURE;
STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE; STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE;
STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE; STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE;
STDMETHOD(GetSize) (THIS_ DWORD dwWhich, LPRECT prc) PURE; STDMETHOD(GetSize) (THIS_ DWORD dwWhich, __out LPRECT prc) PURE;
}; };
#define DBC_GS_IDEAL 0 // get the ideal size #define DBC_GS_IDEAL 0 // get the ideal size
#define DBC_GS_SIZEDOWN 1 // clip the height of a rect to a multiple of t he rebar's integral size #define DBC_GS_SIZEDOWN 1 // clip the height of a rect to a multiple of t he rebar's integral size
#define DBC_HIDE 0 // Band is hidden (being destroyed) #define DBC_HIDE 0 // Band is hidden (being destroyed)
#define DBC_SHOW 1 // Band is visible #define DBC_SHOW 1 // Band is visible
#define DBC_SHOWOBSCURE 2 // Band is completely obscured #define DBC_SHOWOBSCURE 2 // Band is completely obscured
enum { enum {
DBCID_EMPTY = 0, // bandsite is empty DBCID_EMPTY = 0, // bandsite is empty
DBCID_ONDRAG = 1, // (down)DragMoveEnter/Leave vaIn:I4:eDrag DBCID_ONDRAG = 1, // (down)DragMoveEnter/Leave vaIn:I4:eDrag
DBCID_CLSIDOFBAR = 2, // clsid of bar inside DBCID_CLSIDOFBAR = 2, // clsid of bar inside
DBCID_RESIZE = 3, // resize from keyboard DBCID_RESIZE = 3, // resize from keyboard
DBCID_GETBAR = 4, // returns vaOut:VT_UNKNOWN of hosting dockbar (IDes kBar) DBCID_GETBAR = 4, // returns vaOut:VT_UNKNOWN of hosting dockbar (IDes kBar)
}; };
#endif // (_WIN32_IE > 0x0400) #endif // _WIN32_IE > 0x0400
#if (_WIN32_IE >= 0x400) #if (_WIN32_IE >= 0x400)
// //
// We need to make sure that WININET.H is included before this interface is // We need to make sure that WININET.H is included before this interface is
// used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH // used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH
// //
#ifdef _WININET_ #ifdef _WININET_
// //
// Flags and structures used by IActiveDesktop // Flags and structures used by IActiveDesktop
// //
skipping to change at line 3116 skipping to change at line 2124
// Flags for IActiveDesktop::ApplyChanges() // Flags for IActiveDesktop::ApplyChanges()
#define AD_APPLY_SAVE 0x00000001 #define AD_APPLY_SAVE 0x00000001
#define AD_APPLY_HTMLGEN 0x00000002 #define AD_APPLY_HTMLGEN 0x00000002
#define AD_APPLY_REFRESH 0x00000004 #define AD_APPLY_REFRESH 0x00000004
#define AD_APPLY_ALL (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_R EFRESH) #define AD_APPLY_ALL (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_R EFRESH)
#define AD_APPLY_FORCE 0x00000008 #define AD_APPLY_FORCE 0x00000008
#define AD_APPLY_BUFFERED_REFRESH 0x00000010 #define AD_APPLY_BUFFERED_REFRESH 0x00000010
#define AD_APPLY_DYNAMICREFRESH 0x00000020 #define AD_APPLY_DYNAMICREFRESH 0x00000020
//////////////////////////////////////////// ////////////////////////////////////////////
// Flags for IActiveDesktop::GetWallpaper()
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define AD_GETWP_BMP 0x00000000
#define AD_GETWP_IMAGE 0x00000001
#define AD_GETWP_LAST_APPLIED 0x00000002
#endif
////////////////////////////////////////////
// Flags for IActiveDesktop::GetWallpaperOptions() // Flags for IActiveDesktop::GetWallpaperOptions()
// IActiveDesktop::SetWallpaperOptions() // IActiveDesktop::SetWallpaperOptions()
#define WPSTYLE_CENTER 0 #define WPSTYLE_CENTER 0
#define WPSTYLE_TILE 1 #define WPSTYLE_TILE 1
#define WPSTYLE_STRETCH 2 #define WPSTYLE_STRETCH 2
#define WPSTYLE_MAX 3 #define WPSTYLE_MAX 3
//////////////////////////////////////////// ////////////////////////////////////////////
// Flags for IActiveDesktop::ModifyComponent() // Flags for IActiveDesktop::ModifyComponent()
skipping to change at line 3173 skipping to change at line 2189
#define COMPONENT_DEFAULT_LEFT (0xFFFF) #define COMPONENT_DEFAULT_LEFT (0xFFFF)
#define COMPONENT_DEFAULT_TOP (0xFFFF) #define COMPONENT_DEFAULT_TOP (0xFFFF)
// //
// Interface for manipulating the Active Desktop. // Interface for manipulating the Active Desktop.
// //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IActiveDesktop #define INTERFACE IActiveDesktop
DECLARE_INTERFACE_( IActiveDesktop, IUnknown ) DECLARE_INTERFACE_IID_(IActiveDesktop, IUnknown, "f490eb00-1240-11d1-9888-006097 deacf9")
{ {
// IUnknown methods // IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
STDMETHOD_(ULONG, Release) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE;
// IActiveDesktop methods // IActiveDesktop methods
STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE; STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE;
STDMETHOD (GetWallpaper)(THIS_ LPWSTR pwszWallpaper, UINT cchWallpaper, DWOR D dwReserved) PURE; STDMETHOD (GetWallpaper)(THIS_ __out_ecount(cchWallpaper) LPWSTR pwszWallpap er, UINT cchWallpaper, DWORD dwFlags) PURE;
STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE ; STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE ;
STDMETHOD (GetWallpaperOptions)(THIS_ LPWALLPAPEROPT pwpo, DWORD dwReserved) STDMETHOD (GetWallpaperOptions)(THIS_ __inout LPWALLPAPEROPT pwpo, DWORD dwR
PURE; eserved) PURE;
STDMETHOD (SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT pwpo, DWORD dwReserved STDMETHOD (SetWallpaperOptions)(THIS_ __in LPCWALLPAPEROPT pwpo, DWORD dwRes
) PURE; erved) PURE;
STDMETHOD (GetPattern)(THIS_ LPWSTR pwszPattern, UINT cchPattern, DWORD dwRe STDMETHOD (GetPattern)(THIS_ __out_ecount(cchPattern) LPWSTR pwszPattern, UI
served) PURE; NT cchPattern, DWORD dwReserved) PURE;
STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE; STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE;
STDMETHOD (GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT pco, DWORD dwReserve STDMETHOD (GetDesktopItemOptions)(THIS_ __inout LPCOMPONENTSOPT pco, DWORD d
d) PURE; wReserved) PURE;
STDMETHOD (SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT pco, DWORD dwReserv STDMETHOD (SetDesktopItemOptions)(THIS_ __in LPCCOMPONENTSOPT pco, DWORD dwR
ed) PURE; eserved) PURE;
STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (AddDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserved)
STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, LPCOMPONENT pcomp, DWORD d PURE;
wReserved) PURE; STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, __in LPCOMPONENT pcomp, DW
STDMETHOD (ModifyDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwFlags) PURE; ORD dwReserved) PURE;
STDMETHOD (RemoveDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PU STDMETHOD (ModifyDesktopItem)(THIS_ __inout LPCCOMPONENT pcomp, DWORD dwFlag
RE; s) PURE;
STDMETHOD (GetDesktopItemCount)(THIS_ LPINT lpiCount, DWORD dwReserved) PURE STDMETHOD (RemoveDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserve
; d) PURE;
STDMETHOD (GetDesktopItem)(THIS_ int nComponent, LPCOMPONENT pcomp, DWORD dw STDMETHOD (GetDesktopItemCount)(THIS_ __out LPINT lpiCount, DWORD dwReserved
Reserved) PURE; ) PURE;
STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, LPCOMPONENT pcomp, DWOR STDMETHOD (GetDesktopItem)(THIS_ int nComponent, __inout LPCOMPONENT pcomp,
D dwReserved) PURE; DWORD dwReserved) PURE;
STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, LPCOMPONENT STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, __inout LPCOMPONENT pco
pcomp, DWORD dwReserved) PURE; mp, DWORD dwReserved) PURE;
STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, LPCOMPONENT pcomp, DW STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, __in LPCOMPO
ORD dwFlags) PURE; NENT pcomp, DWORD dwReserved) PURE;
STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, LPCOMPONENT pco STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, __in LPCOMPONENT pcom
mp, DWORD dwReserved) PURE; p, DWORD dwFlags) PURE;
STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, __inout LPCOMPO
NENT pcomp, DWORD dwReserved) PURE;
}; };
typedef IActiveDesktop * LPACTIVEDESKTOP; typedef IActiveDesktop * LPACTIVEDESKTOP;
// Flags for SetSafeMode // Flags for SetSafeMode
#define SSM_CLEAR 0x0000 #define SSM_CLEAR 0x0000
#define SSM_SET 0x0001 #define SSM_SET 0x0001
#define SSM_REFRESH 0x0002 #define SSM_REFRESH 0x0002
#define SSM_UPDATE 0x0004 #define SSM_UPDATE 0x0004
skipping to change at line 3223 skipping to change at line 2239
#define SCHEME_LOCAL 0x0004 #define SCHEME_LOCAL 0x0004
#define SCHEME_GLOBAL 0x0008 #define SCHEME_GLOBAL 0x0008
#define SCHEME_REFRESH 0x0010 #define SCHEME_REFRESH 0x0010
#define SCHEME_UPDATE 0x0020 #define SCHEME_UPDATE 0x0020
#define SCHEME_DONOTUSE 0x0040 // used to be SCHEME_ENUMERATE; no longer support ed #define SCHEME_DONOTUSE 0x0040 // used to be SCHEME_ENUMERATE; no longer support ed
#define SCHEME_CREATE 0x0080 #define SCHEME_CREATE 0x0080
#undef INTERFACE #undef INTERFACE
#define INTERFACE IActiveDesktopP #define INTERFACE IActiveDesktopP
DECLARE_INTERFACE_( IActiveDesktopP, IUnknown ) DECLARE_INTERFACE_IID_(IActiveDesktopP, IUnknown, "52502EE0-EC80-11D0-89AB-00C04 FC2972D")
{ {
// IUnknown methods // IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
STDMETHOD_(ULONG, Release) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE;
// IActiveDesktopP methods // IActiveDesktopP methods
STDMETHOD (SetSafeMode)(THIS_ DWORD dwFlags) PURE; STDMETHOD (SetSafeMode)(THIS_ DWORD dwFlags) PURE;
STDMETHOD (EnsureUpdateHTML)(THIS) PURE; STDMETHOD (EnsureUpdateHTML)(THIS) PURE;
STDMETHOD (SetScheme)(THIS_ LPCWSTR pwszSchemeName, DWORD dwFlags) PURE; STDMETHOD (SetScheme)(THIS_ LPCWSTR pwszSchemeName, DWORD dwFlags) PURE;
STDMETHOD (GetScheme)(THIS_ LPWSTR pwszSchemeName, DWORD *lpdwcchBuffer, DWO RD dwFlags) PURE; STDMETHOD (GetScheme)(THIS_ __out_ecount(*lpdwcchBuffer) LPWSTR pwszSchemeNa me, __inout DWORD *lpdwcchBuffer, DWORD dwFlags) PURE;
// //
}; };
typedef IActiveDesktopP * LPACTIVEDESKTOPP; typedef IActiveDesktopP * LPACTIVEDESKTOPP;
//Flags for GetObjectFlags //Flags for GetObjectFlags
#define GADOF_DIRTY 0x00000001 #define GADOF_DIRTY 0x00000001
#undef INTERFACE #undef INTERFACE
#define INTERFACE IADesktopP2 #define INTERFACE IADesktopP2
DECLARE_INTERFACE_( IADesktopP2, IUnknown ) DECLARE_INTERFACE_IID_(IADesktopP2, IUnknown, "B22754E2-4574-11d1-9888-006097DEA CF9")
{ {
// IUnknown methods // IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
STDMETHOD_(ULONG, Release) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE;
// IADesktopP2 methods // IADesktopP2 methods
STDMETHOD (ReReadWallpaper)(THIS) PURE; STDMETHOD (ReReadWallpaper)(THIS) PURE;
STDMETHOD (GetADObjectFlags)(THIS_ DWORD *lpdwFlags, DWORD dwMask) PURE; STDMETHOD (GetADObjectFlags)(THIS_ __out DWORD *lpdwFlags, DWORD dwMask) PUR E;
STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE; STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE;
STDMETHOD (MakeDynamicChanges)(THIS_ IOleObject *pOleObj) PURE; STDMETHOD (MakeDynamicChanges)(THIS_ __in IOleObject *pOleObj) PURE;
}; };
typedef IADesktopP2 * LPADESKTOPP2; typedef IADesktopP2 * LPADESKTOPP2;
#endif // _WININET_ #endif // _WININET_
#if (_WIN32_IE >= 0x0500) #if (_WIN32_IE >= 0x0500)
#define MAX_COLUMN_NAME_LEN 80 #define MAX_COLUMN_NAME_LEN 80
#define MAX_COLUMN_DESC_LEN 128 #define MAX_COLUMN_DESC_LEN 128
skipping to change at line 3311 skipping to change at line 2327
} SHCOLUMNDATA, *LPSHCOLUMNDATA; } SHCOLUMNDATA, *LPSHCOLUMNDATA;
typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA; typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
#undef INTERFACE #undef INTERFACE
#define INTERFACE IColumnProvider #define INTERFACE IColumnProvider
// Note: these objects must be threadsafe! GetItemData _will_ be called // Note: these objects must be threadsafe! GetItemData _will_ be called
// simultaneously from multiple threads. // simultaneously from multiple threads.
DECLARE_INTERFACE_(IColumnProvider, IUnknown) DECLARE_INTERFACE_IID_(IColumnProvider, IUnknown, "E8025004-1C42-11d2-BE2C-00A0C 9A83DA1")
{ {
// IUnknown methods // IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE;
// IColumnProvider methods // IColumnProvider methods
STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE; STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE;
STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, SHCOLUMNINFO *psci) PURE; STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, __out SHCOLUMNINFO *psci) PUR
STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VAR E;
IANT *pvarData) PURE; STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, __o
}; ut VARIANT *pvarData) PURE;
///////////////////////////////////////////////////////
//
// Drag and Drop helper
//
// Purpose: To expose the Shell drag images
//
// This interface is implemented in the shell by CLSID_DragDropHelper.
//
// To use:
// If you are the source of a drag (i.e. in response to LV_DRAGBEGIN or
// equivelent begin drag message) call
// IDragSourceHelper::InitializeFromWindow
// (<hwnd of window supporting DI_GETDRAGIMAGE>,
// <pointer to POINT indicating offset to the mouse from
// the upper left corner of the image>,
// <pointer to data object>)
//
// NOTE: The Data object must support IDataObject::SetData with multiple
// data types and GetData must implement data type cloning
// (Including HGLOBAL), not just aliasing.
//
// If you wish to have an image while over your application add the
// IDragImages::Dr* calls to your IDropTarget implementation. For Example:
//
// STDMETHODIMP CUserDropTarget::DragEnter(IDataObject* pDataObject,
// DWORD grfKeyState,
// POINTL pt, DWORD* pdwEffect)
// {
// // Process your DragEnter
// // Call IDragImages::DragEnter last.
// _pDropTargetHelper->DragEnter(_hwndDragOver, pDataObject,
// (POINT*)&pt, *pdwEffect);
// return hres;
// }
//
//
// If you wish to be able to source a drag image from a custom control,
// implement a handler for the RegisterWindowMessage(DI_GETDRAGIMAGE).
// The LPARAM is a pointer to an SHDRAGIMAGE structure.
//
// sizeDragImage - Calculate the length and width required to render
// the images.
// ptOffset - Calculate the offset from the upper left corner to
// the mouse cursor within the image
// hbmpDragImage - CreateBitmap( sizeDragImage.cx, sizeDragImage.cy,
// GetDeviceCaps(hdcScreen, PLANES),
// GetDeviceCaps(hdcScreen, BITSPIXEL),
// NULL);
//
// Drag Images will only be displayed on Windows NT 5.0 or later.
//
//
// Note about IDropTargetHelper::Show - This method is provided for
// showing/hiding the Drag image in low color depth video modes. When
// painting to a window that is currently being dragged over (i.e. For
// indicating a selection) you need to hide the drag image by calling this
// method passing FALSE. After the window is done painting, Show the image
// again by passing TRUE.
#include <pshpack8.h>
typedef struct
{
SIZE sizeDragImage; // OUT - The length and Width of the
// rendered image
POINT ptOffset; // OUT - The Offset from the mouse cursor to
// the upper left corner of the image
HBITMAP hbmpDragImage; // OUT - The Bitmap containing the rendered
// drag images
COLORREF crColorKey; // OUT - The COLORREF that has been blitted
// to the background of the images
} SHDRAGIMAGE, *LPSHDRAGIMAGE;
#include <poppack.h> /* Return to byte packing */
// This is sent to a window to get the rendered images to a bitmap
// Call RegisterWindowMessage to get the ID
#define DI_GETDRAGIMAGE TEXT("ShellGetDragImage")
#undef INTERFACE
#define INTERFACE IDropTargetHelper
DECLARE_INTERFACE_( IDropTargetHelper, IUnknown )
{
// IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
STDMETHOD_(ULONG, Release) ( THIS ) PURE;
// IDropTargetHelper
STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject,
POINT* ppt, DWORD dwEffect) PURE;
STDMETHOD (DragLeave)(THIS) PURE;
STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE;
STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt,
DWORD dwEffect) PURE;
STDMETHOD (Show)(THIS_ BOOL fShow) PURE;
}; };
#undef INTERFACE #endif // _WIN32_IE >= 0x0500
#define INTERFACE IDragSourceHelper
DECLARE_INTERFACE_( IDragSourceHelper, IUnknown )
{
// IUnknown methods
STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE;
STDMETHOD_(ULONG, Release) ( THIS ) PURE;
// IDragSourceHelper
STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi,
IDataObject* pDataObject) PURE;
STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt,
IDataObject* pDataObject) PURE;
};
#endif // (_WIN32_IE >= 0x0500)
#endif // _WIN32_IE #endif // _WIN32_IE
//========================================================================== //==========================================================================
// Clipboard format which may be supported by IDataObject from system // Clipboard format which may be supported by IDataObject from system
// defined shell folders (such as directories, network, ...). // defined shell folders (such as directories, network, ...).
//========================================================================== //==========================================================================
#define CFSTR_SHELLIDLIST TEXT("Shell IDList Array") // C #define CFSTR_SHELLIDLIST TEXT("Shell IDList Array")
F_IDLIST // CF_IDLIST
#define CFSTR_SHELLIDLISTOFFSET TEXT("Shell Object Offsets") // C #define CFSTR_SHELLIDLISTOFFSET TEXT("Shell Object Offsets")
F_OBJECTPOSITIONS // CF_OBJECTPOSITIONS
#define CFSTR_NETRESOURCES TEXT("Net Resource") // C #define CFSTR_NETRESOURCES TEXT("Net Resource")
F_NETRESOURCE // CF_NETRESOURCE
#define CFSTR_FILEDESCRIPTORA TEXT("FileGroupDescriptor") // C #define CFSTR_FILEDESCRIPTORA TEXT("FileGroupDescriptor")
F_FILEGROUPDESCRIPTORA // CF_FILEGROUPDESCRIPTORA
#define CFSTR_FILEDESCRIPTORW TEXT("FileGroupDescriptorW") // C #define CFSTR_FILEDESCRIPTORW TEXT("FileGroupDescriptorW")
F_FILEGROUPDESCRIPTORW // CF_FILEGROUPDESCRIPTORW
#define CFSTR_FILECONTENTS TEXT("FileContents") // C #define CFSTR_FILECONTENTS TEXT("FileContents")
F_FILECONTENTS // CF_FILECONTENTS
#define CFSTR_FILENAMEA TEXT("FileName") // C #define CFSTR_FILENAMEA TEXT("FileName")
F_FILENAMEA // CF_FILENAMEA
#define CFSTR_FILENAMEW TEXT("FileNameW") // C #define CFSTR_FILENAMEW TEXT("FileNameW")
F_FILENAMEW // CF_FILENAMEW
#define CFSTR_PRINTERGROUP TEXT("PrinterFriendlyName") // C #define CFSTR_PRINTERGROUP TEXT("PrinterFriendlyName")
F_PRINTERS // CF_PRINTERS
#define CFSTR_FILENAMEMAPA TEXT("FileNameMap") // C #define CFSTR_FILENAMEMAPA TEXT("FileNameMap")
F_FILENAMEMAPA // CF_FILENAMEMAPA
#define CFSTR_FILENAMEMAPW TEXT("FileNameMapW") // C #define CFSTR_FILENAMEMAPW TEXT("FileNameMapW")
F_FILENAMEMAPW // CF_FILENAMEMAPW
#define CFSTR_SHELLURL TEXT("UniformResourceLocator") #define CFSTR_SHELLURL TEXT("UniformResourceLocator")
#define CFSTR_INETURLA CFSTR_SHELLURL #define CFSTR_INETURLA CFSTR_SHELLURL
#define CFSTR_INETURLW TEXT("UniformResourceLocatorW") #define CFSTR_INETURLW TEXT("UniformResourceLocatorW")
#define CFSTR_PREFERREDDROPEFFECT TEXT("Preferred DropEffect") #define CFSTR_PREFERREDDROPEFFECT TEXT("Preferred DropEffect")
#define CFSTR_PERFORMEDDROPEFFECT TEXT("Performed DropEffect") #define CFSTR_PERFORMEDDROPEFFECT TEXT("Performed DropEffect")
#define CFSTR_PASTESUCCEEDED TEXT("Paste Succeeded") #define CFSTR_PASTESUCCEEDED TEXT("Paste Succeeded")
#define CFSTR_INDRAGLOOP TEXT("InShellDragLoop") #define CFSTR_INDRAGLOOP TEXT("InShellDragLoop")
#define CFSTR_DRAGCONTEXT TEXT("DragContext")
#define CFSTR_MOUNTEDVOLUME TEXT("MountedVolume") #define CFSTR_MOUNTEDVOLUME TEXT("MountedVolume")
#define CFSTR_PERSISTEDDATAOBJECT TEXT("PersistedDataObject") #define CFSTR_PERSISTEDDATAOBJECT TEXT("PersistedDataObject")
#define CFSTR_TARGETCLSID TEXT("TargetCLSID") // HGLOBAL with a CLSID of the drop target #define CFSTR_TARGETCLSID TEXT("TargetCLSID") // HGLOBAL with a CLSID of the drop target
#define CFSTR_LOGICALPERFORMEDDROPEFFECT TEXT("Logical Performed DropEffect") #define CFSTR_LOGICALPERFORMEDDROPEFFECT TEXT("Logical Performed DropEffect")
#define CFSTR_AUTOPLAY_SHELLIDLISTS TEXT("Autoplay Enumerated IDList Arr #define CFSTR_AUTOPLAY_SHELLIDLISTS TEXT("Autoplay Enumerated IDList Arr
ay") // (HGLOBAL with LPIDA) ay") // (HGLOBAL with LPIDA)
#define CFSTR_UNTRUSTEDDRAGDROP TEXT("UntrustedDragDrop") // DWORD #define CFSTR_UNTRUSTEDDRAGDROP TEXT("UntrustedDragDrop")
// DWORD
#define CFSTR_FILE_ATTRIBUTES_ARRAY TEXT("File Attributes Array")
// (FILE_ATTRIBUTES_ARRAY format on HGLOBAL)
#define CFSTR_INVOKECOMMAND_DROPPARAM TEXT("InvokeCommand DropParam")
// (HGLOBAL with LPWSTR)
#define CFSTR_SHELLDROPHANDLER TEXT("DropHandlerCLSID")
// (HGLOBAL with CLSID of drop handler)
#define CFSTR_DROPDESCRIPTION TEXT("DropDescription")
// (HGLOBAL with DROPDESCRIPTION)
#ifdef UNICODE #ifdef UNICODE
#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORW #define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORW
#define CFSTR_FILENAME CFSTR_FILENAMEW #define CFSTR_FILENAME CFSTR_FILENAMEW
#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPW #define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPW
#define CFSTR_INETURL CFSTR_INETURLW #define CFSTR_INETURL CFSTR_INETURLW
#else #else
#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORA #define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORA
#define CFSTR_FILENAME CFSTR_FILENAMEA #define CFSTR_FILENAME CFSTR_FILENAMEA
#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPA #define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPA
skipping to change at line 3509 skipping to change at line 2412
// //
// format of CF_IDLIST // format of CF_IDLIST
// //
typedef struct _IDA { typedef struct _IDA {
UINT cidl; // number of relative IDList UINT cidl; // number of relative IDList
UINT aoffset[1]; // [0]: folder IDList, [1]-[cidl]: item IDList UINT aoffset[1]; // [0]: folder IDList, [1]-[cidl]: item IDList
} CIDA, * LPIDA; } CIDA, * LPIDA;
// //
// FILEDESCRIPTOR.dwFlags field indicate which fields are to be used // FILEDESCRIPTOR.dwFlags field indicate which fields are valid in the FILEDESCR IPTOR struct
// //
typedef enum { typedef enum {
FD_CLSID = 0x0001, FD_CLSID = 0x00000001,
FD_SIZEPOINT = 0x0002, FD_SIZEPOINT = 0x00000002,
FD_ATTRIBUTES = 0x0004, FD_ATTRIBUTES = 0x00000004,
FD_CREATETIME = 0x0008, FD_CREATETIME = 0x00000008,
FD_ACCESSTIME = 0x0010, FD_ACCESSTIME = 0x00000010,
FD_WRITESTIME = 0x0020, FD_WRITESTIME = 0x00000020,
FD_FILESIZE = 0x0040, FD_FILESIZE = 0x00000040,
FD_PROGRESSUI = 0x4000, // Show Progress UI w/Drag and Drop FD_PROGRESSUI = 0x00004000, // Show Progress UI w/Drag and Drop
FD_LINKUI = 0x8000, // 'link' UI is prefered FD_LINKUI = 0x00008000, // 'link' UI is prefered
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
FD_UNICODE = 0x80000000, // this descriptor is UNICODE
#endif
} FD_FLAGS; } FD_FLAGS;
typedef struct _FILEDESCRIPTORA { // fod typedef struct _FILEDESCRIPTORA {
DWORD dwFlags; DWORD dwFlags;
CLSID clsid; CLSID clsid;
SIZEL sizel; SIZEL sizel;
POINTL pointl; POINTL pointl;
DWORD dwFileAttributes; DWORD dwFileAttributes;
FILETIME ftCreationTime; FILETIME ftCreationTime;
FILETIME ftLastAccessTime; FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime; FILETIME ftLastWriteTime;
DWORD nFileSizeHigh; DWORD nFileSizeHigh;
DWORD nFileSizeLow; DWORD nFileSizeLow;
CHAR cFileName[ MAX_PATH ]; CHAR cFileName[ MAX_PATH ];
} FILEDESCRIPTORA, *LPFILEDESCRIPTORA; } FILEDESCRIPTORA, *LPFILEDESCRIPTORA;
typedef struct _FILEDESCRIPTORW { // fod typedef struct _FILEDESCRIPTORW {
DWORD dwFlags; DWORD dwFlags;
CLSID clsid; CLSID clsid;
SIZEL sizel; SIZEL sizel;
POINTL pointl; POINTL pointl;
DWORD dwFileAttributes; DWORD dwFileAttributes;
FILETIME ftCreationTime; FILETIME ftCreationTime;
FILETIME ftLastAccessTime; FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime; FILETIME ftLastWriteTime;
skipping to change at line 3597 skipping to change at line 2501
// friendly names // friendly names
// //
typedef struct _DROPFILES { typedef struct _DROPFILES {
DWORD pFiles; // offset of file list DWORD pFiles; // offset of file list
POINT pt; // drop point (client coords) POINT pt; // drop point (client coords)
BOOL fNC; // is it on NonClient area BOOL fNC; // is it on NonClient area
// and pt is in screen coords // and pt is in screen coords
BOOL fWide; // WIDE character switch BOOL fWide; // WIDE character switch
} DROPFILES, *LPDROPFILES; } DROPFILES, *LPDROPFILES;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef struct
{
UINT cItems; // number of items in rgdwFileAttributes arr
ay
DWORD dwSumFileAttributes; // all of the attributes ORed together
DWORD dwProductFileAttributes; // all of the attributes ANDed together
DWORD rgdwFileAttributes[1]; // array
} FILE_ATTRIBUTES_ARRAY; // clipboard format definition for CFSTR_FIL
E_ATTRIBUTES_ARRAY
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef enum
{
DROPIMAGE_INVALID = -1, // no drop image at all
DROPIMAGE_NONE = 0, // red "no" circle
DROPIMAGE_COPY = DROPEFFECT_COPY, // plus for copy
DROPIMAGE_MOVE = DROPEFFECT_MOVE, // movement arrow for mov
e
DROPIMAGE_LINK = DROPEFFECT_LINK, // link arrow for link
DROPIMAGE_LABEL = 6, // tag icon to indicate m
etadata will be changed
DROPIMAGE_WARNING = 7, // yellow exclamation, so
mething is amiss with the operation
} DROPIMAGETYPE;
typedef struct
{
DROPIMAGETYPE type; // indicates the stock image to use
// text such as "Move to %1"
WCHAR szMessage[MAX_PATH];
// text such as "Documents", inserted as specified by szMessage
WCHAR szInsert[MAX_PATH];
// some UI coloring is applied to the text in szInsert, if used by specifying %1
in szMessage.
// %% and %1 are the subset of FormatMessage markers that are processed here.
} DROPDESCRIPTION;
#endif // (NTDDI_VERSION >= NTDDI_LONGHORN)
//====== File System Notification APIs =============================== //====== File System Notification APIs ===============================
// //
typedef struct _SHChangeNotifyEntry typedef struct _SHChangeNotifyEntry
{ {
LPCITEMIDLIST pidl; PCIDLIST_ABSOLUTE pidl;
BOOL fRecursive; BOOL fRecursive;
} SHChangeNotifyEntry; } SHChangeNotifyEntry;
// //
// File System Notification flags // File System Notification flags
// //
#define SHCNRF_InterruptLevel 0x0001
#define SHCNRF_ShellLevel 0x0002
#define SHCNRF_RecursiveInterrupt 0x1000
#define SHCNRF_NewDelivery 0x8000
#define SHCNE_RENAMEITEM 0x00000001L #define SHCNE_RENAMEITEM 0x00000001L
#define SHCNE_CREATE 0x00000002L #define SHCNE_CREATE 0x00000002L
#define SHCNE_DELETE 0x00000004L #define SHCNE_DELETE 0x00000004L
#define SHCNE_MKDIR 0x00000008L #define SHCNE_MKDIR 0x00000008L
#define SHCNE_RMDIR 0x00000010L #define SHCNE_RMDIR 0x00000010L
#define SHCNE_MEDIAINSERTED 0x00000020L #define SHCNE_MEDIAINSERTED 0x00000020L
#define SHCNE_MEDIAREMOVED 0x00000040L #define SHCNE_MEDIAREMOVED 0x00000040L
#define SHCNE_DRIVEREMOVED 0x00000080L #define SHCNE_DRIVEREMOVED 0x00000080L
#define SHCNE_DRIVEADD 0x00000100L #define SHCNE_DRIVEADD 0x00000100L
#define SHCNE_NETSHARE 0x00000200L #define SHCNE_NETSHARE 0x00000200L
skipping to change at line 3643 skipping to change at line 2590
// of SHChangeNotify (called "pidl2" below), which if present, must also // of SHChangeNotify (called "pidl2" below), which if present, must also
// be in LPITEMIDLIST format. // be in LPITEMIDLIST format.
// //
// Unlike the standard events, the extended events are ORDINALs, so we // Unlike the standard events, the extended events are ORDINALs, so we
// don't run out of bits. Extended events follow the SHCNEE_* naming // don't run out of bits. Extended events follow the SHCNEE_* naming
// convention. // convention.
// //
// The dwItem2 parameter varies according to the extended event. // The dwItem2 parameter varies according to the extended event.
#define SHCNE_EXTENDED_EVENT 0x04000000L #define SHCNE_EXTENDED_EVENT 0x04000000L
#endif // (_WIN32_IE >= 0x0400) #endif // _WIN32_IE >= 0x0400
#define SHCNE_ASSOCCHANGED 0x08000000L #define SHCNE_ASSOCCHANGED 0x08000000L
#define SHCNE_DISKEVENTS 0x0002381FL #define SHCNE_DISKEVENTS 0x0002381FL
#define SHCNE_GLOBALEVENTS 0x0C0581E0L // Events that dont match pidls fi rst #define SHCNE_GLOBALEVENTS 0x0C0581E0L // Events that dont match pidls fi rst
#define SHCNE_ALLEVENTS 0x7FFFFFFFL #define SHCNE_ALLEVENTS 0x7FFFFFFFL
#define SHCNE_INTERRUPT 0x80000000L // The presence of this flag indic ates #define SHCNE_INTERRUPT 0x80000000L // The presence of this flag indic ates
// that the event was generated by a n // that the event was generated by a n
// interrupt. It is stripped out be fore // interrupt. It is stripped out be fore
// the clients of SHCNNotify_ see it . // the clients of SHCNNotify_ see it .
skipping to change at line 3676 skipping to change at line 2623
#define SHCNF_IDLIST 0x0000 // LPITEMIDLIST #define SHCNF_IDLIST 0x0000 // LPITEMIDLIST
#define SHCNF_PATHA 0x0001 // path name #define SHCNF_PATHA 0x0001 // path name
#define SHCNF_PRINTERA 0x0002 // printer friendly name #define SHCNF_PRINTERA 0x0002 // printer friendly name
#define SHCNF_DWORD 0x0003 // DWORD #define SHCNF_DWORD 0x0003 // DWORD
#define SHCNF_PATHW 0x0005 // path name #define SHCNF_PATHW 0x0005 // path name
#define SHCNF_PRINTERW 0x0006 // printer friendly name #define SHCNF_PRINTERW 0x0006 // printer friendly name
#define SHCNF_TYPE 0x00FF #define SHCNF_TYPE 0x00FF
#define SHCNF_FLUSH 0x1000 #define SHCNF_FLUSH 0x1000
#define SHCNF_FLUSHNOWAIT 0x2000 #define SHCNF_FLUSHNOWAIT 0x2000
#define SHCNF_NOTIFYRECURSIVE 0x10000 // Notify clients registered for any
child
#ifdef UNICODE #ifdef UNICODE
#define SHCNF_PATH SHCNF_PATHW #define SHCNF_PATH SHCNF_PATHW
#define SHCNF_PRINTER SHCNF_PRINTERW #define SHCNF_PRINTER SHCNF_PRINTERW
#else #else
#define SHCNF_PATH SHCNF_PATHA #define SHCNF_PATH SHCNF_PATHA
#define SHCNF_PRINTER SHCNF_PRINTERA #define SHCNF_PRINTER SHCNF_PRINTERA
#endif #endif
// //
// APIs // APIs
// //
SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCV OID dwItem2); SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCV OID dwItem2);
// //
// IShellChangeNotify // IShellChangeNotify
// //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellChangeNotify #define INTERFACE IShellChangeNotify
DECLARE_INTERFACE_(IShellChangeNotify, IUnknown) DECLARE_INTERFACE_IID_(IShellChangeNotify, IUnknown, "D82BE2B1-5764-11D0-A96E-00 C04FD705A2")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellChangeNotify methods *** // *** IShellChangeNotify methods ***
STDMETHOD(OnChange) (THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST p idl2) PURE; STDMETHOD(OnChange) (THIS_ LONG lEvent, PCIDLIST_ABSOLUTE pidl1, PCIDLIST_AB SOLUTE pidl2) PURE;
} ; } ;
// //
// IQueryInfo // IQueryInfo
// //
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// //
// IQueryInfo interface // IQueryInfo interface
// //
// [Methods] // [Methods]
// ::GetInfoTip() // ::GetInfoTip()
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
#undef INTERFACE #undef INTERFACE
#define INTERFACE IQueryInfo #define INTERFACE IQueryInfo
DECLARE_INTERFACE_(IQueryInfo, IUnknown) DECLARE_INTERFACE_IID_(IQueryInfo, IUnknown, "00021500-0000-0000-c000-0000000000 46")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IQueryInfo methods *** // *** IQueryInfo methods ***
STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR **ppwszTip) PURE; STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, __out WCHAR **ppwszTip) PURE;
STDMETHOD(GetInfoFlags)(THIS_ DWORD *pdwFlags) PURE; STDMETHOD(GetInfoFlags)(THIS_ __out DWORD *pdwFlags) PURE;
} ; } ;
#define QITIPF_DEFAULT 0x00000000 #define QITIPF_DEFAULT 0x00000000
#define QITIPF_USENAME 0x00000001 #define QITIPF_USENAME 0x00000001
#define QITIPF_LINKNOTARGET 0x00000002 #define QITIPF_LINKNOTARGET 0x00000002
#define QITIPF_LINKUSETARGET 0x00000004 #define QITIPF_LINKUSETARGET 0x00000004
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define QITIPF_USESLOWTIP 0x00000008 // Flag says it's OK to take a long time generating tip #define QITIPF_USESLOWTIP 0x00000008 // Flag says it's OK to take a long time generating tip
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define QITIPF_SINGLELINE 0x00000010
#endif
#define QIF_CACHED 0x00000001 #define QIF_CACHED 0x00000001
#define QIF_DONTEXPANDFOLDER 0x00000002 #define QIF_DONTEXPANDFOLDER 0x00000002
// //
// SHAddToRecentDocs // SHAddToRecentDocs
// //
#define SHARD_PIDL 0x00000001L #define SHARD_PIDL 0x00000001L
#define SHARD_PATHA 0x00000002L #define SHARD_PATHA 0x00000002L
#define SHARD_PATHW 0x00000003L #define SHARD_PATHW 0x00000003L
#ifdef UNICODE #ifdef UNICODE
#define SHARD_PATH SHARD_PATHW #define SHARD_PATH SHARD_PATHW
skipping to change at line 3763 skipping to change at line 2717
SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv); SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
typedef struct _SHChangeDWORDAsIDList { typedef struct _SHChangeDWORDAsIDList {
USHORT cb; USHORT cb;
DWORD dwItem1; DWORD dwItem1;
DWORD dwItem2; DWORD dwItem2;
USHORT cbZero; USHORT cbZero;
} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;
#if (_WIN32_IE >= 0x0400) #if (NTDDI_VERSION >= NTDDI_WIN2K)
typedef struct _SHChangeUpdateImageIDList { typedef struct _SHChangeUpdateImageIDList {
USHORT cb; USHORT cb;
int iIconIndex; int iIconIndex;
int iCurIndex; int iCurIndex;
UINT uFlags; UINT uFlags;
DWORD dwProcessID; DWORD dwProcessID;
WCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
USHORT cbZero; USHORT cbZero;
} SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList; } SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList;
SHSTDAPI_(int) SHHandleUpdateImage(PCIDLIST_ABSOLUTE pidlExtra);
SHSTDAPI_(int) SHHandleUpdateImage( LPCITEMIDLIST pidlExtra );
typedef struct _SHChangeProductKeyAsIDList { typedef struct _SHChangeProductKeyAsIDList {
USHORT cb; USHORT cb;
WCHAR wszProductKey[39]; WCHAR wszProductKey[39];
USHORT cbZero; USHORT cbZero;
} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
SHSTDAPI_(void) SHUpdateImageA(LPCSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex); SHSTDAPI_(void) SHUpdateImageA(LPCSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
SHSTDAPI_(void) SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex); SHSTDAPI_(void) SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
#ifdef UNICODE #ifdef UNICODE
#define SHUpdateImage SHUpdateImageW #define SHUpdateImage SHUpdateImageW
#else #else
#define SHUpdateImage SHUpdateImageA #define SHUpdateImage SHUpdateImageA
#endif // !UNICODE #endif // !UNICODE
#endif /* _WIN32_IE */ #endif /* NTDDI_WIN2K */
SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, U INT wMsg, int cEntries, SHChangeNotifyEntry *pshcne); SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, U INT wMsg, int cEntries, const SHChangeNotifyEntry *pshcne);
SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID); SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID);
SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dw
ProcessId, LPITEMIDLIST **pppidl, LONG *plEvent); typedef enum
{
SCNRT_ENABLE = 0,
SCNRT_DISABLE = 1,
} SCNRT_STATUS;
// use SHChangeNotifyRegisterThread() to enable Async Register and Deregister.
// call with SCNRT_ENABLE at the thread proc begining and SCNRT_DISABLE at the
end
// the call with SCNRT_DISABLE can block while it synchronizes with the main Ch
angeNotify thread
STDAPI_(void) SHChangeNotifyRegisterThread(SCNRT_STATUS status);
SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChange, DWORD dwProcId, __de
ref_opt_out_ecount(2) PIDLIST_ABSOLUTE **pppidl, __out_opt LONG *plEvent);
SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock); SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock);
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
// The pidls that are given to the view via the ChangeNotifyEvents are simple Pi dls, // The pidls that are given to the view via the ChangeNotifyEvents are simple Pi dls,
// SHGetRealIDL() will convert them to true PIDLs. // SHGetRealIDL() will convert them to true PIDLs.
SHSTDAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST SHSTDAPI SHGetRealIDL(IShellFolder *psf, PCUITEMID_CHILD pidlSimple, __out PITEM
* ppidlReal); ID_CHILD *ppidlReal);
#endif // (_WIN32_IE >= 0x0400) #endif // _WIN32_IE >= 0x0400
SHSTDAPI SHGetInstanceExplorer(IUnknown **ppunk); SHSTDAPI SHGetInstanceExplorer(__out IUnknown **ppunk);
// //
// SHGetDataFromIDListA/W // SHGetDataFromIDListA/W
// //
// SHGetDataFromIDList nFormat values TCHAR // SHGetDataFromIDList nFormat values TCHAR
#define SHGDFIL_FINDDATA 1 #define SHGDFIL_FINDDATA 1
#define SHGDFIL_NETRESOURCE 2 #define SHGDFIL_NETRESOURCE 2
#define SHGDFIL_DESCRIPTIONID 3 #define SHGDFIL_DESCRIPTIONID 3
#define SHDID_ROOT_REGITEM 1 #define SHDID_ROOT_REGITEM 1
skipping to change at line 3829 skipping to change at line 2794
#define SHDID_COMPUTER_FIXED 8 #define SHDID_COMPUTER_FIXED 8
#define SHDID_COMPUTER_NETDRIVE 9 #define SHDID_COMPUTER_NETDRIVE 9
#define SHDID_COMPUTER_CDROM 10 #define SHDID_COMPUTER_CDROM 10
#define SHDID_COMPUTER_RAMDISK 11 #define SHDID_COMPUTER_RAMDISK 11
#define SHDID_COMPUTER_OTHER 12 #define SHDID_COMPUTER_OTHER 12
#define SHDID_NET_DOMAIN 13 #define SHDID_NET_DOMAIN 13
#define SHDID_NET_SERVER 14 #define SHDID_NET_SERVER 14
#define SHDID_NET_SHARE 15 #define SHDID_NET_SHARE 15
#define SHDID_NET_RESTOFNET 16 #define SHDID_NET_RESTOFNET 16
#define SHDID_NET_OTHER 17 #define SHDID_NET_OTHER 17
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define SHDID_COMPUTER_IMAGING 18 #define SHDID_COMPUTER_IMAGING 18
#define SHDID_COMPUTER_AUDIO 19 #define SHDID_COMPUTER_AUDIO 19
#define SHDID_COMPUTER_SHAREDDOCS 20 #define SHDID_COMPUTER_SHAREDDOCS 20
#endif
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define SHDID_MOBILE_DEVICE 21 // PDA/PalmPC
#endif
#include <pshpack8.h> #include <pshpack8.h>
typedef struct _SHDESCRIPTIONID { typedef struct _SHDESCRIPTIONID {
DWORD dwDescriptionId; DWORD dwDescriptionId;
CLSID clsid; CLSID clsid;
} SHDESCRIPTIONID, *LPSHDESCRIPTIONID; } SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
// these delegate to IShellFolder2::GetItemData() // these delegate to IShellFolder2::GetDetailsEx()
SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, PCUITEMID_CHILD pidl, int nForm
, void *pv, int cb); at, __out_bcount(cb) void *pv, int cb);
SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, PCUITEMID_CHILD pidl, int nForm
, void *pv, int cb); at, __out_bcount(cb) void *pv, int cb);
#ifdef UNICODE #ifdef UNICODE
#define SHGetDataFromIDList SHGetDataFromIDListW #define SHGetDataFromIDList SHGetDataFromIDListW
#else #else
#define SHGetDataFromIDList SHGetDataFromIDListA #define SHGetDataFromIDList SHGetDataFromIDListA
#endif // !UNICODE #endif // !UNICODE
//=========================================================================== //===========================================================================
// PathResolve flags // PathResolve flags
#define PRF_VERIFYEXISTS 0x0001 #define PRF_VERIFYEXISTS 0x0001
#define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS) #define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS)
#define PRF_FIRSTDIRDEF 0x0004 #define PRF_FIRSTDIRDEF 0x0004
#define PRF_DONTFINDLNK 0x0008 // if PRF_TRYPROGRAMEXTENSIONS i s specified #define PRF_DONTFINDLNK 0x0008 // if PRF_TRYPROGRAMEXTENSIONS i s specified
#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
#define PRF_REQUIREABSOLUTE 0x0010
#endif
SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn); SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn);
#if (NTDDI_VERSION >= NTDDI_WINXP)
SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWOR D dwReasonCode); SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWOR D dwReasonCode);
#endif
SHSTDAPI SHCoCreateInstance(LPCWSTR pszCLSID, const CLSID *pclsid, IUnknown *pUn SHSTDAPI SHCoCreateInstance(__in_opt LPCWSTR pszCLSID, __in_opt const CLSID *pcl
kOuter, REFIID riid, void **ppv); sid, __in_opt IUnknown *pUnkOuter, __in REFIID riid, __deref_out void **ppv);
// For CallCPLEntry16
// #if (NTDDI_VERSION >= NTDDI_LONGHORN)
DECLARE_HANDLE(FARPROC16); SHSTDAPI SHCreateDataObject(__in PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, __in_e
SHSTDAPI_(LRESULT) CallCPLEntry16(HINSTANCE hinst, FARPROC16 lpfnEntry, HWND hwn count_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, __in_opt IDataObject *pdtInner, REF
dCPL, UINT msg, LPARAM lParam1, LPARAM lParam2); IID riid, __deref_out void **ppv);
SHSTDAPI SHCreateStdEnumFmtEtc(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC #endif
**ppenumFormatEtc); SHSTDAPI CIDLData_CreateFromIDArray(__in PCIDLIST_ABSOLUTE pidlFolder, UINT cidl
SHSTDAPI SHDoDragDrop(HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD d , __in_ecount_opt(cidl) PCUIDLIST_RELATIVE_ARRAY apidl, __out IDataObject **ppdt
wEffect, DWORD *pdwEffect); obj);
SHSTDAPI SHCreateStdEnumFmtEtc(UINT cfmt, __in_ecount(cfmt) const FORMATETC afmt
[], __out IEnumFORMATETC **ppenumFormatEtc);
SHSTDAPI SHDoDragDrop(HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD d
wEffect, __out DWORD *pdwEffect);
// stuff for doing auto scrolling // stuff for doing auto scrolling
#define NUM_POINTS 3 #define NUM_POINTS 3
typedef struct { // asd typedef struct { // asd
int iNextSample; int iNextSample;
DWORD dwLastScroll; DWORD dwLastScroll;
BOOL bFull; BOOL bFull;
POINT pts[NUM_POINTS]; POINT pts[NUM_POINTS];
DWORD dwTimes[NUM_POINTS]; DWORD dwTimes[NUM_POINTS];
} AUTO_SCROLL_DATA; } AUTO_SCROLL_DATA;
skipping to change at line 3908 skipping to change at line 2885
BOOL fAdminsCreateCommonGroups : 1; // NT: Administrators create comon grou ps BOOL fAdminsCreateCommonGroups : 1; // NT: Administrators create comon grou ps
UINT fUnusedFlags : 7; UINT fUnusedFlags : 7;
UINT fMenuEnumFilter; UINT fMenuEnumFilter;
} CABINETSTATE, * LPCABINETSTATE; } CABINETSTATE, * LPCABINETSTATE;
#define CABINETSTATE_VERSION 2 #define CABINETSTATE_VERSION 2
// APIs for reading and writing the cabinet state. // APIs for reading and writing the cabinet state.
SHSTDAPI_(BOOL) ReadCabinetState( LPCABINETSTATE lpState, int iSize ); SHSTDAPI_(BOOL) ReadCabinetState(__out_bcount(cLength) CABINETSTATE *pcs, int cL
SHSTDAPI_(BOOL) WriteCabinetState( LPCABINETSTATE lpState ); ength);
SHSTDAPI_(BOOL) PathMakeUniqueName(LPWSTR pszUniqueName, UINT cchMax, LPCWSTR ps SHSTDAPI_(BOOL) WriteCabinetState(__in CABINETSTATE *pcs);
zTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir); SHSTDAPI_(BOOL) PathMakeUniqueName(__out_ecount(cchMax) LPWSTR pszUniqueName, UI
SHSTDAPI_(void) PathQualify(LPWSTR psz); NT cchMax, LPCWSTR pszTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir);
SHSTDAPI_(void) PathQualify(__inout LPWSTR psz);
SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath); SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath);
SHSTDAPI_(BOOL) PathIsSlowA(LPCSTR pszFile, DWORD dwAttr); SHSTDAPI_(BOOL) PathIsSlowA(LPCSTR pszFile, DWORD dwAttr);
SHSTDAPI_(BOOL) PathIsSlowW(LPCWSTR pszFile, DWORD dwAttr); SHSTDAPI_(BOOL) PathIsSlowW(LPCWSTR pszFile, DWORD dwAttr);
#ifdef UNICODE #ifdef UNICODE
#define PathIsSlow PathIsSlowW #define PathIsSlow PathIsSlowW
#else #else
#define PathIsSlow PathIsSlowA #define PathIsSlow PathIsSlowA
#endif // !UNICODE #endif // !UNICODE
// //
// Return codes from PathCleanupSpec. Negative return values are // Return codes from PathCleanupSpec. Negative return values are
// unrecoverable errors // unrecoverable errors
// //
#define PCS_FATAL 0x80000000 #define PCS_FATAL 0x80000000
#define PCS_REPLACEDCHAR 0x00000001 #define PCS_REPLACEDCHAR 0x00000001
#define PCS_REMOVEDCHAR 0x00000002 #define PCS_REMOVEDCHAR 0x00000002
#define PCS_TRUNCATED 0x00000004 #define PCS_TRUNCATED 0x00000004
#define PCS_PATHTOOLONG 0x00000008 // Always combined with FATAL #define PCS_PATHTOOLONG 0x00000008 // Always combined with FATAL
SHSTDAPI_(int) PathCleanupSpec(LPCWSTR pszDir, LPWSTR pszSpec); SHSTDAPI_(int) PathCleanupSpec(LPCWSTR pszDir, __inout LPWSTR pszSpec);
SHSTDAPI_(int) PathResolve(LPWSTR pszPath, LPCWSTR dirs[], UINT fFlags); SHSTDAPI_(int) PathResolve(__out_ecount(MAX_PATH) LPWSTR lpszPath, __in_opt __nu
SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, LPWSTR pszFilePath, UINT cbFile llterminated LPCWSTR dirs[], UINT fFlags);
Path, SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, __inout_ecount(cchFilePath) LPW
STR pszFilePath, UINT cchFilePath,
LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, LPCWSTR pszFilters, LPCWSTR pszTitle); LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, LPCWSTR pszFilters, LPCWSTR pszTitle);
SHSTDAPI_(int) DriveType(int iDrive); SHSTDAPI_(int) DriveType(int iDrive);
SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet); SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet);
SHSTDAPI_(int) IsNetDrive(int iDrive); SHSTDAPI_(int) IsNetDrive(int iDrive);
// Flags for Shell_MergeMenus // Flags for Shell_MergeMenus
#define MM_ADDSEPARATOR 0x00000001L #define MM_ADDSEPARATOR 0x00000001L
#define MM_SUBMENUSHAVEIDS 0x00000002L #define MM_SUBMENUSHAVEIDS 0x00000002L
#define MM_DONTREMOVESEPS 0x00000004L #define MM_DONTREMOVESEPS 0x00000004L
SHSTDAPI_(UINT) Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI DAdjust, UINT uIDAdjustMax, ULONG uFlags); SHSTDAPI_(UINT) Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI DAdjust, UINT uIDAdjustMax, ULONG uFlags);
/* /*
* The SHObjectProperties API provides an easy way to invoke * The SHObjectProperties API provides an easy way to invoke the Properties
* the Properties context menu command on shell objects. * context menu command on a subset of the shell item namespace.
* *
* PARAMETERS * PARAMETERS
* *
* hwnd The window handle of the window which will own the dialog * hwnd The window handle of the window which will own the dial
* dwType A SHOP_ value as defined below og
* lpObject Name of the object, see SHOP_ values below * shopObjectType A SHOP_ value as defined below
* lpPage The name of the property sheet page to open to or NULL. * pszObjectName Name of the object, see SHOP_ values below
* pszPropertyPage The name of the property sheet page to open to or NULL.
* *
* RETURN * RETURN
* *
* TRUE if the Properties command was invoked * TRUE if the Properties command was invoked
*/ */
SHSTDAPI_(BOOL) SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR lpObject, LP CWSTR lpPage); SHSTDAPI_(BOOL) SHObjectProperties(__in_opt HWND hwnd, __in DWORD shopObjectType , __in PCWSTR pszObjectName, __in_opt PCWSTR pszPropertyPage);
#define SHOP_PRINTERNAME 0x00000001 // lpObject points to a printer friendly na #define SHOP_PRINTERNAME 0x00000001 // pszObjectName points to a printer friend
me ly name
#define SHOP_FILEPATH 0x00000002 // lpObject points to a fully qualified pat #define SHOP_FILEPATH 0x00000002 // pszObjectName points to a fully qualifie
h+file name d path+file name
#define SHOP_VOLUMEGUID 0x00000004 // lpObject points to a Volume GUID #define SHOP_VOLUMEGUID 0x00000004 // pszObjectName points to a Volume GUID
/* /*
* The SHFormatDrive API provides access to the Shell * The SHFormatDrive API provides access to the Shell
* format dialog. This allows apps which want to format disks * format dialog. This allows apps which want to format disks
* to bring up the same dialog that the Shell does to do it. * to bring up the same dialog that the Shell does to do it.
* *
* This dialog is not sub-classable. You cannot put custom * This dialog is not sub-classable. You cannot put custom
* controls in it. If you want this ability, you will have * controls in it. If you want this ability, you will have
* to write your own front end for the DMaint_FormatDrive * to write your own front end for the DMaint_FormatDrive
* engine. * engine.
skipping to change at line 4058 skipping to change at line 3036
// //
#define SHFMT_ERROR 0xFFFFFFFFL // Error on last format, drive may be fo rmatable #define SHFMT_ERROR 0xFFFFFFFFL // Error on last format, drive may be fo rmatable
#define SHFMT_CANCEL 0xFFFFFFFEL // Last format was canceled #define SHFMT_CANCEL 0xFFFFFFFEL // Last format was canceled
#define SHFMT_NOFORMAT 0xFFFFFFFDL // Drive is not formatable #define SHFMT_NOFORMAT 0xFFFFFFFDL // Drive is not formatable
#ifndef HPSXA_DEFINED #ifndef HPSXA_DEFINED
#define HPSXA_DEFINED #define HPSXA_DEFINED
DECLARE_HANDLE( HPSXA ); DECLARE_HANDLE( HPSXA );
#endif #endif
WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey , UINT max_iface ); WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey , UINT max_iface );
WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray( HPSXA hpsxa ); WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray(__in HPSXA hpsxa );
WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray( HPSXA hpsxa, LPFNADDPROPSHEE WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray(__in HPSXA hpsxa, LPFNADDPROP
TPAGE lpfnAddPage, LPARAM lParam ); SHEETPAGE lpfnAddPage, LPARAM lParam );
WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray( HPSXA hpsxa, UINT uPageI WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray(__in HPSXA hpsxa, UINT uP
D, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam ); ageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam );
SHSTDAPI_(LPITEMIDLIST) ILClone(LPCITEMIDLIST pidl);
SHSTDAPI_(LPITEMIDLIST) ILGetNext(LPCITEMIDLIST pidl); SHSTDAPI_(PIDLIST_RELATIVE) ILClone(__in PCUIDLIST_RELATIVE pidl);
SHSTDAPI_(UINT) ILGetSize(LPCITEMIDLIST pidl); SHSTDAPI_(PITEMID_CHILD) ILCloneFirst(__in PCUIDLIST_RELATIVE pidl);
SHSTDAPI_(LPITEMIDLIST) ILFindLastID(LPCITEMIDLIST pidl); SHSTDAPI_(PIDLIST_ABSOLUTE) ILCombine(__in PCIDLIST_ABSOLUTE pidl1, __in PCU
SHSTDAPI_(BOOL) ILRemoveLastID(LPITEMIDLIST pidl); IDLIST_RELATIVE pidl2);
SHSTDAPI_(LPITEMIDLIST) ILAppendID(LPITEMIDLIST pidl, LPCSHITEMID pmkid, BOOL fA SHSTDAPI_(void) ILFree(__in_opt PIDLIST_RELATIVE pidl);
ppend); SHSTDAPI_(PUIDLIST_RELATIVE) ILGetNext(__in PCUIDLIST_RELATIVE pidl);
SHSTDAPI_(void) ILFree(LPITEMIDLIST pidl); SHSTDAPI_(UINT) ILGetSize(__in PCUIDLIST_RELATIVE pidl);
SHSTDAPI_(LPITEMIDLIST) ILCloneFirst(LPCITEMIDLIST pidl); SHSTDAPI_(PUIDLIST_RELATIVE) ILFindChild(__in PCIDLIST_ABSOLUTE pidlParent, _
SHSTDAPI_(BOOL) ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); _in PCIDLIST_ABSOLUTE pidlChild);
SHSTDAPI_(BOOL) ILIsParent(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOO SHSTDAPI_(__out PUITEMID_CHILD) ILFindLastID(__in PCUIDLIST_RELATIVE pidl);
L fImmediate); SHSTDAPI_(BOOL) ILRemoveLastID(__inout PUIDLIST_RELATIVE pidl);
SHSTDAPI_(LPITEMIDLIST) ILFindChild(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidl SHSTDAPI_(BOOL) ILIsEqual(__in PCIDLIST_ABSOLUTE pidl1, __in PCI
Child); DLIST_ABSOLUTE pidl2);
SHSTDAPI_(LPITEMIDLIST) ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); SHSTDAPI_(BOOL) ILIsParent(__in PCIDLIST_ABSOLUTE pidl1, __in PC
SHSTDAPI ILLoadFromStream(IStream *pstm, LPITEMIDLIST *pidl); IDLIST_ABSOLUTE pidl2, BOOL fImmediate);
SHSTDAPI ILSaveToStream(IStream *pstm, LPCITEMIDLIST pidl); SHSTDAPI ILSaveToStream(__in IStream *pstm, __in PCUIDLIS
T_RELATIVE pidl);
DECLSPEC_DEPRECATED SHSTDAPI ILLoadFromStream(__in IStream *pstm, __inout PID
LIST_RELATIVE *pidl);
SHSTDAPI ILLoadFromStreamEx(__in IStream *pstm, __deref_o
ut PIDLIST_RELATIVE *pidl);
#if (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400)
SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathA(LPCSTR pszPath); SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathA(LPCSTR pszPath);
SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathW(LPCWSTR pszPath); SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathW(LPCWSTR pszPath);
#ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH #ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH
SHSTDAPI_(LPITEMIDLIST) ILCreateFromPath(LPCTSTR pszPath); SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPath(LPCTSTR pszPath);
#else #else
#ifdef UNICODE #ifdef UNICODE
#define ILCreateFromPath ILCreateFromPathW #define ILCreateFromPath ILCreateFromPathW
#else #else
#define ILCreateFromPath ILCreateFromPathA #define ILCreateFromPath ILCreateFromPathA
#endif // !UNICODE #endif // !UNICODE
#endif #endif // NO_WRAPPERS_FOR_ILCREATEFROMPATH
#endif #endif // (_WIN32_IE >= 0x0400)
SHSTDAPI SHILCreateFromPath(LPCWSTR szPath, LPITEMIDLIST *ppidl, DWORD *rgfInOut
); SHSTDAPI SHILCreateFromPath(LPCWSTR pszPath, __out PIDLIST_ABSOLUTE *ppidl, __in
out_opt DWORD *rgfInOut);
#define VOID_OFFSET(pv, cb) ((void*)(((BYTE*)(pv))+(cb)))
#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
} // extern "C"
inline PIDLIST_ABSOLUTE ILCloneFull(__in PCUIDLIST_ABSOLUTE pidl) { return reint
erpret_cast<PIDLIST_ABSOLUTE>(ILClone(pidl)); }
inline PITEMID_CHILD ILCloneChild(__in PCUITEMID_CHILD pidl) { return ILClo
neFirst(pidl); }
inline HRESULT ILLoadFromStreamEx(__in IStream *pstm, __deref_out PIDLIST_ABSOLU
TE *ppidl) { return ILLoadFromStreamEx(pstm, reinterpret_cast<PIDLIST_RELATIVE*>
(ppidl)); }
inline HRESULT ILLoadFromStreamEx(__in IStream *pstm, __deref_out PITEMID_CHILD
*ppidl) { return ILLoadFromStreamEx(pstm, reinterpret_cast<PIDLIST_RELATIVE*>
(ppidl)); }
inline PCUIDLIST_RELATIVE ILSkip(__in PCUIDLIST_RELATIVE pidl, UINT cb) { return
reinterpret_cast<PCUIDLIST_RELATIVE>(VOID_OFFSET(pidl, cb)); }
inline PUIDLIST_RELATIVE ILSkip(__in PUIDLIST_RELATIVE pidl, UINT cb) { return
const_cast<PUIDLIST_RELATIVE>(ILSkip(const_cast<PCUIDLIST_RELATIVE>(pidl), cb))
; }
inline PCUIDLIST_RELATIVE ILNext(__in PCUIDLIST_RELATIVE pidl) { return ILSkip(p
idl, pidl->mkid.cb); }
inline PUIDLIST_RELATIVE ILNext(__in PUIDLIST_RELATIVE pidl) { return const_ca
st<PUIDLIST_RELATIVE>(ILNext(const_cast<PCUIDLIST_RELATIVE>(pidl))); }
inline BOOL ILIsAligned(__in PCUIDLIST_RELATIVE pidl) { return (((DWORD_PT
R)(pidl) & (sizeof(void*) - 1)) == 0); }
inline BOOL ILIsEmpty(__in_opt PCUIDLIST_RELATIVE pidl) { return ((pidl == N
ULL) || (pidl->mkid.cb==0)); }
// ILIsChild does not guarantee that pidl is non-null or non-empty.
inline BOOL ILIsChild(__in_opt PCUIDLIST_RELATIVE pidl) { return (ILIsEm
pty(pidl) || ILIsEmpty(ILNext(pidl))); }
extern "C" {
#else // !defined(STRICT_TYPED_ITEMIDS) || !defined(__cplusplus)
#define ILCloneFull ILClone
#define ILCloneChild ILCloneFirst
#define ILSkip(pidl, cb) ((PUIDLIST_RELATIVE)VOID_OFFSET((pidl), (cb)))
#define ILNext(pidl) ILSkip(pidl, (pidl)->mkid.cb)
#define ILIsAligned(pidl) (((DWORD_PTR)(pidl) & (sizeof(void*) - 1)) == 0)
#define ILIsEmpty(pidl) ((pidl) == NULL || (pidl)->mkid.cb==0)
// ILIsChild does not guarantee that pidl is non-null or non-empty.
#define ILIsChild(pidl) (ILIsEmpty(pidl) || ILIsEmpty(ILNext(pidl)))
#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
SHSTDAPI_(PIDLIST_RELATIVE) ILAppendID(PIDLIST_RELATIVE pidl, LPCSHITEMID pmkid,
BOOL fAppend);
#if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN)
#undef INTERFACE #undef INTERFACE
#define INTERFACE IDefViewFrame #define INTERFACE IDefViewFrame
DECLARE_INTERFACE_(IDefViewFrame, IUnknown) DECLARE_INTERFACE_IID_(IDefViewFrame, IUnknown, "710EB7A0-45ED-11D0-924A-0020AFC 7AC4D")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IDefViewFrame methods *** // *** IDefViewFrame methods ***
STDMETHOD(GetWindowLV) (THIS_ HWND * phwnd) PURE; STDMETHOD(GetWindowLV) (THIS_ __out HWND * phwnd) PURE;
STDMETHOD(ReleaseWindowLV) (THIS) PURE; STDMETHOD(ReleaseWindowLV) (THIS) PURE;
STDMETHOD(GetShellFolder)(THIS_ IShellFolder **ppsf) PURE; STDMETHOD(GetShellFolder)(THIS_ __out IShellFolder **ppsf) PURE;
}; };
#endif
//=========================================================================== //===========================================================================
// Shell restrictions. (Parameter for SHRestricted) // Shell restrictions. (Parameter for SHRestricted)
// SHRestricted has been deprecated in favor of SHWindowsPolicy
//--- do not add restrictions here, see winpolicy.cpp c_rgWindowsPolicies
typedef enum RESTRICTIONS typedef enum RESTRICTIONS
{ {
REST_NONE = 0x00000000, REST_NONE = 0x00000000,
REST_NORUN = 0x00000001, REST_NORUN = 0x00000001,
REST_NOCLOSE = 0x00000002, REST_NOCLOSE = 0x00000002,
REST_NOSAVESET = 0x00000004, REST_NOSAVESET = 0x00000004,
REST_NOFILEMENU = 0x00000008, REST_NOFILEMENU = 0x00000008,
REST_NOSETFOLDERS = 0x00000010, REST_NOSETFOLDERS = 0x00000010,
REST_NOSETTASKBAR = 0x00000020, REST_NOSETTASKBAR = 0x00000020,
REST_NODESKTOP = 0x00000040, REST_NODESKTOP = 0x00000040,
skipping to change at line 4162 skipping to change at line 3193
REST_NOCHANGINGWALLPAPER = 0x40000011, REST_NOCHANGINGWALLPAPER = 0x40000011,
REST_NODESKCOMP = 0x40000012, REST_NODESKCOMP = 0x40000012,
REST_NOADDDESKCOMP = 0x40000013, REST_NOADDDESKCOMP = 0x40000013,
REST_NODELDESKCOMP = 0x40000014, REST_NODELDESKCOMP = 0x40000014,
REST_NOCLOSEDESKCOMP = 0x40000015, REST_NOCLOSEDESKCOMP = 0x40000015,
REST_NOCLOSE_DRAGDROPBAND = 0x40000016, // Disable Close and Drag & Drop on ALL Bands REST_NOCLOSE_DRAGDROPBAND = 0x40000016, // Disable Close and Drag & Drop on ALL Bands
REST_NOMOVINGBAND = 0x40000017, // Disable Moving ALL Bands REST_NOMOVINGBAND = 0x40000017, // Disable Moving ALL Bands
REST_NOEDITDESKCOMP = 0x40000018, REST_NOEDITDESKCOMP = 0x40000018,
REST_NORESOLVESEARCH = 0x40000019, REST_NORESOLVESEARCH = 0x40000019,
REST_NORESOLVETRACK = 0x4000001A, REST_NORESOLVETRACK = 0x4000001A,
REST_FORCECOPYACLWITHFILE = 0X4000001B, REST_FORCECOPYACLWITHFILE = 0x4000001B,
#if (NTDDI_VERSION < NTDDI_LONGHORN)
REST_NOLOGO3CHANNELNOTIFY = 0x4000001C, REST_NOLOGO3CHANNELNOTIFY = 0x4000001C,
#endif
REST_NOFORGETSOFTWAREUPDATE = 0x4000001D, REST_NOFORGETSOFTWAREUPDATE = 0x4000001D,
REST_NOSETACTIVEDESKTOP = 0x4000001E, // No Active desktop on Sett ings Menu REST_NOSETACTIVEDESKTOP = 0x4000001E, // No Active desktop on Sett ings Menu
REST_NOUPDATEWINDOWS = 0x4000001F, // No Windows Update on Sett ings Menu REST_NOUPDATEWINDOWS = 0x4000001F, // No Windows Update on Sett ings Menu
REST_NOCHANGESTARMENU = 0x40000020, // No Context menu or Drag a nd Drop on Start menu REST_NOCHANGESTARMENU = 0x40000020, // No Context menu or Drag a nd Drop on Start menu
REST_NOFOLDEROPTIONS = 0x40000021, // No Folder Options on Sett ings Menu REST_NOFOLDEROPTIONS = 0x40000021, // No Folder Options on Sett ings Menu
REST_HASFINDCOMPUTERS = 0x40000022, // Show Start/Search/Compute rs REST_HASFINDCOMPUTERS = 0x40000022, // Show Start/Search/Compute rs
REST_INTELLIMENUS = 0x40000023, REST_INTELLIMENUS = 0x40000023,
REST_RUNDLGMEMCHECKBOX = 0x40000024, REST_RUNDLGMEMCHECKBOX = 0x40000024,
REST_ARP_ShowPostSetup = 0x40000025, // ARP: Show Post-Setup page REST_ARP_ShowPostSetup = 0x40000025, // ARP: Show Post-Setup page
REST_NOCSC = 0x40000026, // Disable the ClientSide ca ching on SM REST_NOCSC = 0x40000026, // Disable the ClientSide ca ching on SM
skipping to change at line 4196 skipping to change at line 3229
REST_NOWEBVIEW = 0x40000033, // Disable Web View REST_NOWEBVIEW = 0x40000033, // Disable Web View
REST_NOCUSTOMIZETHISFOLDER = 0x40000034, // Disable Customize This Fo lder REST_NOCUSTOMIZETHISFOLDER = 0x40000034, // Disable Customize This Fo lder
REST_NOENCRYPTION = 0x40000035, // Don't allow file encrypti on REST_NOENCRYPTION = 0x40000035, // Don't allow file encrypti on
// Do NOT use me 0x40000036, // Do NOT use me 0x40000036,
REST_DONTSHOWSUPERHIDDEN = 0x40000037, // don't show super hidden f iles REST_DONTSHOWSUPERHIDDEN = 0x40000037, // don't show super hidden f iles
REST_NOSHELLSEARCHBUTTON = 0x40000038, REST_NOSHELLSEARCHBUTTON = 0x40000038,
REST_NOHARDWARETAB = 0x40000039, // No Hardware tab on Drives or in control panel REST_NOHARDWARETAB = 0x40000039, // No Hardware tab on Drives or in control panel
REST_NORUNASINSTALLPROMPT = 0x4000003A, // Don't bring up "Run As" p rompt for install programs REST_NORUNASINSTALLPROMPT = 0x4000003A, // Don't bring up "Run As" p rompt for install programs
REST_PROMPTRUNASINSTALLNETPATH = 0x4000003B, // Force the "Run As" promp t for install programs on unc/network shares REST_PROMPTRUNASINSTALLNETPATH = 0x4000003B, // Force the "Run As" promp t for install programs on unc/network shares
REST_NOMANAGEMYCOMPUTERVERB = 0x4000003C, // No Manage verb on My Comp uter REST_NOMANAGEMYCOMPUTERVERB = 0x4000003C, // No Manage verb on My Comp uter
REST_NORECENTDOCSNETHOOD = 0x4000003D, // dont add the recent docs shares to nethood // Do NOT use me 0x4000003D,
REST_DISALLOWRUN = 0x4000003E, // don't allow certain apps to be run REST_DISALLOWRUN = 0x4000003E, // don't allow certain apps to be run
REST_NOWELCOMESCREEN = 0x4000003F, // don't allow the welcome s creen to be displayed. REST_NOWELCOMESCREEN = 0x4000003F, // don't allow the welcome s creen to be displayed.
REST_RESTRICTCPL = 0x40000040, // only allow certain cpls t o be run REST_RESTRICTCPL = 0x40000040, // only allow certain cpls t o be run
REST_DISALLOWCPL = 0x40000041, // don't allow certain cpls to be run REST_DISALLOWCPL = 0x40000041, // don't allow certain cpls to be run
REST_NOSMBALLOONTIP = 0x40000042, // No Start Menu Balloon Tip REST_NOSMBALLOONTIP = 0x40000042, // No Start Menu Balloon Tip
REST_NOSMHELP = 0x40000043, // No Help on the Start Menu REST_NOSMHELP = 0x40000043, // No Help on the Start Menu
REST_NOWINKEYS = 0x40000044, // No Windows-X Hot keys REST_NOWINKEYS = 0x40000044, // No Windows-X Hot keys
REST_NOENCRYPTONMOVE = 0x40000045, // Don't automatically try t o encrypt files that are moved to encryped directories REST_NOENCRYPTONMOVE = 0x40000045, // Don't automatically try t o encrypt files that are moved to encryped directories
REST_NOLOCALMACHINERUN = 0x40000046, // ignore HKLM\sw\ms\win\cv\ Run and all of it's sub keys REST_NOLOCALMACHINERUN = 0x40000046, // ignore HKLM\sw\ms\win\cv\ Run and all of it's sub keys
REST_NOCURRENTUSERRUN = 0x40000047, // ignore HKCU\sw\ms\win\cv\ Run and all of it's sub keys REST_NOCURRENTUSERRUN = 0x40000047, // ignore HKCU\sw\ms\win\cv\ Run and all of it's sub keys
REST_NOLOCALMACHINERUNONCE = 0x40000048, // ignore HKLM\sw\ms\win\cv\ RunOnce and all of it's sub keys REST_NOLOCALMACHINERUNONCE = 0x40000048, // ignore HKLM\sw\ms\win\cv\ RunOnce and all of it's sub keys
REST_NOCURRENTUSERRUNONCE = 0x40000049, // ignore HKCU\sw\ms\win\cv\ RunOnce and all of it's sub keys REST_NOCURRENTUSERRUNONCE = 0x40000049, // ignore HKCU\sw\ms\win\cv\ RunOnce and all of it's sub keys
REST_FORCEACTIVEDESKTOPON = 0x4000004A, // Force ActiveDesktop to be turned ON all the time. REST_FORCEACTIVEDESKTOPON = 0x4000004A, // Force ActiveDesktop to be turned ON all the time.
REST_NOCOMPUTERSNEARME = 0x4000004B, // removes the "Computers ne ar me" link // Do NOT use me 0x4000004B,
REST_NOVIEWONDRIVE = 0x4000004C, // disallows CreateViewObjec t() on specified drives (CFSFolder only) REST_NOVIEWONDRIVE = 0x4000004C, // disallows CreateViewObjec t() on specified drives (CFSFolder only)
#if (NTDDI_VERSION >= NTDDI_WINXP) || defined(IE_BACKCOMPAT_VERSION)
REST_NONETCRAWL = 0x4000004D, // disables the crawling of the WNet namespace. REST_NONETCRAWL = 0x4000004D, // disables the crawling of the WNet namespace.
REST_NOSHAREDDOCUMENTS = 0x4000004E, // don't auto share the Shar ed Documents/create link REST_NOSHAREDDOCUMENTS = 0x4000004E, // don't auto share the Shar ed Documents/create link
#endif // NTDDI_WINXP
REST_NOSMMYDOCS = 0x4000004F, // Don't show the My Documen ts item on the Start Menu. REST_NOSMMYDOCS = 0x4000004F, // Don't show the My Documen ts item on the Start Menu.
#if (NTDDI_VERSION >= NTDDI_WINXP)
REST_NOSMMYPICS = 0x40000050, // Don't show the My Picture s item on the Start Menu REST_NOSMMYPICS = 0x40000050, // Don't show the My Picture s item on the Start Menu
REST_ALLOWBITBUCKDRIVES = 0x40000051, // Bit mask indicating which which drives have bit bucket support REST_ALLOWBITBUCKDRIVES = 0x40000051, // Bit mask indicating which which drives have bit bucket support
REST_NONLEGACYSHELLMODE = 0x40000052, // new consumer shell modes REST_NONLEGACYSHELLMODE = 0x40000052, // new consumer shell modes
REST_NOCONTROLPANELBARRICADE = 0x40000053, // The webview barricade in Control Panel REST_NOCONTROLPANELBARRICADE = 0x40000053, // The webview barricade in Control Panel
REST_NOSTARTPAGE = 0x40000054, // Whistler Start Page on de sktop. REST_NOSTARTPAGE = 0x40000054, // Whistler Start Page on de sktop.
REST_NOAUTOTRAYNOTIFY = 0x40000055, // Whistler auto-tray notify feature REST_NOAUTOTRAYNOTIFY = 0x40000055, // Whistler auto-tray notify feature
REST_NOTASKGROUPING = 0x40000056, // Whistler taskbar button g rouping feature REST_NOTASKGROUPING = 0x40000056, // Whistler taskbar button g rouping feature
REST_NOCDBURNING = 0x40000057, // whistler cd burning featu re REST_NOCDBURNING = 0x40000057, // whistler cd burning featu re
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
REST_MYCOMPNOPROP = 0x40000058, // disables Properties on My Computer's context menu REST_MYCOMPNOPROP = 0x40000058, // disables Properties on My Computer's context menu
REST_MYDOCSNOPROP = 0x40000059, // disables Properties on My Documents' context menu REST_MYDOCSNOPROP = 0x40000059, // disables Properties on My Documents' context menu
#endif // NTDDI_WIN2KSP3
#if (NTDDI_VERSION >= NTDDI_WINXP)
REST_NOSTARTPANEL = 0x4000005A, // Windows start panel (New start menu) for Whistler. REST_NOSTARTPANEL = 0x4000005A, // Windows start panel (New start menu) for Whistler.
REST_NODISPLAYAPPEARANCEPAGE = 0x4000005B, // disable Themes and Appear ance tabs in the Display Control Panel. REST_NODISPLAYAPPEARANCEPAGE = 0x4000005B, // disable Themes and Appear ance tabs in the Display Control Panel.
REST_NOTHEMESTAB = 0x4000005C, // disable the Themes tab in the Display Control Panel. REST_NOTHEMESTAB = 0x4000005C, // disable the Themes tab in the Display Control Panel.
REST_NOVISUALSTYLECHOICE = 0x4000005D, // disable the visual style drop down in the Appearance tab of the Display Control Panel. REST_NOVISUALSTYLECHOICE = 0x4000005D, // disable the visual style drop down in the Appearance tab of the Display Control Panel.
REST_NOSIZECHOICE = 0x4000005E, // disable the size drop dow n in the Appearance tab of the Display Control Panel. REST_NOSIZECHOICE = 0x4000005E, // disable the size drop dow n in the Appearance tab of the Display Control Panel.
REST_NOCOLORCHOICE = 0x4000005F, // disable the color drop do wn in the Appearance tab of the Display Control Panel. REST_NOCOLORCHOICE = 0x4000005F, // disable the color drop do wn in the Appearance tab of the Display Control Panel.
REST_SETVISUALSTYLE = 0x40000060, // Load the specified file a s the visual style. REST_SETVISUALSTYLE = 0x40000060, // Load the specified file a s the visual style.
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
REST_STARTRUNNOHOMEPATH = 0x40000061, // dont use the %HOMEPATH% e nv var for the Start-Run dialog REST_STARTRUNNOHOMEPATH = 0x40000061, // dont use the %HOMEPATH% e nv var for the Start-Run dialog
#endif // NTDDI_WIN2KSP3
#if (NTDDI_VERSION >= NTDDI_WINXP)
REST_NOUSERNAMEINSTARTPANEL = 0x40000062, // don't show the username i s the startpanel. REST_NOUSERNAMEINSTARTPANEL = 0x40000062, // don't show the username i s the startpanel.
REST_NOMYCOMPUTERICON = 0x40000063, // don't show my computer an ywhere, hide its contents REST_NOMYCOMPUTERICON = 0x40000063, // don't show my computer an ywhere, hide its contents
REST_NOSMNETWORKPLACES = 0x40000064, // don't show network places in startpanel. REST_NOSMNETWORKPLACES = 0x40000064, // don't show network places in startpanel.
REST_NOSMPINNEDLIST = 0x40000065, // don't show the pinned lis t in startpanel. REST_NOSMPINNEDLIST = 0x40000065, // don't show the pinned lis t in startpanel.
REST_NOSMMYMUSIC = 0x40000066, // don't show MyMusic folder in startpanel REST_NOSMMYMUSIC = 0x40000066, // don't show MyMusic folder in startpanel
REST_NOSMEJECTPC = 0x40000067, // don't show "Undoc PC" com mand in startmenu REST_NOSMEJECTPC = 0x40000067, // don't show "Undoc PC" com mand in startmenu
REST_NOSMMOREPROGRAMS = 0x40000068, // don't show "More Programs " button in StartPanel. REST_NOSMMOREPROGRAMS = 0x40000068, // don't show "More Programs " button in StartPanel.
REST_NOSMMFUPROGRAMS = 0x40000069, // don't show the MFU progra ms list in StartPanel. REST_NOSMMFUPROGRAMS = 0x40000069, // don't show the MFU progra ms list in StartPanel.
REST_NOTRAYITEMSDISPLAY = 0x4000006A, // disables the display of t he system tray REST_NOTRAYITEMSDISPLAY = 0x4000006A, // disables the display of t he system tray
REST_NOTOOLBARSONTASKBAR = 0x4000006B, // disables toolbar display on the taskbar REST_NOTOOLBARSONTASKBAR = 0x4000006B, // disables toolbar display on the taskbar
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
REST_NOSMCONFIGUREPROGRAMS = 0x4000006F, // No Configure Programs on Settings Menu REST_NOSMCONFIGUREPROGRAMS = 0x4000006F, // No Configure Programs on Settings Menu
#endif // NTDDI_WIN2KSP3
#if (NTDDI_VERSION >= NTDDI_WINXP)
REST_HIDECLOCK = 0x40000070, // don't show the clock REST_HIDECLOCK = 0x40000070, // don't show the clock
REST_NOLOWDISKSPACECHECKS = 0x40000071, // disable the low disk spac e checking REST_NOLOWDISKSPACECHECKS = 0x40000071, // disable the low disk spac e checking
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_WIN2KSP4)
REST_NOENTIRENETWORK = 0x40000072, // removes the "Entire Netwo rk" link (i.e. from "My Network Places") REST_NOENTIRENETWORK = 0x40000072, // removes the "Entire Netwo rk" link (i.e. from "My Network Places")
#endif // NTDDI_WIN2KSP4
#if (NTDDI_VERSION >= NTDDI_WINXP)
REST_NODESKTOPCLEANUP = 0x40000073, // disable the desktop clean up wizard REST_NODESKTOPCLEANUP = 0x40000073, // disable the desktop clean up wizard
REST_BITBUCKNUKEONDELETE = 0x40000074, // disables recycling of fil es REST_BITBUCKNUKEONDELETE = 0x40000074, // disables recycling of fil es
REST_BITBUCKCONFIRMDELETE = 0x40000075, // always show the delete co nfirmation dialog when deleting files REST_BITBUCKCONFIRMDELETE = 0x40000075, // always show the delete co nfirmation dialog when deleting files
REST_BITBUCKNOPROP = 0x40000076, // disables Properties on Re cycle Bin's context menu REST_BITBUCKNOPROP = 0x40000076, // disables Properties on Re cycle Bin's context menu
REST_NODISPBACKGROUND = 0x40000077, // disables the Desktop tab in the Display CPL REST_NODISPBACKGROUND = 0x40000077, // disables the Desktop tab in the Display CPL
REST_NODISPSCREENSAVEPG = 0x40000078, // disables the Screen Saver tab in the Display CPL REST_NODISPSCREENSAVEPG = 0x40000078, // disables the Screen Saver tab in the Display CPL
REST_NODISPSETTINGSPG = 0x40000079, // disables the Settings tab in the Display CPL REST_NODISPSETTINGSPG = 0x40000079, // disables the Settings tab in the Display CPL
REST_NODISPSCREENSAVEPREVIEW = 0x4000007A, // disables the screen saver on the Screen Saver tab in the Display CPL REST_NODISPSCREENSAVEPREVIEW = 0x4000007A, // disables the screen saver on the Screen Saver tab in the Display CPL
REST_NODISPLAYCPL = 0x4000007B, // disables the Display CPL REST_NODISPLAYCPL = 0x4000007B, // disables the Display CPL
REST_HIDERUNASVERB = 0x4000007C, // hides the "Run As..." con text menu item REST_HIDERUNASVERB = 0x4000007C, // hides the "Run As..." con text menu item
REST_NOTHUMBNAILCACHE = 0x4000007D, // disables use of the thumb nail cache REST_NOTHUMBNAILCACHE = 0x4000007D, // disables use of the thumb nail cache
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_WINXPSP1) || defined(IE_BACKCOMPAT_VERSION)
REST_NOSTRCMPLOGICAL = 0x4000007E, // dont use StrCmpLogical() instead use default CompareString() REST_NOSTRCMPLOGICAL = 0x4000007E, // dont use StrCmpLogical() instead use default CompareString()
REST_NOPUBLISHWIZARD = 0x4000007F, // disables publishing wizar d (WPW) REST_NOPUBLISHWIZARD = 0x4000007F, // disables publishing wizar d (WPW)
REST_NOONLINEPRINTSWIZARD = 0x40000080, // disables online prints wi zard (OPW) REST_NOONLINEPRINTSWIZARD = 0x40000080, // disables online prints wi zard (OPW)
REST_NOWEBSERVICES = 0x40000081, // disables the web specifie d services for both OPW and WPW REST_NOWEBSERVICES = 0x40000081, // disables the web specifie d services for both OPW and WPW
#endif // NTDDI_WINXPSP1
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
REST_ALLOWUNHASHEDWEBVIEW = 0x40000082, // allow the user to be prom ted to accept web view templates that don't already have an md5 hash in the regi stry REST_ALLOWUNHASHEDWEBVIEW = 0x40000082, // allow the user to be prom ted to accept web view templates that don't already have an md5 hash in the regi stry
#endif // NTDDI_WIN2KSP3
REST_ALLOWLEGACYWEBVIEW = 0x40000083, // allow legacy webview temp late to be shown. REST_ALLOWLEGACYWEBVIEW = 0x40000083, // allow legacy webview temp late to be shown.
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
REST_REVERTWEBVIEWSECURITY = 0x40000084, // disable added webview sec urity measures (revert to w2k functionality). REST_REVERTWEBVIEWSECURITY = 0x40000084, // disable added webview sec urity measures (revert to w2k functionality).
#endif // NTDDI_WIN2KSP3
#if (NTDDI_VERSION >= NTDDI_WIN2KSP4)
REST_INHERITCONSOLEHANDLES = 0x40000086, // ShellExec() will check fo r the current process and target process being console processes to inherit hand les REST_INHERITCONSOLEHANDLES = 0x40000086, // ShellExec() will check fo r the current process and target process being console processes to inherit hand les
#endif // NTDDI_WIN2KSP4
#if (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_LONGHORN)
REST_SORTMAXITEMCOUNT = 0x40000087, // Do not sort views with mo re items than this key. Useful for viewing big amount of files in one folder. REST_SORTMAXITEMCOUNT = 0x40000087, // Do not sort views with mo re items than this key. Useful for viewing big amount of files in one folder.
#endif
#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
REST_NOREMOTERECURSIVEEVENTS = 0x40000089, // Dont register network cha nge events recursively to avoid network traffic REST_NOREMOTERECURSIVEEVENTS = 0x40000089, // Dont register network cha nge events recursively to avoid network traffic
REST_NOREMOTECHANGENOTIFY = 0x40000091, // Do not register for remot #endif // NTDDI_WINXPSP2
e change notifies #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
REST_NOREMOTECHANGENOTIFY = 0x40000091, // Do not notify for remote
changy notifies
#if (NTDDI_VERSION < NTDDI_LONGHORN)
REST_NOSIMPLENETIDLIST = 0x40000092, // No simple network IDLists REST_NOSIMPLENETIDLIST = 0x40000092, // No simple network IDLists
#endif
REST_NOENUMENTIRENETWORK = 0x40000093, // Don't enumerate entire ne twork if we happen to get to it (in conjunction with REST_NOENTIRENETWORK) REST_NOENUMENTIRENETWORK = 0x40000093, // Don't enumerate entire ne twork if we happen to get to it (in conjunction with REST_NOENTIRENETWORK)
#if (NTDDI_VERSION < NTDDI_LONGHORN)
REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094, // Disable Thumbnail for Net work files in DUI Details pane REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094, // Disable Thumbnail for Net work files in DUI Details pane
#endif
REST_NOINTERNETOPENWITH = 0x40000095, // dont allow looking on the internet for file associations REST_NOINTERNETOPENWITH = 0x40000095, // dont allow looking on the internet for file associations
REST_ALLOWLEGACYLMZBEHAVIOR = 0x4000009A, // allowable LMZ behavior fo #endif // NTDDI_WINXPSP2
r ActiveX objects changed in XPSP2, this policy gets the pre-XPSP2 behavior #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
REST_DONTRETRYBADNETNAME = 0x4000009B, // In Network Places: if pro vider returns ERROR_BAD_NET_NAME, give up REST_DONTRETRYBADNETNAME = 0x4000009B, // In Network Places: if pro vider returns ERROR_BAD_NET_NAME, give up
REST_ALLOWFILECLSIDJUNCTIONS = 0x4000009C, // re-enable legacy support for file.{guid} junctions in FileSystem Folder REST_ALLOWFILECLSIDJUNCTIONS = 0x4000009C, // re-enable legacy support for file.{guid} junctions in FileSystem Folder
REST_NOUPNPINSTALL = 0x4000009D, // disable "install UPnP" ta sk in My Net Places REST_NOUPNPINSTALL = 0x4000009D, // disable "install UPnP" ta sk in My Net Places
#endif // NTDDI_WINXPSP2
REST_ARP_DONTGROUPPATCHES = 0x400000AC, //List individual patches in
Add/Remove Programs
REST_ARP_NOCHOOSEPROGRAMSPAGE = 0x400000AD, //Choose programs page
REST_NODISCONNECT = 0x41000001, // No Disconnect option in S tart menu REST_NODISCONNECT = 0x41000001, // No Disconnect option in S tart menu
REST_NOSECURITY = 0x41000002, // No Security option in sta rt menu REST_NOSECURITY = 0x41000002, // No Security option in sta rt menu
REST_NOFILEASSOCIATE = 0x41000003, // Do not allow user to chan ge file association REST_NOFILEASSOCIATE = 0x41000003, // Do not allow user to chan ge file association
#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
REST_ALLOWCOMMENTTOGGLE = 0x41000004, // Allow the user to toggle the positions of the Comment and the Computer Name REST_ALLOWCOMMENTTOGGLE = 0x41000004, // Allow the user to toggle the positions of the Comment and the Computer Name
#if (NTDDI_VERSION < NTDDI_LONGHORN)
REST_USEDESKTOPINICACHE = 0x41000005, // Cache desktop.ini entries from network folders REST_USEDESKTOPINICACHE = 0x41000005, // Cache desktop.ini entries from network folders
#endif // NTDDI_LONGHORN
#endif // NTDDI_WINXPSP2
} RESTRICTIONS; } RESTRICTIONS;
SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValu e, DWORD grfMode); SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValu e, DWORD grfMode);
SHSTDAPI_(BOOL) SHFindFiles(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile SHSTDAPI_(BOOL) SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidl
); SaveFile);
SHSTDAPI_(void) PathGetShortPath(LPWSTR pszLongPath); SHSTDAPI_(void) PathGetShortPath(__inout_ecount(MAX_PATH) LPWSTR pszLongPath);
SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(LPWSTR pszUniqueName, LPCWSTR pszP SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(__out_ecount(MAX_PATH) LPWSTR pszU
ath, LPCWSTR pszShort, LPCWSTR pszFileSpec); niqueName, LPCWSTR pszPath, LPCWSTR pszShort, LPCWSTR pszFileSpec);
SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath); SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath);
#if (NTDDI_VERSION < NTDDI_LONGHORN)
// //
// Path processing function // Path processing function
// //
#define PPCF_ADDQUOTES 0x00000001 // return a quoted name i f required #define PPCF_ADDQUOTES 0x00000001 // return a quoted name i f required
#define PPCF_ADDARGUMENTS 0x00000003 // appends arguments (and wraps in quotes if required) #define PPCF_ADDARGUMENTS 0x00000003 // appends arguments (and wraps in quotes if required)
#define PPCF_NODIRECTORIES 0x00000010 // don't match to directo ries #define PPCF_NODIRECTORIES 0x00000010 // don't match to directo ries
#define PPCF_FORCEQUALIFY 0x00000040 // qualify even non-relat ive names #define PPCF_FORCEQUALIFY 0x00000040 // qualify even non-relat ive names
#define PPCF_LONGESTPOSSIBLE 0x00000080 // always find the longes t possible name #define PPCF_LONGESTPOSSIBLE 0x00000080 // always find the longes t possible name
SHSTDAPI_(LONG) PathProcessCommand(LPCWSTR lpSrc, LPWSTR lpDest, int iMax, DWORD dwFlags); SHSTDAPI_(LONG) PathProcessCommand(LPCWSTR lpSrc, LPWSTR lpDest, int iMax, DWORD dwFlags);
#endif
SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest); SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest);
SHSTDAPI_(BOOL) SignalFileOpen(LPCITEMIDLIST pidl); SHSTDAPI_(BOOL) SignalFileOpen(PCIDLIST_ABSOLUTE pidl);
SHSTDAPI_(LPITEMIDLIST) SHSimpleIDListFromPath(LPCWSTR pszPath); SHSTDAPI_(PIDLIST_ABSOLUTE) SHSimpleIDListFromPath(LPCWSTR pszPath);
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
SHSTDAPI AssocGetDetailsOfPropKey(__in IShellFolder *psf, __in PCUITEMID_CHILD p
idl, __in const PROPERTYKEY *pkey, __out VARIANT *pv, __out_opt BOOL *pfFoundPro
pKey);
#endif
#if (NTDDI_VERSION < NTDDI_LONGHORN)
SHSTDAPI SHLoadOLE(LPARAM lParam); SHSTDAPI SHLoadOLE(LPARAM lParam);
SHSTDAPI SHStartNetConnectionDialogA(HWND hwnd, LPCSTR pszRemoteName, DWORD dwTy #endif
pe);
SHSTDAPI SHStartNetConnectionDialogW(HWND hwnd, LPCWSTR pszRemoteName, DWORD dwT // both ANSI and UNICODE
ype); SHSTDAPI SHStartNetConnectionDialogA(HWND hwnd, __in_opt LPCSTR pszRemoteName, D
WORD dwType);
// both ANSI and UNICODE
SHSTDAPI SHStartNetConnectionDialogW(HWND hwnd, __in_opt LPCWSTR pszRemoteName,
DWORD dwType);
#ifdef UNICODE #ifdef UNICODE
#define SHStartNetConnectionDialog SHStartNetConnectionDialogW #define SHStartNetConnectionDialog SHStartNetConnectionDialogW
#else #else
#define SHStartNetConnectionDialog SHStartNetConnectionDialogA #define SHStartNetConnectionDialog SHStartNetConnectionDialogA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, SHSTDAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,
HICON *phiconLarge, HICON *phiconSmall, UINT nIconSiz e); __out_opt HICON *phiconLarge, __out_opt HICON *phicon Small, UINT nIconSize);
SHSTDAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, SHSTDAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,
HICON *phiconLarge, HICON *phiconSmall, UINT nIconSiz e); __out_opt HICON *phiconLarge, __out_opt HICON *phicon Small, UINT nIconSize);
#ifdef UNICODE #ifdef UNICODE
#define SHDefExtractIcon SHDefExtractIconW #define SHDefExtractIcon SHDefExtractIconW
#else #else
#define SHDefExtractIcon SHDefExtractIconA #define SHDefExtractIcon SHDefExtractIconA
#endif // !UNICODE #endif // !UNICODE
SHSTDAPI_(BOOL) Shell_GetImageLists(HIMAGELIST *phiml, HIMAGELIST *phimlSmall);
SHSTDAPI_(int) Shell_GetCachedImageIndex(LPCWSTR pszIconPath, int iIconIndex, U // Elevation
INT uIconFlags);
// OpenAsInfo flags
enum tagOPEN_AS_INFO_FLAGS {
OAIF_ALLOW_REGISTRATION = 0x00000001, // enable the "always use this fil
e" checkbox (NOTE if you don't pass this, it will be disabled)
OAIF_REGISTER_EXT = 0x00000002, // do the registration after the u
ser hits "ok"
OAIF_EXEC = 0x00000004, // execute file after registering
OAIF_FORCE_REGISTRATION = 0x00000008, // force the "always use this file
" checkbox to be checked (normally, you won't use the OAIF_ALLOW_REGISTRATION wh
en you pass this)
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
OAIF_HIDE_REGISTRATION = 0x00000020, // hide the "always use this file"
checkbox
OAIF_URL_PROTOCOL = 0x00000040, // the "extension" passed is actua
lly a protocol, and open with should show apps registered as capable of handling
that protocol
#endif
};
typedef int OPEN_AS_INFO_FLAGS;
#include <pshpack8.h>
typedef struct _openasinfo
{
LPCTSTR pcszFile; // [in] file name, or protocol name if
// OAIF_URL_PROTOCOL is set.
LPCTSTR pcszClass; // [in] file class description. NULL means
// use pcszFile's extension. ignored
// if OAIF_URL_PROTOCOL is set.
OPEN_AS_INFO_FLAGS oaifInFlags; // [in] input flags from OPEN_AS_INFO_FLAGS
enumeration
} OPENASINFO, * POPENASINFO;
#include <poppack.h> /* Return to byte packing */
SHSTDAPI SHOpenWithDialog(__in HWND hwndParent, __in const OPENASINFO* poainfo);
SHSTDAPI_(BOOL) Shell_GetImageLists(__out_opt HIMAGELIST *phiml, __out_opt HIMAG
ELIST *phimlSmall);
SHSTDAPI_(int) Shell_GetCachedImageIndex(LPCWSTR pwszIconPath, int iIconIndex,
UINT uIconFlags);
SHSTDAPI_(int) Shell_GetCachedImageIndexA(LPCSTR pszIconPath, int iIconIndex, U
INT uIconFlags);
SHSTDAPI_(int) Shell_GetCachedImageIndexW(LPCWSTR pszIconPath, int iIconIndex,
UINT uIconFlags);
#ifdef UNICODE
#define Shell_GetCachedImageIndex Shell_GetCachedImageIndexW
#else
#define Shell_GetCachedImageIndex Shell_GetCachedImageIndexA
#endif // !UNICODE
// //
// IDocViewSite // IDocViewSite
// //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IDocViewSite #define INTERFACE IDocViewSite
DECLARE_INTERFACE_(IDocViewSite, IUnknown) DECLARE_INTERFACE_IID_(IDocViewSite, IUnknown, "87D605E0-C511-11CF-89A9-00A0C905 4129")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE;
// *** IDocViewSite methods *** // *** IDocViewSite methods ***
STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE; STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE;
} ; } ;
#define VALIDATEUNC_NOUI 0x0002 // don't bring up UI
#define VALIDATEUNC_CONNECT 0x0001 // connect a drive letter #define VALIDATEUNC_CONNECT 0x0001 // connect a drive letter
#define VALIDATEUNC_NOUI 0x0002 // don't bring up UI
#define VALIDATEUNC_PRINT 0x0004 // validate as print share inste ad of disk share #define VALIDATEUNC_PRINT 0x0004 // validate as print share inste ad of disk share
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define VALIDATEUNC_PERSIST 0x0008 // the connection should be made
persistent
#define VALIDATEUNC_VALID 0x000F // valid flags
#else
#define VALIDATEUNC_VALID 0x0007 // valid flags #define VALIDATEUNC_VALID 0x0007 // valid flags
#endif
SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, LPWSTR pszFile, UINT fConnect); SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, __inout LPWSTR pszFile, UINT fConn ect);
#define OPENPROPS_NONE 0x0000 #define OPENPROPS_NONE 0x0000
#define OPENPROPS_INHIBITPIF 0x8000 #define OPENPROPS_INHIBITPIF 0x8000
#define GETPROPS_NONE 0x0000 #define GETPROPS_NONE 0x0000
#define SETPROPS_NONE 0x0000 #define SETPROPS_NONE 0x0000
#define CLOSEPROPS_NONE 0x0000 #define CLOSEPROPS_NONE 0x0000
#define CLOSEPROPS_DISCARD 0x0001 #define CLOSEPROPS_DISCARD 0x0001
#define PIFNAMESIZE 30 #define PIFNAMESIZE 30
#define PIFSTARTLOCSIZE 63 #define PIFSTARTLOCSIZE 63
#define PIFDEFPATHSIZE 64 #define PIFDEFPATHSIZE 64
skipping to change at line 4378 skipping to change at line 3512
WORD wIconIndex; // index of icon within file WORD wIconIndex; // index of icon within file
DWORD dwEnhModeFlags; // reserved enh-mode flags DWORD dwEnhModeFlags; // reserved enh-mode flags
DWORD dwRealModeFlags; // real-mode flags (see RMOPT_*) DWORD dwRealModeFlags; // real-mode flags (see RMOPT_*)
CHAR achOtherFile[PIFDEFFILESIZE]; // name of "other" file in directory CHAR achOtherFile[PIFDEFFILESIZE]; // name of "other" file in directory
CHAR achPIFFile[PIFMAXFILEPATH]; // name of PIF file CHAR achPIFFile[PIFMAXFILEPATH]; // name of PIF file
} PROPPRG; } PROPPRG;
typedef UNALIGNED PROPPRG *PPROPPRG; typedef UNALIGNED PROPPRG *PPROPPRG;
typedef UNALIGNED PROPPRG FAR *LPPROPPRG; typedef UNALIGNED PROPPRG FAR *LPPROPPRG;
typedef const UNALIGNED PROPPRG FAR *LPCPROPPRG; typedef const UNALIGNED PROPPRG FAR *LPCPROPPRG;
SHSTDAPI_(HANDLE) PifMgr_OpenProperties(LPCWSTR pszApp, LPCWSTR pszPIF, UINT hIn SHSTDAPI_(HANDLE) PifMgr_OpenProperties(LPCWSTR pszApp, __in_opt LPCWSTR pszPIF,
f, UINT flOpt); UINT hInf, UINT flOpt);
SHSTDAPI_(int) PifMgr_GetProperties(HANDLE hProps, LPCSTR pszGroup, void *lpP SHSTDAPI_(int) PifMgr_GetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR p
rops, int cbProps, UINT flOpt); szGroup, __out_bcount_opt(cbProps) void *lpProps, int cbProps, UINT flOpt);
SHSTDAPI_(int) PifMgr_SetProperties(HANDLE hProps, LPCSTR pszGroup, const VOI SHSTDAPI_(int) PifMgr_SetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR p
D *lpProps, int cbProps, UINT flOpt); szGroup, __in_bcount(cbProps) const void *lpProps, int cbProps, UINT flOpt);
SHSTDAPI_(HANDLE) PifMgr_CloseProperties(HANDLE hProps, UINT flOpt); SHSTDAPI_(HANDLE) PifMgr_CloseProperties(__in_opt HANDLE hProps, UINT flOpt);
SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk); SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk);
SHSTDAPI_(BOOL) IsUserAnAdmin(void); SHSTDAPI_(BOOL) IsUserAnAdmin(void);
#undef INTERFACE #undef INTERFACE
#define INTERFACE IInitializeObject #define INTERFACE IInitializeObject
DECLARE_INTERFACE_(IInitializeObject, IUnknown) DECLARE_INTERFACE_IID_(IInitializeObject, IUnknown, "4622AD16-FF23-11d0-8D34-00A 0C90F2719")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IInitializeObject methods // *** IInitializeObject methods
STDMETHOD(Initialize)(THIS) PURE; STDMETHOD(Initialize)(THIS) PURE;
}; };
enum enum
{ {
BMICON_LARGE = 0, BMICON_LARGE = 0,
BMICON_SMALL BMICON_SMALL
}; };
#undef INTERFACE #undef INTERFACE
#define INTERFACE IBanneredBar #define INTERFACE IBanneredBar
DECLARE_INTERFACE_(IBanneredBar, IUnknown) DECLARE_INTERFACE_IID_(IBanneredBar, IUnknown, "596A9A94-013E-11d1-8D34-00A0C90F 2719")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IBanneredBar methods *** // *** IBanneredBar methods ***
STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE; STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE;
STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE; STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE;
STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE; STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE;
STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE; STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE;
}; };
SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lP aram); SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lP aram);
// //
// Callback interface for the IShellFolderView // Callback interface for the IShellView object returned from SHCreateShellFolde
rView.
// //
#undef INTERFACE #undef INTERFACE
#define INTERFACE IShellFolderViewCB #define INTERFACE IShellFolderViewCB
DECLARE_INTERFACE_(IShellFolderViewCB, IUnknown) DECLARE_INTERFACE_IID_(IShellFolderViewCB, IUnknown, "2047E320-F2A9-11CE-AE65-08 002B2E1262")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellFolderViewCB methods *** // *** IShellFolderViewCB methods ***
STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
}; };
#include <pshpack8.h> #include <pshpack8.h>
#undef UNSIZED_ARRAY2
#undef EMPTY_SIZE2
#define UNSIZED_ARRAY2
#define EMPTY_SIZE2 UNSIZED_ARRAY2
#define QCMINFO_PLACE_BEFORE 0 #define QCMINFO_PLACE_BEFORE 0
#define QCMINFO_PLACE_AFTER 1 #define QCMINFO_PLACE_AFTER 1
typedef struct _QCMINFO_IDMAP_PLACEMENT typedef struct _QCMINFO_IDMAP_PLACEMENT
{ {
UINT id; UINT id;
UINT fFlags; UINT fFlags;
} QCMINFO_IDMAP_PLACEMENT; } QCMINFO_IDMAP_PLACEMENT;
typedef struct _QCMINFO_IDMAP typedef struct _QCMINFO_IDMAP
{ {
skipping to change at line 4488 skipping to change at line 3618
#define TBIF_DEFAULT 0x00000000 #define TBIF_DEFAULT 0x00000000
#define TBIF_INTERNETBAR 0x00010000 #define TBIF_INTERNETBAR 0x00010000
#define TBIF_STANDARDTOOLBAR 0x00020000 #define TBIF_STANDARDTOOLBAR 0x00020000
#define TBIF_NOTOOLBAR 0x00030000 #define TBIF_NOTOOLBAR 0x00030000
typedef struct _TBINFO typedef struct _TBINFO
{ {
UINT cbuttons; // out UINT cbuttons; // out
UINT uFlags; // out (one of TBIF_ flags) UINT uFlags; // out (one of TBIF_ flags)
} TBINFO; } TBINFO;
typedef TBINFO * LPTBINFO;
typedef struct _DETAILSINFO typedef struct _DETAILSINFO
{ {
LPCITEMIDLIST pidl; PCUITEMID_CHILD pidl;
int fmt; int fmt;
int cxChar; int cxChar;
STRRET str; STRRET str;
int iImage; int iImage;
} DETAILSINFO; } DETAILSINFO;
typedef DETAILSINFO *PDETAILSINFO;
typedef struct _SFVM_PROPPAGE_DATA typedef struct _SFVM_PROPPAGE_DATA
{ {
DWORD dwReserved; DWORD dwReserved;
LPFNADDPROPSHEETPAGE pfn; LPFNADDPROPSHEETPAGE pfn;
LPARAM lParam; LPARAM lParam;
} SFVM_PROPPAGE_DATA; } SFVM_PROPPAGE_DATA;
typedef struct _SFVM_HELPTOPIC_DATA typedef struct _SFVM_HELPTOPIC_DATA
{ {
skipping to change at line 4535 skipping to change at line 3667
#define SFVM_DEFVIEWMODE 27 // - FOLDERVIEWMODE* #define SFVM_DEFVIEWMODE 27 // - FOLDERVIEWMODE*
#define SFVM_UNMERGEMENU 28 // - hmenu #define SFVM_UNMERGEMENU 28 // - hmenu
#define SFVM_UPDATESTATUSBAR 31 // fInitialize - #define SFVM_UPDATESTATUSBAR 31 // fInitialize -
#define SFVM_BACKGROUNDENUM 32 // - - #define SFVM_BACKGROUNDENUM 32 // - -
#define SFVM_DIDDRAGDROP 36 // dwEffect IDataObject * #define SFVM_DIDDRAGDROP 36 // dwEffect IDataObject *
#define SFVM_SETISFV 39 // - IShellFolderView* #define SFVM_SETISFV 39 // - IShellFolderView*
#define SFVM_THISIDLIST 41 // - LPITMIDLIST* #define SFVM_THISIDLIST 41 // - LPITMIDLIST*
#define SFVM_ADDPROPERTYPAGES 47 // - SFVM_PROPPAGE_DATA * #define SFVM_ADDPROPERTYPAGES 47 // - SFVM_PROPPAGE_DATA *
#define SFVM_BACKGROUNDENUMDONE 48 // - - #define SFVM_BACKGROUNDENUMDONE 48 // - -
#define SFVM_GETNOTIFY 49 // LPITEMIDLIST* LONG* #define SFVM_GETNOTIFY 49 // LPITEMIDLIST* LONG*
// Note: SFVM_QUERYSTANDARDVIEWS NOT USED: must use SFVM_GETVIEWDATA instead
#define SFVM_GETSORTDEFAULTS 53 // iDirection iParamSort #define SFVM_GETSORTDEFAULTS 53 // iDirection iParamSort
#define SFVM_SIZE 57 // - - #define SFVM_SIZE 57 // - -
#define SFVM_GETZONE 58 // - DWORD* #define SFVM_GETZONE 58 // - DWORD*
#define SFVM_GETPANE 59 // Pane ID DWORD* #define SFVM_GETPANE 59 // Pane ID DWORD*
#define SFVM_GETHELPTOPIC 63 // - SFVM_HELPTOPIC_DAT A * #define SFVM_GETHELPTOPIC 63 // - SFVM_HELPTOPIC_DAT A *
#define SFVM_GETANIMATION 68 // HINSTANCE * WCHAR * #define SFVM_GETANIMATION 68 // HINSTANCE * WCHAR *
// IShellFolderView
//
// Deprecated: use IFolderView and IFolderView2 instead.
//
// IShellFolderView is supported by the IShellView object returned from SHCreate
ShellFolderView.
//
// Warnings:
// - Some methods on this interface do not follow standard COM rules.
// - Some methods can be used to configure the IShellView or cause it to behave
incorrectly.
// - Few of these methods have parameter or range validation, so callers can ca
use the IShellView to fault.
typedef struct _ITEMSPACING
{
int cxSmall;
int cySmall;
int cxLarge;
int cyLarge;
} ITEMSPACING;
// defines for IShellFolderView::SetObjectCount
#define SFVSOC_INVALIDATE_ALL 0x00000001 // Assumed to reset only what is nec
cessary...
#define SFVSOC_NOSCROLL LVSICF_NOSCROLL
// defines for IShellFolderView::SelectItems()
#define SFVS_SELECT_NONE 0x0 // unselect all
#define SFVS_SELECT_ALLITEMS 0x1 // select all
#define SFVS_SELECT_INVERT 0x2 // Inver the selection
#undef INTERFACE
#define INTERFACE IShellFolderView
DECLARE_INTERFACE_IID_(IShellFolderView, IUnknown, "37A378C0-F82D-11CE-AE65-0800
2B2E1262")
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IShellFolderView methods ***
STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE; // use IFolderView2::Se
tSortColumns
STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE; // use IFolderV
iew2::GetSortColumns
STDMETHOD(ArrangeGrid) (THIS) PURE; // select Arrange by Grid
STDMETHOD(AutoArrange) (THIS) PURE; // select Auto Arrange
STDMETHOD(GetAutoArrange) (THIS) PURE; // use IFolderView::GetAutoArrange
STDMETHOD(AddObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; // item
s added here may disappear (the data source is the final arbiter of which items
are available to the view)
STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE; // use I
FolderView::Item
STDMETHOD(RemoveObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; // i
tems removed here may reappear (the data source is the final arbiter of which it
ems are available to the view)
STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE; // use IFolderView::It
emCount
STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE; // not imp
lemented on Vista. Sends LVM_SETITEMCOUNT with WPARAM=uCount and LPARAM=dwFlags
to listview on XP.
STDMETHOD(UpdateObject) (THIS_ PUITEMID_CHILD pidlOld, PUITEMID_CHILD pidlNe
w, UINT *puItem) PURE; // swaps ITEMID_CHILDs, returning new index. Changes may
be discarded (the data source is the final arbiter of which items are available
to the view)
STDMETHOD(RefreshObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; //
tickles the listview to re-draw the item
STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE; // sends WM_SETREDRAW to the
listview
STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE; // use IFolderVie
w2::GetSelection
// NOTE: GetSelectedObjects hands out const pointers to internal ITEMID_CHIL
D structures. The caller is expected to act on them immediately (and not cache t
hem). LocalFree the array, but not the items it contains.
STDMETHOD(GetSelectedObjects) (THIS_ PCUITEMID_CHILD **pppidl, UINT *puItems
) PURE; // use IFolderView2::GetSelection.
STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE; // use IFol
derView2::IsMoveInSameFolder
STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE; // returns point correspond
ing to drag-and-drop operation
STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE; // returns point correspond
ing to drag-and-drop operation
STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE; // not implement
ed
STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE; // use
IFolderView::SelectAndPositionItems
STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE; // returns
S_OK if drag-and-drop is on the background, S_FALSE otherwise
STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE; // if bMove is TRUE, this a
ttempts to cut (edit.cut, ctrl-x) the current selection. bMove of FALSE is not
supported.
STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE; // copies points
of current selection in to data object. Call is not needed if drag operation w
as originated by the IShellView.
STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE; // use IFolder
View::GetSpacing instead. GetItemSpacing returns the spacing for small and larg
e view modes only, returning S_OK if the current view mode is is positionable, S
_FALSE otherwise.
STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB
** ppOldCB) PURE; // replace the IShellFolderViewCB that the IShellView uses
STDMETHOD(Select) ( THIS_ UINT dwFlags ) PURE; // SFVS_ select flags: selec
t all, select none, invert selection
STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE; // does nothing, re
turns S_OK.
STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE; // replaces the
IShellView's internal automation object.
} ;
// SHCreateShellFolderView struct // SHCreateShellFolderView struct
typedef struct _SFV_CREATE typedef struct _SFV_CREATE
{ {
UINT cbSize; UINT cbSize; // must be sizeof(SFV_CREATE)
IShellFolder* pshf; IShellFolder* pshf; // IShellFolder the IShellView will use
IShellView* psvOuter; IShellView* psvOuter; // optional: IShellView to pass to psfvcb
IShellFolderViewCB* psfvcb; // No callback if NULL IShellFolderViewCB* psfvcb; // No callback if NULL
} SFV_CREATE; } SFV_CREATE;
SHSTDAPI SHCreateShellFolderView(const SFV_CREATE* pcsfv, IShellView **ppsv); SHSTDAPI SHCreateShellFolderView(__in const SFV_CREATE* pcsfv, __deref_out IShel lView ** ppsv);
typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder *psf, HWND hwnd, typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder *psf, HWND hwnd,
IDataObject *pdtobj, UINT uMsg, WPA RAM wParam, LPARAM lParam); IDataObject *pdtobj, UINT uMsg, WPA RAM wParam, LPARAM lParam);
SHSTDAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, SHSTDAPI CDefFolderMenu_Create2(__in PCIDLIST_ABSOLUTE pidlFolder, __in_opt HWND
UINT cidl, LPCITEMIDLIST *apidl, hwnd,
IShellFolder *psf, LPFNDFMCALLBACK lpfn, __in_opt UINT cidl, __in_ecount_opt(cidl) PCUITE
UINT nKeys, const HKEY *ahkeyClsKeys, MID_CHILD_ARRAY apidl,
IContextMenu **ppcm); __in IShellFolder *psf, __in LPFNDFMCALLBACK pfn
,
__in UINT nKeys, __in_ecount(nKeys) const HKEY *
ahkeys,
__deref_out IContextMenu **ppcm);
typedef struct {
HWND hwnd;
IContextMenuCB *pcmcb; // optional: callback object
PCIDLIST_ABSOLUTE pidlFolder; // optional: IDList to folder of the items,
computed from psf if NULL
IShellFolder *psf; // folder of the items
UINT cidl; // # of items in apidl
PCUITEMID_CHILD_ARRAY apidl; // items operating on, used to get IDataObje
ct and IAssociationArray
IUnknown *punkAssociationInfo; // optional: IQueryAssociations, specifies w
here to load extensions from, computed from apidl if NULL
UINT cKeys; // # of items in aKeys, may be zero
const HKEY *aKeys; // optional: specifies where to load extensi
ons from
} DEFCONTEXTMENU;
SHSTDAPI_(BOOL) SHOpenPropSheetA(LPCSTR pszCaption, HKEY ahkeys[], UINT cikeys, // creates object that implements IContextMenu/IContextMenu2/IContextMenu3, typi
const CLSID * pclsidDefault, IDataObject *pdtob cally
j, // used in the implemetnation of ::GetUIObjectOf()
IShellBrowser *psb, LPCSTR pStartPage);
SHSTDAPI_(BOOL) SHOpenPropSheetW(LPCWSTR pszCaption, HKEY ahkeys[], UINT cikeys, SHSTDAPI SHCreateDefaultContextMenu(__in const DEFCONTEXTMENU *pdcm, __in REFIID
const CLSID * pclsidDefault, IDataObject *pdtob riid, __deref_out void **ppv);
j,
IShellBrowser *psb, LPCWSTR pStartPage); SHSTDAPI_(BOOL) SHOpenPropSheetA(__in_opt LPCSTR pszCaption, __in_ecount_opt(cik
eys) HKEY ahkeys[], UINT cikeys,
__in_opt const CLSID * pclsidDefault, __in IDat
aObject *pdtobj,
__in_opt IShellBrowser *psb, __in_opt LPCSTR pS
tartPage);
SHSTDAPI_(BOOL) SHOpenPropSheetW(__in_opt LPCWSTR pszCaption, __in_ecount_opt(ci
keys) HKEY ahkeys[], UINT cikeys,
__in_opt const CLSID * pclsidDefault, __in IDat
aObject *pdtobj,
__in_opt IShellBrowser *psb, __in_opt LPCWSTR p
StartPage);
#ifdef UNICODE #ifdef UNICODE
#define SHOpenPropSheet SHOpenPropSheetW #define SHOpenPropSheet SHOpenPropSheetW
#else #else
#define SHOpenPropSheet SHOpenPropSheetA #define SHOpenPropSheet SHOpenPropSheetA
#endif // !UNICODE #endif // !UNICODE
// structure for lParam of DFM_INFOKECOMMANDEX
typedef struct
{
DWORD cbSize;
DWORD fMask; // CMIC_MASK_ values for the invoke
LPARAM lParam; // same as lParam of DFM_INFOKECOMMAND
UINT idCmdFirst;
UINT idDefMax;
LPCMINVOKECOMMANDINFO pici; // the whole thing so you can re-invoke on a chi
ld
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
IUnknown *punkSite; // site pointer for context menu handler
#endif
} DFMICS, *PDFMICS;
// Note on context menus ranges:
// Standard Items // DFM_MERGECONTEXTMENU, context menu extensions, DFM_MERGECO
NTEXTMENU_TOP
// Separator
// View Items // context menu extensions can get here
// Separator
// (defcm S_FALSE "default" items, if applicable)
// Separator
// Folder Items // context menu extensions can get here
// Separator
// Bottom Items // DFM_MERGECONTEXTMENU_BOTTOM
// uMsg wParam lParam // uMsg wParam lParam
#define DFM_MERGECONTEXTMENU 1 // uFlags LPQCMINFO #define DFM_MERGECONTEXTMENU 1 // uFlags LPQCMINFO
#define DFM_INVOKECOMMAND 2 // idCmd pszArgs #define DFM_INVOKECOMMAND 2 // idCmd pszArgs
#define DFM_GETHELPTEXT 5 // idCmd,cchMax pszText -Ansi
#define DFM_WM_MEASUREITEM 6 // ---from the message---
#define DFM_WM_DRAWITEM 7 // ---from the message---
#define DFM_WM_INITMENUPOPUP 8 // ---from the message---
#define DFM_VALIDATECMD 9 // idCmd 0
#define DFM_MERGECONTEXTMENU_TOP 10 // uFlags LPQCMINFO
#define DFM_GETHELPTEXTW 11 // idCmd,cchMax pszText -Unicode
#define DFM_INVOKECOMMANDEX 12 // idCmd PDFMICS
#define DFM_MAPCOMMANDNAME 13 // idCmd * pszCommandName
#define DFM_GETDEFSTATICID 14 // idCmd * 0 #define DFM_GETDEFSTATICID 14 // idCmd * 0
#define DFM_GETVERBW 15 // idCmd,cchMax pszText -Unicode
#define DFM_GETVERBA 16 // idCmd,cchMax pszText -Ansi
#define DFM_MERGECONTEXTMENU_BOTTOM 17 // uFlags LPQCMINFO
// Commands from DFM_INVOKECOMMAND when strings are passed in // Commands from DFM_INVOKECOMMAND when strings are passed in
#define DFM_CMD_DELETE ((UINT)-1)
#define DFM_CMD_MOVE ((UINT)-2)
#define DFM_CMD_COPY ((UINT)-3)
#define DFM_CMD_LINK ((UINT)-4)
#define DFM_CMD_PROPERTIES ((UINT)-5) #define DFM_CMD_PROPERTIES ((UINT)-5)
typedef TBINFO * LPTBINFO; #define DFM_CMD_NEWFOLDER ((UINT)-6)
#define DFM_CMD_PASTE ((UINT)-7)
typedef DETAILSINFO *PDETAILSINFO; #define DFM_CMD_VIEWLIST ((UINT)-8)
#define DFM_CMD_VIEWDETAILS ((UINT)-9)
#define DFM_CMD_PASTELINK ((UINT)-10)
#define DFM_CMD_PASTESPECIAL ((UINT)-11)
#define DFM_CMD_MODALPROP ((UINT)-12)
#define DFM_CMD_RENAME ((UINT)-13)
typedef HRESULT (CALLBACK * LPFNVIEWCALLBACK)(IShellView *psvOuter, typedef HRESULT (CALLBACK * LPFNVIEWCALLBACK)(IShellView *psvOuter,
IShellFolder *psf, IShellFolder *psf,
HWND hwndMain, HWND hwndMain,
UINT uMsg, UINT uMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam); LPARAM lParam);
// SHCreateShellFolderViewEx struct // SHCreateShellFolderViewEx struct
typedef struct _CSFV typedef struct _CSFV
{ {
UINT cbSize; UINT cbSize;
IShellFolder * pshf; IShellFolder * pshf;
IShellView * psvOuter; IShellView * psvOuter;
LPCITEMIDLIST pidl; PCIDLIST_ABSOLUTE pidl;
LONG lEvents; LONG lEvents;
LPFNVIEWCALLBACK pfnCallback; // No callback if NULL LPFNVIEWCALLBACK pfnCallback; // No callback if NULL
FOLDERVIEWMODE fvm; FOLDERVIEWMODE fvm;
} CSFV, * LPCSFV; } CSFV, * LPCSFV;
// Tell the FolderView to rearrange. The lParam will be passed to // Tell the FolderView to rearrange. The lParam will be passed to
// IShellFolder::CompareIDs // IShellFolder::CompareIDs
#define SFVM_REARRANGE 0x00000001 #define SFVM_REARRANGE 0x00000001
#define ShellFolderView_ReArrange(_hwnd, _lparam) \ #define ShellFolderView_ReArrange(_hwnd, _lparam) \
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam) (BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam)
// Add an OBJECT into the view // Add an OBJECT into the view
#define SFVM_ADDOBJECT 0x00000003 #define SFVM_ADDOBJECT 0x00000003
#define ShellFolderView_AddObject(_hwnd, _pidl) \ #define ShellFolderView_AddObject(_hwnd, _pidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)_pidl) (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)(_pidl) )
// Remove an OBJECT into the view // Remove an OBJECT into the view
#define SFVM_REMOVEOBJECT 0x00000006 #define SFVM_REMOVEOBJECT 0x00000006
#define ShellFolderView_RemoveObject(_hwnd, _pidl) \ #define ShellFolderView_RemoveObject(_hwnd, _pidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)_pid l) (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)(_pi dl))
// updates an object by passing in pointer to two PIDLS, the first // updates an object by passing in pointer to two PIDLS, the first
// is the old pidl, the second one is the one with update information. // is the old pidl, the second one is the one with update information.
// //
// _ppidl[1] must be a *copy* of a pidl, as control over the lifetime // _ppidl[1] must be a *copy* of a pidl, as control over the lifetime
// of the pidl belongs to the view after successful completion of // of the pidl belongs to the view after successful completion of
// this call. (Unsuccessful completion (a -1 return) implies failure // this call. (Unsuccessful completion (a -1 return) implies failure
// and the caller must free the memory.) Win95 waits a while before // and the caller must free the memory.) Win95 waits a while before
// freeing the pidl, IE4 frees the pidl immediately. // freeing the pidl, IE4 frees the pidl immediately.
// IShellFolderView::UpdateObject does not suffer from this problem. // IShellFolderView::UpdateObject does not suffer from this problem.
// //
#define SFVM_UPDATEOBJECT 0x00000007 #define SFVM_UPDATEOBJECT 0x00000007
#define ShellFolderView_UpdateObject(_hwnd, _ppidl) \ #define ShellFolderView_UpdateObject(_hwnd, _ppidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)_ppi dl) (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)(_pp idl))
// Returns an array of the selected IDS to the caller. // Returns an array of the selected IDS to the caller.
// lparam is a pointer to receive the idlists into // lparam is a pointer to receive the idlists into
// return value is the count of items in the array. // return value is the count of items in the array.
#define SFVM_GETSELECTEDOBJECTS 0x00000009 #define SFVM_GETSELECTEDOBJECTS 0x00000009
#define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \ #define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARA M)ppidl) (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARA M)(ppidl))
typedef struct _SFV_SETITEMPOS typedef struct _SFV_SETITEMPOS
{ {
LPCITEMIDLIST pidl; PCUITEMID_CHILD pidl;
POINT pt; POINT pt;
} SFV_SETITEMPOS, *LPSFV_SETITEMPOS; } SFV_SETITEMPOS;
typedef SFV_SETITEMPOS *LPSFV_SETITEMPOS;
typedef const SFV_SETITEMPOS *PCSFV_SETITEMPOS;
// Sets the position of an item in the viewer // Sets the position of an item in the viewer
// lparam is a pointer to a SVF_SETITEMPOS // lparam is a pointer to a SVF_SETITEMPOS
// return value is unused // return value is unused
#define SFVM_SETITEMPOS 0x0000000e #define SFVM_SETITEMPOS 0x0000000e
#define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \ #define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \
{ SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \ { SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \
SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEM POS)&_sip);} SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEM POS)&_sip);}
// Notifies a ShellView when one of its objects get put on the clipboard // Notifies a ShellView when one of its objects get put on the clipboard
// as a result of a menu command. // as a result of a menu command.
// //
// //
// lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY) // lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY)
// return value is void. // return value is void.
#define SFVM_SETCLIPBOARD 0x00000010 #define SFVM_SETCLIPBOARD 0x00000010
#define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \ #define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \
(void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD )(_dwEffect)) (void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD )(_dwEffect))
#define SFVM_SETPOINTS 0x00000017 #define SFVM_SETPOINTS 0x00000017
#define ShellFolderView_SetPoints(_hwnd, _pdtobj) \ #define ShellFolderView_SetPoints(_hwnd, _pdtobj) \
(void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)_pdtobj) (void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)(_pdtobj) )
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast); SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast);
SHSTDAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, IShellView ** ppsv); SHSTDAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, __out IShellView ** ppsv);
// // Legacy PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with
// PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with // IPropertySetStorage/IPropertyStorage.
// IPropertySetStorage/IPropertyStorage
// //
// The known property ids and their variant types are: // The known property ids and their variant types are:
// PID_IS_URL [VT_LPWSTR] URL // PID_IS_URL [VT_LPWSTR] URL
// PID_IS_NAME [VT_LPWSTR] Name of the internet shortcut // PID_IS_NAME [VT_LPWSTR] Name of the internet shortcut
// PID_IS_WORKINGDIR [VT_LPWSTR] Working directory for the shortcut // PID_IS_WORKINGDIR [VT_LPWSTR] Working directory for the shortcut
// PID_IS_HOTKEY [VT_UI2] Hotkey for the shortcut // PID_IS_HOTKEY [VT_UI2] Hotkey for the shortcut
// PID_IS_SHOWCMD [VT_I4] Show command for shortcut // PID_IS_SHOWCMD [VT_I4] Show command for shortcut
// PID_IS_ICONINDEX [VT_I4] Index into file that has icon // PID_IS_ICONINDEX [VT_I4] Index into file that has icon
// PID_IS_ICONFILE [VT_LPWSTR] File that has the icon // PID_IS_ICONFILE [VT_LPWSTR] File that has the icon
// PID_IS_WHATSNEW [VT_LPWSTR] What's New text // PID_IS_WHATSNEW [VT_LPWSTR] What's New text
// PID_IS_AUTHOR [VT_LPWSTR] Author // PID_IS_AUTHOR [VT_LPWSTR] Author
// PID_IS_DESCRIPTION [VT_LPWSTR] Description text of site // PID_IS_DESCRIPTION [VT_LPWSTR] Description text of site
// PID_IS_COMMENT [VT_LPWSTR] User annotated comment // PID_IS_COMMENT [VT_LPWSTR] User annotated comment
//
#define PID_IS_URL 2 #define PID_IS_URL 2
#define PID_IS_NAME 4 #define PID_IS_NAME 4
#define PID_IS_WORKINGDIR 5 #define PID_IS_WORKINGDIR 5
#define PID_IS_HOTKEY 6 #define PID_IS_HOTKEY 6
#define PID_IS_SHOWCMD 7 #define PID_IS_SHOWCMD 7
#define PID_IS_ICONINDEX 8 #define PID_IS_ICONINDEX 8
#define PID_IS_ICONFILE 9 #define PID_IS_ICONFILE 9
#define PID_IS_WHATSNEW 10 #define PID_IS_WHATSNEW 10
#define PID_IS_AUTHOR 11 #define PID_IS_AUTHOR 11
#define PID_IS_DESCRIPTION 12 #define PID_IS_DESCRIPTION 12
#define PID_IS_COMMENT 13 #define PID_IS_COMMENT 13
//
// PROPIDs for Internet Sites (FMTID_InternetSite) to be used with // PROPIDs for Internet Sites (FMTID_InternetSite) to be used with
// IPropertySetStorage/IPropertyStorage // IPropertySetStorage/IPropertyStorage
// //
// The known property ids and their variant types are: // The known property ids and their variant types are:
// PID_INTSITE_WHATSNEW [VT_LPWSTR] What's New text // PID_INTSITE_WHATSNEW [VT_LPWSTR] What's New text
// PID_INTSITE_AUTHOR [VT_LPWSTR] Author // PID_INTSITE_AUTHOR [VT_LPWSTR] Author
// PID_INTSITE_LASTVISIT [VT_FILETIME] Time site was last visited // PID_INTSITE_LASTVISIT [VT_FILETIME] Time site was last visited
// PID_INTSITE_LASTMOD [VT_FILETIME] Time site was last modified // PID_INTSITE_LASTMOD [VT_FILETIME] Time site was last modified
// PID_INTSITE_VISITCOUNT [VT_UI4] Number of times user has visited // PID_INTSITE_VISITCOUNT [VT_UI4] Number of times user has visited
// PID_INTSITE_DESCRIPTION [VT_LPWSTR] Description text of site // PID_INTSITE_DESCRIPTION [VT_LPWSTR] Description text of site
// PID_INTSITE_COMMENT [VT_LPWSTR] User annotated comment // PID_INTSITE_COMMENT [VT_LPWSTR] User annotated comment
// PID_INTSITE_RECURSE [VT_UI4] Levels to recurse (0-3) // PID_INTSITE_RECURSE [VT_UI4] Levels to recurse (0-3)
// PID_INTSITE_WATCH [VT_UI4] PIDISM_ flags // PID_INTSITE_WATCH [VT_UI4] PIDISM_ flags
// PID_INTSITE_SUBSCRIPTION [VT_UI8] Subscription cookie // PID_INTSITE_SUBSCRIPTION [VT_UI8] Subscription cookie
// PID_INTSITE_URL [VT_LPWSTR] URL // PID_INTSITE_URL [VT_LPWSTR] URL
// PID_INTSITE_TITLE [VT_LPWSTR] Title // PID_INTSITE_TITLE [VT_LPWSTR] Title
// PID_INTSITE_CODEPAGE [VT_UI4] Codepage of the document // PID_INTSITE_CODEPAGE [VT_UI4] Codepage of the document
// PID_INTSITE_TRACKING [VT_UI4] Tracking // PID_INTSITE_TRACKING [VT_UI4] Tracking
// PID_INTSITE_ICONINDEX [VT_I4] Retrieve the index to the icon // PID_INTSITE_ICONINDEX [VT_I4] Retrieve the index to the icon
// PID_INTSITE_ICONFILE [VT_LPWSTR] Retrieve the file containing the icon index. // PID_INTSITE_ICONFILE [VT_LPWSTR] Retrieve the file containing the icon index.
// PID_INTSITE_RAWURL [VT_LPWSTR] The raw, un-encoded, unicode url.
#define PID_INTSITE_WHATSNEW 2 #define PID_INTSITE_WHATSNEW 2
#define PID_INTSITE_AUTHOR 3 #define PID_INTSITE_AUTHOR 3
#define PID_INTSITE_LASTVISIT 4 #define PID_INTSITE_LASTVISIT 4
#define PID_INTSITE_LASTMOD 5 #define PID_INTSITE_LASTMOD 5
#define PID_INTSITE_VISITCOUNT 6 #define PID_INTSITE_VISITCOUNT 6
#define PID_INTSITE_DESCRIPTION 7 #define PID_INTSITE_DESCRIPTION 7
#define PID_INTSITE_COMMENT 8 #define PID_INTSITE_COMMENT 8
#define PID_INTSITE_FLAGS 9 #define PID_INTSITE_FLAGS 9
#define PID_INTSITE_CONTENTLEN 10 #define PID_INTSITE_CONTENTLEN 10
skipping to change at line 4788 skipping to change at line 4056
UINT version; UINT version;
// new for win2k. need notUsed var to calc the right size of ie4 struct // new for win2k. need notUsed var to calc the right size of ie4 struct
// FIELD_OFFSET does not work on bit fields // FIELD_OFFSET does not work on bit fields
UINT uNotUsed; // feel free to rename and use UINT uNotUsed; // feel free to rename and use
BOOL fSepProcess: 1; BOOL fSepProcess: 1;
// new for Whistler. // new for Whistler.
BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPanel mode is ON or OFF. BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPanel mode is ON or OFF.
BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on deskto p is ON or OFF. BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on deskto p is ON or OFF.
UINT fSpareFlags : 13; // new for Longhorn
BOOL fAutoCheckSelect: 1;
BOOL fIconsOnly: 1;
BOOL fShowTypeOverlay: 1;
UINT fSpareFlags : 11;
} SHELLSTATEA, *LPSHELLSTATEA; } SHELLSTATEA, *LPSHELLSTATEA;
typedef struct { typedef struct {
BOOL fShowAllObjects : 1; BOOL fShowAllObjects : 1;
BOOL fShowExtensions : 1; BOOL fShowExtensions : 1;
BOOL fNoConfirmRecycle : 1; BOOL fNoConfirmRecycle : 1;
BOOL fShowSysFiles : 1; BOOL fShowSysFiles : 1;
BOOL fShowCompColor : 1; BOOL fShowCompColor : 1;
BOOL fDoubleClickInWebView : 1; BOOL fDoubleClickInWebView : 1;
skipping to change at line 4829 skipping to change at line 4101
int iSortDirection; int iSortDirection;
UINT version; UINT version;
// new for win2k. need notUsed var to calc the right size of ie4 struct // new for win2k. need notUsed var to calc the right size of ie4 struct
// FIELD_OFFSET does not work on bit fields // FIELD_OFFSET does not work on bit fields
UINT uNotUsed; // feel free to rename and use UINT uNotUsed; // feel free to rename and use
BOOL fSepProcess: 1; BOOL fSepProcess: 1;
// new for Whistler. // new for Whistler.
BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPage mode is O N or OFF. BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPage mode is O N or OFF.
BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on deskto p is ON or OFF. BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on deskto p is ON or OFF.
// new for Longhorn
BOOL fAutoCheckSelect: 1;
BOOL fIconsOnly: 1;
BOOL fShowTypeOverlay: 1;
// If you need a new flag, steal a bit from from fSpareFlags. // If you need a new flag, steal a bit from from fSpareFlags.
UINT fSpareFlags : 13; UINT fSpareFlags : 11;
} SHELLSTATEW, *LPSHELLSTATEW; } SHELLSTATEW, *LPSHELLSTATEW;
#define SHELLSTATEVERSION_IE4 9 #define SHELLSTATEVERSION_IE4 9
#define SHELLSTATEVERSION_WIN2K 10 #define SHELLSTATEVERSION_WIN2K 10
#ifdef UNICODE #ifdef UNICODE
#define SHELLSTATE SHELLSTATEW #define SHELLSTATE SHELLSTATEW
#define LPSHELLSTATE LPSHELLSTATEW #define LPSHELLSTATE LPSHELLSTATEW
#else #else
#define SHELLSTATE SHELLSTATEA #define SHELLSTATE SHELLSTATEA
#define LPSHELLSTATE LPSHELLSTATEA #define LPSHELLSTATE LPSHELLSTATEA
#endif #endif
#define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET(SHELLSTATE,lParamSort) #define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET(SHELLSTATE,lParamSort)
#define SHELLSTATE_SIZE_NT4 FIELD_OFFSET(SHELLSTATE,version) #define SHELLSTATE_SIZE_NT4 FIELD_OFFSET(SHELLSTATE,version)
#define SHELLSTATE_SIZE_IE4 FIELD_OFFSET(SHELLSTATE,uNotUsed) #define SHELLSTATE_SIZE_IE4 FIELD_OFFSET(SHELLSTATE,uNotUsed)
#define SHELLSTATE_SIZE_WIN2K sizeof(SHELLSTATE) #define SHELLSTATE_SIZE_WIN2K sizeof(SHELLSTATE)
SHSTDAPI_(void) SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet); SHSTDAPI_(void) SHGetSetSettings(__inout_opt LPSHELLSTATE lpss, DWORD dwMask, BO OL bSet);
// //
// SysFiles are these windows special files: // SysFiles are these windows special files:
// "dll sys vxd 386 drv" // "dll sys vxd 386 drv"
// //
// hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute // hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute
// //
// system files are files with the FILE_ATTRIBUTE_SYSTEM attribute // system files are files with the FILE_ATTRIBUTE_SYSTEM attribute
// //
// fShowAllObjects fShowSysFiles Result // fShowAllObjects fShowSysFiles Result
skipping to change at line 4884 skipping to change at line 4160
BOOL fShowSysFiles : 1; BOOL fShowSysFiles : 1;
BOOL fShowCompColor : 1; BOOL fShowCompColor : 1;
BOOL fDoubleClickInWebView : 1; BOOL fDoubleClickInWebView : 1;
BOOL fDesktopHTML : 1; BOOL fDesktopHTML : 1;
BOOL fWin95Classic : 1; BOOL fWin95Classic : 1;
BOOL fDontPrettyPath : 1; BOOL fDontPrettyPath : 1;
BOOL fShowAttribCol : 1; BOOL fShowAttribCol : 1;
BOOL fMapNetDrvBtn : 1; BOOL fMapNetDrvBtn : 1;
BOOL fShowInfoTip : 1; BOOL fShowInfoTip : 1;
BOOL fHideIcons : 1; BOOL fHideIcons : 1;
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
BOOL fAutoCheckSelect: 1;
BOOL fIconsOnly: 1;
UINT fRestFlags : 1;
#else
UINT fRestFlags : 3; UINT fRestFlags : 3;
#endif
} SHELLFLAGSTATE, *LPSHELLFLAGSTATE; } SHELLFLAGSTATE, *LPSHELLFLAGSTATE;
#define SSF_SHOWALLOBJECTS 0x00000001 #define SSF_SHOWALLOBJECTS 0x00000001
#define SSF_SHOWEXTENSIONS 0x00000002 #define SSF_SHOWEXTENSIONS 0x00000002
#define SSF_HIDDENFILEEXTS 0x00000004 #define SSF_HIDDENFILEEXTS 0x00000004
#define SSF_SERVERADMINUI 0x00000004 #define SSF_SERVERADMINUI 0x00000004
#define SSF_SHOWCOMPCOLOR 0x00000008 #define SSF_SHOWCOMPCOLOR 0x00000008
#define SSF_SORTCOLUMNS 0x00000010 #define SSF_SORTCOLUMNS 0x00000010
#define SSF_SHOWSYSFILES 0x00000020 #define SSF_SHOWSYSFILES 0x00000020
#define SSF_DOUBLECLICKINWEBVIEW 0x00000080 #define SSF_DOUBLECLICKINWEBVIEW 0x00000080
skipping to change at line 4907 skipping to change at line 4189
#define SSF_WIN95CLASSIC 0x00000400 #define SSF_WIN95CLASSIC 0x00000400
#define SSF_DONTPRETTYPATH 0x00000800 #define SSF_DONTPRETTYPATH 0x00000800
#define SSF_SHOWINFOTIP 0x00002000 #define SSF_SHOWINFOTIP 0x00002000
#define SSF_MAPNETDRVBUTTON 0x00001000 #define SSF_MAPNETDRVBUTTON 0x00001000
#define SSF_NOCONFIRMRECYCLE 0x00008000 #define SSF_NOCONFIRMRECYCLE 0x00008000
#define SSF_HIDEICONS 0x00004000 #define SSF_HIDEICONS 0x00004000
#define SSF_FILTER 0x00010000 #define SSF_FILTER 0x00010000
#define SSF_WEBVIEW 0x00020000 #define SSF_WEBVIEW 0x00020000
#define SSF_SHOWSUPERHIDDEN 0x00040000 #define SSF_SHOWSUPERHIDDEN 0x00040000
#define SSF_SEPPROCESS 0x00080000 #define SSF_SEPPROCESS 0x00080000
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define SSF_NONETCRAWLING 0x00100000 #define SSF_NONETCRAWLING 0x00100000
#define SSF_STARTPANELON 0x00200000 #define SSF_STARTPANELON 0x00200000
#define SSF_SHOWSTARTPAGE 0x00400000 #define SSF_SHOWSTARTPAGE 0x00400000
#endif // NTDDI_WINXP
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
#define SSF_AUTOCHECKSELECT 0x00800000
#define SSF_ICONSONLY 0x01000000
#define SSF_SHOWTYPEOVERLAY 0x02000000
#endif // NTDDI_LONGHORN
// SHGetSettings(LPSHELLFLAGSTATE lpss, DWORD dwMask)
// //
// Specify the bits you are interested in in dwMask and they will be // Specify the bits you are interested in in dwMask and they will be
// filled out in the lpss structure. // filled out in the lpss structure.
// //
// When these settings change, a WM_SETTINGCHANGE message is sent // When these settings change, a WM_SETTINGCHANGE message is sent
// with the string lParam value of "ShellState". // with the string lParam value of "ShellState".
// //
SHSTDAPI_(void) SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask); SHSTDAPI_(void) SHGetSettings(__out SHELLFLAGSTATE *psfs, DWORD dwMask);
// SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *pp idlLast)
// //
// Given a pidl, you can get an interface pointer (as specified by riid) of the pidl's parent folder (in ppv) // Given a pidl, you can get an interface pointer (as specified by riid) of the pidl's parent folder (in ppv)
// If ppidlLast is non-NULL, you can also get the pidl of the last item. // If ppidlLast is non-NULL, you can also get the pidl of the last item.
// //
SHSTDAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLI SHSTDAPI SHBindToParent(PCIDLIST_ABSOLUTE pidl, REFIID riid, __out void **ppv, _
ST *ppidlLast); _out_opt PCUITEMID_CHILD *ppidlLast);
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
// Same as SHBindToParent, except you also specify which root to use.
SHSTDAPI SHBindToFolderIDListParent(IShellFolder *psfRoot, PCUIDLIST_RELATIVE pi
dl, REFIID riid, __out void **ppv, __out_opt PCUITEMID_CHILD *ppidlLast);
// same as SHBindToFolderIDListParent but with a IBindCtx *pbc;
SHSTDAPI SHBindToFolderIDListParentEx(IShellFolder *psfRoot, PCUIDLIST_RELATIVE
pidl, __in_opt IBindCtx *ppbc, REFIID riid, __out void **ppv, __out_opt PCUITEMI
D_CHILD *ppidlLast);
// helper function that gets the desktop object, then calls BindToObject on that
SHSTDAPI SHBindToObject(__in_opt IShellFolder *psf, __in PCUIDLIST_RELATIVE pidl
, __in_opt IBindCtx *pbc, __in REFIID riid, __deref_out void **ppv);
#endif // NTDDI_LONGHORN
// SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppid l, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
// //
// given a string it will call psfDesktop->ParseDisplayName() to try and create a pidl // given a string it will call psfDesktop->ParseDisplayName() to try and create a pidl
// if no pbc specified, it uses the preferred options for parsing. // if no pbc specified, it uses the preferred options for parsing.
// this includes mapping file system paths to their appropriate aliased locatio n (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES)) // this includes mapping file system paths to their appropriate aliased locatio n (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES))
// psfgaoOut is optional for SFGAO attributes // psfgaoOut is optional for SFGAO attributes
// //
SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, #if (NTDDI_VERSION >= NTDDI_WINXP)
SFGAOF sfgaoIn, SFGAOF *psfgaoOut); SHSTDAPI SHParseDisplayName(PCWSTR pszName, __in_opt IBindCtx *pbc, __out PIDLIS
T_ABSOLUTE *ppidl, SFGAOF sfgaoIn, __out_opt SFGAOF *psfgaoOut);
#endif // NTDDI_WINXP
// SHPathPrepareForWrite(HWND hwnd, IUnknown *punkEnableModless, LPCTSTR pszPath , DWORD dwFlags)
// //
// DESCRIPTION: // This API will make its best effort to prepare the path for the caller. This
// This API will prepare the path for the caller. This includes: includes:
// 1. Prompting for the ejectable media to be re-inserted. (Floppy, CD-ROM, ZIP drive, etc.) // 1. Prompting for the ejectable media to be re-inserted. (Floppy, CD-ROM, ZIP drive, etc.)
// 2. Prompting for the media to be formatted. (Floppy, hard drive, etc.) // 2. Prompting for the media to be formatted. (Floppy, hard drive, etc.)
// 3. Remount mapped drives if the connection was lost. (\\unc\share mapped to N : becomes disconnected) // 3. Remount mapped drives if the connection was lost. (\\unc\share mapped to N : becomes disconnected)
// 4. If the path doesn't exist, create it. (SHPPFW_DIRCREATE and SHPPFW_ASKDIR CREATE) // 4. If the path doesn't exist, create it. (SHPPFW_DIRCREATE and SHPPFW_ASKDIR CREATE)
// 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set) // 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set)
// //
// PARAMETERS: // PARAMETERS:
// hwnd: Parernt window for UI. NULL means don't display UI. OPTIONAL // hwnd: Parernt window for UI. NULL means don't display UI. OPTIONAL
// punkEnableModless: Parent that will be set to modal during UI using IOle InPlaceActiveObject::EnableModeless(). OPTIONAL // punkEnableModless: Parent that will be set to modal during UI using IOle InPlaceActiveObject::EnableModeless(). OPTIONAL
// pszPath: Path to verify is valid for writting. This can be a UNC or fil e drive path. The path // pszPath: Path to verify is valid for writting. This can be a UNC or fil e drive path. The path
// should only contain directories. Pass SHPPFW_IGNOREFILENAME if the last path segment // should only contain directories. Pass SHPPFW_IGNOREFILENAME if the last path segment
// is always filename to ignore. // is always filename to ignore.
// dwFlags: SHPPFW_* Flags to modify behavior // dwFlags: SHPPFW_* Flags to modify behavior
//
//-------------------------------------------------------------------------
#define SHPPFW_NONE 0x00000000 #define SHPPFW_NONE 0x00000000
#define SHPPFW_DEFAULT SHPPFW_DIRCREATE // May change #define SHPPFW_DEFAULT SHPPFW_DIRCREATE // May change
#define SHPPFW_DIRCREATE 0x00000001 // Create the directory if it doesn't exist without asking the user. #define SHPPFW_DIRCREATE 0x00000001 // Create the directory if it doesn't exist without asking the user.
#define SHPPFW_ASKDIRCREATE 0x00000002 // Create the directory if it doesn't exist after asking the user. #define SHPPFW_ASKDIRCREATE 0x00000002 // Create the directory if it doesn't exist after asking the user.
#define SHPPFW_IGNOREFILENAME 0x00000004 // Ignore the last item in pszPath because it's a file. Example: pszPath="C:\DirA\DirB", only use "C:\D irA". #define SHPPFW_IGNOREFILENAME 0x00000004 // Ignore the last item in pszPath because it's a file. Example: pszPath="C:\DirA\DirB", only use "C:\D irA".
#define SHPPFW_NOWRITECHECK 0x00000008 // Caller only needs to read from the drive, so don't check if it's READ ONLY. #define SHPPFW_NOWRITECHECK 0x00000008 // Caller only needs to read from the drive, so don't check if it's READ ONLY.
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define SHPPFW_MEDIACHECKONLY 0x00000010 // do the retrys on the media (or net path), return errors if the file can't be found #define SHPPFW_MEDIACHECKONLY 0x00000010 // do the retrys on the media (or net path), return errors if the file can't be found
#endif // NTDDI_WINXP
SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR p szPath, DWORD dwFlags); SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR p szPath, DWORD dwFlags);
SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR pszPath, DWORD dwFlags); SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR pszPath, DWORD dwFlags);
#ifdef UNICODE #ifdef UNICODE
#define SHPathPrepareForWrite SHPathPrepareForWriteW #define SHPathPrepareForWrite SHPathPrepareForWriteW
#else #else
#define SHPathPrepareForWrite SHPathPrepareForWriteA #define SHPathPrepareForWrite SHPathPrepareForWriteA
#endif // !UNICODE #endif // !UNICODE
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// //
// Interface used for exposing the INI file methods on a shortcut file // Interface used for exposing the INI file methods on a shortcut file
// //
// //
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
#undef INTERFACE #undef INTERFACE
#define INTERFACE INamedPropertyBag #define INTERFACE INamedPropertyBag
DECLARE_INTERFACE_(INamedPropertyBag, IUnknown) DECLARE_INTERFACE_IID_(INamedPropertyBag, IUnknown, "FB700430-952C-11d1-946F-000 000000000")
{ {
// *** IUnknown methods *** // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** INamedPropertyBag methods *** // *** INamedPropertyBag methods ***
STDMETHOD(ReadPropertyNPB) (THIS_ /* [in] */ LPCOLESTR pszBagname, STDMETHOD(ReadPropertyNPB) (THIS_ /* [in] */ LPCWSTR pszBagname,
/* [in] */ LPCOLESTR pszPropName, /* [in] */ LPCWSTR pszPropName,
/* [out][in] */ PROPVARIANT *pVar) PURE; /* [out][in] */ PROPVARIANT *pVar) PURE;
STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname,
/* [in] */ LPCOLESTR pszPropName, /* [in] */ LPCWSTR pszPropName,
/* [in] */ PROPVARIANT *pVar) PURE; /* [in] */ PROPVARIANT *pVar) PURE;
STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname,
/* [in] */ LPCOLESTR pszPropName) PURE; /* [in] */ LPCWSTR pszPropName) PURE;
}; };
#ifdef __urlmon_h__ #ifdef __urlmon_h__
// NOTE: urlmon.h must be included before shlobj.h to access this function. // NOTE: urlmon.h must be included before shlobj.h to access this function.
// //
// SoftwareUpdateMessageBox // SoftwareUpdateMessageBox
// //
// Provides a standard message box for the alerting the user that a software // Provides a standard message box for the alerting the user that a software
// update is available or installed. No UI will be displayed if there is no // update is available or installed. No UI will be displayed if there is no
// update available or if the available update version is less than or equal // update available or if the available update version is less than or equal
skipping to change at line 5038 skipping to change at line 4340
// //
// IDIGNORE - There is no pending software update. Note: There is // IDIGNORE - There is no pending software update. Note: There is
// no Ignore button in the standard UI. This occurs if the availab le // no Ignore button in the standard UI. This occurs if the availab le
// version is less than the installed version or is not present or if the // version is less than the installed version or is not present or if the
// Advertised version is greater than or equal to the update versi on. // Advertised version is greater than or equal to the update versi on.
// //
// IDABORT - An error occured. Call GetSoftwareUpdateInfo() for a more speci fic HRESULT. // IDABORT - An error occured. Call GetSoftwareUpdateInfo() for a more speci fic HRESULT.
// Note: There is no Abort button in the standard UI. // Note: There is no Abort button in the standard UI.
SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd, SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd,
LPCWSTR szDistUnit, LPCWSTR pszDistUnit,
DWORD dwFlags, DWORD dwFlags,
LPSOFTDISTINFO psdi ); __out_opt LPSOFTDISTINFO psdi );
#endif // if __urlmon_h__ #endif // if __urlmon_h__
// SHPropStgCreate() // SHPropStgCreate()
// Wrap of IPropertySetStorage::Open/Create // Wrap of IPropertySetStorage::Open/Create
// //
// This function ensures proper handling of code page retrieval/assignment // This function ensures proper handling of code page retrieval/assignment
// for the requested property set operation. // for the requested property set operation.
// //
// psstg, // Address of IPropertySetStorage vtable // psstg, // Address of IPropertySetStorage vtable
// fmtid, // property set ID // fmtid, // property set ID
// pclsid, // class ID associated with the set. This can be NULL // pclsid, // class ID associated with the set. This can be NULL
// grfFlags, // PROPSETFLAG_xxx. All sets containing ansi bytes should be created with // grfFlags, // PROPSETFLAG_xxx. All sets containing ansi bytes should be created with
// PROPSETFLAG_ANSI, otherwise PROPSETFLAG_DEFAULT. // PROPSETFLAG_ANSI, otherwise PROPSETFLAG_DEFAULT.
// grfMode, // STGM_ flags. Must contain STGM_DIRECT|STGM_EXCLUSIVE. // grfMode, // STGM_ flags. Must contain STGM_DIRECT|STGM_EXCLUSIVE.
// dwDisposition, // OPEN_EXISTING. OPEN_ALWAYS, CREATE_NEW, or CREATE_ALWAYS // dwDisposition, // OPEN_EXISTING. OPEN_ALWAYS, CREATE_NEW, or CREATE_ALWAYS
// IPropertyStorage** ppstg, // Address to receive requested vtable // IPropertyStorage** ppstg, // Address to receive requested vtable
// puCodePage // Optional address to receive the code page ID for the set . // puCodePage // Optional address to receive the code page ID for the set .
// //
SHSTDAPI SHPropStgCreate( IPropertySetStorage* psstg, REFFMTID fmtid, CLSID* pcl sid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, OUT IPropertyStorage** ppstg, OUT OPTIONAL UINT* puCodePage ); SHSTDAPI SHPropStgCreate( IPropertySetStorage* psstg, REFFMTID fmtid, const CLSI D *pclsid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, __out IPropertySt orage** ppstg, __out_opt UINT* puCodePage );
// SHPropStgReadMultiple() // SHPropStgReadMultiple()
// IPropertyStorage::ReadMultiple wrap // IPropertyStorage::ReadMultiple wrap
// //
// The wrap ensures ANSI/UNICODE translations are handled properly for // The wrap ensures ANSI/UNICODE translations are handled properly for
// legacy property sets. // legacy property sets.
// //
// pps, // address of IPropertyStorage vtable. // pps, // address of IPropertyStorage vtable.
// uCodePage, //Code page value retrieved from SHCreatePropertySet // uCodePage, //Code page value retrieved from SHCreatePropertySet
// cpspec, //Count of properties being read // cpspec, //Count of properties being read
// rgpspec, //Array of the properties to be read // rgpspec, //Array of the properties to be read
// rgvar //Array of PROPVARIANTs containing the property values on return // rgvar //Array of PROPVARIANTs containing the property values on return
// //
SHSTDAPI SHPropStgReadMultiple( IPropertyStorage* pps, UINT uCodePage, ULONG cps pec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[] ); SHSTDAPI SHPropStgReadMultiple( IPropertyStorage* pps, UINT uCodePage, ULONG cps pec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __out_ecount_full(cpspec) PRO PVARIANT rgvar[] );
// SHPropStgWriteMultiple() // SHPropStgWriteMultiple()
// IPropertyStorage::WriteMultiple wrap // IPropertyStorage::WriteMultiple wrap
// //
// The wrap ensures ANSI/UNICODE translations are handled properly for // The wrap ensures ANSI/UNICODE translations are handled properly for
// legacy property sets. // legacy property sets.
// //
// pps, // address of IPropertyStorage vtable. // pps, // address of IPropertyStorage vtable.
// uCodePage, // code page retrieved from SHCreatePropertySet. // uCodePage, // code page retrieved from SHCreatePropertySet.
// cpspec, // The number of properties being set // cpspec, // The number of properties being set
// rgpspec, // Property specifiers // rgpspec, // Property specifiers
// rgvar, // Array of PROPVARIANT values // rgvar, // Array of PROPVARIANT values
// propidNameFirst // Minimum value for property identifiers. This value should be >= PID_FIRST_USABLE // propidNameFirst // Minimum value for property identifiers. This value should be >= PID_FIRST_USABLE
// //
SHSTDAPI SHPropStgWriteMultiple( IPropertyStorage* pps, UINT* puCodePage, ULONG cpspec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[], PROPID propidNameFirst ); SHSTDAPI SHPropStgWriteMultiple( IPropertyStorage* pps, __inout_opt UINT* puCode Page, ULONG cpspec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __inout_ecount (cpspec) PROPVARIANT rgvar[], PROPID propidNameFirst );
SHSTDAPI SHCreateFileExtractIconA(LPCSTR pszFile, DWORD dwFileAttributes, REFIID #if (NTDDI_VERSION >= NTDDI_WINXP)
riid, void **ppv); SHSTDAPI SHCreateFileExtractIconA(LPCSTR pszFile, DWORD dwFileAttributes, REFIID
SHSTDAPI SHCreateFileExtractIconW(LPCWSTR pszFile, DWORD dwFileAttributes, REFII riid, __out void **ppv);
D riid, void **ppv); SHSTDAPI SHCreateFileExtractIconW(LPCWSTR pszFile, DWORD dwFileAttributes, REFII
D riid, __out void **ppv);
#ifdef UNICODE #ifdef UNICODE
#define SHCreateFileExtractIcon SHCreateFileExtractIconW #define SHCreateFileExtractIcon SHCreateFileExtractIconW
#else #else
#define SHCreateFileExtractIcon SHCreateFileExtractIconA #define SHCreateFileExtractIcon SHCreateFileExtractIconA
#endif // !UNICODE #endif // !UNICODE
#include <pshpack8.h> #include <pshpack8.h>
#include <poppack.h> /* Return to byte packing */
SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf); SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf);
STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, __
out_opt DWORD *pdwAttributes, __out_opt UINT *pcItems);
#endif // NTDDI_WINXP
#if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) #if (NTDDI_VERSION >= NTDDI_WIN2K)
// //
// The SHMultiFileProperties API displays a property sheet for a // The SHMultiFileProperties API displays a property sheet for a
// set of files specified in an IDList Array. // set of files specified in an IDList Array.
// //
// Parameters: // Parameters:
// pdtobj - Data object containing list of files. The data // pdtobj - Data object containing list of files. The data
// object must provide the "Shell IDList Array" // object must provide the "Shell IDList Array"
// clipboard format. The parent folder's implementation of // clipboard format. The parent folder's implementation of
// IShellFolder::GetDisplayNameOf must return a fully-qualified // IShellFolder::GetDisplayNameOf must return a fully-qualified
// filesystem path for each item in response to the // filesystem path for each item in response to the
// SHGDN_FORPARSING flag. // SHGDN_FORPARSING flag.
// //
// dwFlags - Reserved for future use. Should be set to 0. // dwFlags - Reserved for future use. Should be set to 0.
// //
// Returns: // Returns:
// S_OK // S_OK
// //
SHSTDAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD dwFlags); SHSTDAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD dwFlags);
#endif #endif // NTDDI_WIN2K
#if (_WIN32_IE >= 0x0600)
//
//
typedef void (CALLBACK *PFNASYNCICONTASKBALLBACK)(LPCITEMIDLIST pidl, LPVOID pvD
ata, LPVOID pvHint, INT iIconIndex, INT iOpenIconIndex);
// HRESULT SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFold
er *psf, LPCITEMIDLIST pidl, UINT flags,
// PFNASYNCICONTASKBALLBACK pfn, LPVO
ID pvData, LPVOID pvHint, int *piIndex, int *piIndexSel);
// A usefull function for asynchronously mapping idlist into index into system
// image list. Optionally it can also look up the index of the selected icon.
// pts Task scheduler interface to use to create the background task
// psf Shell folder relating to the pidl
// pidl Item whose icon is requested
// flags GIL_ flags
// pfn Function called back when the background task is done
// pvData User data passed back in the (*pfn) callback
// pvHint User data passed back in the (*pfn) callback
// piIndex Icon index returned. This is the temporary index if the function
returns E_PENDING. The final index will be provided thru the callback
// piIndexSel Optional icon index for the open icon case (GIL_OPENICON).
//
// Returns S_OK if all the requested info was available. E_PENDING means that yo
u get temporary icons, and will be called back
// asynchronously with the final icons. Other failure code means th
e function failed.
SHSTDAPI SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFolder
*psf, LPCITEMIDLIST pidl, UINT flags,
PFNASYNCICONTASKBALLBACK pfn, LPVOID
pvData, LPVOID pvHint, int *piIndex, int *piIndexSel);
#endif // (_WIN32_IE >= 0x0600)
// A usefull function in Defview for mapping idlist into index into system // A usefull function in Defview for mapping idlist into index into system
// image list. Optionally it can also look up the index of the selected // image list. Optionally it can also look up the index of the selected
// icon. // icon.
SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, LPCITEMIDLIST pidl, int *piIndexSel); SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, PCUITEMID_CHI LD pidl, __out_opt int *piIndexSel);
STDAPI SHCLSIDFromString(PCWSTR lpsz, CLSID *pclsid); SHSTDAPI SHCLSIDFromString(LPCWSTR psz, __out CLSID *pclsid);
STDAPI SHFlushClipboard(void); SHSTDAPI SHCreateQueryCancelAutoPlayMoniker(__out IMoniker** ppmoniker); // d
STDAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker** ppmoniker); eprecated: use CreateClassMoniker(CLSID_YourOwnClsid, ...)
HINSTANCE WINAPI SHGetShellStyleHInstance(void);
STDAPI_(void) PerUserInit(void); STDAPI_(void) PerUserInit(void);
WINSHELLAPI BOOL WINAPI SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgP arent); SHSTDAPI_(BOOL)SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgParent);
WINSHELLAPI int WINAPI PickIconDlg(HWND hwnd, LPWSTR pszIconPath, UINT cbIconP SHSTDAPI_(int) PickIconDlg(HWND hwnd, __inout_ecount(cchIconPath) LPWSTR pszIcon
ath, int *piIconIndex); Path, UINT cchIconPath, __inout_opt int *piIconIndex);
#include <pshpack8.h>
typedef struct tagAAMENUFILENAME typedef struct tagAAMENUFILENAME
{ {
SHORT cbTotal; SHORT cbTotal;
BYTE rgbReserved[12]; BYTE rgbReserved[12];
WCHAR szFileName[1]; // variable length string WCHAR szFileName[1]; // variable length string
} AASHELLMENUFILENAME, *LPAASHELLMENUFILENAME; } AASHELLMENUFILENAME, *LPAASHELLMENUFILENAME;
typedef struct tagAASHELLMENUITEM typedef struct tagAASHELLMENUITEM
{ {
void* lpReserved1; void* lpReserved1;
int iReserved; int iReserved;
UINT uiReserved; UINT uiReserved;
LPAASHELLMENUFILENAME lpName; // name of file LPAASHELLMENUFILENAME lpName; // name of file
LPWSTR psz; // text to use if no file LPWSTR psz; // text to use if no file
} AASHELLMENUITEM, *LPAASHELLMENUITEM; } AASHELLMENUITEM, *LPAASHELLMENUITEM;
STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, DW
ORD *pdwAttributes, UINT *pcItems);
#include <poppack.h> /* Return to byte packing */ #include <poppack.h> /* Return to byte packing */
#ifdef __cplusplus #if (_WIN32_IE >= _WIN32_IE_IE70)
} typedef enum tagIESHORTCUTFLAGS
{
#endif /* __cplusplus */ IESHORTCUT_NEWBROWSER = 0x01,
IESHORTCUT_OPENNEWTAB = 0x02,
IESHORTCUT_FORCENAVIGATE = 0x04,
IESHORTCUT_BACKGROUNDTAB = 0x08,
} IESHORTCUTFLAGS;
#endif // _WIN32_IE_IE70
#include <poppack.h> #if (_WIN32_IE >= _WIN32_IE_XP)
SHDOCAPI_(BOOL) ImportPrivacySettings( LPCWSTR szFilename, SHDOCAPI_(BOOL) ImportPrivacySettings(LPCWSTR pszFilename, __inout BOOL* pfParse
IN OUT BOOL* pfParsePrivacyPreferences, IN OUT BOOL* PrivacyPreferences, __inout BOOL* pfParsePerSiteRules);
pfParsePerSiteRules);
#ifndef IEnumPrivacyRecords #ifndef IEnumPrivacyRecords
typedef interface IEnumPrivacyRecords IEnumPrivacyRecords; typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
#endif #endif
SHDOCAPI DoPrivacyDlg( HWND hwndParent, LPOLESTR pszUrl, IEnumPrivacyRecords *pP SHDOCAPI DoPrivacyDlg(HWND hwndOwner, __in LPWSTR pszUrl, __in IEnumPrivacyRecor
rivacyEnum, BOOL fReportAllSites); ds *pPrivacyEnum, BOOL fReportAllSites);
#endif // _WIN32_IE_XP
#include <poppack.h>
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // _SHLOBJ_H_ #endif // _SHLOBJ_H_
 End of changes. 377 change blocks. 
1943 lines changed or deleted 1335 lines changed or added

This html diff was produced by rfcdiff 1.41.