Created
December 22, 2015 16:28
-
-
Save beatcracker/4b154d46cc26776b50e7 to your computer and use it in GitHub Desktop.
ShlObj.h from Win10 SDK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*=========================================================================== | |
Copyright (c) Microsoft Corporation. All rights reserved. | |
File: shlobj.h | |
===========================================================================*/ | |
#ifndef _SHLOBJ_H_ | |
#define _SHLOBJ_H_ | |
#if (_MSC_VER >= 800) | |
#if (_MSC_VER >= 1200) | |
#pragma warning(push) | |
#endif | |
#pragma warning(disable:4001) /* nonstandard extension : single line comment */ | |
#endif | |
#ifndef SNDMSG | |
#ifdef __cplusplus | |
#define SNDMSG ::SendMessage | |
#else | |
#define SNDMSG SendMessage | |
#endif | |
#endif // ifndef SNDMSG | |
// | |
// Define API decoration for direct importing of DLL references. | |
// | |
#ifndef WINSHELLAPI | |
#if defined(_SHELL32_) | |
#define WINSHELLAPI | |
#else | |
#define WINSHELLAPI DECLSPEC_IMPORT | |
#endif | |
#endif // WINSHELLAPI | |
#ifndef SHSTDAPI | |
#if defined(_SHELL32_) | |
#define SHSTDAPI STDAPI | |
#define SHSTDAPI_(type) STDAPI_(type) | |
#else | |
#define SHSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE | |
#define SHSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE | |
#endif | |
#endif // SHSTDAPI | |
#ifndef SHDOCAPI | |
#if defined(_SHDOCVW_) | |
#define SHDOCAPI STDAPI | |
#define SHDOCAPI_(type) STDAPI_(type) | |
#else | |
#define SHDOCAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE | |
#define SHDOCAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE | |
#endif | |
#endif // SHDOCAPI | |
// shell32 APIs that are also exported from shdocvw | |
#ifndef SHSTDDOCAPI | |
#if defined(_SHDOCVW_) || defined(_SHELL32_) | |
#define SHSTDDOCAPI STDAPI | |
#define SHSTDDOCAPI_(type) STDAPI_(type) | |
#else | |
#define SHSTDDOCAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE | |
#define SHSTDDOCAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE | |
#endif | |
#endif // SHSTDDOCAPI | |
#ifndef BROWSEUIAPI | |
#if defined(_BROWSEUI_) | |
#define BROWSEUIAPI STDAPI | |
#define BROWSEUIAPI_(type) STDAPI_(type) | |
#else | |
#define BROWSEUIAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE | |
#define BROWSEUIAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE | |
#endif // defined(_BROWSEUI_) | |
#endif // BROWSEUIAPI | |
// shell32 APIs that are also exported from shfolder | |
#ifndef SHFOLDERAPI | |
#if defined(_SHFOLDER_) || defined(_SHELL32_) | |
#define SHFOLDERAPI STDAPI | |
#else | |
#define SHFOLDERAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE | |
#endif | |
#endif | |
#include <ole2.h> | |
#ifndef _PRSHT_H_ | |
#include <prsht.h> | |
#endif | |
#ifndef _INC_COMMCTRL | |
#include <commctrl.h> // for LPTBBUTTON | |
#endif | |
#ifndef INITGUID | |
#include <shlguid.h> | |
#endif /* !INITGUID */ | |
#include <shtypes.h> | |
#include <shobjidl.h> | |
#if defined(_MSC_VER) && (_MSC_VER >= 1200) | |
#pragma once | |
#endif | |
#ifdef __cplusplus | |
extern "C" { /* Assume C declarations for C++ */ | |
#endif /* __cplusplus */ | |
#include <pshpack1.h> /* Assume byte packing throughout */ | |
//=========================================================================== | |
// | |
// Legacy exports that are no longer needed, call the COM API instead | |
// | |
//=========================================================================== | |
SHSTDAPI SHGetMalloc(__out IMalloc **ppMalloc); // CoGetMalloc(MEMCTX_TASK,ppMalloc) | |
SHSTDAPI_(void *) SHAlloc(SIZE_T cb); // CoTaskMemAlloc(cb) | |
SHSTDAPI_(void) SHFree(__in_opt void * pv); // CoTaskMemFree(pv) | |
//=========================================================================== | |
// | |
// IExtractIcon interface | |
// | |
// This interface is used in two different places in the shell. | |
// | |
// 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 | |
// sub-folders from each shell folders. When the user expands a folder | |
// in the scope pane of the explorer, the explorer does following: | |
// (1) binds to the folder (gets IShellFolder), | |
// (2) enumerates its sub-folders by calling its EnumObjects member, | |
// (3) calls its GetUIObjectOf member to get IExtractIcon interface | |
// for each sub-folders. | |
// In this case, the explorer uses only IExtractIcon::GetIconLocation | |
// member to get the location of the appropriate icon. An icon location | |
// always consists of a file name (typically DLL or EXE) and either an icon | |
// resource or an icon index. | |
// | |
// | |
// Case-2: Extracting an icon image from a file | |
// | |
// 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, | |
// it does following: | |
// (1) creates the icon extraction handler object (by getting its CLSID | |
// under the {ProgID}\shell\ExtractIconHanler key and calling | |
// CoCreateInstance requesting for IExtractIcon interface). | |
// (2) Calls IExtractIcon::GetIconLocation. | |
// (3) Then, calls IExtractIcon::ExtractIcon with the location/index pair. | |
// (4) If (3) returns S_OK, it uses the returned icon. | |
// (5) Otherwise, it recursively calls this logic with new location | |
// assuming that the location string contains a fully qualified path name. | |
// | |
// From extension programmer's point of view, there are only two cases | |
// where they provide implementations of IExtractIcon: | |
// Case-1) providing explorer extensions (i.e., IShellFolder). | |
// Case-2) providing per-instance icons for some types of files. | |
// | |
// Because Case-1 is described above, we'll explain only Case-2 here. | |
// | |
// When the shell is about display an icon for a file, it does following: | |
// (1) Finds its ProgID and ClassID. | |
// (2) If the file has a ClassID, it gets the icon location string from the | |
// "DefaultIcon" key under it. The string indicates either per-class | |
// icon (e.g., "FOOBAR.DLL,2") or per-instance icon (e.g., "%1,1"). | |
// (3) If a per-instance icon is specified, the shell creates an icon | |
// extraction handler object for it, and extracts the icon from it | |
// (which is described above). | |
// | |
// It is important to note that the shell calls IExtractIcon::GetIconLocation | |
// first, then calls IExtractIcon::Extract. Most application programs | |
// that support per-instance icons will probably store an icon location | |
// (DLL/EXE name and index/id) rather than an icon image in each file. | |
// In those cases, a programmer needs to implement only the GetIconLocation | |
// member and it Extract member simply returns S_FALSE. They need to | |
// implement Extract member only if they decided to store the icon images | |
// within files themselved or some other database (which is very rare). | |
// | |
// | |
// | |
// [Member functions] | |
// | |
// | |
// IExtractIcon::GetIconLocation | |
// | |
// This function returns an icon location. | |
// | |
// Parameters: | |
// uFlags [in] -- Specifies if it is opened or not (GIL_OPENICON or 0) | |
// szIconFile [out] -- Specifies the string buffer buffer for a location name. | |
// cchMax [in] -- Specifies the size of szIconFile (almost always MAX_PATH) | |
// piIndex [out] -- Sepcifies the address of UINT for the index. | |
// pwFlags [out] -- Returns GIL_* flags | |
// Returns: | |
// S_OK, if it returns a valid location; S_FALSE, if the shell use a | |
// default icon. | |
// | |
// 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 | |
// S_FALSE. | |
// | |
// if the returned location is not a path to a file, GIL_NOTFILENAME should | |
// be set in the returned flags. | |
// | |
// IExtractIcon::Extract | |
// | |
// This function extracts an icon image from a specified file. | |
// | |
// Parameters: | |
// pszFile [in] -- Specifies the icon location (typically a path to a file). | |
// nIconIndex [in] -- Specifies the icon index. | |
// phiconLarge [out] -- Specifies the HICON variable for large icon. | |
// phiconSmall [out] -- Specifies the HICON variable for small icon. | |
// nIconSize [in] -- Specifies the size icon required (size of large icon) | |
// LOWORD is the requested large icon size | |
// HIWORD is the requested small icon size | |
// Returns: | |
// S_OK, if it extracted the from the file. | |
// S_FALSE, if the caller should extract from the file specified in the | |
// location. | |
// | |
//=========================================================================== | |
// GetIconLocation() input flags | |
#define GIL_OPENICON 0x0001 // allows containers to specify an "open" look | |
#define GIL_FORSHELL 0x0002 // icon is to be displayed in a ShellFolder | |
#define GIL_ASYNC 0x0020 // this is an async extract, return E_PENDING | |
#define GIL_DEFAULTICON 0x0040 // get the default icon location if 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_FORCENOSHIELD, don't block if GIL_ASYNC is set | |
// GetIconLocation() return flags | |
#define GIL_SIMULATEDOC 0x0001 // simulate this document icon for this | |
#define GIL_PERINSTANCE 0x0002 // icons from this class are per instance (each file has its own) | |
#define GIL_PERCLASS 0x0004 // icons from this class per class (shared for all files of this type) | |
#define GIL_NOTFILENAME 0x0008 // location is not a filename, must call ::ExtractIcon | |
#define GIL_DONTCACHE 0x0010 // this icon should not be cached | |
#define GIL_SHIELD 0x0200 // icon should be "stamped" with the LUA shield | |
#define GIL_FORCENOSHIELD 0x0400 // icon must *not* be "stamped" with the LUA shield | |
#undef INTERFACE | |
#define INTERFACE IExtractIconA | |
DECLARE_INTERFACE_IID_(IExtractIconA, IUnknown, "000214eb-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IExtractIcon methods *** | |
STDMETHOD(GetIconLocation)(THIS_ | |
UINT uFlags, | |
__out_ecount(cchMax) LPSTR szIconFile, | |
UINT cchMax, | |
__out int * piIndex, | |
__out UINT * pwFlags) PURE; | |
STDMETHOD(Extract)(THIS_ | |
LPCSTR pszFile, | |
UINT nIconIndex, | |
__out_opt HICON *phiconLarge, | |
__out_opt HICON *phiconSmall, | |
UINT nIconSize) PURE; | |
}; | |
typedef IExtractIconA * LPEXTRACTICONA; | |
#undef INTERFACE | |
#define INTERFACE IExtractIconW | |
DECLARE_INTERFACE_IID_(IExtractIconW, IUnknown, "000214fa-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IExtractIcon methods *** | |
STDMETHOD(GetIconLocation)(THIS_ | |
UINT uFlags, | |
__out_ecount(cchMax) LPWSTR pszIconFile, | |
UINT cchMax, | |
__out int * piIndex, | |
__out UINT * pwFlags) PURE; | |
STDMETHOD(Extract)(THIS_ | |
LPCWSTR pszFile, | |
UINT nIconIndex, | |
__out_opt HICON *phiconLarge, | |
__out_opt HICON *phiconSmall, | |
UINT nIconSize) PURE; | |
}; | |
typedef IExtractIconW * LPEXTRACTICONW; | |
#ifdef UNICODE | |
#define IExtractIcon IExtractIconW | |
#define IExtractIconVtbl IExtractIconWVtbl | |
#define LPEXTRACTICON LPEXTRACTICONW | |
#else | |
#define IExtractIcon IExtractIconA | |
#define IExtractIconVtbl IExtractIconAVtbl | |
#define LPEXTRACTICON LPEXTRACTICONA | |
#endif | |
//=========================================================================== | |
// | |
// IShellIconOverlayIdentifier | |
// | |
// Used to identify a file as a member of the group of files that have this specific | |
// icon overlay | |
// | |
// Users can create new IconOverlayIdentifiers and place them in the following registry | |
// location together with the Icon overlay image and their priority. | |
// HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\ShellIconOverlayIdentifiers" | |
// | |
// The shell will enumerate through all IconOverlayIdentifiers at start, and prioritize | |
// them according to internal rules, in case the internal rules don't apply, we use their | |
// input priority | |
// | |
// IShellIconOverlayIdentifier:IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib) | |
// pwszPath full path of the file | |
// dwAttrib attribute of this file | |
// | |
// returns: | |
// S_OK, if the file is a member | |
// S_FALSE, if the file is not a member | |
// E_FAIL, if the operation failed due to bad WIN32_FIND_DATA | |
// | |
// IShellIconOverlayIdentifier::GetOverlayInfo(LPWSTR pwszIconFile, int * pIndex, DWORD * dwFlags) PURE; | |
// pszIconFile the path of the icon file | |
// pIndex Depend on the flags, this could contain the IconIndex | |
// dwFlags defined below | |
// | |
// IShellIconOverlayIdentifier::GetPriority(int * pIPriority) PURE; | |
// pIPriority the priority of this Overlay Identifier | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IShellIconOverlayIdentifier | |
DECLARE_INTERFACE_IID_(IShellIconOverlayIdentifier, IUnknown, "0c6c4200-c589-11d0-999a-00c04fd655e1") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellIconOverlayIdentifier methods *** | |
STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE; | |
STDMETHOD (GetOverlayInfo)(THIS_ __out_ecount(cchMax) LPWSTR pwszIconFile, int cchMax, __out int * pIndex, __out DWORD * pdwFlags) PURE; | |
STDMETHOD (GetPriority)(THIS_ __out int * pIPriority) PURE; | |
}; | |
#define ISIOI_ICONFILE 0x00000001 // path is returned through pwszIconFile | |
#define ISIOI_ICONINDEX 0x00000002 // icon index in pwszIconFile is returned through pIndex | |
//=========================================================================== | |
// | |
// IShellIconOverlayManager | |
// | |
// Used to return the icon overlay information including OverlayIndex, Image Index or Priority for an IShellFolder object. | |
// | |
// IShellIconOverlayManager:GetFileOverlayInfo(LPCWSTR pwszPath, DWORD dwAttrib, int * pIndex, DWORD dwflags) | |
// pwszPath full path of the file | |
// dwAttrib attribute of this file | |
// pIndex pointer to the Icon Index in the system image list | |
// pOverlayIndex pointer to the OverlayIndex in the system image list | |
// pPriority pointer to the Priority of this overlay | |
// IShellIconOverlayManager:GetReservedOverlayInfo(LPCWSTR pwszPath, DWORD dwAttrib, int * pIndex, DWORD dwflags, int iReservedID) | |
// iReservedID reserved icon overlay id | |
// returns: | |
// S_OK, if the index of an Overlay is found | |
// S_FALSE, if no Overlay exists for this file | |
// E_FAIL, if lpfd is bad | |
// IShellIconOverlayManager:RefreshOverlayImages(DWORD dwFlags) | |
// This will refresh the overlay cache, depends on the dwFlags passed in | |
// It will reload the icons into the imagelist, when passed SIOM_ICONINDEX | |
// IShellIconOverlayManager::LoadNonloadedOverlayIdentifiers() | |
// This method loads any registered overlay identifiers (handlers) that | |
// are not currently loaded. | |
// IShellIconOverlayManager::OverlayIndexFromImageIndex(int iImage, int *piIndex, BOOL fAdd) | |
// iImage existing shell image list index to look for | |
// piIndex returned overlay index | |
// fAdd Add image if not already present? | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IShellIconOverlayManager | |
DECLARE_INTERFACE_IID_(IShellIconOverlayManager, IUnknown, "f10b5e34-dd3b-42a7-aa7d-2f4ec54bb09b") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellIconOverlayManager methods *** | |
STDMETHOD(GetFileOverlayInfo)(THIS_ __in LPCWSTR pwszPath, DWORD dwAttrib, __out int * pIndex, DWORD dwflags) PURE; | |
STDMETHOD(GetReservedOverlayInfo)(THIS_ __in_opt LPCWSTR pwszPath, DWORD dwAttrib, __out int * pIndex, DWORD dwflags, int iReservedID) PURE; | |
STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE; | |
STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE; | |
STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, __out int * piIndex, BOOL fAdd) PURE; | |
}; | |
#define SIOM_OVERLAYINDEX 1 | |
#define SIOM_ICONINDEX 2 | |
// #define SIOM_PRIORITY 3 | |
#define SIOM_RESERVED_SHARED 0 | |
#define SIOM_RESERVED_LINK 1 | |
#define SIOM_RESERVED_SLOWFILE 2 | |
#define SIOM_RESERVED_DEFAULT 3 | |
//=========================================================================== | |
// | |
// IShellIconOverlay | |
// | |
// Used to return the icon overlay index or its icon index for an IShellFolder object, | |
// this is always implemented with IShellFolder | |
// | |
// IShellIconOverlay:GetOverlayIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex) | |
// pidl object to identify icon overlay for. | |
// pdwIndex the Overlay Index in the system image list | |
// | |
// IShellIconOverlay:GetOverlayIconIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex) | |
// pdwIconIndex the Overlay Icon index in the system image list | |
// This method is only used for those who are interested in seeing the real bits | |
// of the Overlay Icon | |
// | |
// returns: | |
// S_OK, if the index of an Overlay is found | |
// S_FALSE, if no Overlay exists for this file | |
// E_FAIL, if pidl is bad | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IShellIconOverlay | |
DECLARE_INTERFACE_IID_(IShellIconOverlay, IUnknown, "7d688a70-c613-11d0-999b-00c04fd655e1") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellIconOverlay methods *** | |
STDMETHOD(GetOverlayIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIndex) PURE; | |
STDMETHOD(GetOverlayIconIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIconIndex) PURE; | |
}; | |
#define OI_DEFAULT 0x00000000 | |
#define OI_ASYNC 0xFFFFEEEE | |
//------------------------------------------------------------------------- | |
// | |
// SHGetIconOverlayIndex | |
// | |
// This function takes the path and icon/res id to the icon and convert it into | |
// an overlay index in the system image list. | |
// Note: there are totally only 15 slots for system image overlays, some of which | |
// was reserved by the system, or taken by the overlayidentifiers, so it's possible | |
// that this function would fail and return -1; | |
// | |
// To get the default overlays in the system, such as the share hand, link shortcut | |
// and slow files, pass NULL as the file name, then the IDO_SHGIOI_* flags as the icon index | |
//------------------------------------------------------------------------- | |
#define IDO_SHGIOI_SHARE 0x0FFFFFFF | |
#define IDO_SHGIOI_LINK 0x0FFFFFFE | |
#define IDO_SHGIOI_SLOWFILE 0x0FFFFFFFD | |
#define IDO_SHGIOI_DEFAULT 0x0FFFFFFFC | |
SHSTDAPI_(int) SHGetIconOverlayIndexA(LPCSTR pszIconPath, int iIconIndex); | |
SHSTDAPI_(int) SHGetIconOverlayIndexW(LPCWSTR pszIconPath, int iIconIndex); | |
#ifdef UNICODE | |
#define SHGetIconOverlayIndex SHGetIconOverlayIndexW | |
#else | |
#define SHGetIconOverlayIndex SHGetIconOverlayIndexA | |
#endif // !UNICODE | |
#if (_WIN32_IE >= 0x0400) | |
// IShellLinkDataList::GetFlags()/SetFlags() | |
typedef enum { | |
SLDF_DEFAULT = 0x00000000, | |
SLDF_HAS_ID_LIST = 0x00000001, // Shell link saved with ID list | |
SLDF_HAS_LINK_INFO = 0x00000002, // Shell link saved with LinkInfo | |
SLDF_HAS_NAME = 0x00000004, | |
SLDF_HAS_RELPATH = 0x00000008, | |
SLDF_HAS_WORKINGDIR = 0x00000010, | |
SLDF_HAS_ARGS = 0x00000020, | |
SLDF_HAS_ICONLOCATION = 0x00000040, | |
SLDF_UNICODE = 0x00000080, // the strings are unicode | |
SLDF_FORCE_NO_LINKINFO = 0x00000100, // disable LINKINFO tracking information (used to track network drives and compute UNC paths if one exists) | |
SLDF_HAS_EXP_SZ = 0x00000200, // the link contains expandable env strings | |
SLDF_RUN_IN_SEPARATE = 0x00000400, // Run the 16-bit target exe in a separate VDM/WOW | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
SLDF_HAS_LOGO3ID = 0x00000800, // not used anymore | |
#endif | |
SLDF_HAS_DARWINID = 0x00001000, // MSI (Darwin) link that can be installed on demand | |
SLDF_RUNAS_USER = 0x00002000, // Run target as a different user | |
SLDF_HAS_EXP_ICON_SZ = 0x00004000, // contains expandable env string for icon path | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SLDF_NO_PIDL_ALIAS = 0x00008000, // disable IDList 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 target of this link with shim layer active | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SLDF_FORCE_NO_LINKTRACK = 0x00040000, // disable ObjectID tracking information | |
SLDF_ENABLE_TARGET_METADATA = 0x00080000, // enable caching of target metadata into link | |
SLDF_DISABLE_LINK_PATH_TRACKING = 0x00100000, // disable EXP_SZ_LINK_SIG tracking | |
SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000, // disable KnownFolder tracking information (EXP_KNOWN_FOLDER) | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
SLDF_NO_KF_ALIAS = 0x00400000, // disable Known Folder alias mapping when loading the IDList during deserialization | |
SLDF_ALLOW_LINK_TO_LINK = 0x00800000, // allows this link to point to another shell link - must only be used when it is not possible to create cycles | |
SLDF_UNALIAS_ON_SAVE = 0x01000000, // unalias the IDList when saving | |
SLDF_PREFER_ENVIRONMENT_PATH = 0x02000000, // the IDList is not persisted, instead it is recalculated from the path with environmental variables at load time | |
// we don't hit the disk to recalculate the IDList (the result is a simple IDList). also Resolve does nothing | |
// if SetPath is called and the path does not have environmental variable in it, SLDF_PREFER_ENVIRONMENT_PATH is removed | |
SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET = 0x04000000, // if target is a UNC location on a local machine, keep the local target in addition to the remote one | |
SLDF_VALID = 0x07FFF7FF, // bits that are valid for ::SetFlags() | |
#else | |
SLDF_VALID = 0x003FF7FF, // bits that are valid for ::SetFlags() | |
#endif | |
#endif | |
SLDF_RESERVED = (int) 0x80000000, // Reserved-- so we can use the low word as an index value in the future | |
#endif | |
} SHELL_LINK_DATA_FLAGS; | |
DEFINE_ENUM_FLAG_OPERATORS(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/union */ | |
#endif | |
typedef struct tagDATABLOCKHEADER | |
{ | |
DWORD cbSize; // Size of this extra data block | |
DWORD dwSignature; // signature of this extra data block | |
} DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; | |
#ifdef LF_FACESIZE | |
typedef struct { | |
#ifdef __cplusplus | |
DATABLOCK_HEADER dbh; | |
#else | |
DATABLOCK_HEADER DUMMYSTRUCTNAME; | |
#endif | |
WORD wFillAttribute; // fill attribute for console | |
WORD wPopupFillAttribute; // fill attribute for console popups | |
COORD dwScreenBufferSize; // screen buffer size for console | |
COORD dwWindowSize; // window size for console | |
COORD dwWindowOrigin; // window origin for console | |
DWORD nFont; | |
DWORD nInputBufferSize; | |
COORD dwFontSize; | |
UINT uFontFamily; | |
UINT uFontWeight; | |
WCHAR FaceName[LF_FACESIZE]; | |
UINT uCursorSize; | |
BOOL bFullScreen; | |
BOOL bQuickEdit; | |
BOOL bInsertMode; | |
BOOL bAutoPosition; | |
UINT uHistoryBufferSize; | |
UINT uNumberOfHistoryBuffers; | |
BOOL bHistoryNoDup; | |
COLORREF ColorTable[ 16 ]; | |
} NT_CONSOLE_PROPS, *LPNT_CONSOLE_PROPS; | |
#define NT_CONSOLE_PROPS_SIG 0xA0000002 | |
#endif // LF_FACESIZE | |
// This is a FE Console property | |
typedef struct { | |
#ifdef __cplusplus | |
DATABLOCK_HEADER dbh; | |
#else | |
DATABLOCK_HEADER DUMMYSTRUCTNAME; | |
#endif | |
UINT uCodePage; | |
} NT_FE_CONSOLE_PROPS, *LPNT_FE_CONSOLE_PROPS; | |
#define NT_FE_CONSOLE_PROPS_SIG 0xA0000004 | |
#if (_WIN32_IE >= 0x0500) | |
typedef struct { | |
#ifdef __cplusplus | |
DATABLOCK_HEADER dbh; | |
#else | |
DATABLOCK_HEADER DUMMYSTRUCTNAME; | |
#endif | |
CHAR szDarwinID[MAX_PATH]; // ANSI darwin ID associated with link | |
WCHAR szwDarwinID[MAX_PATH]; // UNICODE darwin ID associated with link | |
} EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK; | |
#define EXP_DARWIN_ID_SIG 0xA0000006 | |
#endif | |
#if !defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER >= 1200) | |
#pragma warning(pop) | |
#endif | |
#define EXP_SPECIAL_FOLDER_SIG 0xA0000005 // LPEXP_SPECIAL_FOLDER | |
typedef struct | |
{ | |
DWORD cbSize; // Size of this extra data block | |
DWORD dwSignature; // signature of this extra data block | |
DWORD idSpecialFolder; // special folder id this link points into | |
DWORD cbOffset; // ofset into pidl from SLDF_HAS_ID_LIST for child | |
} EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER; | |
typedef struct | |
{ | |
DWORD cbSize; // Size 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 | |
WCHAR swzTarget[ MAX_PATH ]; // UNICODE target name w/EXP_SZ in it | |
} EXP_SZ_LINK, *LPEXP_SZ_LINK; | |
#define EXP_SZ_LINK_SIG 0xA0000001 // LPEXP_SZ_LINK (target) | |
#define EXP_SZ_ICON_SIG 0xA0000007 // LPEXP_SZ_LINK (icon) | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
typedef struct | |
{ | |
DWORD cbSize; // Size of this extra data block | |
DWORD dwSignature; // signature of this extra data block | |
BYTE abPropertyStorage[1]; | |
} EXP_PROPERTYSTORAGE; | |
#define EXP_PROPERTYSTORAGE_SIG 0xA0000009 | |
#endif | |
#endif // (_WIN32_IE >= 0x0400) | |
#ifdef _INC_SHELLAPI /* for LPSHELLEXECUTEINFO */ | |
//=========================================================================== | |
// | |
// IShellExecuteHook Interface | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IShellExecuteHookA | |
DECLARE_INTERFACE_IID_(IShellExecuteHookA, IUnknown, "000214f5-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** IShellExecuteHookA methods *** | |
STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOA pei) PURE; | |
}; | |
#undef INTERFACE | |
#define INTERFACE IShellExecuteHookW | |
DECLARE_INTERFACE_IID_(IShellExecuteHookW, IUnknown, "000214fb-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** IShellExecuteHookW methods *** | |
STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOW pei) PURE; | |
}; | |
#ifdef UNICODE | |
#define IShellExecuteHook IShellExecuteHookW | |
#define IShellExecuteHookVtbl IShellExecuteHookWVtbl | |
#else | |
#define IShellExecuteHook IShellExecuteHookA | |
#define IShellExecuteHookVtbl IShellExecuteHookAVtbl | |
#endif | |
#endif | |
//=========================================================================== | |
// | |
// IURLSearchHook Interface | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IURLSearchHook | |
DECLARE_INTERFACE_IID_(IURLSearchHook, IUnknown, "ac60f6a0-0fd9-11d0-99cb-00c04fd64497") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** IURLSearchHook methods *** | |
STDMETHOD(Translate)(THIS_ __out_ecount(cchBufferSize) LPWSTR lpwszSearchURL, DWORD cchBufferSize) PURE; | |
}; | |
#undef INTERFACE | |
#define INTERFACE ISearchContext | |
DECLARE_INTERFACE_IID_(ISearchContext, IUnknown, "09F656A2-41AF-480C-88F7-16CC0D164615") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** ISearchContext methods *** | |
STDMETHOD(GetSearchUrl)(THIS_ __out BSTR * pbstrSearchUrl) PURE; | |
STDMETHOD(GetSearchText)(THIS_ __out BSTR * pbstrSearchText) PURE; | |
STDMETHOD(GetSearchStyle)(THIS_ __out DWORD * pdwSearchStyle) PURE; | |
}; | |
#undef INTERFACE | |
#define INTERFACE IURLSearchHook2 | |
DECLARE_INTERFACE_IID_(IURLSearchHook2, IURLSearchHook, "5ee44da4-6d32-46e3-86bc-07540dedd0e0") | |
{ | |
// *** IURLSearchHook2 methods *** | |
STDMETHOD(TranslateWithSearchContext)(THIS_ __out_ecount(cchBufferSize) LPWSTR lpwszSearchURL, DWORD cchBufferSize, __in_opt ISearchContext * pSearchContext) PURE; | |
}; | |
//=========================================================================== | |
// | |
// INewShortcutHook Interface | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE INewShortcutHookA | |
DECLARE_INTERFACE_IID_(INewShortcutHookA, IUnknown, "000214e1-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** INewShortcutHook methods *** | |
STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE; | |
STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPSTR pszReferent, int cchReferent) PURE; | |
STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE; | |
STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPSTR pszFolder, int cchFolder) PURE; | |
STDMETHOD(GetName)(THIS_ __out_ecount(cchName) LPSTR pszName, int cchName) PURE; | |
STDMETHOD(GetExtension)(THIS_ __out_ecount(cchExtension) LPSTR pszExtension, int cchExtension) PURE; | |
}; | |
#undef INTERFACE | |
#define INTERFACE INewShortcutHookW | |
DECLARE_INTERFACE_IID_(INewShortcutHookW, IUnknown, "000214f7-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** INewShortcutHook methods *** | |
STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE; | |
STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPWSTR pszReferent, int cchReferent) PURE; | |
STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE; | |
STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPWSTR pszFolder, int cchFolder) 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 | |
#define INewShortcutHook INewShortcutHookW | |
#define INewShortcutHookVtbl INewShortcutHookWVtbl | |
#else | |
#define INewShortcutHook INewShortcutHookA | |
#define INewShortcutHookVtbl INewShortcutHookAVtbl | |
#endif | |
//=========================================================================== | |
// | |
// ICopyHook Interface | |
// | |
// The copy hook is called whenever file system directories are | |
// copy/moved/deleted/renamed via the shell. It is also called by the shell | |
// on changes of status of printers. | |
// | |
// Clients register their id under STRREG_SHEX_COPYHOOK for file system hooks | |
// and STRREG_SHEx_PRNCOPYHOOK for printer hooks. | |
// the CopyCallback is called prior to the action, so the hook has the chance | |
// to allow, deny or cancel the operation by returning the falues: | |
// IDYES - means allow the operation | |
// IDNO - means disallow the operation on this file, but continue with | |
// any other operations (eg. batch copy) | |
// IDCANCEL - means disallow the current operation and cancel any pending | |
// operations | |
// | |
// arguments to the CopyCallback | |
// hwnd - window to use for any UI | |
// wFunc - what operation is being done | |
// wFlags - and flags (FOF_*) set in the initial call to the file operation | |
// pszSrcFile - name of the source file | |
// dwSrcAttribs - file attributes of the source file | |
// pszDestFile - name of the destiation file (for move and renames) | |
// dwDestAttribs - file attributes of the destination file | |
// | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE ICopyHookA | |
DECLARE_INTERFACE_IID_(ICopyHookA, IUnknown, "000214EF-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** ICopyHook methods *** | |
STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPCSTR pszSrcFile, DWORD dwSrcAttribs, | |
LPCSTR pszDestFile, DWORD dwDestAttribs) PURE; | |
}; | |
typedef ICopyHookA * LPCOPYHOOKA; | |
#undef INTERFACE | |
#define INTERFACE ICopyHookW | |
DECLARE_INTERFACE_IID_(ICopyHookW, IUnknown, "000214FC-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** ICopyHook methods *** | |
STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPCWSTR pszSrcFile, DWORD dwSrcAttribs, | |
LPCWSTR pszDestFile, DWORD dwDestAttribs) PURE; | |
}; | |
typedef ICopyHookW * LPCOPYHOOKW; | |
#ifdef UNICODE | |
#define ICopyHook ICopyHookW | |
#define ICopyHookVtbl ICopyHookWVtbl | |
#define LPCOPYHOOK LPCOPYHOOKW | |
#else | |
#define ICopyHook ICopyHookA | |
#define ICopyHookVtbl ICopyHookAVtbl | |
#define LPCOPYHOOK LPCOPYHOOKA | |
#endif | |
// IFileViewer, IFileViewerSite not supported as of win2k | |
#if (NTDDI_VERSION < NTDDI_WIN2K) | |
//=========================================================================== | |
// | |
// IFileViewerSite Interface | |
// | |
//=========================================================================== | |
#undef INTERFACE | |
#define INTERFACE IFileViewerSite | |
DECLARE_INTERFACE_IID_(IFileViewerSite, IUnknown, "000214f3-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IFileViewerSite methods *** | |
STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE; | |
STDMETHOD(GetPinnedWindow) (THIS_ __out HWND *phwnd) PURE; | |
}; | |
typedef IFileViewerSite * LPFILEVIEWERSITE; | |
//=========================================================================== | |
// | |
// IFileViewer Interface | |
// | |
// Implemented in a FileViewer component object. Used to tell a | |
// FileViewer to PrintTo or to view, the latter happening though | |
// ShowInitialize and Show. The filename is always given to the | |
// viewer through IPersistFile. | |
// | |
//=========================================================================== | |
#include <pshpack8.h> | |
typedef struct | |
{ | |
// Stuff passed into viewer (in) | |
DWORD cbSize; // Size of structure for future expansion... | |
HWND hwndOwner; // who is the owner window. | |
int iShow; // The show command | |
// Passed in and updated (in/Out) | |
DWORD dwFlags; // flags | |
RECT rect; // Where to create the window may have defaults | |
IUnknown *punkRel; // Relese this interface when window is visible | |
// Stuff that might be returned from viewer (out) | |
OLECHAR strNewFile[MAX_PATH]; // New File to view. | |
} FVSHOWINFO, *LPFVSHOWINFO; | |
#include <poppack.h> /* Return to byte packing */ | |
// Define File View Show Info Flags. | |
#define FVSIF_RECT 0x00000001 // The rect variable has valid data. | |
#define FVSIF_PINNED 0x00000002 // We should Initialize pinned | |
#define FVSIF_NEWFAILED 0x08000000 // The new file passed back failed | |
// to be viewed. | |
#define FVSIF_NEWFILE 0x80000000 // A new file to view has been returned | |
#define FVSIF_CANVIEWIT 0x40000000 // The viewer can view it. | |
#undef INTERFACE | |
#define INTERFACE IFileViewerA | |
DECLARE_INTERFACE_IID(IFileViewerA, "000214f0-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IFileViewer methods *** | |
STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE; | |
STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE; | |
STDMETHOD(PrintTo) (THIS_ __in_opt LPSTR pszDriver, BOOL fSuppressUI) PURE; | |
}; | |
typedef IFileViewerA * LPFILEVIEWERA; | |
#undef INTERFACE | |
#define INTERFACE IFileViewerW | |
DECLARE_INTERFACE_IID(IFileViewerW, "000214f8-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IFileViewer methods *** | |
STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE; | |
STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE; | |
STDMETHOD(PrintTo) (THIS_ __in_opt LPWSTR pszDriver, BOOL fSuppressUI) PURE; | |
}; | |
typedef IFileViewerW * LPFILEVIEWERW; | |
#ifdef UNICODE | |
#define IFileViewer IFileViewerW | |
#define LPFILEVIEWER LPFILEVIEWERW | |
#else | |
#define IFileViewer IFileViewerA | |
#define LPFILEVIEWER LPFILEVIEWERA | |
#endif | |
// IFileViewer, IFileViewerSite not supported as of win2k | |
#endif // (NTDDI_VERSION < NTDDI_WIN2K) | |
//-------------------------------------------------------------------------- | |
// | |
// Command/menuitem IDs | |
// | |
// The explorer dispatches WM_COMMAND messages based on the range of | |
// command/menuitem IDs. All the IDs of menuitems that the view (right | |
// pane) inserts must be in FCIDM_SHVIEWFIRST/LAST (otherwise, the explorer | |
// won't dispatch them). The view should not deal with any menuitems | |
// in FCIDM_BROWSERFIRST/LAST (otherwise, it won't work with the future | |
// version of the shell). | |
// | |
// FCIDM_SHVIEWFIRST/LAST for the right pane (IShellView) | |
// FCIDM_BROWSERFIRST/LAST for the explorer frame (IShellBrowser) | |
// FCIDM_GLOBAL/LAST for the explorer's submenu IDs | |
// | |
//-------------------------------------------------------------------------- | |
#define FCIDM_SHVIEWFIRST 0x0000 | |
#define FCIDM_SHVIEWLAST 0x7fff | |
#define FCIDM_BROWSERFIRST 0xa000 | |
#define FCIDM_BROWSERLAST 0xbf00 | |
#define FCIDM_GLOBALFIRST 0x8000 | |
#define FCIDM_GLOBALLAST 0x9fff | |
// | |
// Global submenu IDs and separator IDs | |
// | |
#define FCIDM_MENU_FILE (FCIDM_GLOBALFIRST+0x0000) | |
#define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040) | |
#define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080) | |
#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081) | |
#define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0) // for Win9x compat | |
#define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1) // for Win9x compat | |
#define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100) | |
#define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140) | |
#define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150) | |
#define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170) | |
//-------------------------------------------------------------------------- | |
// control IDs known to the view | |
//-------------------------------------------------------------------------- | |
#define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0) | |
#define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1) | |
#if (_WIN32_IE >= 0x0400) | |
//-------------------------------------------------------------------------- | |
// | |
// The resource id of the offline cursor | |
// This cursor is avaialble in shdocvw.dll | |
#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 | |
// SBCMDID_GETPANE - not necessarily in order | |
#define PANE_NONE ((DWORD)-1) | |
#define PANE_ZONE 1 | |
#define PANE_OFFLINE 2 | |
#define PANE_PRINTER 3 | |
#define PANE_SSL 4 | |
#define PANE_NAVIGATION 5 | |
#define PANE_PROGRESS 6 | |
#if (_WIN32_IE >= _WIN32_IE_IE60) | |
#define PANE_PRIVACY 7 | |
#endif | |
SHSTDAPI_(PIDLIST_RELATIVE) ILClone(__in PCUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(PITEMID_CHILD) ILCloneFirst(__in PCUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(PIDLIST_ABSOLUTE) ILCombine(__in_opt PCIDLIST_ABSOLUTE pidl1, __in_opt PCUIDLIST_RELATIVE pidl2); | |
SHSTDAPI_(void) ILFree(__in_opt PIDLIST_RELATIVE pidl); | |
SHSTDAPI_(PUIDLIST_RELATIVE) ILGetNext(__in PCUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(UINT) ILGetSize(__in PCUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(PUIDLIST_RELATIVE) ILFindChild(__in PIDLIST_ABSOLUTE pidlParent, __in PCIDLIST_ABSOLUTE pidlChild); | |
SHSTDAPI_(__out PUITEMID_CHILD) ILFindLastID(__in PCUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(BOOL) ILRemoveLastID(__inout PUIDLIST_RELATIVE pidl); | |
SHSTDAPI_(BOOL) ILIsEqual(__in PCIDLIST_ABSOLUTE pidl1, __in PCIDLIST_ABSOLUTE pidl2); | |
SHSTDAPI_(BOOL) ILIsParent(__in PCIDLIST_ABSOLUTE pidl1, __in PCIDLIST_ABSOLUTE pidl2, BOOL fImmediate); | |
SHSTDAPI ILSaveToStream(__in IStream *pstm, __in PCUIDLIST_RELATIVE pidl); | |
DECLSPEC_DEPRECATED SHSTDAPI ILLoadFromStream(__in IStream *pstm, __inout PIDLIST_RELATIVE *pidl); | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI ILLoadFromStreamEx(__in IStream *pstm, __deref_out PIDLIST_RELATIVE *pidl); | |
#endif // NTDDI_VISTA | |
#if (_WIN32_IE >= 0x0400) | |
SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathA(LPCSTR pszPath); | |
SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathW(LPCWSTR pszPath); | |
#ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH | |
SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPath(LPCTSTR pszPath); | |
#else | |
#ifdef UNICODE | |
#define ILCreateFromPath ILCreateFromPathW | |
#else | |
#define ILCreateFromPath ILCreateFromPathA | |
#endif // !UNICODE | |
#endif // NO_WRAPPERS_FOR_ILCREATEFROMPATH | |
#endif // (_WIN32_IE >= 0x0400) | |
SHSTDAPI SHILCreateFromPath(LPCWSTR pszPath, __out PIDLIST_ABSOLUTE *ppidl, __inout_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 reinterpret_cast<PIDLIST_ABSOLUTE>(ILClone(pidl)); } | |
inline PITEMID_CHILD ILCloneChild(__in PCUITEMID_CHILD pidl) { return ILCloneFirst(pidl); } | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
inline HRESULT ILLoadFromStreamEx(__in IStream *pstm, __deref_out PIDLIST_ABSOLUTE *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)); } | |
#endif // NTDDI_VISTA | |
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(pidl, pidl->mkid.cb); } | |
inline PUIDLIST_RELATIVE ILNext(__in PUIDLIST_RELATIVE pidl) { return const_cast<PUIDLIST_RELATIVE>(ILNext(const_cast<PCUIDLIST_RELATIVE>(pidl))); } | |
inline BOOL ILIsAligned(__in PCUIDLIST_RELATIVE pidl) { return (((DWORD_PTR)(pidl) & (sizeof(void*) - 1)) == 0); } | |
inline BOOL ILIsEmpty(__in_opt PCUIDLIST_RELATIVE pidl) { return ((pidl == NULL) || (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 (ILIsEmpty(pidl) || ILIsEmpty(ILNext(pidl))); } | |
#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) | |
inline PCUIDLIST_RELATIVE ILFindChild(__in PCIDLIST_ABSOLUTE pidlParent, __in PCIDLIST_ABSOLUTE pidlChild) { return const_cast<PCUIDLIST_RELATIVE>(ILFindChild(const_cast<PIDLIST_ABSOLUTE>(pidlParent), pidlChild)); } | |
#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) | |
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_VISTA) | |
// SHGetPathFromIDListEx returns a win32 file system path for the item in the name space. | |
// and has a few special cases that include returning UNC printer names too! | |
typedef enum tagGPFIDL_FLAGS | |
{ | |
GPFIDL_DEFAULT = 0x0000, // normal Win32 file name, servers and drive roots included | |
GPFIDL_ALTNAME = 0x0001, // short file name | |
GPFIDL_UNCPRINTER = 0x0002, // include UNC printer names too (non file system item) | |
}; | |
typedef int GPFIDL_FLAGS; | |
SHSTDAPI_(BOOL) SHGetPathFromIDListEx(__in PCIDLIST_ABSOLUTE pidl, __out_ecount(cchPath) PWSTR pszPath, __in DWORD cchPath, __in GPFIDL_FLAGS uOpts); | |
#endif // NTDDI_VISTA | |
// | |
// SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes the size of the buffer (MAX_PATH). | |
// The pidl should point to a file system object. | |
__success(return != 0) | |
SHSTDAPI_(BOOL) SHGetPathFromIDListA(__in PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PATH) LPSTR pszPath); | |
// | |
// SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes the size of the buffer (MAX_PATH). | |
// The pidl should point to a file system object. | |
__success(return != 0) | |
SHSTDAPI_(BOOL) SHGetPathFromIDListW(__in PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PATH) LPWSTR pszPath); | |
#ifdef UNICODE | |
#define SHGetPathFromIDList SHGetPathFromIDListW | |
#else | |
#define SHGetPathFromIDList SHGetPathFromIDListA | |
#endif // !UNICODE | |
SHSTDAPI_(int) SHCreateDirectory(__in_opt HWND hwnd, __in LPCWSTR pszPath); | |
SHSTDAPI_(int) SHCreateDirectoryExA(__in_opt HWND hwnd, __in LPCSTR pszPath, __in_opt const SECURITY_ATTRIBUTES *psa); | |
SHSTDAPI_(int) SHCreateDirectoryExW(__in_opt HWND hwnd, __in LPCWSTR pszPath, __in_opt const SECURITY_ATTRIBUTES *psa); | |
#ifdef UNICODE | |
#define SHCreateDirectoryEx SHCreateDirectoryExW | |
#else | |
#define SHCreateDirectoryEx SHCreateDirectoryExA | |
#endif // !UNICODE | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define OFASI_EDIT 0x0001 | |
#define OFASI_OPENDESKTOP 0x0002 | |
#endif | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SHSTDAPI SHOpenFolderAndSelectItems(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, __in_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 IShellFolder *psfParent, __in PCUITEMID_CHILD pidl, __out IShellItem **ppsi); | |
#endif | |
// | |
// SHGetSpecialFolderLocation | |
// | |
// Caller should use SHGetMalloc to obtain an allocator that can free the pidl | |
// | |
// registry entries for special paths are kept in : | |
#define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT("\\Shell Folders") | |
#define CSIDL_DESKTOP 0x0000 // <desktop> | |
#define CSIDL_INTERNET 0x0001 // Internet Explorer (icon on desktop) | |
#define CSIDL_PROGRAMS 0x0002 // Start Menu\Programs | |
#define CSIDL_CONTROLS 0x0003 // My Computer\Control Panel | |
#define CSIDL_PRINTERS 0x0004 // My Computer\Printers | |
#define CSIDL_PERSONAL 0x0005 // My Documents | |
#define CSIDL_FAVORITES 0x0006 // <user name>\Favorites | |
#define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Startup | |
#define CSIDL_RECENT 0x0008 // <user name>\Recent | |
#define CSIDL_SENDTO 0x0009 // <user name>\SendTo | |
#define CSIDL_BITBUCKET 0x000a // <desktop>\Recycle Bin | |
#define CSIDL_STARTMENU 0x000b // <user name>\Start Menu | |
#define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal was just a silly name for My Documents | |
#define CSIDL_MYMUSIC 0x000d // "My Music" folder | |
#define CSIDL_MYVIDEO 0x000e // "My Videos" folder | |
#define CSIDL_DESKTOPDIRECTORY 0x0010 // <user name>\Desktop | |
#define CSIDL_DRIVES 0x0011 // My Computer | |
#define CSIDL_NETWORK 0x0012 // Network Neighborhood (My Network Places) | |
#define CSIDL_NETHOOD 0x0013 // <user name>\nethood | |
#define CSIDL_FONTS 0x0014 // windows\fonts | |
#define CSIDL_TEMPLATES 0x0015 | |
#define CSIDL_COMMON_STARTMENU 0x0016 // All Users\Start Menu | |
#define CSIDL_COMMON_PROGRAMS 0X0017 // All Users\Start Menu\Programs | |
#define CSIDL_COMMON_STARTUP 0x0018 // All Users\Startup | |
#define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 // All Users\Desktop | |
#define CSIDL_APPDATA 0x001a // <user name>\Application Data | |
#define CSIDL_PRINTHOOD 0x001b // <user name>\PrintHood | |
#ifndef CSIDL_LOCAL_APPDATA | |
#define CSIDL_LOCAL_APPDATA 0x001c // <user name>\Local Settings\Applicaiton Data (non roaming) | |
#endif // CSIDL_LOCAL_APPDATA | |
#define CSIDL_ALTSTARTUP 0x001d // non localized startup | |
#define CSIDL_COMMON_ALTSTARTUP 0x001e // non localized common startup | |
#define CSIDL_COMMON_FAVORITES 0x001f | |
#ifndef _SHFOLDER_H_ | |
#define CSIDL_INTERNET_CACHE 0x0020 | |
#define CSIDL_COOKIES 0x0021 | |
#define CSIDL_HISTORY 0x0022 | |
#define CSIDL_COMMON_APPDATA 0x0023 // All Users\Application Data | |
#define CSIDL_WINDOWS 0x0024 // GetWindowsDirectory() | |
#define CSIDL_SYSTEM 0x0025 // GetSystemDirectory() | |
#define CSIDL_PROGRAM_FILES 0x0026 // C:\Program Files | |
#define CSIDL_MYPICTURES 0x0027 // C:\Program Files\My Pictures | |
#endif // _SHFOLDER_H_ | |
#define CSIDL_PROFILE 0x0028 // USERPROFILE | |
#define CSIDL_SYSTEMX86 0x0029 // x86 system directory on RISC | |
#define CSIDL_PROGRAM_FILESX86 0x002a // x86 C:\Program Files on RISC | |
#ifndef _SHFOLDER_H_ | |
#define CSIDL_PROGRAM_FILES_COMMON 0x002b // C:\Program Files\Common | |
#endif // _SHFOLDER_H_ | |
#define CSIDL_PROGRAM_FILES_COMMONX86 0x002c // x86 Program Files\Common on RISC | |
#define CSIDL_COMMON_TEMPLATES 0x002d // All Users\Templates | |
#ifndef _SHFOLDER_H_ | |
#define CSIDL_COMMON_DOCUMENTS 0x002e // All Users\Documents | |
#define CSIDL_COMMON_ADMINTOOLS 0x002f // All Users\Start Menu\Programs\Administrative Tools | |
#define CSIDL_ADMINTOOLS 0x0030 // <user name>\Start Menu\Programs\Administrative Tools | |
#endif // _SHFOLDER_H_ | |
#define CSIDL_CONNECTIONS 0x0031 // Network and Dial-up Connections | |
#define CSIDL_COMMON_MUSIC 0x0035 // All Users\My Music | |
#define CSIDL_COMMON_PICTURES 0x0036 // All Users\My Pictures | |
#define CSIDL_COMMON_VIDEO 0x0037 // All Users\My Video | |
#define CSIDL_RESOURCES 0x0038 // Resource Direcotry | |
#ifndef _SHFOLDER_H_ | |
#define CSIDL_RESOURCES_LOCALIZED 0x0039 // Localized Resource Direcotry | |
#endif // _SHFOLDER_H_ | |
#define CSIDL_COMMON_OEM_LINKS 0x003a // Links to All Users OEM specific apps | |
#define CSIDL_CDBURN_AREA 0x003b // USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning | |
// unused 0x003c | |
#define CSIDL_COMPUTERSNEARME 0x003d // Computers Near Me (computered from Workgroup membership) | |
#ifndef _SHFOLDER_H_ | |
#define CSIDL_FLAG_CREATE 0x8000 // combine with CSIDL_ value to force folder creation in SHGetFolderPath() | |
#endif // _SHFOLDER_H_ | |
#define CSIDL_FLAG_DONT_VERIFY 0x4000 // combine with CSIDL_ value to return an unverified folder path | |
#define CSIDL_FLAG_DONT_UNEXPAND 0x2000 // combine with CSIDL_ value to avoid unexpanding environment variables | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
#define CSIDL_FLAG_NO_ALIAS 0x1000 // combine with CSIDL_ value to insure non-alias versions of the pidl | |
#define CSIDL_FLAG_PER_USER_INIT 0x0800 // combine with CSIDL_ value to indicate per-user init (eg. upgrade) | |
#endif // NTDDI_WINXP | |
#define CSIDL_FLAG_MASK 0xFF00 // mask for all possible flag values | |
SHSTDAPI SHGetSpecialFolderLocation(__reserved HWND hwnd, __in int csidl, __deref_out PIDLIST_ABSOLUTE *ppidl); | |
SHSTDAPI_(PIDLIST_ABSOLUTE) SHCloneSpecialIDList(__reserved HWND hwnd, __in int csidl, __in BOOL fCreate); | |
__success(return != 0) | |
SHSTDAPI_(BOOL) SHGetSpecialFolderPathA(__reserved HWND hwnd, __out_ecount(MAX_PATH) LPSTR pszPath, __in int csidl, __in BOOL fCreate); | |
__success(return != 0) | |
SHSTDAPI_(BOOL) SHGetSpecialFolderPathW(__reserved HWND hwnd, __out_ecount(MAX_PATH) LPWSTR pszPath, __in int csidl, __in BOOL fCreate); | |
#ifdef UNICODE | |
#define SHGetSpecialFolderPath SHGetSpecialFolderPathW | |
#else | |
#define SHGetSpecialFolderPath SHGetSpecialFolderPathA | |
#endif // !UNICODE | |
#if (NTDDI_VERSION >= NTDDI_WIN2K) | |
SHSTDAPI_(void) SHFlushSFCache(void); | |
typedef enum { | |
SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists | |
SHGFP_TYPE_DEFAULT = 1, // default value, may not exist | |
} SHGFP_TYPE; | |
SHFOLDERAPI SHGetFolderPathA(__reserved HWND hwnd, __in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __out_ecount(MAX_PATH) LPSTR pszPath); | |
SHFOLDERAPI SHGetFolderPathW(__reserved HWND hwnd, __in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __out_ecount(MAX_PATH) LPWSTR pszPath); | |
#ifdef UNICODE | |
#define SHGetFolderPath SHGetFolderPathW | |
#else | |
#define SHGetFolderPath SHGetFolderPathA | |
#endif // !UNICODE | |
SHSTDAPI SHGetFolderLocation(__reserved HWND hwnd, __in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __deref_out PIDLIST_ABSOLUTE *ppidl); | |
#endif // NTDDI_WIN2K | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SHSTDAPI SHSetFolderPathA(__in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __in LPCSTR pszPath); | |
SHSTDAPI SHSetFolderPathW(__in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __in LPCWSTR pszPath); | |
#ifdef UNICODE | |
#define SHSetFolderPath SHSetFolderPathW | |
#else | |
#define SHSetFolderPath SHSetFolderPathA | |
#endif // !UNICODE | |
SHSTDAPI SHGetFolderPathAndSubDirA(__reserved HWND hwnd, __in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __in_opt LPCSTR pszSubDir, __out_ecount(MAX_PATH) LPSTR pszPath); | |
SHSTDAPI SHGetFolderPathAndSubDirW(__reserved HWND hwnd, __in int csidl, __in_opt HANDLE hToken, __in DWORD dwFlags, __in_opt LPCWSTR pszSubDir, __out_ecount(MAX_PATH) LPWSTR pszPath); | |
#ifdef UNICODE | |
#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirW | |
#else | |
#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirA | |
#endif // !UNICODE | |
#endif // NTDDI_VISTA | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
// flags for Known Folder APIs | |
typedef enum | |
{ | |
KF_FLAG_DEFAULT = 0x00000000, | |
// Make sure that the folder already 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 network the function may take long time to execute | |
KF_FLAG_CREATE = 0x00008000, | |
// If this flag is specified then 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 (IDList) will be returned | |
// If folder is located on the network the function may take long time to execute | |
KF_FLAG_DONT_VERIFY = 0x00004000, | |
// 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.) | |
KF_FLAG_DONT_UNEXPAND = 0x00002000, | |
// Get file system based IDList if available. If the flag is not specified the Known Folder API | |
// will try to return aliased IDList by default. Example for FOLDERID_Documents - | |
// Aliased - [desktop]\[user]\[Documents] - exact location is determined by shell namespace layout and might change | |
// Non aliased - [desktop]\[computer]\[disk_c]\[users]\[user]\[Documents] - location is determined by folder location in the file system | |
KF_FLAG_NO_ALIAS = 0x00001000, | |
// Initialize the folder with desktop.ini settings | |
// If folder can not be initialized then function will return failure and no folder path will be returned | |
// If folder is located on the network the function may take long time to execute | |
KF_FLAG_INIT = 0x00000800, | |
// Get the default path, will also verify folder existence unless KF_FLAG_DONT_VERIFY is also specified | |
KF_FLAG_DEFAULT_PATH = 0x00000400, | |
// Get the not-parent-relative default path. Only valid with KF_FLAG_DEFAULT_PATH | |
KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200, | |
// Build simple IDList | |
KF_FLAG_SIMPLE_IDLIST = 0x00000100, | |
// only return the aliased IDLists, don't fallback to file system path | |
KF_FLAG_ALIAS_ONLY = 0x80000000, | |
} KNOWN_FOLDER_FLAG; | |
DEFINE_ENUM_FLAG_OPERATORS(KNOWN_FOLDER_FLAG); | |
STDAPI SHGetKnownFolderIDList(__in REFKNOWNFOLDERID rfid, | |
__in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, | |
__in_opt HANDLE hToken, | |
__deref_out PIDLIST_ABSOLUTE *ppidl); | |
STDAPI SHSetKnownFolderPath(__in REFKNOWNFOLDERID rfid, | |
__in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, | |
__in_opt HANDLE hToken, | |
__in PCWSTR pszPath); | |
STDAPI SHGetKnownFolderPath(__in REFKNOWNFOLDERID rfid, | |
__in DWORD /* KNOWN_FOLDER_FLAG */ dwFlags, | |
__in_opt HANDLE hToken, | |
__deref_out PWSTR *ppszPath); // free *ppszPath with CoTaskMemFree | |
#endif // NTDDI_VISTA | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
// returns IShellItem or related interface | |
STDAPI SHGetKnownFolderItem(__in REFKNOWNFOLDERID rfid, | |
__in KNOWN_FOLDER_FLAG flags, | |
__in_opt HANDLE hToken, | |
__in REFIID riid, | |
__deref_out void **ppv); | |
#endif // NTDDI_WIN7 | |
#if (NTDDI_VERSION >= NTDDI_WIN2K) | |
#define FCS_READ 0x00000001 | |
#define FCS_FORCEWRITE 0x00000002 | |
#define FCS_WRITE (FCS_READ | FCS_FORCEWRITE) | |
#define FCS_FLAG_DRAGDROP 2 | |
// Mask which values have been retreived or being set. | |
#define FCSM_VIEWID 0x00000001 // deprecated | |
#define FCSM_WEBVIEWTEMPLATE 0x00000002 // deprecated | |
#define FCSM_INFOTIP 0x00000004 | |
#define FCSM_CLSID 0x00000008 | |
#define FCSM_ICONFILE 0x00000010 | |
#define FCSM_LOGO 0x00000020 | |
#define FCSM_FLAGS 0x00000040 | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#include <pshpack8.h> | |
// 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 | |
LPWSTR pszWebViewTemplate; // OUT - if dwReadWrite is FCS_READ, IN - otherwise | |
DWORD cchWebViewTemplate; // IN - Specifies the size of the buffer pointed to by pszWebViewTemplate | |
// Ignored if dwReadWrite is FCS_READ | |
LPWSTR pszWebViewTemplateVersion; // currently IN only | |
// Infotip for the folder | |
LPWSTR 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 | |
LPWSTR 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 | |
LPWSTR pszLogo; // OUT - if dwReadWrite is FCS_READ, IN - otherwise | |
DWORD cchLogo; // IN - Specifies the size of the buffer pointed to by pszIconFile | |
// Ignored if dwReadWrite is FCS_READ | |
} SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS; | |
#include <poppack.h> /* Return to byte packing */ | |
// Gets/Sets the Folder Custom Settings for pszPath based on dwReadWrite. dwReadWrite can be FCS_READ/FCS_WRITE/FCS_FORCEWRITE | |
SHSTDAPI SHGetSetFolderCustomSettings(__inout LPSHFOLDERCUSTOMSETTINGS pfcs, LPCWSTR pszPath, DWORD dwReadWrite); | |
#endif //NTDDI_VISTA | |
#endif // NTDDI_WIN2K | |
//------------------------------------------------------------------------- | |
// | |
// SHBrowseForFolder API | |
// | |
// | |
//------------------------------------------------------------------------- | |
typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData); | |
#include <pshpack8.h> | |
typedef struct _browseinfoA { | |
HWND hwndOwner; | |
PCIDLIST_ABSOLUTE pidlRoot; | |
LPSTR pszDisplayName; // Return display name of item selected. | |
LPCSTR lpszTitle; // text to go in the banner over the tree. | |
UINT ulFlags; // Flags that control the return stuff | |
BFFCALLBACK lpfn; | |
LPARAM lParam; // extra info that's passed back in callbacks | |
int iImage; // output var: where to return the Image index. | |
} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA; | |
typedef struct _browseinfoW { | |
HWND hwndOwner; | |
PCIDLIST_ABSOLUTE pidlRoot; | |
LPWSTR pszDisplayName; // Return display name of item selected. | |
LPCWSTR lpszTitle; // text to go in the banner over the tree. | |
UINT ulFlags; // Flags that control the return stuff | |
BFFCALLBACK lpfn; | |
LPARAM lParam; // extra info that's passed back in callbacks | |
int iImage; // output var: where to return the Image index. | |
} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; | |
#include <poppack.h> /* Return to byte packing */ | |
#ifdef UNICODE | |
#define BROWSEINFO BROWSEINFOW | |
#define PBROWSEINFO PBROWSEINFOW | |
#define LPBROWSEINFO LPBROWSEINFOW | |
#else | |
#define BROWSEINFO BROWSEINFOA | |
#define PBROWSEINFO PBROWSEINFOA | |
#define LPBROWSEINFO LPBROWSEINFOA | |
#endif | |
// Browsing for directory. | |
#define BIF_RETURNONLYFSDIRS 0x00000001 // For finding a folder to start document searching | |
#define BIF_DONTGOBELOWDOMAIN 0x00000002 // For starting the Find Computer | |
#define BIF_STATUSTEXT 0x00000004 // Top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle and one line if | |
// this flag is set. Passing the message BFFM_SETSTATUSTEXTA to the hwnd can set the | |
// rest of the text. This is not used with BIF_USENEWUI and BROWSEINFO.lpszTitle gets | |
// all three lines of text. | |
#define BIF_RETURNFSANCESTORS 0x00000008 | |
#define BIF_EDITBOX 0x00000010 // Add an editbox to the dialog | |
#define BIF_VALIDATE 0x00000020 // insist on valid result (or CANCEL) | |
#define BIF_NEWDIALOGSTYLE 0x00000040 // Use the new dialog layout with the ability to resize | |
// Caller needs to call OleInitialize() before using this API | |
#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX) | |
#define BIF_BROWSEINCLUDEURLS 0x00000080 // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI) | |
#define BIF_UAHINT 0x00000100 // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX | |
#define BIF_NONEWFOLDERBUTTON 0x00000200 // Do not add the "New Folder" button to the dialog. Only applicable with BIF_NEWDIALOGSTYLE. | |
#define BIF_NOTRANSLATETARGETS 0x00000400 // don't traverse target as shortcut | |
#define BIF_BROWSEFORCOMPUTER 0x00001000 // Browsing for Computers. | |
#define BIF_BROWSEFORPRINTER 0x00002000 // Browsing for Printers | |
#define BIF_BROWSEINCLUDEFILES 0x00004000 // Browsing for Everything | |
#define BIF_SHAREABLE 0x00008000 // sharable resources displayed (remote shares, requires BIF_USENEWUI) | |
#define BIF_BROWSEFILEJUNCTIONS 0x00010000 // allow folder junctions like zip files and libraries to be browsed | |
// message from browser | |
#define BFFM_INITIALIZED 1 | |
#define BFFM_SELCHANGED 2 | |
#define BFFM_VALIDATEFAILEDA 3 // lParam:szPath ret:1(cont),0(EndDialog) | |
#define BFFM_VALIDATEFAILEDW 4 // lParam:wzPath ret:1(cont),0(EndDialog) | |
#define BFFM_IUNKNOWN 5 // provides IUnknown to client. lParam: IUnknown* | |
// messages to browser | |
#define BFFM_SETSTATUSTEXTA (WM_USER + 100) | |
#define BFFM_ENABLEOK (WM_USER + 101) | |
#define BFFM_SETSELECTIONA (WM_USER + 102) | |
#define BFFM_SETSELECTIONW (WM_USER + 103) | |
#define BFFM_SETSTATUSTEXTW (WM_USER + 104) | |
#define BFFM_SETOKTEXT (WM_USER + 105) // Unicode only | |
#define BFFM_SETEXPANDED (WM_USER + 106) // Unicode only | |
SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderA(__in LPBROWSEINFOA lpbi); | |
SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderW(__in LPBROWSEINFOW lpbi); | |
#ifdef UNICODE | |
#define SHBrowseForFolder SHBrowseForFolderW | |
#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTW | |
#define BFFM_SETSELECTION BFFM_SETSELECTIONW | |
#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW | |
#else | |
#define SHBrowseForFolder SHBrowseForFolderA | |
#define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTA | |
#define BFFM_SETSELECTION BFFM_SETSELECTIONA | |
#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA | |
#endif | |
//------------------------------------------------------------------------- | |
// | |
// SHLoadInProc | |
// | |
// This function is no longer implemented. It will return E_NOTIMPL. | |
// | |
//------------------------------------------------------------------------- | |
SHSTDAPI SHLoadInProc(REFCLSID rclsid); | |
//------------------------------------------------------------------------- | |
// | |
// Internet Shortcut Object | |
// | |
//------------------------------------------------------------------------- | |
// Cmds for CGID_ShortCut | |
#if (_WIN32_IE >= _WIN32_IE_IE501) | |
enum | |
{ | |
ISHCUTCMDID_DOWNLOADICON = 0, | |
ISHCUTCMDID_INTSHORTCUTCREATE = 1, | |
#if (_WIN32_IE >= _WIN32_IE_IE70) | |
ISHCUTCMDID_COMMITHISTORY = 2, | |
ISHCUTCMDID_SETUSERAWURL = 3, | |
#endif | |
}; | |
#define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE | |
#endif | |
// Bindctx key, passed to IShellFolder::ParseDiplayName. Provides dbfolder with extra | |
// data, besides the name, necessary for the parse. the object in the bind context implements | |
// IPropertyStore and provides a fixed set of properties | |
#define STR_PARSE_WITH_PROPERTIES L"ParseWithProperties" | |
// Bindctx key, passed to IShellFolder::ParseDisplayName(). used to pass the original item that | |
// is being re-parsed. that item is stored as an IShellItem that supports IParentAndItem, | |
// and should be the un-aliased form of the item. | |
#define STR_PARSE_PARTIAL_IDLIST L"ParseOriginalItem" | |
// | |
// Helper function which returns a IShellFolder interface to the desktop | |
// folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop. | |
// | |
// CoCreateInstance(CLSID_Desktop, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pshf)); | |
// | |
SHSTDAPI SHGetDesktopFolder(__deref_out IShellFolder **ppshf); | |
// this interface is deprecated, data sources should | |
// implement IShellFolder2::GetDetailsOf()/GetDetailsEx() instead | |
#undef INTERFACE | |
#define INTERFACE IShellDetails | |
DECLARE_INTERFACE_IID_(IShellDetails, IUnknown, "000214EC-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellDetails methods *** | |
STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, __out SHELLDETAILS *pDetails) PURE; | |
STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; | |
}; | |
// | |
// IObjMgr::Append(punk) | |
// This function adds an object to the end of a list of objects. | |
// | |
// IObjMgr::Remove(punk) | |
// This function removes an object from a list of objects. | |
// | |
// This is implemented by CLSID_ACLMulti so each AutoComplete List | |
// (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added. | |
// CLSID_ACLMulti's IEnumString will then be the union of the results | |
// from the COM Objects added. | |
// | |
#undef INTERFACE | |
#define INTERFACE IObjMgr | |
DECLARE_INTERFACE_IID_(IObjMgr, IUnknown, "00BB2761-6A77-11D0-A535-00C04FD7D062") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** IObjMgr specific methods *** | |
STDMETHOD(Append) (THIS_ __in IUnknown *punk) PURE; | |
STDMETHOD(Remove) (THIS_ __in IUnknown *punk) PURE; | |
}; | |
// | |
// ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize) | |
// This function gets the Current Working Directory from a COM object that | |
// stores such state. | |
// | |
// ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath) | |
// This function sets the Current Working Directory of a COM object that | |
// stores such state. | |
// | |
// This function can be used generically. One COM object that implements it | |
// is CLSID_ACListISF so that the AutoComplete engine can complete relative | |
// paths. SetDirectory() will set the "Current Working Directory" and | |
// AutoComplete with then complete both absolute and relative paths. | |
// For Example, if ::SetDirectory(L"C:\Program Files") is called, then | |
// the user can AutoComplete "..\winnt". In order to set the current | |
// working directory for non-file system paths, "ftp://ftp.microsoft.com/" or | |
// "Control Panel" for example, use IPersistFolder. | |
// | |
#undef INTERFACE | |
#define INTERFACE ICurrentWorkingDirectory | |
DECLARE_INTERFACE_IID_(ICurrentWorkingDirectory, IUnknown, "91956D21-9276-11d1-921A-006097DF5BD4") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** ICurrentWorkingDirectory specific methods *** | |
STDMETHOD(GetDirectory) (THIS_ __out_ecount(cchSize) LPWSTR pwzPath, DWORD cchSize) PURE; | |
STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE; | |
}; | |
// | |
// IACList::Expand(LPCWSTR) | |
// This function tells an autocomplete list to expand a specific string. | |
// | |
// If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete) | |
// will use this interface to tell the "AutoComplete Lists" where to expand | |
// the results. | |
// | |
// For Example, if the user enters "C:\Program Files\Micros", AutoComplete | |
// first completely enumerate the "AutoComplete Lists" via IEnumString. Then it | |
// will call the "AutoComplete Lists" with IACList::Expand(L"C:\Program Files"). | |
// It will then enumerate the IEnumString interface again to get results in | |
// that directory. | |
// | |
#undef INTERFACE | |
#define INTERFACE IACList | |
DECLARE_INTERFACE_IID_(IACList, IUnknown, "77A130B0-94FD-11D0-A544-00C04FD7d062") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG, Release) (THIS) PURE; | |
// *** IACList specific methods *** | |
STDMETHOD(Expand) (THIS_ LPCWSTR pszExpand) PURE; | |
}; | |
// This interface exists to allow the caller to set filter criteria | |
// for an AutoComplete List. AutoComplete Lists generates the list of | |
// possible AutoComplete completions. CLSID_ACListISF is one AutoComplete | |
// List COM object that implements this interface. | |
#undef INTERFACE | |
#define INTERFACE IACList2 | |
typedef enum _tagAUTOCOMPLETELISTOPTIONS | |
{ | |
ACLO_NONE = 0, // don't enumerate anything | |
ACLO_CURRENTDIR = 1, // enumerate current directory | |
ACLO_MYCOMPUTER = 2, // enumerate MyComputer | |
ACLO_DESKTOP = 4, // enumerate Desktop Folder | |
ACLO_FAVORITES = 8, // enumerate Favorites Folder | |
ACLO_FILESYSONLY = 16, // enumerate only the file system | |
#if (_WIN32_IE >= _WIN32_IE_IE60) | |
ACLO_FILESYSDIRS = 32, // enumerate only the file system dirs, UNC shares, and UNC servers. | |
#endif | |
#if (_WIN32_IE >= _WIN32_IE_IE70) | |
ACLO_VIRTUALNAMESPACE = 64, // enumereate on the virual namespace | |
#endif | |
} AUTOCOMPLETELISTOPTIONS; | |
DECLARE_INTERFACE_IID_(IACList2, IACList, "470141a0-5186-11d2-bbb6-0060977b464c") | |
{ | |
// *** IACList2 specific methods *** | |
STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; | |
STDMETHOD(GetOptions)(THIS_ __out DWORD* pdwFlag) PURE; | |
}; | |
/*-------------------------------------------------------------------------*\ | |
INTERFACE: IProgressDialog | |
DESCRIPTION: | |
CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create | |
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 modeless, | |
handling the user canceling the operation, and estimating the time remaining | |
until the operation completes. | |
USAGE: | |
This is how the dialog is used during operations that require progress | |
and the ability to cancel: | |
{ | |
DWORD dwComplete, dwTotal; | |
IProgressDialog * ppd; | |
CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void **)&ppd); | |
ppd->SetTitle(L"My Slow Operation"); // Set the title of the dialog. | |
ppd->SetAnimation(hInstApp, IDA_OPERATION_ANIMATION); // Set the animation to play. | |
ppd->StartProgressDialog(hwndParent, punk, PROGDLG_AUTOTIME, NULL); // Display and enable automatic estimated time remaining. | |
ppd->SetCancelMsg(L"Please wait while the current operation is cleaned up", NULL); // Will only be displayed if Cancel button is pressed. | |
dwComplete = 0; | |
dwTotal = CalcTotalUnitsToDo(); | |
// Reset because CalcTotalUnitsToDo() took a long time and the estimated time | |
// is based on the time between ::StartProgressDialog() and the first | |
// ::SetProgress() call. | |
ppd->Timer(PDTIMER_RESET, NULL); | |
for (nIndex = 0; nIndex < nTotal; nIndex++) | |
{ | |
if (TRUE == ppd->HasUserCancelled()) | |
break; | |
ppd->SetLine(2, L"I'm processing item n", FALSE, NULL); | |
dwComplete += DoSlowOperation(); | |
ppd->SetProgress(dwCompleted, dwTotal); | |
} | |
ppd->StopProgressDialog(); | |
ppd->Release(); | |
} | |
\*-------------------------------------------------------------------------*/ | |
// 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 behavior | |
#define PROGDLG_MODAL 0x00000001 // the dialog is modal to its hwndParent (default is modeless) | |
#define PROGDLG_AUTOTIME 0x00000002 // automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!) | |
#define PROGDLG_NOTIME 0x00000004 // we dont show the "time remaining" 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_NOPROGRESSBAR 0x00000010 // Don't display the progress bar | |
#if (_WIN32_IE >= _WIN32_IE_IE70) | |
#define PROGDLG_MARQUEEPROGRESS 0x00000020 // Use marquee progress (comctl32 v6 required) | |
#define PROGDLG_NOCANCEL 0x00000040 // No cancel button (operation cannot be canceled) (use sparingly) | |
#endif | |
// 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 | |
// 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 | |
#define INTERFACE IProgressDialog | |
DECLARE_INTERFACE_IID_(IProgressDialog, IUnknown, "EBBC7C04-315E-11d2-B62F-006097DF5BD4") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IProgressDialog specific methods | |
STDMETHOD(StartProgressDialog)(THIS_ __in_opt HWND hwndParent, __in_opt IUnknown * punkEnableModless, DWORD dwFlags, __reserved LPCVOID pvResevered) PURE; | |
STDMETHOD(StopProgressDialog)(THIS) PURE; | |
STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE; | |
STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PURE; | |
STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE; | |
STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE; | |
STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE; | |
STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPath, __reserved LPCVOID pvResevered) PURE; | |
STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, __reserved LPCVOID pvResevered) PURE; | |
STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, __reserved LPCVOID pvResevered) PURE; | |
}; | |
//========================================================================== | |
// IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces | |
// 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. | |
// | |
//========================================================================== | |
//------------------------------------------------------------------------- | |
// | |
// IDockingWindowSite interface | |
// | |
// A site implements this interface so the object can negotiate for | |
// and inquire about real estate on the site. | |
// | |
// [Member functions] | |
// | |
// IDockingWindowSite::GetBorderDW(punkObj, prcBorder) | |
// Site returns the bounding rectangle of the given source object | |
// (punkObj). | |
// | |
// IDockingWindowSite::RequestBorderSpaceDW(punkObj, pbw) | |
// Object requests that the site makes room for it, as specified in | |
// *pbw. | |
// | |
// IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw) | |
// Object requests that the site set the border spacing to the size | |
// specified in *pbw. | |
// | |
//------------------------------------------------------------------------- | |
#undef INTERFACE | |
#define INTERFACE IDockingWindowSite | |
DECLARE_INTERFACE_IID_(IDockingWindowSite, IOleWindow, "2a342fc2-7b26-11d0-8ca9-00a0c92dbfe8") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IOleWindow methods *** | |
STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; | |
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | |
// *** IDockingWindowSite methods *** | |
STDMETHOD(GetBorderDW) (THIS_ IUnknown* punkObj, LPRECT prcBorder) PURE; | |
STDMETHOD(RequestBorderSpaceDW) (THIS_ IUnknown* punkObj, LPCBORDERWIDTHS pbw) PURE; | |
STDMETHOD(SetBorderSpaceDW) (THIS_ IUnknown* punkObj, LPCBORDERWIDTHS pbw) PURE; | |
}; | |
//------------------------------------------------------------------------- | |
// | |
// IDockingWindowFrame interface | |
// | |
// [Member functions] | |
// | |
// IDockingWindowFrame::AddToolbar(punkSrc, pwszItem, dwReserved) | |
// | |
// IDockingWindowFrame::RemoveToolbar(punkSrc, dwRemoveFlags) | |
// | |
// IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv) | |
// | |
//------------------------------------------------------------------------- | |
// flags for RemoveToolbar | |
#define DWFRF_NORMAL 0x0000 | |
#define DWFRF_DELETECONFIGDATA 0x0001 | |
// flags for AddToolbar | |
#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 Full Screen mode | |
#undef INTERFACE | |
#define INTERFACE IDockingWindowFrame | |
DECLARE_INTERFACE_IID_(IDockingWindowFrame, IOleWindow, "47d2657a-7b27-11d0-8ca9-00a0c92dbfe8") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IOleWindow methods *** | |
STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; | |
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | |
// *** IDockingWindowFrame methods *** | |
STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) PURE; | |
STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE; | |
STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PURE; | |
}; | |
#if (_WIN32_IE >= 0x0400) | |
/* ***************** IThumbnailCapture | |
* CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specified | |
* size as an hbitmap | |
*/ | |
#undef INTERFACE | |
#define INTERFACE IThumbnailCapture | |
DECLARE_INTERFACE_IID_(IThumbnailCapture, IUnknown, "4ea39266-7211-409f-b622-f63dbd16c533") | |
{ | |
// *** IThumbnailCapture methods *** | |
STDMETHOD (CaptureThumbnail) ( THIS_ const SIZE * pMaxSize, | |
IUnknown * pHTMLDoc2, | |
HBITMAP * phbmThumbnail ) PURE; | |
}; | |
typedef IThumbnailCapture * LPTHUMBNAILCAPTURE; | |
#endif | |
#if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_VISTA) | |
#include <pshpack8.h> | |
typedef struct _EnumImageStoreDATAtag | |
{ | |
WCHAR szPath[MAX_PATH]; | |
FILETIME ftTimeStamp; | |
} ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA; | |
#include <poppack.h> /* Return to byte packing */ | |
#undef INTERFACE | |
#define INTERFACE IEnumShellImageStore | |
DECLARE_INTERFACE_IID_( IEnumShellImageStore, IUnknown, "6DFD582B-92E3-11D1-98A3-00C04FB687DA" ) | |
{ | |
STDMETHOD ( QueryInterface ) ( THIS_ REFIID riid, void **ppv ) PURE; | |
STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; | |
STDMETHOD_( ULONG, Release ) ( THIS ) PURE; | |
STDMETHOD ( Reset ) ( THIS ) PURE; | |
STDMETHOD ( Next ) ( THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA * prgElt, ULONG * pceltFetched ) PURE; | |
STDMETHOD ( Skip ) ( THIS_ ULONG celt ) PURE; | |
STDMETHOD ( Clone ) ( THIS_ IEnumShellImageStore ** ppEnum ) PURE; | |
}; | |
typedef IEnumShellImageStore * LPENUMSHELLIMAGESTORE; | |
// flags used to determine the capabilities of the storage for the images | |
#define SHIMSTCAPFLAG_LOCKABLE 0x0001 // does the store require/support locking | |
#define SHIMSTCAPFLAG_PURGEABLE 0x0002 // does the store require dead items purging externally ? | |
#undef INTERFACE | |
#define INTERFACE IShellImageStore | |
// this interface is used to manipulate the Image cache. It can potentially be used | |
// in a free threaded manner in conjunction with the Lock parameter to Open and close | |
DECLARE_INTERFACE_IID_( IShellImageStore, IUnknown, "48C8118C-B924-11D1-98D5-00C04FB687DA" ) | |
{ | |
STDMETHOD ( QueryInterface )( THIS_ REFIID riid, void **ppv ) PURE; | |
STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; | |
STDMETHOD_( ULONG, Release ) ( THIS ) PURE; | |
// if the lock parameter is used, then all other calls into | |
// open and/or create will block until the lock is released. | |
STDMETHOD ( Open ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; | |
STDMETHOD ( Create ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; | |
// if the lock is passed to either of these two methods, it releases the lock | |
// once the operation is complete. | |
STDMETHOD ( ReleaseLock ) ( THIS_ DWORD const * pdwLock ) PURE; | |
STDMETHOD ( Close ) ( THIS_ DWORD const * pdwLock ) PURE; | |
STDMETHOD ( Commit ) ( THIS_ DWORD const * pdwLock ) PURE; | |
STDMETHOD ( IsLocked ) ( THIS ) PURE; | |
STDMETHOD ( GetMode ) ( THIS_ DWORD * pdwMode ) PURE; | |
STDMETHOD ( GetCapabilities ) ( THIS_ DWORD * pdwCapMask ) PURE; | |
STDMETHOD ( AddEntry ) ( THIS_ LPCWSTR pszName, const FILETIME * pftTimeStamp, DWORD dwMode, HBITMAP hImage ) PURE; | |
STDMETHOD ( GetEntry ) ( THIS_ LPCWSTR pszName, DWORD dwMode, HBITMAP * phImage ) PURE; | |
STDMETHOD ( DeleteEntry ) ( THIS_ LPCWSTR pszName ) PURE; | |
STDMETHOD ( IsEntryInStore ) ( THIS_ LPCWSTR pszName, FILETIME * pftTimeStamp ) PURE; | |
STDMETHOD ( Enum ) ( THIS_ LPENUMSHELLIMAGESTORE * ppEnum ) PURE; | |
}; | |
typedef IShellImageStore * LPSHELLIMAGESTORE; | |
#endif // (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_VISTA) | |
#if (_WIN32_IE >= 0x0400) | |
//// IShellFolderBand | |
// Field mask | |
#define ISFB_MASK_STATE 0x00000001 // TRUE if dwStateMask and dwState 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_SHELLFOLDER 0x00000008 | |
#define ISFB_MASK_IDLIST 0x00000010 | |
#define ISFB_MASK_COLORS 0x00000020 // TRUE if crXXXX fields are valid (except bkgnd) | |
#define ISFB_STATE_DEFAULT 0x00000000 | |
#define ISFB_STATE_DEBOSSED 0x00000001 | |
#define ISFB_STATE_ALLOWRENAME 0x00000002 | |
#define ISFB_STATE_NOSHOWTEXT 0x00000004 // TRUE if _fNoShowText | |
#define ISFB_STATE_CHANNELBAR 0x00000010 // TRUE if we want NavigateTarget support | |
#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_NONAMESORT 0x00000080 // TRUE if band should _not_ sort icons by name | |
#define ISFB_STATE_BTNMINSIZE 0x00000100 // TRUE if band should report min thickness of button | |
#define ISFBVIEWMODE_SMALLICONS 0x0001 | |
#define ISFBVIEWMODE_LARGEICONS 0x0002 | |
#if (_WIN32_IE < _WIN32_IE_IE70) | |
#define ISFBVIEWMODE_LOGOS 0x0003 | |
#endif | |
#include <pshpack8.h> | |
typedef struct { | |
DWORD dwMask; // [in] ISFB_MASK mask of valid fields from crBkgnd on | |
DWORD dwStateMask; // [in] ISFB_STATE mask of dwState bits being set/queried | |
DWORD dwState; // [in/out] ISFB_STATE bits | |
COLORREF crBkgnd; // [in/out] | |
COLORREF crBtnLt; // [in/out] | |
COLORREF crBtnDk; // [in/out] | |
WORD wViewMode; // [in/out] | |
WORD wAlign; // not used (yet) | |
IShellFolder * psf; // [out] | |
PIDLIST_ABSOLUTE pidl; // [out] | |
} BANDINFOSFB, *PBANDINFOSFB; | |
#include <poppack.h> /* Return to byte packing */ | |
#undef INTERFACE | |
#define INTERFACE IShellFolderBand | |
DECLARE_INTERFACE_IID_(IShellFolderBand, IUnknown, "7FE80CC8-C247-11d0-B93A-00A0C90312E1") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellFolderBand Methods *** | |
STDMETHOD(InitializeSFB)(THIS_ __in_opt IShellFolder *psf, __in_opt PCIDLIST_ABSOLUTE pidl) PURE; | |
STDMETHOD(SetBandInfoSFB)(THIS_ __in PBANDINFOSFB pbi) PURE; | |
STDMETHOD(GetBandInfoSFB)(THIS_ __inout PBANDINFOSFB pbi) PURE; | |
}; | |
// Command Target IDs | |
enum { | |
SFBID_PIDLCHANGED, | |
}; | |
//// IDeskBarClient | |
#undef INTERFACE | |
#define INTERFACE IDeskBarClient | |
DECLARE_INTERFACE_IID_(IDeskBarClient, IOleWindow, "EB0FE175-1A3A-11D0-89B3-00A0C90A90AC") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IOleWindow methods *** | |
STDMETHOD(GetWindow) (THIS_ __out HWND * lphwnd) PURE; | |
STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | |
// *** IDeskBarClient methods *** | |
STDMETHOD(SetDeskBarSite) (THIS_ __in_opt IUnknown* punkSite) PURE; | |
STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE; | |
STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE; | |
STDMETHOD(GetSize) (THIS_ DWORD dwWhich, __out LPRECT prc) PURE; | |
}; | |
#define DBC_GS_IDEAL 0 // get the ideal size | |
#define DBC_GS_SIZEDOWN 1 // clip the height of a rect to a multiple of the rebar's integral size | |
#define DBC_HIDE 0 // Band is hidden (being destroyed) | |
#define DBC_SHOW 1 // Band is visible | |
#define DBC_SHOWOBSCURE 2 // Band is completely obscured | |
enum { | |
DBCID_EMPTY = 0, // bandsite is empty | |
DBCID_ONDRAG = 1, // (down)DragMoveEnter/Leave vaIn:I4:eDrag | |
DBCID_CLSIDOFBAR = 2, // clsid of bar inside | |
DBCID_RESIZE = 3, // resize from keyboard | |
DBCID_GETBAR = 4, // returns vaOut:VT_UNKNOWN of hosting dockbar (IDeskBar) | |
}; | |
#endif // _WIN32_IE > 0x0400 | |
#if (_WIN32_IE >= 0x400) | |
// | |
// We need to make sure that WININET.H is included before this interface is | |
// used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH | |
// | |
#ifdef _WININET_ | |
// | |
// Flags and structures used by IActiveDesktop | |
// | |
typedef struct _tagWALLPAPEROPT | |
{ | |
DWORD dwSize; // size of this Structure. | |
DWORD dwStyle; // WPSTYLE_* mentioned above | |
} | |
WALLPAPEROPT; | |
typedef WALLPAPEROPT *LPWALLPAPEROPT; | |
typedef const WALLPAPEROPT *LPCWALLPAPEROPT; | |
typedef struct _tagCOMPONENTSOPT | |
{ | |
DWORD dwSize; //Size of this structure | |
BOOL fEnableComponents; //Enable components? | |
BOOL fActiveDesktop; // Active desktop enabled ? | |
} | |
COMPONENTSOPT; | |
typedef COMPONENTSOPT *LPCOMPONENTSOPT; | |
typedef const COMPONENTSOPT *LPCCOMPONENTSOPT; | |
typedef struct _tagCOMPPOS | |
{ | |
DWORD dwSize; //Size of this structure | |
int iLeft; //Left of top-left corner in screen co-ordinates. | |
int iTop; //Top of top-left corner in screen co-ordinates. | |
DWORD dwWidth; // Width in pixels. | |
DWORD dwHeight; // Height in pixels. | |
int izIndex; // Indicates the Z-order of the component. | |
BOOL fCanResize; // Is the component resizeable? | |
BOOL fCanResizeX; // Resizeable in X-direction? | |
BOOL fCanResizeY; // Resizeable in Y-direction? | |
int iPreferredLeftPercent; //Left of top-left corner as percent of screen width | |
int iPreferredTopPercent; //Top of top-left corner as percent of screen height | |
} | |
COMPPOS; | |
typedef COMPPOS *LPCOMPPOS; | |
typedef const COMPPOS *LPCCOMPPOS; | |
typedef struct _tagCOMPSTATEINFO | |
{ | |
DWORD dwSize; // Size of this structure. | |
int iLeft; // Left of the top-left corner in screen co-ordinates. | |
int iTop; // Top of top-left corner in screen co-ordinates. | |
DWORD dwWidth; // Width in pixels. | |
DWORD dwHeight; // Height in pixels. | |
DWORD dwItemState; // State of the component (full-screen mode or split-screen or normal state. | |
} | |
COMPSTATEINFO; | |
typedef COMPSTATEINFO *LPCOMPSTATEINFO; | |
typedef const COMPSTATEINFO *LPCCOMPSTATEINFO; | |
#define COMPONENT_TOP (0x3fffffff) // izOrder value meaning component is at the top | |
// iCompType values | |
#define COMP_TYPE_HTMLDOC 0 | |
#define COMP_TYPE_PICTURE 1 | |
#define COMP_TYPE_WEBSITE 2 | |
#define COMP_TYPE_CONTROL 3 | |
#define COMP_TYPE_CFHTML 4 | |
#define COMP_TYPE_MAX 4 | |
// The following is the COMPONENT structure used in IE4.01, IE4.0 and Memphis. It is kept here for compatibility | |
// reasons. | |
typedef struct _tagIE4COMPONENT | |
{ | |
DWORD dwSize; //Size of this structure | |
DWORD dwID; //Reserved: Set it always to zero. | |
int iComponentType; //One of COMP_TYPE_* | |
BOOL fChecked; // Is this component enabled? | |
BOOL fDirty; // Had the component been modified and not yet saved to disk? | |
BOOL fNoScroll; // Is the component scrollable? | |
COMPPOS cpPos; // Width, height etc., | |
WCHAR wszFriendlyName[MAX_PATH]; // Friendly name of component. | |
WCHAR wszSource[INTERNET_MAX_URL_LENGTH]; //URL of the component. | |
WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; //Subscrined URL | |
} | |
IE4COMPONENT; | |
typedef IE4COMPONENT *LPIE4COMPONENT; | |
typedef const IE4COMPONENT *LPCIE4COMPONENT; | |
// | |
// The following is the new NT5 component structure. Note that the initial portion of this component exactly | |
// matches the IE4COMPONENT structure. All new fields are added at the bottom and the dwSize field is used to | |
// distinguish between IE4COMPONENT and the new COMPONENT structures. | |
// | |
typedef struct _tagCOMPONENT | |
{ | |
DWORD dwSize; //Size of this structure | |
DWORD dwID; //Reserved: Set it always to zero. | |
int iComponentType; //One of COMP_TYPE_* | |
BOOL fChecked; // Is this component enabled? | |
BOOL fDirty; // Had the component been modified and not yet saved to disk? | |
BOOL fNoScroll; // Is the component scrollable? | |
COMPPOS cpPos; // Width, height etc., | |
WCHAR wszFriendlyName[MAX_PATH]; // Friendly name of component. | |
WCHAR wszSource[INTERNET_MAX_URL_LENGTH]; //URL of the component. | |
WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; //Subscrined URL | |
//New fields are added below. Everything above here must exactly match the IE4COMPONENT Structure. | |
DWORD dwCurItemState; // Current state of the Component. | |
COMPSTATEINFO csiOriginal; // Original state of the component when it was first added. | |
COMPSTATEINFO csiRestored; // Restored state of the component. | |
} | |
COMPONENT; | |
typedef COMPONENT *LPCOMPONENT; | |
typedef const COMPONENT *LPCCOMPONENT; | |
// Defines for dwCurItemState | |
#define IS_NORMAL 0x00000001 | |
#define IS_FULLSCREEN 0x00000002 | |
#define IS_SPLIT 0x00000004 | |
#define IS_VALIDSIZESTATEBITS (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN) // The set of IS_* state bits which define the "size" of the component - these bits are mutually exclusive. | |
#define IS_VALIDSTATEBITS (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN | 0x80000000 | 0x40000000) // All of the currently defined IS_* bits. | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::ApplyChanges() | |
#define AD_APPLY_SAVE 0x00000001 | |
#define AD_APPLY_HTMLGEN 0x00000002 | |
#define AD_APPLY_REFRESH 0x00000004 | |
#define AD_APPLY_ALL (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_REFRESH) | |
#define AD_APPLY_FORCE 0x00000008 | |
#define AD_APPLY_BUFFERED_REFRESH 0x00000010 | |
#define AD_APPLY_DYNAMICREFRESH 0x00000020 | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::GetWallpaper() | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define AD_GETWP_BMP 0x00000000 | |
#define AD_GETWP_IMAGE 0x00000001 | |
#define AD_GETWP_LAST_APPLIED 0x00000002 | |
#endif | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::GetWallpaperOptions() | |
// IActiveDesktop::SetWallpaperOptions() | |
#define WPSTYLE_CENTER 0 | |
#define WPSTYLE_TILE 1 | |
#define WPSTYLE_STRETCH 2 | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
#define WPSTYLE_KEEPASPECT 3 | |
#define WPSTYLE_CROPTOFIT 4 | |
#define WPSTYLE_MAX 5 | |
#else | |
#define WPSTYLE_MAX 3 | |
#endif // NTDDI_WIN7 | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::ModifyComponent() | |
#define COMP_ELEM_TYPE 0x00000001 | |
#define COMP_ELEM_CHECKED 0x00000002 | |
#define COMP_ELEM_DIRTY 0x00000004 | |
#define COMP_ELEM_NOSCROLL 0x00000008 | |
#define COMP_ELEM_POS_LEFT 0x00000010 | |
#define COMP_ELEM_POS_TOP 0x00000020 | |
#define COMP_ELEM_SIZE_WIDTH 0x00000040 | |
#define COMP_ELEM_SIZE_HEIGHT 0x00000080 | |
#define COMP_ELEM_POS_ZINDEX 0x00000100 | |
#define COMP_ELEM_SOURCE 0x00000200 | |
#define COMP_ELEM_FRIENDLYNAME 0x00000400 | |
#define COMP_ELEM_SUBSCRIBEDURL 0x00000800 | |
#define COMP_ELEM_ORIGINAL_CSI 0x00001000 | |
#define COMP_ELEM_RESTORED_CSI 0x00002000 | |
#define COMP_ELEM_CURITEMSTATE 0x00004000 | |
#define COMP_ELEM_ALL (COMP_ELEM_TYPE | COMP_ELEM_CHECKED | COMP_ELEM_DIRTY | \ | |
COMP_ELEM_NOSCROLL | COMP_ELEM_POS_LEFT | COMP_ELEM_SIZE_WIDTH | \ | |
COMP_ELEM_SIZE_HEIGHT | COMP_ELEM_POS_ZINDEX | COMP_ELEM_SOURCE | \ | |
COMP_ELEM_FRIENDLYNAME | COMP_ELEM_POS_TOP | COMP_ELEM_SUBSCRIBEDURL | \ | |
COMP_ELEM_ORIGINAL_CSI | COMP_ELEM_RESTORED_CSI | COMP_ELEM_CURITEMSTATE) | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::AddDesktopItemWithUI() | |
typedef enum tagDTI_ADTIWUI | |
{ | |
DTI_ADDUI_DEFAULT = 0x00000000, | |
DTI_ADDUI_DISPSUBWIZARD = 0x00000001, | |
DTI_ADDUI_POSITIONITEM = 0x00000002, | |
}; | |
//////////////////////////////////////////// | |
// Flags for IActiveDesktop::AddUrl() | |
#define ADDURL_SILENT 0X0001 | |
//////////////////////////////////////////// | |
// Default positions for ADI | |
#define COMPONENT_DEFAULT_LEFT (0xFFFF) | |
#define COMPONENT_DEFAULT_TOP (0xFFFF) | |
// | |
// Interface for manipulating the Active Desktop. | |
// | |
#undef INTERFACE | |
#define INTERFACE IActiveDesktop | |
DECLARE_INTERFACE_IID_(IActiveDesktop, IUnknown, "f490eb00-1240-11d1-9888-006097deacf9") | |
{ | |
// IUnknown methods | |
STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | |
STDMETHOD_(ULONG, Release) ( THIS ) PURE; | |
// IActiveDesktop methods | |
STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE; | |
STDMETHOD (GetWallpaper)(THIS_ __out_ecount(cchWallpaper) LPWSTR pwszWallpaper, UINT cchWallpaper, DWORD dwFlags) PURE; | |
STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE; | |
STDMETHOD (GetWallpaperOptions)(THIS_ __inout LPWALLPAPEROPT pwpo, DWORD dwReserved) PURE; | |
STDMETHOD (SetWallpaperOptions)(THIS_ __in LPCWALLPAPEROPT pwpo, DWORD dwReserved) PURE; | |
STDMETHOD (GetPattern)(THIS_ __out_ecount(cchPattern) LPWSTR pwszPattern, UINT cchPattern, DWORD dwReserved) PURE; | |
STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE; | |
STDMETHOD (GetDesktopItemOptions)(THIS_ __inout LPCOMPONENTSOPT pco, DWORD dwReserved) PURE; | |
STDMETHOD (SetDesktopItemOptions)(THIS_ __in LPCCOMPONENTSOPT pco, DWORD dwReserved) PURE; | |
STDMETHOD (AddDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, __in LPCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (ModifyDesktopItem)(THIS_ __inout LPCCOMPONENT pcomp, DWORD dwFlags) PURE; | |
STDMETHOD (RemoveDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (GetDesktopItemCount)(THIS_ __out LPINT lpiCount, DWORD dwReserved) PURE; | |
STDMETHOD (GetDesktopItem)(THIS_ int nComponent, __inout LPCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, __inout LPCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, __in LPCOMPONENT pcomp, DWORD dwReserved) PURE; | |
STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, __in LPCOMPONENT pcomp, DWORD dwFlags) PURE; | |
STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, __inout LPCOMPONENT pcomp, DWORD dwReserved) PURE; | |
}; | |
typedef IActiveDesktop * LPACTIVEDESKTOP; | |
// Flags for SetSafeMode | |
#define SSM_CLEAR 0x0000 | |
#define SSM_SET 0x0001 | |
#define SSM_REFRESH 0x0002 | |
#define SSM_UPDATE 0x0004 | |
// Flags for Set/GetScheme | |
#define SCHEME_DISPLAY 0x0001 | |
#define SCHEME_EDIT 0x0002 | |
#define SCHEME_LOCAL 0x0004 | |
#define SCHEME_GLOBAL 0x0008 | |
#define SCHEME_REFRESH 0x0010 | |
#define SCHEME_UPDATE 0x0020 | |
#define SCHEME_DONOTUSE 0x0040 // used to be SCHEME_ENUMERATE; no longer supported | |
#define SCHEME_CREATE 0x0080 | |
#undef INTERFACE | |
#define INTERFACE IActiveDesktopP | |
DECLARE_INTERFACE_IID_(IActiveDesktopP, IUnknown, "52502EE0-EC80-11D0-89AB-00C04FC2972D") | |
{ | |
// IUnknown methods | |
STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | |
STDMETHOD_(ULONG, Release) ( THIS ) PURE; | |
// IActiveDesktopP methods | |
STDMETHOD (SetSafeMode)(THIS_ DWORD dwFlags) PURE; | |
STDMETHOD (EnsureUpdateHTML)(THIS) PURE; | |
STDMETHOD (SetScheme)(THIS_ LPCWSTR pwszSchemeName, DWORD dwFlags) PURE; | |
STDMETHOD (GetScheme)(THIS_ __out_ecount(*lpdwcchBuffer) LPWSTR pwszSchemeName, __inout DWORD *lpdwcchBuffer, DWORD dwFlags) PURE; | |
// | |
}; | |
typedef IActiveDesktopP * LPACTIVEDESKTOPP; | |
//Flags for GetObjectFlags | |
#define GADOF_DIRTY 0x00000001 | |
#undef INTERFACE | |
#define INTERFACE IADesktopP2 | |
DECLARE_INTERFACE_IID_(IADesktopP2, IUnknown, "B22754E2-4574-11d1-9888-006097DEACF9") | |
{ | |
// IUnknown methods | |
STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | |
STDMETHOD_(ULONG, Release) ( THIS ) PURE; | |
// IADesktopP2 methods | |
STDMETHOD (ReReadWallpaper)(THIS) PURE; | |
STDMETHOD (GetADObjectFlags)(THIS_ __out DWORD *lpdwFlags, DWORD dwMask) PURE; | |
STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE; | |
STDMETHOD (MakeDynamicChanges)(THIS_ __in IOleObject *pOleObj) PURE; | |
}; | |
typedef IADesktopP2 * LPADESKTOPP2; | |
#endif // _WININET_ | |
#if (_WIN32_IE >= 0x0500) | |
#define MAX_COLUMN_NAME_LEN 80 | |
#define MAX_COLUMN_DESC_LEN 128 | |
#include <pshpack1.h> | |
typedef struct { | |
SHCOLUMNID scid; // OUT the unique identifier of this column | |
VARTYPE vt; // OUT the native type of the data returned | |
DWORD fmt; // OUT this listview format (LVCFMT_LEFT, usually) | |
UINT cChars; // OUT the default width of the column, in characters | |
DWORD csFlags; // OUT SHCOLSTATE flags | |
WCHAR wszTitle[MAX_COLUMN_NAME_LEN]; // OUT the title of the column | |
WCHAR wszDescription[MAX_COLUMN_DESC_LEN]; // OUT full description of this column | |
} SHCOLUMNINFO, *LPSHCOLUMNINFO; | |
typedef const SHCOLUMNINFO* LPCSHCOLUMNINFO; | |
#include <poppack.h> /* Return to default */ | |
#include <pshpack8.h> | |
typedef struct { | |
ULONG dwFlags; // initialization flags | |
ULONG dwReserved; // reserved for future use. | |
WCHAR wszFolder[MAX_PATH]; // fully qualified folder path (or empty if multiple folders) | |
} SHCOLUMNINIT, *LPSHCOLUMNINIT; | |
typedef const SHCOLUMNINIT* LPCSHCOLUMNINIT; | |
#define SHCDF_UPDATEITEM 0x00000001 // this flag is a hint that the file has changed since the last call to GetItemData | |
typedef struct { | |
ULONG dwFlags; // combination of SHCDF_ flags. | |
DWORD dwFileAttributes; // file attributes. | |
ULONG dwReserved; // reserved for future use. | |
WCHAR* pwszExt; // address of file name extension | |
WCHAR wszFile[MAX_PATH]; // Absolute path of file. | |
} SHCOLUMNDATA, *LPSHCOLUMNDATA; | |
typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA; | |
#include <poppack.h> /* Return to byte packing */ | |
#undef INTERFACE | |
#define INTERFACE IColumnProvider | |
// Note: these objects must be threadsafe! GetItemData _will_ be called | |
// simultaneously from multiple threads. | |
DECLARE_INTERFACE_IID_(IColumnProvider, IUnknown, "E8025004-1C42-11d2-BE2C-00A0C9A83DA1") | |
{ | |
// IUnknown methods | |
STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG, AddRef)(THIS) PURE; | |
STDMETHOD_(ULONG, Release)(THIS) PURE; | |
// IColumnProvider methods | |
STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE; | |
STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, __out SHCOLUMNINFO *psci) PURE; | |
STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, __out VARIANT *pvarData) PURE; | |
}; | |
#endif // _WIN32_IE >= 0x0500 | |
#endif // _WIN32_IE | |
//========================================================================== | |
// Clipboard format which may be supported by IDataObject from system | |
// defined shell folders (such as directories, network, ...). | |
//========================================================================== | |
#define CFSTR_SHELLIDLIST TEXT("Shell IDList Array") // CF_IDLIST | |
#define CFSTR_SHELLIDLISTOFFSET TEXT("Shell Object Offsets") // CF_OBJECTPOSITIONS | |
#define CFSTR_NETRESOURCES TEXT("Net Resource") // CF_NETRESOURCE | |
#define CFSTR_FILEDESCRIPTORA TEXT("FileGroupDescriptor") // CF_FILEGROUPDESCRIPTORA | |
#define CFSTR_FILEDESCRIPTORW TEXT("FileGroupDescriptorW") // CF_FILEGROUPDESCRIPTORW | |
#define CFSTR_FILECONTENTS TEXT("FileContents") // CF_FILECONTENTS | |
#define CFSTR_FILENAMEA TEXT("FileName") // CF_FILENAMEA | |
#define CFSTR_FILENAMEW TEXT("FileNameW") // CF_FILENAMEW | |
#define CFSTR_PRINTERGROUP TEXT("PrinterFriendlyName") // CF_PRINTERS | |
#define CFSTR_FILENAMEMAPA TEXT("FileNameMap") // CF_FILENAMEMAPA | |
#define CFSTR_FILENAMEMAPW TEXT("FileNameMapW") // CF_FILENAMEMAPW | |
#define CFSTR_SHELLURL TEXT("UniformResourceLocator") | |
#define CFSTR_INETURLA CFSTR_SHELLURL | |
#define CFSTR_INETURLW TEXT("UniformResourceLocatorW") | |
#define CFSTR_PREFERREDDROPEFFECT TEXT("Preferred DropEffect") | |
#define CFSTR_PERFORMEDDROPEFFECT TEXT("Performed DropEffect") | |
#define CFSTR_PASTESUCCEEDED TEXT("Paste Succeeded") | |
#define CFSTR_INDRAGLOOP TEXT("InShellDragLoop") | |
#define CFSTR_MOUNTEDVOLUME TEXT("MountedVolume") | |
#define CFSTR_PERSISTEDDATAOBJECT TEXT("PersistedDataObject") | |
#define CFSTR_TARGETCLSID TEXT("TargetCLSID") // HGLOBAL with a CLSID of the drop target | |
#define CFSTR_LOGICALPERFORMEDDROPEFFECT TEXT("Logical Performed DropEffect") | |
#define CFSTR_AUTOPLAY_SHELLIDLISTS TEXT("Autoplay Enumerated IDList Array") // (HGLOBAL with LPIDA) | |
#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 | |
#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORW | |
#define CFSTR_FILENAME CFSTR_FILENAMEW | |
#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPW | |
#define CFSTR_INETURL CFSTR_INETURLW | |
#else | |
#define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORA | |
#define CFSTR_FILENAME CFSTR_FILENAMEA | |
#define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPA | |
#define CFSTR_INETURL CFSTR_INETURLA | |
#endif | |
#define DVASPECT_SHORTNAME 2 // use for CF_HDROP to get short name version of file paths | |
#define DVASPECT_COPY 3 // use to indicate format is a "Copy" of the data (FILECONTENTS, FILEDESCRIPTOR, etc) | |
#define DVASPECT_LINK 4 // use to indicate format is a "Shortcut" to the data (FILECONTENTS, FILEDESCRIPTOR, etc) | |
#include <pshpack8.h> | |
// | |
// format of CF_NETRESOURCE | |
// | |
typedef struct _NRESARRAY { // anr | |
UINT cItems; | |
NETRESOURCE nr[1]; | |
} NRESARRAY, * LPNRESARRAY; | |
#include <poppack.h> /* Return to byte packing */ | |
// | |
// format of CF_IDLIST | |
// | |
typedef struct _IDA { | |
UINT cidl; // number of relative IDList | |
UINT aoffset[1]; // [0]: folder IDList, [1]-[cidl]: item IDList | |
} CIDA, * LPIDA; | |
// | |
// FILEDESCRIPTOR.dwFlags field indicate which fields are valid in the FILEDESCRIPTOR struct | |
// | |
typedef enum { | |
FD_CLSID = 0x00000001, | |
FD_SIZEPOINT = 0x00000002, | |
FD_ATTRIBUTES = 0x00000004, | |
FD_CREATETIME = 0x00000008, | |
FD_ACCESSTIME = 0x00000010, | |
FD_WRITESTIME = 0x00000020, | |
FD_FILESIZE = 0x00000040, | |
FD_PROGRESSUI = 0x00004000, // Show Progress UI w/Drag and Drop | |
FD_LINKUI = 0x00008000, // 'link' UI is prefered | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
FD_UNICODE = (int) 0x80000000, // this descriptor is UNICODE | |
#endif | |
} FD_FLAGS; | |
typedef struct _FILEDESCRIPTORA { | |
DWORD dwFlags; | |
CLSID clsid; | |
SIZEL sizel; | |
POINTL pointl; | |
DWORD dwFileAttributes; | |
FILETIME ftCreationTime; | |
FILETIME ftLastAccessTime; | |
FILETIME ftLastWriteTime; | |
DWORD nFileSizeHigh; | |
DWORD nFileSizeLow; | |
CHAR cFileName[ MAX_PATH ]; | |
} FILEDESCRIPTORA, *LPFILEDESCRIPTORA; | |
typedef struct _FILEDESCRIPTORW { | |
DWORD dwFlags; | |
CLSID clsid; | |
SIZEL sizel; | |
POINTL pointl; | |
DWORD dwFileAttributes; | |
FILETIME ftCreationTime; | |
FILETIME ftLastAccessTime; | |
FILETIME ftLastWriteTime; | |
DWORD nFileSizeHigh; | |
DWORD nFileSizeLow; | |
WCHAR cFileName[ MAX_PATH ]; | |
} FILEDESCRIPTORW, *LPFILEDESCRIPTORW; | |
#ifdef UNICODE | |
#define FILEDESCRIPTOR FILEDESCRIPTORW | |
#define LPFILEDESCRIPTOR LPFILEDESCRIPTORW | |
#else | |
#define FILEDESCRIPTOR FILEDESCRIPTORA | |
#define LPFILEDESCRIPTOR LPFILEDESCRIPTORA | |
#endif | |
// | |
// format of CF_FILEGROUPDESCRIPTOR | |
// | |
typedef struct _FILEGROUPDESCRIPTORA { // fgd | |
UINT cItems; | |
FILEDESCRIPTORA fgd[1]; | |
} FILEGROUPDESCRIPTORA, * LPFILEGROUPDESCRIPTORA; | |
typedef struct _FILEGROUPDESCRIPTORW { // fgd | |
UINT cItems; | |
FILEDESCRIPTORW fgd[1]; | |
} FILEGROUPDESCRIPTORW, * LPFILEGROUPDESCRIPTORW; | |
#ifdef UNICODE | |
#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORW | |
#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORW | |
#else | |
#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORA | |
#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORA | |
#endif | |
// | |
// format of CF_HDROP and CF_PRINTERS, in the HDROP case the data that follows | |
// is a double null terinated list of file names, for printers they are printer | |
// friendly names | |
// | |
typedef struct _DROPFILES { | |
DWORD pFiles; // offset of file list | |
POINT pt; // drop point (client coords) | |
BOOL fNC; // is it on NonClient area | |
// and pt is in screen coords | |
BOOL fWide; // WIDE character switch | |
} DROPFILES, *LPDROPFILES; | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
typedef struct | |
{ | |
UINT cItems; // number of items in rgdwFileAttributes array | |
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_FILE_ATTRIBUTES_ARRAY | |
#endif | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
typedef enum | |
{ | |
DROPIMAGE_INVALID = -1, // no image preference (use default) | |
DROPIMAGE_NONE = 0, // red "no" circle | |
DROPIMAGE_COPY = DROPEFFECT_COPY, // plus for copy | |
DROPIMAGE_MOVE = DROPEFFECT_MOVE, // movement arrow for move | |
DROPIMAGE_LINK = DROPEFFECT_LINK, // link arrow for link | |
DROPIMAGE_LABEL = 6, // tag icon to indicate metadata will be changed | |
DROPIMAGE_WARNING = 7, // yellow exclamation, something is amiss with the operation | |
DROPIMAGE_NOIMAGE = 8, // no image at all | |
} 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_VISTA) | |
//====== File System Notification APIs =============================== | |
// | |
typedef struct _SHChangeNotifyEntry | |
{ | |
PCIDLIST_ABSOLUTE pidl; | |
BOOL fRecursive; | |
} SHChangeNotifyEntry; | |
// | |
// 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_CREATE 0x00000002L | |
#define SHCNE_DELETE 0x00000004L | |
#define SHCNE_MKDIR 0x00000008L | |
#define SHCNE_RMDIR 0x00000010L | |
#define SHCNE_MEDIAINSERTED 0x00000020L | |
#define SHCNE_MEDIAREMOVED 0x00000040L | |
#define SHCNE_DRIVEREMOVED 0x00000080L | |
#define SHCNE_DRIVEADD 0x00000100L | |
#define SHCNE_NETSHARE 0x00000200L | |
#define SHCNE_NETUNSHARE 0x00000400L | |
#define SHCNE_ATTRIBUTES 0x00000800L | |
#define SHCNE_UPDATEDIR 0x00001000L | |
#define SHCNE_UPDATEITEM 0x00002000L | |
#define SHCNE_SERVERDISCONNECT 0x00004000L | |
#define SHCNE_UPDATEIMAGE 0x00008000L | |
#define SHCNE_DRIVEADDGUI 0x00010000L | |
#define SHCNE_RENAMEFOLDER 0x00020000L | |
#define SHCNE_FREESPACE 0x00040000L | |
#if (_WIN32_IE >= 0x0400) | |
// SHCNE_EXTENDED_EVENT: the extended event is identified in dwItem1, | |
// packed in LPITEMIDLIST format (same as SHCNF_DWORD packing). | |
// Additional information can be passed in the dwItem2 parameter | |
// of SHChangeNotify (called "pidl2" below), which if present, must also | |
// be in LPITEMIDLIST format. | |
// | |
// Unlike the standard events, the extended events are ORDINALs, so we | |
// don't run out of bits. Extended events follow the SHCNEE_* naming | |
// convention. | |
// | |
// The dwItem2 parameter varies according to the extended event. | |
#define SHCNE_EXTENDED_EVENT 0x04000000L | |
#endif // _WIN32_IE >= 0x0400 | |
#define SHCNE_ASSOCCHANGED 0x08000000L | |
#define SHCNE_DISKEVENTS 0x0002381FL | |
#define SHCNE_GLOBALEVENTS 0x0C0581E0L // Events that dont match pidls first | |
#define SHCNE_ALLEVENTS 0x7FFFFFFFL | |
#define SHCNE_INTERRUPT 0x80000000L // The presence of this flag indicates | |
// that the event was generated by an | |
// interrupt. It is stripped out before | |
// the clients of SHCNNotify_ see it. | |
#if (_WIN32_IE >= 0x0400) | |
// SHCNE_EXTENDED_EVENT extended events. These events are ordinals. | |
// This is not a bitfield. | |
#define SHCNEE_ORDERCHANGED 2L // pidl2 is the changed folder | |
#define SHCNEE_MSI_CHANGE 4L // pidl2 is a SHChangeProductKeyAsIDList | |
#define SHCNEE_MSI_UNINSTALL 5L // pidl2 is a SHChangeProductKeyAsIDList | |
#endif | |
// Flags | |
// uFlags & SHCNF_TYPE is an ID which indicates what dwItem1 and dwItem2 mean | |
#define SHCNF_IDLIST 0x0000 // LPITEMIDLIST | |
#define SHCNF_PATHA 0x0001 // path name | |
#define SHCNF_PRINTERA 0x0002 // printer friendly name | |
#define SHCNF_DWORD 0x0003 // DWORD | |
#define SHCNF_PATHW 0x0005 // path name | |
#define SHCNF_PRINTERW 0x0006 // printer friendly name | |
#define SHCNF_TYPE 0x00FF | |
#define SHCNF_FLUSH 0x1000 | |
#define SHCNF_FLUSHNOWAIT 0x3000 // includes SHCNF_FLUSH | |
#define SHCNF_NOTIFYRECURSIVE 0x10000 // Notify clients registered for any child | |
#ifdef UNICODE | |
#define SHCNF_PATH SHCNF_PATHW | |
#define SHCNF_PRINTER SHCNF_PRINTERW | |
#else | |
#define SHCNF_PATH SHCNF_PATHA | |
#define SHCNF_PRINTER SHCNF_PRINTERA | |
#endif | |
// | |
// APIs | |
// | |
SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, __in_opt LPCVOID dwItem1, __in_opt LPCVOID dwItem2); | |
// | |
// IShellChangeNotify | |
// | |
#undef INTERFACE | |
#define INTERFACE IShellChangeNotify | |
DECLARE_INTERFACE_IID_(IShellChangeNotify, IUnknown, "D82BE2B1-5764-11D0-A96E-00C04FD705A2") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellChangeNotify methods *** | |
STDMETHOD(OnChange) (THIS_ LONG lEvent, PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2) PURE; | |
} ; | |
// | |
// IQueryInfo | |
// | |
//------------------------------------------------------------------------- | |
// | |
// IQueryInfo interface | |
// | |
// [Methods] | |
// ::GetInfoTip() | |
//------------------------------------------------------------------------- | |
#undef INTERFACE | |
#define INTERFACE IQueryInfo | |
DECLARE_INTERFACE_IID_(IQueryInfo, IUnknown, "00021500-0000-0000-c000-000000000046") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IQueryInfo methods *** | |
STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, __out WCHAR **ppwszTip) PURE; | |
STDMETHOD(GetInfoFlags)(THIS_ __out DWORD *pdwFlags) PURE; | |
} ; | |
#define QITIPF_DEFAULT 0x00000000 | |
#define QITIPF_USENAME 0x00000001 | |
#define QITIPF_LINKNOTARGET 0x00000002 | |
#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 | |
#endif | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define QITIPF_SINGLELINE 0x00000010 | |
#endif | |
#define QIF_CACHED 0x00000001 | |
#define QIF_DONTEXPANDFOLDER 0x00000002 | |
// | |
// SHAddToRecentDocs | |
// | |
typedef enum | |
{ | |
SHARD_PIDL = 0x00000001L, | |
SHARD_PATHA = 0x00000002L, | |
SHARD_PATHW = 0x00000003L, | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
SHARD_APPIDINFO = 0x00000004L, // indicates the data type is a pointer to a SHARDAPPIDINFO structure | |
SHARD_APPIDINFOIDLIST = 0x00000005L, // indicates the data type is a pointer to a SHARDAPPIDINFOIDLIST structure | |
SHARD_LINK = 0x00000006L, // indicates the data type is a pointer to an IShellLink instance | |
SHARD_APPIDINFOLINK = 0x00000007L, // indicates the data type is a pointer to a SHARDAPPIDINFOLINK structure | |
SHARD_SHELLITEM = 0x00000008L, // indicates the data type is a pointer to an IShellItem instance | |
#endif | |
} SHARD; | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
typedef struct SHARDAPPIDINFO | |
{ | |
IShellItem *psi; // The namespace location of the the item that should be added to the recent docs folder. | |
PCWSTR pszAppID; // The id of the application that should be associated with this recent doc. | |
} SHARDAPPIDINFO; | |
typedef struct SHARDAPPIDINFOIDLIST | |
{ | |
PCIDLIST_ABSOLUTE pidl; // The idlist for the shell item that should be added to the recent docs folder. | |
PCWSTR pszAppID; // The id of the application that should be associated with this recent doc. | |
} SHARDAPPIDINFOIDLIST; | |
typedef struct SHARDAPPIDINFOLINK | |
{ | |
IShellLink *psl; // An IShellLink instance that when launched opens a recently used item in the specified | |
// application. This link is not added to the recent docs folder, but will be added to the | |
// specified application's destination list. | |
PCWSTR pszAppID; // The id of the application that should be associated with this recent doc. | |
} SHARDAPPIDINFOLINK; | |
#endif | |
#ifdef UNICODE | |
#define SHARD_PATH SHARD_PATHW | |
#else | |
#define SHARD_PATH SHARD_PATHA | |
#endif | |
// The type of the data pointed to by pv is a function of uFlags values that are SHARD_XXX values. PV can be a PCIDLIST_ABSOLUTE, PCWSTR, PCSTR, SHARDAPPIDINFO, or SHARDAPPIDINFOIDLIST. | |
SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv); | |
typedef struct _SHChangeDWORDAsIDList { | |
USHORT cb; | |
DWORD dwItem1; | |
DWORD dwItem2; | |
USHORT cbZero; | |
} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; | |
#if (NTDDI_VERSION >= NTDDI_WIN2K) | |
typedef struct _SHChangeUpdateImageIDList { | |
USHORT cb; | |
int iIconIndex; | |
int iCurIndex; | |
UINT uFlags; | |
DWORD dwProcessID; | |
WCHAR szName[MAX_PATH]; | |
USHORT cbZero; | |
} SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList; | |
SHSTDAPI_(int) SHHandleUpdateImage(__in PCIDLIST_ABSOLUTE pidlExtra); | |
typedef struct _SHChangeProductKeyAsIDList { | |
USHORT cb; | |
WCHAR wszProductKey[39]; | |
USHORT cbZero; | |
} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; | |
SHSTDAPI_(void) SHUpdateImageA(__in LPCSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex); | |
SHSTDAPI_(void) SHUpdateImageW(__in LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex); | |
#ifdef UNICODE | |
#define SHUpdateImage SHUpdateImageW | |
#else | |
#define SHUpdateImage SHUpdateImageA | |
#endif // !UNICODE | |
#endif /* NTDDI_WIN2K */ | |
SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg, int cEntries, __in const SHChangeNotifyEntry *pshcne); | |
SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID); | |
typedef enum | |
{ | |
SCNRT_ENABLE = 0, | |
SCNRT_DISABLE = 1, | |
} SCNRT_STATUS; | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
// 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 ChangeNotify thread | |
STDAPI_(void) SHChangeNotifyRegisterThread(SCNRT_STATUS status); | |
#endif | |
SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChange, DWORD dwProcId, __deref_opt_out_ecount(2) PIDLIST_ABSOLUTE **pppidl, __out_opt LONG *plEvent); | |
SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock); | |
#if (_WIN32_IE >= 0x0400) | |
// The pidls that are given to the view via the ChangeNotifyEvents are simple Pidls, | |
// SHGetRealIDL() will convert them to true PIDLs. | |
SHSTDAPI SHGetRealIDL(IShellFolder *psf, PCUITEMID_CHILD pidlSimple, __out PITEMID_CHILD *ppidlReal); | |
#endif // _WIN32_IE >= 0x0400 | |
SHSTDAPI SHGetInstanceExplorer(__out IUnknown **ppunk); | |
// | |
// SHGetDataFromIDListA/W | |
// | |
// SHGetDataFromIDList nFormat values TCHAR | |
#define SHGDFIL_FINDDATA 1 | |
#define SHGDFIL_NETRESOURCE 2 | |
#define SHGDFIL_DESCRIPTIONID 3 | |
#define SHDID_ROOT_REGITEM 1 | |
#define SHDID_FS_FILE 2 | |
#define SHDID_FS_DIRECTORY 3 | |
#define SHDID_FS_OTHER 4 | |
#define SHDID_COMPUTER_DRIVE35 5 | |
#define SHDID_COMPUTER_DRIVE525 6 | |
#define SHDID_COMPUTER_REMOVABLE 7 | |
#define SHDID_COMPUTER_FIXED 8 | |
#define SHDID_COMPUTER_NETDRIVE 9 | |
#define SHDID_COMPUTER_CDROM 10 | |
#define SHDID_COMPUTER_RAMDISK 11 | |
#define SHDID_COMPUTER_OTHER 12 | |
#define SHDID_NET_DOMAIN 13 | |
#define SHDID_NET_SERVER 14 | |
#define SHDID_NET_SHARE 15 | |
#define SHDID_NET_RESTOFNET 16 | |
#define SHDID_NET_OTHER 17 | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
#define SHDID_COMPUTER_IMAGING 18 | |
#define SHDID_COMPUTER_AUDIO 19 | |
#define SHDID_COMPUTER_SHAREDDOCS 20 | |
#endif | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define SHDID_MOBILE_DEVICE 21 // PDA/PalmPC | |
#endif | |
#include <pshpack8.h> | |
typedef struct _SHDESCRIPTIONID { | |
DWORD dwDescriptionId; | |
CLSID clsid; | |
} SHDESCRIPTIONID, *LPSHDESCRIPTIONID; | |
#include <poppack.h> /* Return to byte packing */ | |
// these delegate to IShellFolder2::GetDetailsEx() | |
SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, PCUITEMID_CHILD pidl, int nFormat, __out_bcount(cb) void *pv, int cb); | |
SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, PCUITEMID_CHILD pidl, int nFormat, __out_bcount(cb) void *pv, int cb); | |
#ifdef UNICODE | |
#define SHGetDataFromIDList SHGetDataFromIDListW | |
#else | |
#define SHGetDataFromIDList SHGetDataFromIDListA | |
#endif // !UNICODE | |
//=========================================================================== | |
// PathResolve flags | |
#define PRF_VERIFYEXISTS 0x0001 | |
#define PRF_TRYPROGRAMEXTENSIONS (0x0002 | PRF_VERIFYEXISTS) | |
#define PRF_FIRSTDIRDEF 0x0004 | |
#define PRF_DONTFINDLNK 0x0008 // if PRF_TRYPROGRAMEXTENSIONS is specified | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP2) | |
#define PRF_REQUIREABSOLUTE 0x0010 | |
#endif | |
SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn); | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWORD dwReasonCode); | |
#endif | |
SHSTDAPI SHCoCreateInstance(__in_opt LPCWSTR pszCLSID, __in_opt const CLSID *pclsid, __in_opt IUnknown *pUnkOuter, __in REFIID riid, __deref_out void **ppv); | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI SHCreateDataObject(__in PCIDLIST_ABSOLUTE pidlFolder, __in UINT cidl, __in_ecount_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, __in_opt IDataObject *pdtInner, __in REFIID riid, __deref_out void **ppv); | |
#endif | |
SHSTDAPI CIDLData_CreateFromIDArray(__in PCIDLIST_ABSOLUTE pidlFolder, __in UINT cidl, __in_ecount_opt(cidl) PCUIDLIST_RELATIVE_ARRAY apidl, __deref_out IDataObject **ppdtobj); | |
SHSTDAPI SHCreateStdEnumFmtEtc(__in UINT cfmt, __in_ecount(cfmt) const FORMATETC afmt[], __deref_out IEnumFORMATETC **ppenumFormatEtc); | |
SHSTDAPI SHDoDragDrop(__in_opt HWND hwnd, __in IDataObject *pdata, __in_opt IDropSource *pdsrc, __in DWORD dwEffect, __out DWORD *pdwEffect); | |
// stuff for doing auto scrolling | |
#define NUM_POINTS 3 | |
typedef struct { // asd | |
int iNextSample; | |
DWORD dwLastScroll; | |
BOOL bFull; | |
POINT pts[NUM_POINTS]; | |
DWORD dwTimes[NUM_POINTS]; | |
} AUTO_SCROLL_DATA; | |
SHSTDAPI_(BOOL) DAD_SetDragImage(HIMAGELIST him, POINT * pptOffset); | |
SHSTDAPI_(BOOL) DAD_DragEnterEx(HWND hwndTarget, const POINT ptStart); | |
SHSTDAPI_(BOOL) DAD_DragEnterEx2(HWND hwndTarget, const POINT ptStart, IDataObject *pdtObject); | |
SHSTDAPI_(BOOL) DAD_ShowDragImage(BOOL fShow); | |
SHSTDAPI_(BOOL) DAD_DragMove(POINT pt); | |
SHSTDAPI_(BOOL) DAD_DragLeave(void); | |
SHSTDAPI_(BOOL) DAD_AutoScroll(HWND hwnd, AUTO_SCROLL_DATA *pad, const POINT *pptNow); | |
typedef struct { | |
WORD cLength; | |
WORD nVersion; | |
BOOL fFullPathTitle : 1; | |
BOOL fSaveLocalView : 1; | |
BOOL fNotShell : 1; | |
BOOL fSimpleDefault : 1; | |
BOOL fDontShowDescBar : 1; | |
BOOL fNewWindowMode : 1; | |
BOOL fShowCompColor : 1; // NT: Show compressed volumes in a different colour | |
BOOL fDontPrettyNames : 1; // NT: Do 8.3 name conversion, or not! | |
BOOL fAdminsCreateCommonGroups : 1; // NT: Administrators create comon groups | |
UINT fUnusedFlags : 7; | |
UINT fMenuEnumFilter; | |
} CABINETSTATE, * LPCABINETSTATE; | |
#define CABINETSTATE_VERSION 2 | |
// APIs for reading and writing the cabinet state. | |
SHSTDAPI_(BOOL) ReadCabinetState(__out_bcount(cLength) CABINETSTATE *pcs, int cLength); | |
SHSTDAPI_(BOOL) WriteCabinetState(__in CABINETSTATE *pcs); | |
SHSTDAPI_(BOOL) PathMakeUniqueName(__out_ecount(cchMax) LPWSTR pszUniqueName, UINT cchMax, LPCWSTR pszTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir); | |
SHSTDAPI_(void) PathQualify(__inout LPWSTR psz); | |
SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath); | |
SHSTDAPI_(BOOL) PathIsSlowA(LPCSTR pszFile, DWORD dwAttr); | |
SHSTDAPI_(BOOL) PathIsSlowW(LPCWSTR pszFile, DWORD dwAttr); | |
#ifdef UNICODE | |
#define PathIsSlow PathIsSlowW | |
#else | |
#define PathIsSlow PathIsSlowA | |
#endif // !UNICODE | |
// | |
// Return codes from PathCleanupSpec. Negative return values are | |
// unrecoverable errors | |
// | |
#define PCS_FATAL 0x80000000 | |
#define PCS_REPLACEDCHAR 0x00000001 | |
#define PCS_REMOVEDCHAR 0x00000002 | |
#define PCS_TRUNCATED 0x00000004 | |
#define PCS_PATHTOOLONG 0x00000008 // Always combined with FATAL | |
SHSTDAPI_(int) PathCleanupSpec(LPCWSTR pszDir, __inout LPWSTR pszSpec); | |
SHSTDAPI_(int) PathResolve(__inout_ecount(MAX_PATH) LPWSTR lpszPath, __in_opt PZPCWSTR dirs, UINT fFlags); | |
SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, __inout_ecount(cchFilePath) LPWSTR pszFilePath, UINT cchFilePath, | |
LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, LPCWSTR pszFilters, LPCWSTR pszTitle); | |
SHSTDAPI_(int) DriveType(int iDrive); | |
SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet); | |
SHSTDAPI_(int) IsNetDrive(int iDrive); | |
// Flags for Shell_MergeMenus | |
#define MM_ADDSEPARATOR 0x00000001L | |
#define MM_SUBMENUSHAVEIDS 0x00000002L | |
#define MM_DONTREMOVESEPS 0x00000004L | |
SHSTDAPI_(UINT) Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags); | |
/* | |
* The SHObjectProperties API provides an easy way to invoke the Properties | |
* context menu command on a subset of the shell item namespace. | |
* | |
* PARAMETERS | |
* | |
* hwnd The window handle of the window which will own the dialog | |
* shopObjectType A SHOP_ value as defined below | |
* pszObjectName Name of the object, see SHOP_ values below | |
* pszPropertyPage The name of the property sheet page to open to or NULL. | |
* | |
* RETURN | |
* | |
* TRUE if the Properties command was invoked | |
*/ | |
SHSTDAPI_(BOOL) SHObjectProperties(__in_opt HWND hwnd, __in DWORD shopObjectType, __in PCWSTR pszObjectName, __in_opt PCWSTR pszPropertyPage); | |
#define SHOP_PRINTERNAME 0x00000001 // pszObjectName points to a printer friendly name | |
#define SHOP_FILEPATH 0x00000002 // pszObjectName points to a fully qualified path+file name | |
#define SHOP_VOLUMEGUID 0x00000004 // pszObjectName points to a Volume GUID | |
/* | |
* The SHFormatDrive API provides access to the Shell | |
* format dialog. This allows apps which want to format disks | |
* to bring up the same dialog that the Shell does to do it. | |
* | |
* This dialog is not sub-classable. You cannot put custom | |
* controls in it. If you want this ability, you will have | |
* to write your own front end for the DMaint_FormatDrive | |
* engine. | |
* | |
* NOTE that the user can format as many diskettes in the specified | |
* drive, or as many times, as he/she wishes to. There is no way to | |
* force any specififc number of disks to format. If you want this | |
* ability, you will have to write your own front end for the | |
* DMaint_FormatDrive engine. | |
* | |
* NOTE also that the format will not start till the user pushes the | |
* start button in the dialog. There is no way to do auto start. If | |
* you want this ability, you will have to write your own front end | |
* for the DMaint_FormatDrive engine. | |
* | |
* PARAMETERS | |
* | |
* hwnd = The window handle of the window which will own the dialog | |
* NOTE that unlike SHCheckDrive, hwnd == NULL does not cause | |
* this dialog to come up as a "top level application" window. | |
* This parameter should always be non-null, this dialog is | |
* only designed to be the child of another window, not a | |
* stand-alone application. | |
* drive = The 0 based (A: == 0) drive number of the drive to format | |
* fmtID = The ID of the physical format to format the disk with | |
* NOTE: The special value SHFMT_ID_DEFAULT means "use the | |
* default format specified by the DMaint_FormatDrive | |
* engine". If you want to FORCE a particular format | |
* ID "up front" you will have to call | |
* DMaint_GetFormatOptions yourself before calling | |
* this to obtain the valid list of phys format IDs | |
* (contents of the PhysFmtIDList array in the | |
* FMTINFOSTRUCT). | |
* options = There is currently only two option bits defined | |
* | |
* SHFMT_OPT_FULL | |
* SHFMT_OPT_SYSONLY | |
* | |
* The normal defualt in the Shell format dialog is | |
* "Quick Format", setting this option bit indicates that | |
* the caller wants to start with FULL format selected | |
* (this is useful for folks detecting "unformatted" disks | |
* and wanting to bring up the format dialog). | |
* | |
* The SHFMT_OPT_SYSONLY initializes the dialog to | |
* default to just sys the disk. | |
* | |
* All other bits are reserved for future expansion and | |
* must be 0. | |
* | |
* Please note that this is a bit field and not a value | |
* and treat it accordingly. | |
* | |
* RETURN | |
* The return is either one of the SHFMT_* values, or if the | |
* returned DWORD value is not == to one of these values, then | |
* the return is the physical format ID of the last succesful | |
* format. The LOWORD of this value can be passed on subsequent | |
* calls as the fmtID parameter to "format the same type you did | |
* last time". | |
* | |
*/ | |
SHSTDAPI_(DWORD) SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options); | |
// | |
// Special value of fmtID which means "use the default format" | |
// | |
#define SHFMT_ID_DEFAULT 0xFFFF | |
// | |
// Option bits for options parameter | |
// | |
#define SHFMT_OPT_FULL 0x0001 | |
#define SHFMT_OPT_SYSONLY 0x0002 | |
// | |
// Special return values. PLEASE NOTE that these are DWORD values. | |
// | |
#define SHFMT_ERROR 0xFFFFFFFFL // Error on last format, drive may be formatable | |
#define SHFMT_CANCEL 0xFFFFFFFEL // Last format was canceled | |
#define SHFMT_NOFORMAT 0xFFFFFFFDL // Drive is not formatable | |
#ifndef HPSXA_DEFINED | |
#define HPSXA_DEFINED | |
DECLARE_HANDLE( HPSXA ); | |
#endif | |
WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey, UINT max_iface ); | |
WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray(__in HPSXA hpsxa ); | |
WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray(__in HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam ); | |
WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray(__in HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam ); | |
#if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_VISTA) | |
#undef INTERFACE | |
#define INTERFACE IDefViewFrame | |
DECLARE_INTERFACE_IID_(IDefViewFrame, IUnknown, "710EB7A0-45ED-11D0-924A-0020AFC7AC4D") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IDefViewFrame methods *** | |
STDMETHOD(GetWindowLV) (THIS_ __out HWND * phwnd) PURE; | |
STDMETHOD(ReleaseWindowLV) (THIS) PURE; | |
STDMETHOD(GetShellFolder)(THIS_ __out IShellFolder **ppsf) PURE; | |
}; | |
#endif | |
// shell restriction values, parameter for SHRestricted() | |
typedef enum RESTRICTIONS | |
{ | |
REST_NONE = 0x00000000, | |
REST_NORUN = 0x00000001, | |
REST_NOCLOSE = 0x00000002, | |
REST_NOSAVESET = 0x00000004, | |
REST_NOFILEMENU = 0x00000008, | |
REST_NOSETFOLDERS = 0x00000010, | |
REST_NOSETTASKBAR = 0x00000020, | |
REST_NODESKTOP = 0x00000040, | |
REST_NOFIND = 0x00000080, | |
REST_NODRIVES = 0x00000100, | |
REST_NODRIVEAUTORUN = 0x00000200, | |
REST_NODRIVETYPEAUTORUN = 0x00000400, | |
REST_NONETHOOD = 0x00000800, | |
REST_STARTBANNER = 0x00001000, | |
REST_RESTRICTRUN = 0x00002000, | |
REST_NOPRINTERTABS = 0x00004000, | |
REST_NOPRINTERDELETE = 0x00008000, | |
REST_NOPRINTERADD = 0x00010000, | |
REST_NOSTARTMENUSUBFOLDERS = 0x00020000, | |
REST_MYDOCSONNET = 0x00040000, | |
REST_NOEXITTODOS = 0x00080000, | |
REST_ENFORCESHELLEXTSECURITY = 0x00100000, | |
REST_LINKRESOLVEIGNORELINKINFO = 0x00200000, | |
REST_NOCOMMONGROUPS = 0x00400000, | |
REST_SEPARATEDESKTOPPROCESS = 0x00800000, | |
REST_NOWEB = 0x01000000, | |
REST_NOTRAYCONTEXTMENU = 0x02000000, | |
REST_NOVIEWCONTEXTMENU = 0x04000000, | |
REST_NONETCONNECTDISCONNECT = 0x08000000, | |
REST_STARTMENULOGOFF = 0x10000000, | |
REST_NOSETTINGSASSIST = 0x20000000, | |
REST_NOINTERNETICON = 0x40000001, | |
REST_NORECENTDOCSHISTORY = 0x40000002, | |
REST_NORECENTDOCSMENU = 0x40000003, | |
REST_NOACTIVEDESKTOP = 0x40000004, | |
REST_NOACTIVEDESKTOPCHANGES = 0x40000005, | |
REST_NOFAVORITESMENU = 0x40000006, | |
REST_CLEARRECENTDOCSONEXIT = 0x40000007, | |
REST_CLASSICSHELL = 0x40000008, | |
REST_NOCUSTOMIZEWEBVIEW = 0x40000009, | |
REST_NOHTMLWALLPAPER = 0x40000010, | |
REST_NOCHANGINGWALLPAPER = 0x40000011, | |
REST_NODESKCOMP = 0x40000012, | |
REST_NOADDDESKCOMP = 0x40000013, | |
REST_NODELDESKCOMP = 0x40000014, | |
REST_NOCLOSEDESKCOMP = 0x40000015, | |
REST_NOCLOSE_DRAGDROPBAND = 0x40000016, // Disable Close and Drag & Drop on ALL Bands | |
REST_NOMOVINGBAND = 0x40000017, // Disable Moving ALL Bands | |
REST_NOEDITDESKCOMP = 0x40000018, | |
REST_NORESOLVESEARCH = 0x40000019, | |
REST_NORESOLVETRACK = 0x4000001A, | |
REST_FORCECOPYACLWITHFILE = 0x4000001B, | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
REST_NOLOGO3CHANNELNOTIFY = 0x4000001C, | |
#endif | |
REST_NOFORGETSOFTWAREUPDATE = 0x4000001D, | |
REST_NOSETACTIVEDESKTOP = 0x4000001E, // No Active desktop on Settings Menu | |
REST_NOUPDATEWINDOWS = 0x4000001F, // No Windows Update on Settings Menu | |
REST_NOCHANGESTARMENU = 0x40000020, // No Context menu or Drag and Drop on Start menu | |
REST_NOFOLDEROPTIONS = 0x40000021, // No Folder Options on Settings Menu | |
REST_HASFINDCOMPUTERS = 0x40000022, // Show Start/Search/Computers | |
REST_INTELLIMENUS = 0x40000023, | |
REST_RUNDLGMEMCHECKBOX = 0x40000024, | |
REST_ARP_ShowPostSetup = 0x40000025, // ARP: Show Post-Setup page | |
REST_NOCSC = 0x40000026, // Disable the ClientSide caching on SM | |
REST_NOCONTROLPANEL = 0x40000027, // Remove the Control Panel only from SM|Settings | |
REST_ENUMWORKGROUP = 0x40000028, // Enumerate workgroup in root of nethood | |
REST_ARP_NOARP = 0x40000029, // ARP: Don't Allow ARP to come up at all | |
REST_ARP_NOREMOVEPAGE = 0x4000002A, // ARP: Don't allow Remove page | |
REST_ARP_NOADDPAGE = 0x4000002B, // ARP: Don't allow Add page | |
REST_ARP_NOWINSETUPPAGE = 0x4000002C, // ARP: Don't allow opt components page | |
REST_GREYMSIADS = 0x4000002D, // SM: Allow the greying of Darwin Ads in SM | |
REST_NOCHANGEMAPPEDDRIVELABEL = 0x4000002E, // Don't enable the UI which allows users to rename mapped drive labels | |
REST_NOCHANGEMAPPEDDRIVECOMMENT = 0x4000002F, // Don't enable the UI which allows users to change mapped drive comments | |
REST_MaxRecentDocs = 0x40000030, | |
REST_NONETWORKCONNECTIONS = 0x40000031, // No Start Menu | Settings |Network Connections | |
REST_FORCESTARTMENULOGOFF = 0x40000032, // Force logoff on the Start Menu | |
REST_NOWEBVIEW = 0x40000033, // Disable Web View | |
REST_NOCUSTOMIZETHISFOLDER = 0x40000034, // Disable Customize This Folder | |
REST_NOENCRYPTION = 0x40000035, // Don't allow file encryption | |
// Do NOT use me 0x40000036, | |
REST_DONTSHOWSUPERHIDDEN = 0x40000037, // don't show super hidden files | |
REST_NOSHELLSEARCHBUTTON = 0x40000038, | |
REST_NOHARDWARETAB = 0x40000039, // No Hardware tab on Drives or in control panel | |
REST_NORUNASINSTALLPROMPT = 0x4000003A, // Don't bring up "Run As" prompt for install programs | |
REST_PROMPTRUNASINSTALLNETPATH = 0x4000003B, // Force the "Run As" prompt for install programs on unc/network shares | |
REST_NOMANAGEMYCOMPUTERVERB = 0x4000003C, // No Manage verb on My Computer | |
// Do NOT use me 0x4000003D, | |
REST_DISALLOWRUN = 0x4000003E, // don't allow certain apps to be run | |
REST_NOWELCOMESCREEN = 0x4000003F, // don't allow the welcome screen to be displayed. | |
REST_RESTRICTCPL = 0x40000040, // only 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_NOSMHELP = 0x40000043, // No Help on the Start Menu | |
REST_NOWINKEYS = 0x40000044, // No Windows-X Hot keys | |
REST_NOENCRYPTONMOVE = 0x40000045, // Don't automatically try to 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_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_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. | |
// Do NOT use me 0x4000004B, | |
REST_NOVIEWONDRIVE = 0x4000004C, // disallows CreateViewObject() 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_NOSHAREDDOCUMENTS = 0x4000004E, // don't auto share the Shared Documents/create link | |
#endif // NTDDI_WINXP | |
REST_NOSMMYDOCS = 0x4000004F, // Don't show the My Documents item on the Start Menu. | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
REST_NOSMMYPICS = 0x40000050, // Don't show the My Pictures item on the Start Menu | |
REST_ALLOWBITBUCKDRIVES = 0x40000051, // Bit mask indicating which which drives have bit bucket support | |
REST_NONLEGACYSHELLMODE = 0x40000052, // new consumer shell modes | |
REST_NOCONTROLPANELBARRICADE = 0x40000053, // The webview barricade in Control Panel | |
REST_NOSTARTPAGE = 0x40000054, // Whistler Start Page on desktop. | |
REST_NOAUTOTRAYNOTIFY = 0x40000055, // Whistler auto-tray notify feature | |
REST_NOTASKGROUPING = 0x40000056, // Whistler taskbar button grouping feature | |
REST_NOCDBURNING = 0x40000057, // whistler cd burning feature | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | |
REST_MYCOMPNOPROP = 0x40000058, // disables Properties on My Computer's 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_NODISPLAYAPPEARANCEPAGE = 0x4000005B, // disable Themes and Appearance tabs 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_NOSIZECHOICE = 0x4000005E, // disable the size drop down in the Appearance tab of the Display Control Panel. | |
REST_NOCOLORCHOICE = 0x4000005F, // disable the color drop down in the Appearance tab of the Display Control Panel. | |
REST_SETVISUALSTYLE = 0x40000060, // Load the specified file as the visual style. | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | |
REST_STARTRUNNOHOMEPATH = 0x40000061, // dont use the %HOMEPATH% env var for the Start-Run dialog | |
#endif // NTDDI_WIN2KSP3 | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
REST_NOUSERNAMEINSTARTPANEL = 0x40000062, // don't show the username is the startpanel. | |
REST_NOMYCOMPUTERICON = 0x40000063, // don't show my computer anywhere, hide its contents | |
REST_NOSMNETWORKPLACES = 0x40000064, // don't show network places in startpanel. | |
REST_NOSMPINNEDLIST = 0x40000065, // don't show the pinned list in startpanel. | |
REST_NOSMMYMUSIC = 0x40000066, // don't show MyMusic folder in startpanel | |
REST_NOSMEJECTPC = 0x40000067, // don't show "Undoc PC" command in startmenu | |
REST_NOSMMOREPROGRAMS = 0x40000068, // don't show "More Programs" button in StartPanel. | |
REST_NOSMMFUPROGRAMS = 0x40000069, // don't show the MFU programs list in StartPanel. | |
REST_NOTRAYITEMSDISPLAY = 0x4000006A, // disables the display of the system tray | |
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 | |
#endif // NTDDI_WIN2KSP3 | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
REST_HIDECLOCK = 0x40000070, // don't show the clock | |
REST_NOLOWDISKSPACECHECKS = 0x40000071, // disable the low disk space checking | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP4) | |
REST_NOENTIRENETWORK = 0x40000072, // removes the "Entire Network" link (i.e. from "My Network Places") | |
#endif // NTDDI_WIN2KSP4 | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
REST_NODESKTOPCLEANUP = 0x40000073, // disable the desktop cleanup wizard | |
REST_BITBUCKNUKEONDELETE = 0x40000074, // disables recycling of files | |
REST_BITBUCKCONFIRMDELETE = 0x40000075, // always show the delete confirmation dialog when deleting files | |
REST_BITBUCKNOPROP = 0x40000076, // disables Properties on Recycle Bin's context menu | |
REST_NODISPBACKGROUND = 0x40000077, // disables the Desktop 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_NODISPSCREENSAVEPREVIEW = 0x4000007A, // disables the screen saver on the Screen Saver tab in the Display CPL | |
REST_NODISPLAYCPL = 0x4000007B, // disables the Display CPL | |
REST_HIDERUNASVERB = 0x4000007C, // hides the "Run As..." context menu item | |
REST_NOTHUMBNAILCACHE = 0x4000007D, // disables use of the thumbnail cache | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP1) || defined(IE_BACKCOMPAT_VERSION) | |
REST_NOSTRCMPLOGICAL = 0x4000007E, // dont use StrCmpLogical() instead use default CompareString() | |
REST_NOPUBLISHWIZARD = 0x4000007F, // disables publishing wizard (WPW) | |
REST_NOONLINEPRINTSWIZARD = 0x40000080, // disables online prints wizard (OPW) | |
REST_NOWEBSERVICES = 0x40000081, // disables the web specified services for both OPW and WPW | |
#endif // NTDDI_WINXPSP1 | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | |
REST_ALLOWUNHASHEDWEBVIEW = 0x40000082, // allow the user to be promted to accept web view templates that don't already have an md5 hash in the registry | |
#endif // NTDDI_WIN2KSP3 | |
REST_ALLOWLEGACYWEBVIEW = 0x40000083, // allow legacy webview template to be shown. | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | |
REST_REVERTWEBVIEWSECURITY = 0x40000084, // disable added webview security measures (revert to w2k functionality). | |
#endif // NTDDI_WIN2KSP3 | |
#if (NTDDI_VERSION >= NTDDI_WIN2KSP4) | |
REST_INHERITCONSOLEHANDLES = 0x40000086, // ShellExec() will check for the current process and target process being console processes to inherit handles | |
#endif // NTDDI_WIN2KSP4 | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_VISTA) | |
REST_SORTMAXITEMCOUNT = 0x40000087, // Do not sort views with more 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 change events recursively to avoid network traffic | |
#endif // NTDDI_WINXPSP2 | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP2) | |
REST_NOREMOTECHANGENOTIFY = 0x40000091, // Do not notify for remote changy notifies | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
REST_NOSIMPLENETIDLIST = 0x40000092, // No simple network IDLists | |
#endif | |
REST_NOENUMENTIRENETWORK = 0x40000093, // Don't enumerate entire network if we happen to get to it (in conjunction with REST_NOENTIRENETWORK) | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094, // Disable Thumbnail for Network files in DUI Details pane | |
#endif | |
REST_NOINTERNETOPENWITH = 0x40000095, // dont allow looking on the internet for file associations | |
#endif // NTDDI_WINXPSP2 | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP2) | |
REST_DONTRETRYBADNETNAME = 0x4000009B, // In Network Places: if provider returns ERROR_BAD_NET_NAME, give up | |
REST_ALLOWFILECLSIDJUNCTIONS = 0x4000009C, // re-enable legacy support for file.{guid} junctions in FileSystem Folder | |
REST_NOUPNPINSTALL = 0x4000009D, // disable "install UPnP" task 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 Start menu | |
REST_NOSECURITY = 0x41000002, // No Security option in start menu | |
REST_NOFILEASSOCIATE = 0x41000003, // Do not allow user to change file association | |
#if (NTDDI_VERSION >= NTDDI_WINXPSP2) | |
REST_ALLOWCOMMENTTOGGLE = 0x41000004, // Allow the user to toggle the positions of the Comment and the Computer Name | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
REST_USEDESKTOPINICACHE = 0x41000005, // Cache desktop.ini entries from network folders | |
#endif // NTDDI_VISTA | |
#endif // NTDDI_WINXPSP2 | |
} RESTRICTIONS; | |
SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD grfMode); | |
SHSTDAPI_(BOOL) SHFindFiles(__in_opt PCIDLIST_ABSOLUTE pidlFolder, __in_opt PCIDLIST_ABSOLUTE pidlSaveFile); | |
SHSTDAPI_(void) PathGetShortPath(__inout_ecount(MAX_PATH) LPWSTR pszLongPath); | |
__success(return != 0) | |
SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(__out_ecount(MAX_PATH) LPWSTR pszUniqueName, LPCWSTR pszPath, LPCWSTR pszShort, LPCWSTR pszFileSpec); | |
SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath); | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
// | |
// Path processing function | |
// | |
#define PPCF_ADDQUOTES 0x00000001 // return a quoted name if required | |
#define PPCF_ADDARGUMENTS 0x00000003 // appends arguments (and wraps in quotes if required) | |
#define PPCF_NODIRECTORIES 0x00000010 // don't match to directories | |
#define PPCF_FORCEQUALIFY 0x00000040 // qualify even non-relative names | |
#define PPCF_LONGESTPOSSIBLE 0x00000080 // always find the longest possible name | |
SHSTDAPI_(LONG) PathProcessCommand(__in LPCWSTR lpSrc, __out_ecount(iMax) LPWSTR lpDest, __in int iMax, __in DWORD dwFlags); | |
#endif | |
SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest); | |
SHSTDAPI_(BOOL) SignalFileOpen(PCIDLIST_ABSOLUTE pidl); | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI AssocGetDetailsOfPropKey(__in IShellFolder *psf, __in PCUITEMID_CHILD pidl, __in const PROPERTYKEY *pkey, __out VARIANT *pv, __out_opt BOOL *pfFoundPropKey); | |
#endif | |
#if (NTDDI_VERSION < NTDDI_VISTA) | |
SHSTDAPI SHLoadOLE(LPARAM lParam); | |
#endif | |
// both ANSI and UNICODE | |
SHSTDAPI SHStartNetConnectionDialogA(HWND hwnd, __in_opt LPCSTR pszRemoteName, DWORD dwType); | |
// both ANSI and UNICODE | |
SHSTDAPI SHStartNetConnectionDialogW(HWND hwnd, __in_opt LPCWSTR pszRemoteName, DWORD dwType); | |
#ifdef UNICODE | |
#define SHStartNetConnectionDialog SHStartNetConnectionDialogW | |
#else | |
#define SHStartNetConnectionDialog SHStartNetConnectionDialogA | |
#endif // !UNICODE | |
SHSTDAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, | |
__out_opt HICON *phiconLarge, __out_opt HICON *phiconSmall, UINT nIconSize); | |
SHSTDAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, | |
__out_opt HICON *phiconLarge, __out_opt HICON *phiconSmall, UINT nIconSize); | |
#ifdef UNICODE | |
#define SHDefExtractIcon SHDefExtractIconW | |
#else | |
#define SHDefExtractIcon SHDefExtractIconA | |
#endif // !UNICODE | |
// Elevation | |
// OpenAsInfo flags | |
enum tagOPEN_AS_INFO_FLAGS { | |
OAIF_ALLOW_REGISTRATION = 0x00000001, // enable the "always use this file" checkbox (NOTE if you don't pass this, it will be disabled) | |
OAIF_REGISTER_EXT = 0x00000002, // do the registration after the user 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 when you pass this) | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
OAIF_HIDE_REGISTRATION = 0x00000020, // hide the "always use this file" checkbox | |
OAIF_URL_PROTOCOL = 0x00000040, // the "extension" passed is actually 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 | |
{ | |
LPCWSTR pcszFile; // [in] file name, or protocol name if | |
// OAIF_URL_PROTOCOL is set. | |
LPCWSTR 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 */ | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI SHOpenWithDialog(__in_opt HWND hwndParent, __in const OPENASINFO* poainfo); | |
#endif // NTDDI_VISTA | |
SHSTDAPI_(BOOL) Shell_GetImageLists(__out_opt HIMAGELIST *phiml, __out_opt HIMAGELIST *phimlSmall); | |
SHSTDAPI_(int) Shell_GetCachedImageIndex(LPCWSTR pwszIconPath, int iIconIndex, UINT uIconFlags); | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI_(int) Shell_GetCachedImageIndexA(LPCSTR pszIconPath, int iIconIndex, UINT 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 | |
#endif // NTDDI_VISTA | |
// | |
// IDocViewSite | |
// | |
#undef INTERFACE | |
#define INTERFACE IDocViewSite | |
DECLARE_INTERFACE_IID_(IDocViewSite, IUnknown, "87D605E0-C511-11CF-89A9-00A0C9054129") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef)(THIS) PURE; | |
STDMETHOD_(ULONG,Release)(THIS) PURE; | |
// *** IDocViewSite methods *** | |
STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE; | |
} ; | |
#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 instead of disk share | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define VALIDATEUNC_PERSIST 0x0008 // the connection should be made persistent | |
#define VALIDATEUNC_VALID 0x000F // valid flags | |
#else | |
#define VALIDATEUNC_VALID 0x0007 // valid flags | |
#endif | |
SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, __inout LPWSTR pszFile, UINT fConnect); | |
#define OPENPROPS_NONE 0x0000 | |
#define OPENPROPS_INHIBITPIF 0x8000 | |
#define GETPROPS_NONE 0x0000 | |
#define SETPROPS_NONE 0x0000 | |
#define CLOSEPROPS_NONE 0x0000 | |
#define CLOSEPROPS_DISCARD 0x0001 | |
#define PIFNAMESIZE 30 | |
#define PIFSTARTLOCSIZE 63 | |
#define PIFDEFPATHSIZE 64 | |
#define PIFPARAMSSIZE 64 | |
#define PIFSHPROGSIZE 64 | |
#define PIFSHDATASIZE 64 | |
#define PIFDEFFILESIZE 80 | |
#define PIFMAXFILEPATH 260 | |
typedef struct PROPPRG { /* prg */ | |
WORD flPrg; // see PRG_ flags | |
WORD flPrgInit; // see PRGINIT_ flags | |
CHAR achTitle[PIFNAMESIZE]; // name[30] | |
CHAR achCmdLine[PIFSTARTLOCSIZE+PIFPARAMSSIZE+1];// startfile[63] + params[64] | |
CHAR achWorkDir[PIFDEFPATHSIZE]; // defpath[64] | |
WORD wHotKey; // PfHotKeyScan thru PfHotKeyVal | |
CHAR achIconFile[PIFDEFFILESIZE]; // name of file containing icon | |
WORD wIconIndex; // index of icon within file | |
DWORD dwEnhModeFlags; // reserved enh-mode flags | |
DWORD dwRealModeFlags; // real-mode flags (see RMOPT_*) | |
CHAR achOtherFile[PIFDEFFILESIZE]; // name of "other" file in directory | |
CHAR achPIFFile[PIFMAXFILEPATH]; // name of PIF file | |
} PROPPRG; | |
typedef UNALIGNED PROPPRG *PPROPPRG; | |
typedef UNALIGNED PROPPRG FAR *LPPROPPRG; | |
typedef const UNALIGNED PROPPRG FAR *LPCPROPPRG; | |
SHSTDAPI_(HANDLE) PifMgr_OpenProperties(LPCWSTR pszApp, __in_opt LPCWSTR pszPIF, UINT hInf, UINT flOpt); | |
SHSTDAPI_(int) PifMgr_GetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR pszGroup, __out_bcount_opt(cbProps) void *lpProps, int cbProps, UINT flOpt); | |
SHSTDAPI_(int) PifMgr_SetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR pszGroup, __in_bcount(cbProps) const void *lpProps, int cbProps, UINT flOpt); | |
SHSTDAPI_(HANDLE) PifMgr_CloseProperties(__in_opt HANDLE hProps, UINT flOpt); | |
SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk); | |
SHSTDAPI_(BOOL) IsUserAnAdmin(void); | |
#undef INTERFACE | |
#define INTERFACE IInitializeObject | |
DECLARE_INTERFACE_IID_(IInitializeObject, IUnknown, "4622AD16-FF23-11d0-8D34-00A0C90F2719") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IInitializeObject methods | |
STDMETHOD(Initialize)(THIS) PURE; | |
}; | |
enum | |
{ | |
BMICON_LARGE = 0, | |
BMICON_SMALL | |
}; | |
#undef INTERFACE | |
#define INTERFACE IBanneredBar | |
DECLARE_INTERFACE_IID_(IBanneredBar, IUnknown, "596A9A94-013E-11d1-8D34-00A0C90F2719") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IBanneredBar methods *** | |
STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE; | |
STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE; | |
STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE; | |
STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE; | |
}; | |
SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lParam); | |
// | |
// Callback interface for the IShellView object returned from SHCreateShellFolderView. | |
// | |
#undef INTERFACE | |
#define INTERFACE IShellFolderViewCB | |
DECLARE_INTERFACE_IID_(IShellFolderViewCB, IUnknown, "2047E320-F2A9-11CE-AE65-08002B2E1262") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** IShellFolderViewCB methods *** | |
STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; | |
}; | |
#include <pshpack8.h> | |
#define QCMINFO_PLACE_BEFORE 0 | |
#define QCMINFO_PLACE_AFTER 1 | |
typedef struct _QCMINFO_IDMAP_PLACEMENT | |
{ | |
UINT id; | |
UINT fFlags; | |
} QCMINFO_IDMAP_PLACEMENT; | |
typedef struct _QCMINFO_IDMAP | |
{ | |
UINT nMaxIds; | |
QCMINFO_IDMAP_PLACEMENT pIdList[1]; | |
} QCMINFO_IDMAP; | |
typedef struct _QCMINFO | |
{ | |
HMENU hmenu; // in | |
UINT indexMenu; // in | |
UINT idCmdFirst; // in/out | |
UINT idCmdLast; // in | |
QCMINFO_IDMAP const* pIdMap; // in / unused | |
} QCMINFO; | |
typedef QCMINFO * LPQCMINFO; | |
// TBINFO flags | |
#define TBIF_APPEND 0 | |
#define TBIF_PREPEND 1 | |
#define TBIF_REPLACE 2 | |
#define TBIF_DEFAULT 0x00000000 | |
#define TBIF_INTERNETBAR 0x00010000 | |
#define TBIF_STANDARDTOOLBAR 0x00020000 | |
#define TBIF_NOTOOLBAR 0x00030000 | |
typedef struct _TBINFO | |
{ | |
UINT cbuttons; // out | |
UINT uFlags; // out (one of TBIF_ flags) | |
} TBINFO; | |
typedef TBINFO * LPTBINFO; | |
typedef struct _DETAILSINFO | |
{ | |
PCUITEMID_CHILD pidl; | |
int fmt; | |
int cxChar; | |
STRRET str; | |
int iImage; | |
} DETAILSINFO; | |
typedef DETAILSINFO *PDETAILSINFO; | |
typedef struct _SFVM_PROPPAGE_DATA | |
{ | |
DWORD dwReserved; | |
LPFNADDPROPSHEETPAGE pfn; | |
LPARAM lParam; | |
} SFVM_PROPPAGE_DATA; | |
typedef struct _SFVM_HELPTOPIC_DATA | |
{ | |
WCHAR wszHelpFile[MAX_PATH]; | |
WCHAR wszHelpTopic[MAX_PATH]; | |
} SFVM_HELPTOPIC_DATA; | |
// uMsg wParam lParam | |
#define SFVM_MERGEMENU 1 // - LPQCMINFO | |
#define SFVM_INVOKECOMMAND 2 // idCmd - | |
#define SFVM_GETHELPTEXT 3 // idCmd,cchMax pszText | |
#define SFVM_GETTOOLTIPTEXT 4 // idCmd,cchMax pszText | |
#define SFVM_GETBUTTONINFO 5 // - LPTBINFO | |
#define SFVM_GETBUTTONS 6 // idCmdFirst,cbtnMax LPTBBUTTON | |
#define SFVM_INITMENUPOPUP 7 // idCmdFirst,nIndex hmenu | |
#define SFVM_FSNOTIFY 14 // LPCITEMIDLIST* lEvent | |
#define SFVM_WINDOWCREATED 15 // hwnd - | |
#define SFVM_GETDETAILSOF 23 // iColumn DETAILSINFO* | |
#define SFVM_COLUMNCLICK 24 // iColumn - | |
#define SFVM_QUERYFSNOTIFY 25 // - SHChangeNotifyEntry * | |
#define SFVM_DEFITEMCOUNT 26 // - UINT* | |
#define SFVM_DEFVIEWMODE 27 // - FOLDERVIEWMODE* | |
#define SFVM_UNMERGEMENU 28 // - hmenu | |
#define SFVM_UPDATESTATUSBAR 31 // fInitialize - | |
#define SFVM_BACKGROUNDENUM 32 // - - | |
#define SFVM_DIDDRAGDROP 36 // dwEffect IDataObject * | |
#define SFVM_SETISFV 39 // - IShellFolderView* | |
#define SFVM_THISIDLIST 41 // - LPITMIDLIST* | |
#define SFVM_ADDPROPERTYPAGES 47 // - SFVM_PROPPAGE_DATA * | |
#define SFVM_BACKGROUNDENUMDONE 48 // - - | |
#define SFVM_GETNOTIFY 49 // LPITEMIDLIST* LONG* | |
#define SFVM_GETSORTDEFAULTS 53 // iDirection iParamSort | |
#define SFVM_SIZE 57 // - - | |
#define SFVM_GETZONE 58 // - DWORD* | |
#define SFVM_GETPANE 59 // Pane ID DWORD* | |
#define SFVM_GETHELPTOPIC 63 // - SFVM_HELPTOPIC_DATA * | |
#define SFVM_GETANIMATION 68 // HINSTANCE * WCHAR * | |
// IShellFolderView | |
// | |
// Deprecated: use IFolderView and IFolderView2 instead. | |
// | |
// IShellFolderView is supported by the IShellView object returned from SHCreateShellFolderView. | |
// | |
// 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 cause 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 neccessary... | |
#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 // Invert the selection | |
#undef INTERFACE | |
#define INTERFACE IShellFolderView | |
DECLARE_INTERFACE_IID_(IShellFolderView, IUnknown, "37A378C0-F82D-11CE-AE65-08002B2E1262") | |
{ | |
// *** 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::SetSortColumns | |
STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE; // use IFolderView2::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; // items 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 IFolderView::Item | |
STDMETHOD(RemoveObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; // items removed here may reappear (the data source is the final arbiter of which items are available to the view) | |
STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE; // use IFolderView::ItemCount | |
STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE; // not implemented on Vista. Sends LVM_SETITEMCOUNT with WPARAM=uCount and LPARAM=dwFlags to listview on XP. | |
STDMETHOD(UpdateObject) (THIS_ PUITEMID_CHILD pidlOld, PUITEMID_CHILD pidlNew, 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 IFolderView2::GetSelection | |
// NOTE: GetSelectedObjects hands out const pointers to internal ITEMID_CHILD structures. The caller is expected to act on them immediately (and not cache them). 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 IFolderView2::IsMoveInSameFolder | |
STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE; // returns point corresponding to drag-and-drop operation | |
STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE; // returns point corresponding to drag-and-drop operation | |
STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE; // not implemented | |
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 attempts 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 was originated by the IShellView. | |
STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE; // use IFolderView::GetSpacing instead. GetItemSpacing returns the spacing for small and large 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: select all, select none, invert selection | |
STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE; // does nothing, returns S_OK. | |
STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE; // replaces the IShellView's internal automation object. | |
} ; | |
// SHCreateShellFolderView struct | |
typedef struct _SFV_CREATE | |
{ | |
UINT cbSize; // must be sizeof(SFV_CREATE) | |
IShellFolder* pshf; // IShellFolder the IShellView will use | |
IShellView* psvOuter; // optional: IShellView to pass to psfvcb | |
IShellFolderViewCB* psfvcb; // No callback if NULL | |
} SFV_CREATE; | |
SHSTDAPI SHCreateShellFolderView(__in const SFV_CREATE* pcsfv, __deref_out IShellView ** ppsv); | |
typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(__in_opt IShellFolder *psf, __in_opt HWND hwnd, | |
__in_opt IDataObject *pdtobj, __in UINT uMsg, __in WPARAM wParam, __in LPARAM lParam); | |
SHSTDAPI CDefFolderMenu_Create2(__in_opt PCIDLIST_ABSOLUTE pidlFolder, __in_opt HWND hwnd, | |
__in_opt UINT cidl, __in_ecount_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, | |
__in_opt IShellFolder *psf, __in_opt LPFNDFMCALLBACK pfn, | |
__in UINT nKeys, __in_ecount_opt(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 IDataObject and IAssociationArray | |
IUnknown *punkAssociationInfo; // optional: IQueryAssociations, specifies where 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 extensions from | |
} DEFCONTEXTMENU; | |
// creates object that implements IContextMenu/IContextMenu2/IContextMenu3, typically | |
// used in the implemetnation of ::GetUIObjectOf() | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
SHSTDAPI SHCreateDefaultContextMenu(__in const DEFCONTEXTMENU *pdcm, __in REFIID riid, __deref_out void **ppv); | |
#endif // NTDDI_VISTA | |
SHSTDAPI_(BOOL) SHOpenPropSheetA(__in_opt LPCSTR pszCaption, __in_ecount_opt(cikeys) HKEY ahkeys[], UINT cikeys, | |
__in_opt const CLSID * pclsidDefault, __in IDataObject *pdtobj, | |
__in_opt IShellBrowser *psb, __in_opt LPCSTR pStartPage); | |
SHSTDAPI_(BOOL) SHOpenPropSheetW(__in_opt LPCWSTR pszCaption, __in_ecount_opt(cikeys) HKEY ahkeys[], UINT cikeys, | |
__in_opt const CLSID * pclsidDefault, __in IDataObject *pdtobj, | |
__in_opt IShellBrowser *psb, __in_opt LPCWSTR pStartPage); | |
#ifdef UNICODE | |
#define SHOpenPropSheet SHOpenPropSheetW | |
#else | |
#define SHOpenPropSheet SHOpenPropSheetA | |
#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 child | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
IUnknown *punkSite; // site pointer for context menu handler | |
#endif | |
} DFMICS, *PDFMICS; | |
// Note on context menus ranges: | |
// Standard Items // DFM_MERGECONTEXTMENU, context menu extensions, DFM_MERGECONTEXTMENU_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 | |
#define DFM_MERGECONTEXTMENU 1 // uFlags LPQCMINFO | |
#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_GETVERBW 15 // idCmd,cchMax pszText -Unicode | |
#define DFM_GETVERBA 16 // idCmd,cchMax pszText -Ansi | |
#define DFM_MERGECONTEXTMENU_BOTTOM 17 // uFlags LPQCMINFO | |
#define DFM_MODIFYQCMFLAGS 18 // uFlags UINT *puNewFlags; modify the CFM_XXX values passed to IContextMenu::QueryContextMenu | |
// 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_NEWFOLDER ((UINT)-6) | |
#define DFM_CMD_PASTE ((UINT)-7) | |
#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, | |
IShellFolder *psf, | |
HWND hwndMain, | |
UINT uMsg, | |
WPARAM wParam, | |
LPARAM lParam); | |
// SHCreateShellFolderViewEx struct | |
typedef struct _CSFV | |
{ | |
UINT cbSize; | |
IShellFolder * pshf; | |
IShellView * psvOuter; | |
PCIDLIST_ABSOLUTE pidl; | |
LONG lEvents; | |
LPFNVIEWCALLBACK pfnCallback; // No callback if NULL | |
FOLDERVIEWMODE fvm; | |
} CSFV, * LPCSFV; | |
// Tell the FolderView to rearrange. The lParam will be passed to | |
// IShellFolder::CompareIDs | |
#define SFVM_REARRANGE 0x00000001 | |
#define ShellFolderView_ReArrange(_hwnd, _lparam) \ | |
(BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam) | |
// Add an OBJECT into the view | |
#define SFVM_ADDOBJECT 0x00000003 | |
#define ShellFolderView_AddObject(_hwnd, _pidl) \ | |
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)(_pidl)) | |
// Remove an OBJECT into the view | |
#define SFVM_REMOVEOBJECT 0x00000006 | |
#define ShellFolderView_RemoveObject(_hwnd, _pidl) \ | |
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)(_pidl)) | |
// 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. | |
// | |
// _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 | |
// this call. (Unsuccessful completion (a -1 return) implies failure | |
// and the caller must free the memory.) Win95 waits a while before | |
// freeing the pidl, IE4 frees the pidl immediately. | |
// IShellFolderView::UpdateObject does not suffer from this problem. | |
// | |
#define SFVM_UPDATEOBJECT 0x00000007 | |
#define ShellFolderView_UpdateObject(_hwnd, _ppidl) \ | |
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)(_ppidl)) | |
// Returns an array of the selected IDS to the caller. | |
// lparam is a pointer to receive the idlists into | |
// return value is the count of items in the array. | |
#define SFVM_GETSELECTEDOBJECTS 0x00000009 | |
#define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \ | |
(LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARAM)(ppidl)) | |
typedef struct _SFV_SETITEMPOS | |
{ | |
PCUITEMID_CHILD pidl; | |
POINT pt; | |
} SFV_SETITEMPOS; | |
typedef SFV_SETITEMPOS *LPSFV_SETITEMPOS; | |
typedef const SFV_SETITEMPOS *PCSFV_SETITEMPOS; | |
// Sets the position of an item in the viewer | |
// lparam is a pointer to a SVF_SETITEMPOS | |
// return value is unused | |
#define SFVM_SETITEMPOS 0x0000000e | |
#define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \ | |
{ SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \ | |
SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEMPOS)&_sip);} | |
// Notifies a ShellView when one of its objects get put on the clipboard | |
// as a result of a menu command. | |
// | |
// | |
// lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY) | |
// return value is void. | |
#define SFVM_SETCLIPBOARD 0x00000010 | |
#define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \ | |
(void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD)(_dwEffect)) | |
#define SFVM_SETPOINTS 0x00000017 | |
#define ShellFolderView_SetPoints(_hwnd, _pdtobj) \ | |
(void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)(_pdtobj)) | |
#include <poppack.h> /* Return to byte packing */ | |
SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast); | |
SHSTDAPI SHCreateShellFolderViewEx(__in LPCSFV pcsfv, __deref_out IShellView ** ppsv); | |
// Legacy PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with | |
// IPropertySetStorage/IPropertyStorage. | |
// | |
// The known property ids and their variant types are: | |
// PID_IS_URL [VT_LPWSTR] URL | |
// PID_IS_NAME [VT_LPWSTR] Name of the internet shortcut | |
// PID_IS_WORKINGDIR [VT_LPWSTR] Working directory for the shortcut | |
// PID_IS_HOTKEY [VT_UI2] Hotkey for the shortcut | |
// PID_IS_SHOWCMD [VT_I4] Show command for shortcut | |
// PID_IS_ICONINDEX [VT_I4] Index into file that has icon | |
// PID_IS_ICONFILE [VT_LPWSTR] File that has the icon | |
// PID_IS_WHATSNEW [VT_LPWSTR] What's New text | |
// PID_IS_AUTHOR [VT_LPWSTR] Author | |
// PID_IS_DESCRIPTION [VT_LPWSTR] Description text of site | |
// PID_IS_COMMENT [VT_LPWSTR] User annotated comment | |
#define PID_IS_URL 2 | |
#define PID_IS_NAME 4 | |
#define PID_IS_WORKINGDIR 5 | |
#define PID_IS_HOTKEY 6 | |
#define PID_IS_SHOWCMD 7 | |
#define PID_IS_ICONINDEX 8 | |
#define PID_IS_ICONFILE 9 | |
#define PID_IS_WHATSNEW 10 | |
#define PID_IS_AUTHOR 11 | |
#define PID_IS_DESCRIPTION 12 | |
#define PID_IS_COMMENT 13 | |
// PROPIDs for Internet Sites (FMTID_InternetSite) to be used with | |
// IPropertySetStorage/IPropertyStorage | |
// | |
// The known property ids and their variant types are: | |
// PID_INTSITE_WHATSNEW [VT_LPWSTR] What's New text | |
// PID_INTSITE_AUTHOR [VT_LPWSTR] Author | |
// PID_INTSITE_LASTVISIT [VT_FILETIME] Time site was last visited | |
// PID_INTSITE_LASTMOD [VT_FILETIME] Time site was last modified | |
// PID_INTSITE_VISITCOUNT [VT_UI4] Number of times user has visited | |
// PID_INTSITE_DESCRIPTION [VT_LPWSTR] Description text of site | |
// PID_INTSITE_COMMENT [VT_LPWSTR] User annotated comment | |
// PID_INTSITE_RECURSE [VT_UI4] Levels to recurse (0-3) | |
// PID_INTSITE_WATCH [VT_UI4] PIDISM_ flags | |
// PID_INTSITE_SUBSCRIPTION [VT_UI8] Subscription cookie | |
// PID_INTSITE_URL [VT_LPWSTR] URL | |
// PID_INTSITE_TITLE [VT_LPWSTR] Title | |
// PID_INTSITE_CODEPAGE [VT_UI4] Codepage of the document | |
// PID_INTSITE_TRACKING [VT_UI4] Tracking | |
// 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_RAWURL [VT_LPWSTR] The raw, un-encoded, unicode url. | |
#define PID_INTSITE_WHATSNEW 2 | |
#define PID_INTSITE_AUTHOR 3 | |
#define PID_INTSITE_LASTVISIT 4 | |
#define PID_INTSITE_LASTMOD 5 | |
#define PID_INTSITE_VISITCOUNT 6 | |
#define PID_INTSITE_DESCRIPTION 7 | |
#define PID_INTSITE_COMMENT 8 | |
#define PID_INTSITE_FLAGS 9 | |
#define PID_INTSITE_CONTENTLEN 10 | |
#define PID_INTSITE_CONTENTCODE 11 | |
#define PID_INTSITE_RECURSE 12 | |
#define PID_INTSITE_WATCH 13 | |
#define PID_INTSITE_SUBSCRIPTION 14 | |
#define PID_INTSITE_URL 15 | |
#define PID_INTSITE_TITLE 16 | |
#define PID_INTSITE_CODEPAGE 18 | |
#define PID_INTSITE_TRACKING 19 | |
#define PID_INTSITE_ICONINDEX 20 | |
#define PID_INTSITE_ICONFILE 21 | |
// Flags for PID_IS_FLAGS | |
#define PIDISF_RECENTLYCHANGED 0x00000001 | |
#define PIDISF_CACHEDSTICKY 0x00000002 | |
#define PIDISF_CACHEIMAGES 0x00000010 | |
#define PIDISF_FOLLOWALLLINKS 0x00000020 | |
// Values for PID_INTSITE_WATCH | |
#define PIDISM_GLOBAL 0 // Monitor based on global setting | |
#define PIDISM_WATCH 1 // User says watch | |
#define PIDISM_DONTWATCH 2 // User says don't watch | |
//////////////////////////////////////////////////////////////////// | |
// | |
// The shell keeps track of some per-user state to handle display | |
// options that is of major interest to ISVs. | |
// The key one requested right now is "DoubleClickInWebView". | |
typedef struct { | |
BOOL fShowAllObjects : 1; | |
BOOL fShowExtensions : 1; | |
BOOL fNoConfirmRecycle : 1; | |
BOOL fShowSysFiles : 1; | |
BOOL fShowCompColor : 1; | |
BOOL fDoubleClickInWebView : 1; | |
BOOL fDesktopHTML : 1; | |
BOOL fWin95Classic : 1; | |
BOOL fDontPrettyPath : 1; | |
BOOL fShowAttribCol : 1; // No longer used, dead bit | |
BOOL fMapNetDrvBtn : 1; | |
BOOL fShowInfoTip : 1; | |
BOOL fHideIcons : 1; | |
BOOL fWebView : 1; | |
BOOL fFilter : 1; | |
BOOL fShowSuperHidden : 1; | |
BOOL fNoNetCrawling : 1; | |
DWORD dwWin95Unused; // Win95 only - no longer supported pszHiddenFileExts | |
UINT uWin95Unused; // Win95 only - no longer supported cbHiddenFileExts | |
// Note: Not a typo! This is a persisted structure so we cannot use LPARAM | |
LONG lParamSort; | |
int iSortDirection; | |
UINT version; | |
// new for win2k. need notUsed var to calc the right size of ie4 struct | |
// FIELD_OFFSET does not work on bit fields | |
UINT uNotUsed; // feel free to rename and use | |
BOOL fSepProcess: 1; | |
// new for Whistler. | |
BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPanel mode is ON or OFF. | |
BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on desktop is ON or OFF. | |
// new for Windows Vista | |
BOOL fAutoCheckSelect: 1; | |
BOOL fIconsOnly: 1; | |
BOOL fShowTypeOverlay: 1; | |
UINT fSpareFlags : 11; | |
} SHELLSTATEA, *LPSHELLSTATEA; | |
typedef struct { | |
BOOL fShowAllObjects : 1; | |
BOOL fShowExtensions : 1; | |
BOOL fNoConfirmRecycle : 1; | |
BOOL fShowSysFiles : 1; | |
BOOL fShowCompColor : 1; | |
BOOL fDoubleClickInWebView : 1; | |
BOOL fDesktopHTML : 1; | |
BOOL fWin95Classic : 1; | |
BOOL fDontPrettyPath : 1; | |
BOOL fShowAttribCol : 1; | |
BOOL fMapNetDrvBtn : 1; | |
BOOL fShowInfoTip : 1; | |
BOOL fHideIcons : 1; | |
BOOL fWebView : 1; | |
BOOL fFilter : 1; | |
BOOL fShowSuperHidden : 1; | |
BOOL fNoNetCrawling : 1; | |
DWORD dwWin95Unused; // Win95 only - no longer supported pszHiddenFileExts | |
UINT uWin95Unused; // Win95 only - no longer supported cbHiddenFileExts | |
// Note: Not a typo! This is a persisted structure so we cannot use LPARAM | |
LONG lParamSort; | |
int iSortDirection; | |
UINT version; | |
// new for win2k. need notUsed var to calc the right size of ie4 struct | |
// FIELD_OFFSET does not work on bit fields | |
UINT uNotUsed; // feel free to rename and use | |
BOOL fSepProcess: 1; | |
// new for Whistler. | |
BOOL fStartPanelOn: 1; //Indicates if the Whistler StartPage mode is ON or OFF. | |
BOOL fShowStartPage: 1; //Indicates if the Whistler StartPage on desktop is ON or OFF. | |
// new for Windows Vista | |
BOOL fAutoCheckSelect: 1; | |
BOOL fIconsOnly: 1; | |
BOOL fShowTypeOverlay: 1; | |
// If you need a new flag, steal a bit from from fSpareFlags. | |
// Also, keep SHELLFLAGSTATE and SHGetSettings in sync when adding new flags. | |
UINT fSpareFlags : 11; | |
} SHELLSTATEW, *LPSHELLSTATEW; | |
#define SHELLSTATEVERSION_IE4 9 | |
#define SHELLSTATEVERSION_WIN2K 10 | |
#ifdef UNICODE | |
#define SHELLSTATE SHELLSTATEW | |
#define LPSHELLSTATE LPSHELLSTATEW | |
#else | |
#define SHELLSTATE SHELLSTATEA | |
#define LPSHELLSTATE LPSHELLSTATEA | |
#endif | |
#define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET(SHELLSTATE,lParamSort) | |
#define SHELLSTATE_SIZE_NT4 FIELD_OFFSET(SHELLSTATE,version) | |
#define SHELLSTATE_SIZE_IE4 FIELD_OFFSET(SHELLSTATE,uNotUsed) | |
#define SHELLSTATE_SIZE_WIN2K sizeof(SHELLSTATE) | |
SHSTDAPI_(void) SHGetSetSettings(__inout_opt LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet); | |
// | |
// SysFiles are these windows special files: | |
// "dll sys vxd 386 drv" | |
// | |
// hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute | |
// | |
// system files are files with the FILE_ATTRIBUTE_SYSTEM attribute | |
// | |
// fShowAllObjects fShowSysFiles Result | |
// --------------- ------------- ------ | |
// 0 0 hide hidden + SysFiles + system files | |
// 0 1 hide hidden files. | |
// 1 0 show all files. | |
// 1 1 show all files. | |
// | |
typedef struct { | |
BOOL fShowAllObjects : 1; | |
BOOL fShowExtensions : 1; | |
BOOL fNoConfirmRecycle : 1; | |
BOOL fShowSysFiles : 1; | |
BOOL fShowCompColor : 1; | |
BOOL fDoubleClickInWebView : 1; | |
BOOL fDesktopHTML : 1; | |
BOOL fWin95Classic : 1; | |
BOOL fDontPrettyPath : 1; | |
BOOL fShowAttribCol : 1; | |
BOOL fMapNetDrvBtn : 1; | |
BOOL fShowInfoTip : 1; | |
BOOL fHideIcons : 1; | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
BOOL fAutoCheckSelect: 1; | |
BOOL fIconsOnly: 1; | |
UINT fRestFlags : 1; // when adding additional flags keep SHELLSTATE and SHGetSettings in sync. | |
#else | |
UINT fRestFlags : 3; // when adding additional flags keep SHELLSTATE and SHGetSettings in sync. | |
#endif | |
} SHELLFLAGSTATE, *LPSHELLFLAGSTATE; | |
#define SSF_SHOWALLOBJECTS 0x00000001 | |
#define SSF_SHOWEXTENSIONS 0x00000002 | |
#define SSF_HIDDENFILEEXTS 0x00000004 | |
#define SSF_SERVERADMINUI 0x00000004 | |
#define SSF_SHOWCOMPCOLOR 0x00000008 | |
#define SSF_SORTCOLUMNS 0x00000010 | |
#define SSF_SHOWSYSFILES 0x00000020 | |
#define SSF_DOUBLECLICKINWEBVIEW 0x00000080 | |
#define SSF_SHOWATTRIBCOL 0x00000100 | |
#define SSF_DESKTOPHTML 0x00000200 | |
#define SSF_WIN95CLASSIC 0x00000400 | |
#define SSF_DONTPRETTYPATH 0x00000800 | |
#define SSF_SHOWINFOTIP 0x00002000 | |
#define SSF_MAPNETDRVBUTTON 0x00001000 | |
#define SSF_NOCONFIRMRECYCLE 0x00008000 | |
#define SSF_HIDEICONS 0x00004000 | |
#define SSF_FILTER 0x00010000 | |
#define SSF_WEBVIEW 0x00020000 | |
#define SSF_SHOWSUPERHIDDEN 0x00040000 | |
#define SSF_SEPPROCESS 0x00080000 | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
#define SSF_NONETCRAWLING 0x00100000 | |
#define SSF_STARTPANELON 0x00200000 | |
#define SSF_SHOWSTARTPAGE 0x00400000 | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
#define SSF_AUTOCHECKSELECT 0x00800000 | |
#define SSF_ICONSONLY 0x01000000 | |
#define SSF_SHOWTYPEOVERLAY 0x02000000 | |
#endif // NTDDI_VISTA | |
// | |
// Specify the bits you are interested in in dwMask and they will be | |
// filled out in the lpss structure. | |
// | |
// When these settings change, a WM_SETTINGCHANGE message is sent | |
// with the string lParam value of "ShellState". | |
// | |
SHSTDAPI_(void) SHGetSettings(__out SHELLFLAGSTATE *psfs, DWORD dwMask); | |
// | |
// 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. | |
// | |
SHSTDAPI SHBindToParent(__in PCIDLIST_ABSOLUTE pidl, __in REFIID riid, __deref_out void **ppv, __deref_opt_out PCUITEMID_CHILD *ppidlLast); | |
#if (NTDDI_VERSION >= NTDDI_VISTA) | |
// Same as SHBindToParent, except you also specify which root to use. | |
SHSTDAPI SHBindToFolderIDListParent(__in_opt IShellFolder *psfRoot, __in PCUIDLIST_RELATIVE pidl, __in REFIID riid, __deref_out void **ppv, __deref_opt_out PCUITEMID_CHILD *ppidlLast); | |
// same as SHBindToFolderIDListParent but with a IBindCtx *pbc; | |
SHSTDAPI SHBindToFolderIDListParentEx(__in_opt IShellFolder *psfRoot, __in PCUIDLIST_RELATIVE pidl, __in_opt IBindCtx *ppbc, __in REFIID riid, __deref_out void **ppv, __deref_opt_out PCUITEMID_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_VISTA | |
// | |
// 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. | |
// this includes mapping file system paths to their appropriate aliased location (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES)) | |
// psfgaoOut is optional for SFGAO attributes | |
// | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SHSTDAPI SHParseDisplayName(__in PCWSTR pszName, __in_opt IBindCtx *pbc, __deref_out PIDLIST_ABSOLUTE *ppidl, __in SFGAOF sfgaoIn, __out_opt SFGAOF *psfgaoOut); | |
#endif // NTDDI_WINXP | |
// | |
// This API will make its best effort to prepare the path for the caller. This includes: | |
// 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.) | |
// 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_ASKDIRCREATE) | |
// 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set) | |
// | |
// PARAMETERS: | |
// hwnd: Parernt window for UI. NULL means don't display UI. OPTIONAL | |
// punkEnableModless: Parent that will be set to modal during UI using IOleInPlaceActiveObject::EnableModeless(). OPTIONAL | |
// pszPath: Path to verify is valid for writting. This can be a UNC or file drive path. The path | |
// should only contain directories. Pass SHPPFW_IGNOREFILENAME if the last path segment | |
// is always filename to ignore. | |
// dwFlags: SHPPFW_* Flags to modify behavior | |
#define SHPPFW_NONE 0x00000000 | |
#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_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:\DirA". | |
#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 | |
#endif // NTDDI_WINXP | |
SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR pszPath, DWORD dwFlags); | |
SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR pszPath, DWORD dwFlags); | |
#ifdef UNICODE | |
#define SHPathPrepareForWrite SHPathPrepareForWriteW | |
#else | |
#define SHPathPrepareForWrite SHPathPrepareForWriteA | |
#endif // !UNICODE | |
//-------------------------------------------------------------------------- | |
// | |
// Interface used for exposing the INI file methods on a shortcut file | |
// | |
// | |
//-------------------------------------------------------------------------- | |
#undef INTERFACE | |
#define INTERFACE INamedPropertyBag | |
DECLARE_INTERFACE_IID_(INamedPropertyBag, IUnknown, "FB700430-952C-11d1-946F-000000000000") | |
{ | |
// *** IUnknown methods *** | |
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | |
STDMETHOD_(ULONG,AddRef) (THIS) PURE; | |
STDMETHOD_(ULONG,Release) (THIS) PURE; | |
// *** INamedPropertyBag methods *** | |
STDMETHOD(ReadPropertyNPB) (THIS_ /* [in] */ LPCWSTR pszBagname, | |
/* [in] */ LPCWSTR pszPropName, | |
/* [out][in] */ PROPVARIANT *pVar) PURE; | |
STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname, | |
/* [in] */ LPCWSTR pszPropName, | |
/* [in] */ PROPVARIANT *pVar) PURE; | |
STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname, | |
/* [in] */ LPCWSTR pszPropName) PURE; | |
}; | |
#ifdef __urlmon_h__ | |
// NOTE: urlmon.h must be included before shlobj.h to access this function. | |
// | |
// SoftwareUpdateMessageBox | |
// | |
// 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 available or if the available update version is less than or equal | |
// to the Advertised update version. | |
// | |
// hWnd - [in] Handle of owner window | |
// szDistUnit - [in] Unique identifier string for a code distribution unit. For | |
// ActiveX controls and Active Setup installed components, this | |
// is typically a GUID string. | |
// dwFlags - [in] Must be 0. | |
// psdi - [in,out] Pointer to SOFTDISTINFO ( see URLMon.h ). May be NULL. | |
// cbSize should be initialized | |
// by the caller to sizeof(SOFTDISTINFO), dwReserved should be set to 0. | |
// | |
// RETURNS: | |
// | |
// IDNO - The user chose cancel. If *pbRemind is FALSE, the caller should save the | |
// update version from the SOFTDISTINFO and pass it in as the Advertised | |
// version in future calls. | |
// | |
// IDYES - The user has selected Update Now/About Update. The caller should navigate to | |
// the SOFTDISTINFO's pszHREF to initiate the install or learn about it. | |
// The caller should save the update version from the SOFTDISTINFO and pass | |
// it in as the Advertised version in future calls. | |
// | |
// IDIGNORE - There is no pending software update. Note: There is | |
// no Ignore button in the standard UI. This occurs if the available | |
// version is less than the installed version or is not present or if the | |
// Advertised version is greater than or equal to the update version. | |
// | |
// IDABORT - An error occured. Call GetSoftwareUpdateInfo() for a more specific HRESULT. | |
// Note: There is no Abort button in the standard UI. | |
SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd, | |
LPCWSTR pszDistUnit, | |
DWORD dwFlags, | |
__out_opt LPSOFTDISTINFO psdi ); | |
#endif // if __urlmon_h__ | |
// SHPropStgCreate() | |
// Wrap of IPropertySetStorage::Open/Create | |
// | |
// This function ensures proper handling of code page retrieval/assignment | |
// for the requested property set operation. | |
// | |
// psstg, // Address of IPropertySetStorage vtable | |
// fmtid, // property set ID | |
// pclsid, // class ID associated with the set. This can be NULL | |
// grfFlags, // PROPSETFLAG_xxx. All sets containing ansi bytes should be created with | |
// PROPSETFLAG_ANSI, otherwise PROPSETFLAG_DEFAULT. | |
// grfMode, // STGM_ flags. Must contain STGM_DIRECT|STGM_EXCLUSIVE. | |
// dwDisposition, // OPEN_EXISTING. OPEN_ALWAYS, CREATE_NEW, or CREATE_ALWAYS | |
// IPropertyStorage** ppstg, // Address to receive requested vtable | |
// puCodePage // Optional address to receive the code page ID for the set. | |
// | |
SHSTDAPI SHPropStgCreate(__in IPropertySetStorage* psstg, __in REFFMTID fmtid, __in_opt const CLSID *pclsid, __in DWORD grfFlags, __in DWORD grfMode, __in DWORD dwDisposition, __deref_out IPropertyStorage** ppstg, __out_opt UINT* puCodePage ); | |
// SHPropStgReadMultiple() | |
// IPropertyStorage::ReadMultiple wrap | |
// | |
// The wrap ensures ANSI/UNICODE translations are handled properly for | |
// legacy property sets. | |
// | |
// pps, // address of IPropertyStorage vtable. | |
// uCodePage, //Code page value retrieved from SHCreatePropertySet | |
// cpspec, //Count of properties being read | |
// rgpspec, //Array of the properties to be read | |
// rgvar //Array of PROPVARIANTs containing the property values on return | |
// | |
SHSTDAPI SHPropStgReadMultiple( IPropertyStorage* pps, UINT uCodePage, ULONG cpspec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __out_ecount_full(cpspec) PROPVARIANT rgvar[] ); | |
// SHPropStgWriteMultiple() | |
// IPropertyStorage::WriteMultiple wrap | |
// | |
// The wrap ensures ANSI/UNICODE translations are handled properly for | |
// legacy property sets. | |
// | |
// pps, // address of IPropertyStorage vtable. | |
// uCodePage, // code page retrieved from SHCreatePropertySet. | |
// cpspec, // The number of properties being set | |
// rgpspec, // Property specifiers | |
// rgvar, // Array of PROPVARIANT values | |
// propidNameFirst // Minimum value for property identifiers. This value should be >= PID_FIRST_USABLE | |
// | |
SHSTDAPI SHPropStgWriteMultiple( IPropertyStorage* pps, __inout_opt UINT* puCodePage, ULONG cpspec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __inout_ecount(cpspec) PROPVARIANT rgvar[], PROPID propidNameFirst ); | |
#if (NTDDI_VERSION >= NTDDI_WINXP) | |
SHSTDAPI SHCreateFileExtractIconA(__in LPCSTR pszFile, __in DWORD dwFileAttributes, __in REFIID riid, __deref_out void **ppv); | |
SHSTDAPI SHCreateFileExtractIconW(__in LPCWSTR pszFile, __in DWORD dwFileAttributes, __in REFIID riid, __deref_out void **ppv); | |
#ifdef UNICODE | |
#define SHCreateFileExtractIcon SHCreateFileExtractIconW | |
#else | |
#define SHCreateFileExtractIcon SHCreateFileExtractIconA | |
#endif // !UNICODE | |
#include <pshpack8.h> | |
#include <poppack.h> /* Return to byte packing */ | |
SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf); | |
STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, __out_opt DWORD *pdwAttributes, __out_opt UINT *pcItems); | |
#endif // NTDDI_WINXP | |
#if (NTDDI_VERSION >= NTDDI_WIN2K) | |
// | |
// The SHMultiFileProperties API displays a property sheet for a | |
// set of files specified in an IDList Array. | |
// | |
// Parameters: | |
// pdtobj - Data object containing list of files. The data | |
// object must provide the "Shell IDList Array" | |
// clipboard format. The parent folder's implementation of | |
// IShellFolder::GetDisplayNameOf must return a fully-qualified | |
// filesystem path for each item in response to the | |
// SHGDN_FORPARSING flag. | |
// | |
// dwFlags - Reserved for future use. Should be set to 0. | |
// | |
// Returns: | |
// S_OK | |
// | |
SHSTDAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD dwFlags); | |
#endif // NTDDI_WIN2K | |
// 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 | |
// icon. | |
SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, PCUITEMID_CHILD pidl, __out_opt int *piIndexSel); | |
SHSTDAPI SHCLSIDFromString(LPCWSTR psz, __out CLSID *pclsid); | |
SHSTDAPI SHCreateQueryCancelAutoPlayMoniker(__out IMoniker** ppmoniker); // deprecated: use CreateClassMoniker(CLSID_YourOwnClsid, ...) | |
STDAPI_(void) PerUserInit(void); | |
SHSTDAPI_(BOOL)SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgParent); | |
SHSTDAPI_(int) PickIconDlg(HWND hwnd, __inout_ecount(cchIconPath) LPWSTR pszIconPath, UINT cchIconPath, __inout_opt int *piIconIndex); | |
#include <pshpack8.h> | |
typedef struct tagAAMENUFILENAME | |
{ | |
SHORT cbTotal; | |
BYTE rgbReserved[12]; | |
WCHAR szFileName[1]; // variable length string | |
} AASHELLMENUFILENAME, *LPAASHELLMENUFILENAME; | |
typedef struct tagAASHELLMENUITEM | |
{ | |
void* lpReserved1; | |
int iReserved; | |
UINT uiReserved; | |
LPAASHELLMENUFILENAME lpName; // name of file | |
LPWSTR psz; // text to use if no file | |
} AASHELLMENUITEM, *LPAASHELLMENUITEM; | |
#include <poppack.h> /* Return to byte packing */ | |
#if (NTDDI_VERSION >= NTDDI_WIN7) | |
// returns an IStream or IStorage via riid/ppv | |
STDAPI StgMakeUniqueName(__in IStorage *pstgParent, __in PCWSTR pszFileSpec, __in DWORD grfMode, __in REFIID riid, __deref_out void **ppv); | |
#endif // NTDDI_WIN7 | |
#if (_WIN32_IE >= _WIN32_IE_IE70) | |
typedef enum tagIESHORTCUTFLAGS | |
{ | |
IESHORTCUT_NEWBROWSER = 0x01, | |
IESHORTCUT_OPENNEWTAB = 0x02, | |
IESHORTCUT_FORCENAVIGATE = 0x04, | |
IESHORTCUT_BACKGROUNDTAB = 0x08, | |
} IESHORTCUTFLAGS; | |
#endif // _WIN32_IE_IE70 | |
#if (_WIN32_IE >= _WIN32_IE_XP) | |
SHDOCAPI_(BOOL) ImportPrivacySettings(LPCWSTR pszFilename, __inout BOOL* pfParsePrivacyPreferences, __inout BOOL* pfParsePerSiteRules); | |
#ifndef IEnumPrivacyRecords | |
typedef interface IEnumPrivacyRecords IEnumPrivacyRecords; | |
#endif | |
SHDOCAPI DoPrivacyDlg(HWND hwndOwner, __in LPCWSTR pszUrl, __in IEnumPrivacyRecords *pPrivacyEnum, BOOL fReportAllSites); | |
#endif // _WIN32_IE_XP | |
#include <poppack.h> | |
#ifdef __cplusplus | |
} | |
#endif /* __cplusplus */ | |
#if (_MSC_VER >= 800) | |
#if (_MSC_VER >= 1200) | |
#pragma warning(pop) | |
#else | |
#pragma warning(default:4001) | |
#endif | |
#endif | |
#endif /* _SHLOBJ_H_ */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment