home *** CD-ROM | disk | FTP | other *** search
- //===========================================================================
- //
- // Copyright (c) Microsoft Corporation 1991-1996
- //
- // File: shlobj.h
- //
- //===========================================================================
-
- #ifndef _SHLOBJ_H_
- #define _SHLOBJ_H_
-
- //
- // Define API decoration for direct importing of DLL references.
- //
- #ifndef WINSHELLAPI
- #if !defined(_SHELL32_)
- #define WINSHELLAPI DECLSPEC_IMPORT
- #else
- #define WINSHELLAPI
- #endif
- #endif // WINSHELLAPI
-
-
- #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 */
-
- #ifndef RC_INVOKED
- #pragma pack(1) /* Assume byte packing throughout */
- #endif /* !RC_INVOKED */
-
- #ifdef __cplusplus
- extern "C" { /* Assume C declarations for C++ */
- #endif /* __cplusplus */
-
- //===========================================================================
- //
- // Object identifiers in the explorer's name space (ItemID and IDList)
- //
- // All the items that the user can browse with the explorer (such as files,
- // directories, servers, work-groups, etc.) has an identifier which is unique
- // among items within the parent folder. Those identifiers are called item
- // IDs (SHITEMID). Since all its parent folders have their own item IDs,
- // any items can be uniquely identified by a list of item IDs, which is called
- // an ID list (ITEMIDLIST).
- //
- // ID lists are almost always allocated by the task allocator (see some
- // description below as well as OLE 2.0 SDK) and may be passed across
- // some of shell interfaces (such as IShellFolder). Each item ID in an ID list
- // is only meaningful to its parent folder (which has generated it), and all
- // the clients must treat it as an opaque binary data except the first two
- // bytes, which indicates the size of the item ID.
- //
- // When a shell extension -- which implements the IShellFolder interace --
- // generates an item ID, it may put any information in it, not only the data
- // with that it needs to identifies the item, but also some additional
- // information, which would help implementing some other functions efficiently.
- // For example, the shell's IShellFolder implementation of file system items
- // stores the primary (long) name of a file or a directory as the item
- // identifier, but it also stores its alternative (short) name, size and date
- // etc.
- //
- // When an ID list is passed to one of shell APIs (such as SHGetPathFromIDList),
- // it is always an absolute path -- relative from the root of the name space,
- // which is the desktop folder. When an ID list is passed to one of IShellFolder
- // member function, it is always a relative path from the folder (unless it
- // is explicitly specified).
- //
- //===========================================================================
-
- //
- // SHITEMID -- Item ID
- //
- typedef struct _SHITEMID // mkid
- {
- USHORT cb; // Size of the ID (including cb itself)
- BYTE abID[1]; // The item ID (variable length)
- } SHITEMID;
- typedef UNALIGNED SHITEMID *LPSHITEMID;
- typedef const UNALIGNED SHITEMID *LPCSHITEMID;
-
- //
- // ITEMIDLIST -- List if item IDs (combined with 0-terminator)
- //
- typedef struct _ITEMIDLIST // idl
- {
- SHITEMID mkid;
- } ITEMIDLIST;
- typedef UNALIGNED ITEMIDLIST * LPITEMIDLIST;
- typedef const UNALIGNED ITEMIDLIST * LPCITEMIDLIST;
-
-
- //===========================================================================
- //
- // Task allocator API
- //
- // All the shell extensions MUST use the task allocator (see OLE 2.0
- // programming guild for its definition) when they allocate or free
- // memory objects (mostly ITEMIDLIST) that are returned across any
- // shell interfaces. There are two ways to access the task allocator
- // from a shell extension depending on whether or not it is linked with
- // OLE32.DLL or not (purely for efficiency).
- //
- // (1) A shell extension which calls any OLE API (i.e., linked with
- // OLE32.DLL) should call OLE's task allocator (by retrieving
- // the task allocator by calling CoGetMalloc API).
- //
- // (2) A shell extension which does not call any OLE API (i.e., not linked
- // with OLE32.DLL) should call the shell task allocator API (defined
- // below), so that the shell can quickly loads it when OLE32.DLL is not
- // loaded by any application at that point.
- //
- // Notes:
- // In next version of Windowso release, SHGetMalloc will be replaced by
- // the following macro.
- //
- // #define SHGetMalloc(ppmem) CoGetMalloc(MEMCTX_TASK, ppmem)
- //
- //===========================================================================
-
- WINSHELLAPI HRESULT WINAPI SHGetMalloc(LPMALLOC * ppMalloc);
-
-
-
- //===========================================================================
- //
- // IContextMenu interface
- //
- // [OverView]
- //
- // The shell uses the IContextMenu interface in following three cases.
- //
- // case-1: The shell is loading context menu extensions.
- //
- // When the user clicks the right mouse button on an item within the shell's
- // name space (i.g., file, directory, server, work-group, etc.), it creates
- // the default context menu for its type, then loads context menu extensions
- // that are registered for that type (and its base type) so that they can
- // add extra menu items. Those context menu extensions are registered at
- // HKCR\{ProgID}\shellex\ContextMenuHandlers.
- //
- // case-2: The shell is retrieving a context menu of sub-folders in extended
- // name-space.
- //
- // When the explorer's name space is extended by name space extensions,
- // the shell calls their IShellFolder::GetUIObjectOf to get the IContextMenu
- // objects when it creates context menus for folders under those extended
- // name spaces.
- //
- // case-3: The shell is loading non-default drag and drop handler for directories.
- //
- // When the user performed a non-default drag and drop onto one of file
- // system folders (i.e., directories), it loads shell extensions that are
- // registered at HKCR\{ProgID}\DragDropHandlers.
- //
- //
- // [Member functions]
- //
- //
- // IContextMenu::QueryContextMenu
- //
- // This member function may insert one or more menuitems to the specified
- // menu (hmenu) at the specified location (indexMenu which is never be -1).
- // The IDs of those menuitem must be in the specified range (idCmdFirst and
- // idCmdLast). It returns the maximum menuitem ID offset (ushort) in the
- // 'code' field (low word) of the scode.
- //
- // The uFlags specify the context. It may have one or more of following
- // flags.
- //
- // CMF_DEFAULTONLY: This flag is passed if the user is invoking the default
- // action (typically by double-clicking, case 1 and 2 only). Context menu
- // extensions (case 1) should not add any menu items, and returns NOERROR.
- //
- // CMF_VERBSONLY: The explorer passes this flag if it is constructing
- // a context menu for a short-cut object (case 1 and case 2 only). If this
- // flag is passed, it should not add any menu-items that is not appropriate
- // from a short-cut.
- // A good example is the "Delete" menuitem, which confuses the user
- // because it is not clear whether it deletes the link source item or the
- // link itself.
- //
- // CMF_EXPLORER: The explorer passes this flag if it has the left-side pane
- // (case 1 and 2 only). Context menu extensions should ignore this flag.
- //
- // High word (16-bit) are reserved for context specific communications
- // and the rest of flags (13-bit) are reserved by the system.
- //
- //
- // IContextMenu::InvokeCommand
- //
- // This member is called when the user has selected one of menuitems that
- // are inserted by previous QueryContextMenu member. In this case, the
- // LOWORD(lpici->lpVerb) contains the menuitem ID offset (menuitem ID -
- // idCmdFirst).
- //
- // This member function may also be called programmatically. In such a case,
- // lpici->lpVerb specifies the canonical name of the command to be invoked,
- // which is typically retrieved by GetCommandString member previously.
- //
- // Parameters in lpci:
- // cbSize -- Specifies the size of this structure (sizeof(*lpci))
- // hwnd -- Specifies the owner window for any message/dialog box.
- // fMask -- Specifies whether or not dwHotkey/hIcon paramter is valid.
- // lpVerb -- Specifies the command to be invoked.
- // lpParameters -- Parameters (optional)
- // lpDirectory -- Working directory (optional)
- // nShow -- Specifies the flag to be passed to ShowWindow (SW_*).
- // dwHotKey -- Hot key to be assigned to the app after invoked (optional).
- // hIcon -- Specifies the icon (optional).
- //
- //
- // IContextMenu::GetCommandString
- //
- // This member function is called by the explorer either to get the
- // canonical (language independent) command name (uFlags == GCS_VERB) or
- // the help text ((uFlags & GCS_HELPTEXT) != 0) for the specified command.
- // The retrieved canonical string may be passed to its InvokeCommand
- // member function to invoke a command programmatically. The explorer
- // displays the help texts in its status bar; therefore, the length of
- // the help text should be reasonably short (<40 characters).
- //
- // Parameters:
- // idCmd -- Specifies menuitem ID offset (from idCmdFirst)
- // uFlags -- Either GCS_VERB or GCS_HELPTEXT
- // pwReserved -- Reserved (must pass NULL when calling, must ignore when called)
- // pszName -- Specifies the string buffer.
- // cchMax -- Specifies the size of the string buffer.
- //
- //===========================================================================
-
- // QueryContextMenu uFlags
- #define CMF_NORMAL 0x00000000
- #define CMF_DEFAULTONLY 0x00000001
- #define CMF_VERBSONLY 0x00000002
- #define CMF_EXPLORE 0x00000004
- #define CMF_NOVERBS 0x00000008
- #define CMF_CANRENAME 0x00000010
- #define CMF_NODEFAULT 0x00000020
- #define CMF_INCLUDESTATIC 0x00000040
- #define CMF_RESERVED 0xffff0000 // View specific
-
- // GetCommandString uFlags
- #define GCS_VERBA 0x00000000 // canonical verb
- #define GCS_HELPTEXTA 0x00000001 // help text (for status bar)
- #define GCS_VALIDATEA 0x00000002 // validate command exists
- #define GCS_VERBW 0x00000004 // canonical verb (unicode)
- #define GCS_HELPTEXTW 0x00000005 // help text (unicode version)
- #define GCS_VALIDATEW 0x00000006 // validate command exists (unicode)
- #define GCS_UNICODE 0x00000004 // for bit testing - Unicode string
-
- #ifdef UNICODE
- #define GCS_VERB GCS_VERBW
- #define GCS_HELPTEXT GCS_HELPTEXTW
- #define GCS_VALIDATE GCS_VALIDATEW
- #else
- #define GCS_VERB GCS_VERBA
- #define GCS_HELPTEXT GCS_HELPTEXTA
- #define GCS_VALIDATE GCS_VALIDATEA
- #endif
-
- #define CMDSTR_NEWFOLDERA "NewFolder"
- #define CMDSTR_VIEWLISTA "ViewList"
- #define CMDSTR_VIEWDETAILSA "ViewDetails"
- #define CMDSTR_NEWFOLDERW L"NewFolder"
- #define CMDSTR_VIEWLISTW L"ViewList"
- #define CMDSTR_VIEWDETAILSW L"ViewDetails"
-
- #ifdef UNICODE
- #define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERW
- #define CMDSTR_VIEWLIST CMDSTR_VIEWLISTW
- #define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSW
- #else
- #define CMDSTR_NEWFOLDER CMDSTR_NEWFOLDERA
- #define CMDSTR_VIEWLIST CMDSTR_VIEWLISTA
- #define CMDSTR_VIEWDETAILS CMDSTR_VIEWDETAILSA
- #endif
-
- #define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY
- #define CMIC_MASK_ICON SEE_MASK_ICON
- #define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI
- #define CMIC_MASK_UNICODE SEE_MASK_UNICODE
- #define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE
- #define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME
- #define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM
- #define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE
- #define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK
-
-
- typedef struct _CMINVOKECOMMANDINFO {
- DWORD cbSize; // sizeof(CMINVOKECOMMANDINFO)
- DWORD fMask; // any combination of CMIC_MASK_*
- HWND hwnd; // might be NULL (indicating no owner window)
- LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset)
- LPCSTR lpParameters; // might be NULL (indicating no parameter)
- LPCSTR lpDirectory; // might be NULL (indicating no specific directory)
- int nShow; // one of SW_ values for ShowWindow() API
-
- DWORD dwHotKey;
- HANDLE hIcon;
- } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
-
- typedef struct _CMInvokeCommandInfoEx {
- DWORD cbSize; // must be sizeof(CMINVOKECOMMANDINFOEX)
- DWORD fMask; // any combination of CMIC_MASK_*
- HWND hwnd; // might be NULL (indicating no owner window)
- LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset)
- LPCSTR lpParameters; // might be NULL (indicating no parameter)
- LPCSTR lpDirectory; // might be NULL (indicating no specific directory)
- int nShow; // one of SW_ values for ShowWindow() API
-
- DWORD dwHotKey;
- HANDLE hIcon;
- LPCSTR lpTitle; // For CreateProcess-StartupInfo.lpTitle
- LPCWSTR lpVerbW; // Unicode verb (for those who can use it)
- LPCWSTR lpParametersW; // Unicode parameters (for those who can use it)
- LPCWSTR lpDirectoryW; // Unicode directory (for those who can use it)
- LPCWSTR lpTitleW; // Unicode title (for those who can use it)
- } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
-
- #undef INTERFACE
- #define INTERFACE IContextMenu
-
- DECLARE_INTERFACE_(IContextMenu, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(QueryContextMenu)(THIS_
- HMENU hmenu,
- UINT indexMenu,
- UINT idCmdFirst,
- UINT idCmdLast,
- UINT uFlags) PURE;
-
- STDMETHOD(InvokeCommand)(THIS_
- LPCMINVOKECOMMANDINFO lpici) PURE;
-
- STDMETHOD(GetCommandString)(THIS_
- UINT idCmd,
- UINT uType,
- UINT * pwReserved,
- LPSTR pszName,
- UINT cchMax) PURE;
- };
-
- typedef IContextMenu * LPCONTEXTMENU;
-
- //
- // IContextMenu2 (IContextMenu with one new member)
- //
- // IContextMenu2::HandleMenuMsg
- //
- // This function is called, if the client of IContextMenu is aware of
- // IContextMenu2 interface and receives one of following messages while
- // it is calling TrackPopupMenu (in the window proc of hwndOwner):
- // WM_INITPOPUP, WM_DRAWITEM and WM_MEASUREITEM
- // The callee may handle these messages to draw owner draw menuitems.
- //
-
- #undef INTERFACE
- #define INTERFACE IContextMenu2
-
- DECLARE_INTERFACE_(IContextMenu2, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(QueryContextMenu)(THIS_
- HMENU hmenu,
- UINT indexMenu,
- UINT idCmdFirst,
- UINT idCmdLast,
- UINT uFlags) PURE;
-
- STDMETHOD(InvokeCommand)(THIS_
- LPCMINVOKECOMMANDINFO lpici) PURE;
-
- STDMETHOD(GetCommandString)(THIS_
- UINT idCmd,
- UINT uType,
- UINT * pwReserved,
- LPSTR pszName,
- UINT cchMax) PURE;
- STDMETHOD(HandleMenuMsg)(THIS_
- UINT uMsg,
- WPARAM wParam,
- LPARAM lParam) PURE;
- };
-
- typedef IContextMenu2 * LPCONTEXTMENU2;
-
-
-
-
- //===========================================================================
- //
- // Interface: IShellExtInit
- //
- // The IShellExtInit interface is used by the explorer to initialize shell
- // extension objects. The explorer (1) calls CoCreateInstance (or equivalent)
- // with the registered CLSID and IID_IShellExtInit, (2) calls its Initialize
- // member, then (3) calls its QueryInterface to a particular interface (such
- // as IContextMenu or IPropSheetExt and (4) performs the rest of operation.
- //
- //
- // [Member functions]
- //
- // IShellExtInit::Initialize
- //
- // This member function is called when the explorer is initializing either
- // context menu extension, property sheet extension or non-default drag-drop
- // extension.
- //
- // Parameters: (context menu or property sheet extension)
- // pidlFolder -- Specifies the parent folder
- // lpdobj -- Spefifies the set of items selected in that folder.
- // hkeyProgID -- Specifies the type of the focused item in the selection.
- //
- // Parameters: (non-default drag-and-drop extension)
- // pidlFolder -- Specifies the target (destination) folder
- // lpdobj -- Specifies the items that are dropped (see the description
- // about shell's clipboard below for clipboard formats).
- // hkeyProgID -- Specifies the folder type.
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IShellExtInit
-
- DECLARE_INTERFACE_(IShellExtInit, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IShellExtInit methods ***
- STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidlFolder,
- LPDATAOBJECT lpdobj, HKEY hkeyProgID) PURE;
- };
-
- typedef IShellExtInit * LPSHELLEXTINIT;
-
-
- //===========================================================================
- //
- // Interface: IShellPropSheetExt
- //
- // The explorer uses the IShellPropSheetExt to allow property sheet
- // extensions or control panel extensions to add additional property
- // sheet pages.
- //
- //
- // [Member functions]
- //
- // IShellPropSheetExt::AddPages
- //
- // The explorer calls this member function when it finds a registered
- // property sheet extension for a particular type of object. For each
- // additional page, the extension creates a page object by calling
- // CreatePropertySheetPage API and calls lpfnAddPage.
- //
- // Parameters:
- // lpfnAddPage -- Specifies the callback function.
- // lParam -- Specifies the opaque handle to be passed to the callback function.
- //
- //
- // IShellPropSheetExt::ReplacePage
- //
- // The explorer never calls this member of property sheet extensions. The
- // explorer calls this member of control panel extensions, so that they
- // can replace some of default control panel pages (such as a page of
- // mouse control panel).
- //
- // Parameters:
- // uPageID -- Specifies the page to be replaced.
- // lpfnReplace Specifies the callback function.
- // lParam -- Specifies the opaque handle to be passed to the callback function.
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IShellPropSheetExt
-
- DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IShellPropSheetExt methods ***
- STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam) PURE;
- STDMETHOD(ReplacePage)(THIS_ UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam) PURE;
- };
-
- typedef IShellPropSheetExt * LPSHELLPROPSHEETEXT;
-
-
- //===========================================================================
- //
- // IPersistFolder Interface
- //
- // The IPersistFolder interface is used by the file system implementation of
- // IShellFolder::BindToObject when it is initializing a shell folder object.
- //
- //
- // [Member functions]
- //
- // IPersistFolder::Initialize
- //
- // This member function is called when the explorer is initializing a
- // shell folder object.
- //
- // Parameters:
- // pidl -- Specifies the absolute location of the folder.
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IPersistFolder
-
- DECLARE_INTERFACE_(IPersistFolder, IPersist) // fld
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
-
- // *** IPersist methods ***
- STDMETHOD(GetClassID)(THIS_ LPCLSID lpClassID) PURE;
-
- // *** IPersistFolder methods ***
- STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidl) PURE;
- };
-
- typedef IPersistFolder *LPPERSISTFOLDER;
-
-
- //===========================================================================
- //
- // 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 NOERROR, 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:
- // NOERROR, 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:
- // NOERROR, 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_ASYNC
-
- // 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
-
- #undef INTERFACE
- #define INTERFACE IExtractIconA
-
- DECLARE_INTERFACE_(IExtractIconA, IUnknown) // exic
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IExtractIcon methods ***
- STDMETHOD(GetIconLocation)(THIS_
- UINT uFlags,
- LPSTR szIconFile,
- UINT cchMax,
- int * piIndex,
- UINT * pwFlags) PURE;
-
- STDMETHOD(Extract)(THIS_
- LPCSTR pszFile,
- UINT nIconIndex,
- HICON *phiconLarge,
- HICON *phiconSmall,
- UINT nIconSize) PURE;
- };
-
- typedef IExtractIconA * LPEXTRACTICONA;
-
- #undef INTERFACE
- #define INTERFACE IExtractIconW
-
- DECLARE_INTERFACE_(IExtractIconW, IUnknown) // exic
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IExtractIcon methods ***
- STDMETHOD(GetIconLocation)(THIS_
- UINT uFlags,
- LPWSTR szIconFile,
- UINT cchMax,
- int * piIndex,
- UINT * pwFlags) PURE;
-
- STDMETHOD(Extract)(THIS_
- LPCWSTR pszFile,
- UINT nIconIndex,
- HICON *phiconLarge,
- 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
-
- //===========================================================================
- //
- // IShellIcon Interface
- //
- // used to get a icon index for a IShellFolder object.
- //
- // this interface can be implemented by a IShellFolder, as a quick way to
- // return the icon for a object in the folder.
- //
- // a instance of this interface is only created once for the folder, unlike
- // IExtractIcon witch is created once for each object.
- //
- // if a ShellFolder does not implement this interface, the standard
- // GetUIObject(....IExtractIcon) method will be used to get a icon
- // for all objects.
- //
- // the following standard imagelist indexs can be returned:
- //
- // 0 document (blank page) (not associated)
- // 1 document (with stuff on the page)
- // 2 application (exe, com, bat)
- // 3 folder (plain)
- // 4 folder (open)
- //
- // IShellIcon:GetIconOf(pidl, flags, lpIconIndex)
- //
- // pidl object to get icon for.
- // flags GIL_* input flags (GIL_OPEN, ...)
- // lpIconIndex place to return icon index.
- //
- // returns:
- // NOERROR, if lpIconIndex contains the correct system imagelist index.
- // S_FALSE, if unable to get icon for this object, go through
- // GetUIObject, IExtractIcon, methods.
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IShellIcon
-
- DECLARE_INTERFACE_(IShellIcon, IUnknown) // shi
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IShellIcon methods ***
- STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags,
- LPINT lpIconIndex) PURE;
- };
-
- typedef IShellIcon *LPSHELLICON;
-
- //===========================================================================
- //
- // IShellLink Interface
- //
- //===========================================================================
-
- #ifdef UNICODE
- #define IShellLink IShellLinkW
- #define IShellLinkVtbl IShellLinkWVtbl
- #else
- #define IShellLink IShellLinkA
- #define IShellLinkVtbl IShellLinkAVtbl
- #endif
-
- // IShellLink::Resolve fFlags
- typedef enum {
- SLR_NO_UI = 0x0001,
- SLR_ANY_MATCH = 0x0002,
- SLR_UPDATE = 0x0004,
- } SLR_FLAGS;
-
- // IShellLink::GetPath fFlags
- typedef enum {
- SLGP_SHORTPATH = 0x0001,
- SLGP_UNCPRIORITY = 0x0002,
- } SLGP_FLAGS;
-
- #undef INTERFACE
- #define INTERFACE IShellLinkA
-
- DECLARE_INTERFACE_(IShellLinkA, IUnknown) // sl
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(GetPath)(THIS_ LPSTR pszFile, int cchMaxPath, WIN32_FIND_DATAA *pfd, DWORD fFlags) PURE;
-
- STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST * ppidl) PURE;
- STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST pidl) PURE;
-
- STDMETHOD(GetDescription)(THIS_ LPSTR pszName, int cchMaxName) PURE;
- STDMETHOD(SetDescription)(THIS_ LPCSTR pszName) PURE;
-
- STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR pszDir, int cchMaxPath) PURE;
- STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR pszDir) PURE;
-
- STDMETHOD(GetArguments)(THIS_ LPSTR pszArgs, int cchMaxPath) PURE;
- STDMETHOD(SetArguments)(THIS_ LPCSTR pszArgs) PURE;
-
- STDMETHOD(GetHotkey)(THIS_ WORD *pwHotkey) PURE;
- STDMETHOD(SetHotkey)(THIS_ WORD wHotkey) PURE;
-
- STDMETHOD(GetShowCmd)(THIS_ int *piShowCmd) PURE;
- STDMETHOD(SetShowCmd)(THIS_ int iShowCmd) PURE;
-
- STDMETHOD(GetIconLocation)(THIS_ LPSTR pszIconPath, int cchIconPath, int *piIcon) PURE;
- STDMETHOD(SetIconLocation)(THIS_ LPCSTR pszIconPath, int iIcon) PURE;
-
- STDMETHOD(SetRelativePath)(THIS_ LPCSTR pszPathRel, DWORD dwReserved) PURE;
-
- STDMETHOD(Resolve)(THIS_ HWND hwnd, DWORD fFlags) PURE;
-
- STDMETHOD(SetPath)(THIS_ LPCSTR pszFile) PURE;
- };
-
- #undef INTERFACE
- #define INTERFACE IShellLinkW
-
- DECLARE_INTERFACE_(IShellLinkW, IUnknown) // sl
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(GetPath)(THIS_ LPWSTR pszFile, int cchMaxPath, WIN32_FIND_DATAW *pfd, DWORD fFlags) PURE;
-
- STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST * ppidl) PURE;
- STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST pidl) PURE;
-
- STDMETHOD(GetDescription)(THIS_ LPWSTR pszName, int cchMaxName) PURE;
- STDMETHOD(SetDescription)(THIS_ LPCWSTR pszName) PURE;
-
- STDMETHOD(GetWorkingDirectory)(THIS_ LPWSTR pszDir, int cchMaxPath) PURE;
- STDMETHOD(SetWorkingDirectory)(THIS_ LPCWSTR pszDir) PURE;
-
- STDMETHOD(GetArguments)(THIS_ LPWSTR pszArgs, int cchMaxPath) PURE;
- STDMETHOD(SetArguments)(THIS_ LPCWSTR pszArgs) PURE;
-
- STDMETHOD(GetHotkey)(THIS_ WORD *pwHotkey) PURE;
- STDMETHOD(SetHotkey)(THIS_ WORD wHotkey) PURE;
-
- STDMETHOD(GetShowCmd)(THIS_ int *piShowCmd) PURE;
- STDMETHOD(SetShowCmd)(THIS_ int iShowCmd) PURE;
-
- STDMETHOD(GetIconLocation)(THIS_ LPWSTR pszIconPath, int cchIconPath, int *piIcon) PURE;
- STDMETHOD(SetIconLocation)(THIS_ LPCWSTR pszIconPath, int iIcon) PURE;
-
- STDMETHOD(SetRelativePath)(THIS_ LPCWSTR pszPathRel, DWORD dwReserved) PURE;
-
- STDMETHOD(Resolve)(THIS_ HWND hwnd, DWORD fFlags) PURE;
-
- STDMETHOD(SetPath)(THIS_ LPCWSTR pszFile) PURE;
- };
-
- #ifdef _INC_SHELLAPI /* for LPSHELLEXECUTEINFO */
- //===========================================================================
- //
- // IShellExecuteHook Interface
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IShellExecuteHookA
-
- DECLARE_INTERFACE_(IShellExecuteHookA, IUnknown) // shexhk
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG, AddRef) (THIS) PURE;
- STDMETHOD_(ULONG, Release) (THIS) PURE;
-
- // *** IShellExecuteHookA methods ***
- STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA pei) PURE;
- };
-
- #undef INTERFACE
- #define INTERFACE IShellExecuteHookW
-
- DECLARE_INTERFACE_(IShellExecuteHookW, IUnknown) // shexhk
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG, AddRef) (THIS) PURE;
- STDMETHOD_(ULONG, Release) (THIS) PURE;
-
- // *** IShellExecuteHookW methods ***
- STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW pei) PURE;
- };
-
- #ifdef UNICODE
- #define IShellExecuteHook IShellExecuteHookW
- #define IShellExecuteHookVtbl IShellExecuteHookWVtbl
- #else
- #define IShellExecuteHook IShellExecuteHookA
- #define IShellExecuteHookVtbl IShellExecuteHookAVtbl
- #endif
- #endif
-
- //===========================================================================
- //
- // INewShortcutHook Interface
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE INewShortcutHookA
-
- DECLARE_INTERFACE_(INewShortcutHookA, IUnknown) // nshhk
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG, AddRef) (THIS) PURE;
- STDMETHOD_(ULONG, Release) (THIS) PURE;
-
- // *** INewShortcutHook methods ***
- STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE;
- STDMETHOD(GetReferent)(THIS_ LPSTR pszReferent, int cchReferent) PURE;
- STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE;
- STDMETHOD(GetFolder)(THIS_ LPSTR pszFolder, int cchFolder) PURE;
- STDMETHOD(GetName)(THIS_ LPSTR pszName, int cchName) PURE;
- STDMETHOD(GetExtension)(THIS_ LPSTR pszExtension, int cchExtension) PURE;
- };
-
- #undef INTERFACE
- #define INTERFACE INewShortcutHookW
-
- DECLARE_INTERFACE_(INewShortcutHookW, IUnknown) // nshhk
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG, AddRef) (THIS) PURE;
- STDMETHOD_(ULONG, Release) (THIS) PURE;
-
- // *** INewShortcutHook methods ***
- STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE;
- STDMETHOD(GetReferent)(THIS_ LPWSTR pszReferent, int cchReferent) PURE;
- STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE;
- STDMETHOD(GetFolder)(THIS_ LPWSTR pszFolder, int cchFolder) PURE;
- STDMETHOD(GetName)(THIS_ LPWSTR pszName, int cchName) PURE;
- STDMETHOD(GetExtension)(THIS_ 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
- //
- //
- //===========================================================================
-
- #ifndef FO_MOVE //these need to be kept in sync with the ones in shellapi.h
-
- // file operations
-
- #define FO_MOVE 0x0001
- #define FO_COPY 0x0002
- #define FO_DELETE 0x0003
- #define FO_RENAME 0x0004
-
- #define FOF_MULTIDESTFILES 0x0001
- #define FOF_CONFIRMMOUSE 0x0002
- #define FOF_SILENT 0x0004 // don't create progress/report
- #define FOF_RENAMEONCOLLISION 0x0008
- #define FOF_NOCONFIRMATION 0x0010 // Don't prompt the user.
- #define FOF_WANTMAPPINGHANDLE 0x0020 // Fill in SHFILEOPSTRUCT.hNameMappings
- // Must be freed using SHFreeNameMappings
- #define FOF_ALLOWUNDO 0x0040
- #define FOF_FILESONLY 0x0080 // on *.*, do only files
- #define FOF_SIMPLEPROGRESS 0x0100 // means don't show names of files
- #define FOF_NOCONFIRMMKDIR 0x0200 // don't confirm making any needed dirs
- #define FOF_NOERRORUI 0x0400 // don't put up error UI
-
- typedef UINT FILEOP_FLAGS;
-
- // printer operations
-
- #define PO_DELETE 0x0013 // printer is being deleted
- #define PO_RENAME 0x0014 // printer is being renamed
- #define PO_PORTCHANGE 0x0020 // port this printer connected to is being changed
- // if this id is set, the strings received by
- // the copyhook are a doubly-null terminated
- // list of strings. The first is the printer
- // name and the second is the printer port.
- #define PO_REN_PORT 0x0034 // PO_RENAME and PO_PORTCHANGE at same time.
-
- // no POF_ flags currently defined
-
- typedef UINT PRINTEROP_FLAGS;
-
- #endif // FO_MOVE
-
- #undef INTERFACE
- #define INTERFACE ICopyHookA
-
- DECLARE_INTERFACE_(ICopyHookA, IUnknown) // sl
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- 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_(ICopyHookW, IUnknown) // sl
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- 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
-
- //===========================================================================
- //
- // IFileViewerSite Interface
- //
- //===========================================================================
-
- #undef INTERFACE
- #define INTERFACE IFileViewerSite
-
- DECLARE_INTERFACE(IFileViewerSite)
- {
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE;
- STDMETHOD(GetPinnedWindow) (THIS_ 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.
- //
- //===========================================================================
-
- 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
- LPUNKNOWN 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;
-
- // 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(IFileViewerA)
- {
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE;
- STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE;
- STDMETHOD(PrintTo) (THIS_ LPSTR pszDriver, BOOL fSuppressUI) PURE;
- };
-
- typedef IFileViewerA * LPFILEVIEWERA;
-
- #undef INTERFACE
- #define INTERFACE IFileViewerW
-
- DECLARE_INTERFACE(IFileViewerW)
- {
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE;
- STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE;
- STDMETHOD(PrintTo) (THIS_ LPWSTR pszDriver, BOOL fSuppressUI) PURE;
- };
-
- typedef IFileViewerW * LPFILEVIEWERW;
-
- #ifdef UNICODE
- #define IFileViewer IFileViewerW
- #define LPFILEVIEWER LPFILEVIEWERW
- #else
- #define IFileViewer IFileViewerA
- #define LPFILEVIEWER LPFILEVIEWERA
- #endif
-
-
-
- // CommandTarget ids. for shell doc view wedge
- enum {
- SHDVID_SETPROGRESSPOS,
- SHDVID_SETPROGRESSRANGE,
- SHDVID_SETSTATUSTEXT, // variantIn bstr
-
- SHDVID_REFRESH,
- SHDVID_STOP,
- SHDVID_UPDATECOMMANDS, /// this forces a re-querystatus of the command targets.
- /// the arg in can specify a specific one to update or NULL for evrything
- SHDVID_SETTITLE, // variantIn bstr
- SHDVID_FINALTITLEAVAIL, // variantIn bstr - sent after final SETTITLE is sent
- SHDVID_STARTLOAD, // NULL for everything
- SHDVID_STOPLOAD // NULL for everything
- #if MSOCT2
- ,SHDVID_CCALLBACK, // callback to arbitrary C func
- SHDVID_MENUEXEC, // do menu command
- SHDVID_MENUQS // query menu commands
- #endif
- };
-
-
-
- //==========================================================================
- //
- // IShellBrowser/IShellView/IShellFolder interface
- //
- // These three interfaces are used when the shell communicates with
- // name space extensions. The shell (explorer) provides IShellBrowser
- // interface, and extensions implements IShellFolder and IShellView
- // interfaces.
- //
- //==========================================================================
-
-
- //--------------------------------------------------------------------------
- //
- // Command/menuitem IDs
- //
- // 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)
- #define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1)
- #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)
-
-
- //--------------------------------------------------------------------------
- //
- // FOLDERSETTINGS
- //
- // FOLDERSETTINGS is a data structure that explorer passes from one folder
- // view to another, when the user is browsing. It calls ISV::GetCurrentInfo
- // member to get the current settings and pass it to ISV::CreateViewWindow
- // to allow the next folder view "inherit" it. These settings assumes a
- // particular UI (which the shell's folder view has), and shell extensions
- // may or may not use those settings.
- //
- //--------------------------------------------------------------------------
-
- typedef LPBYTE LPVIEWSETTINGS;
-
- // NB Bitfields.
- // FWF_DESKTOP implies FWF_TRANSPARENT/NOCLIENTEDGE/NOSCROLL
- typedef enum
- {
- FWF_AUTOARRANGE = 0x0001,
- FWF_ABBREVIATEDNAMES = 0x0002,
- FWF_SNAPTOGRID = 0x0004,
- FWF_OWNERDATA = 0x0008,
- FWF_BESTFITWINDOW = 0x0010,
- FWF_DESKTOP = 0x0020,
- FWF_SINGLESEL = 0x0040,
- FWF_NOSUBFOLDERS = 0x0080,
- FWF_TRANSPARENT = 0x0100,
- FWF_NOCLIENTEDGE = 0x0200,
- FWF_NOSCROLL = 0x0400,
- FWF_ALIGNLEFT = 0x0800,
- FWF_SINGLECLICKACTIVATE=0x8000 // TEMPORARY -- NO UI FOR THIS
- } FOLDERFLAGS;
-
- typedef enum
- {
- FVM_ICON = 1,
- FVM_SMALLICON = 2,
- FVM_LIST = 3,
- FVM_DETAILS = 4,
- } FOLDERVIEWMODE;
-
- typedef struct
- {
- UINT ViewMode; // View mode (FOLDERVIEWMODE values)
- UINT fFlags; // View options (FOLDERFLAGS bits)
- } FOLDERSETTINGS, *LPFOLDERSETTINGS;
-
- typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
-
-
- //--------------------------------------------------------------------------
- //
- // Interface: IShellBrowser
- //
- // IShellBrowser interface is the interface that is provided by the shell
- // explorer/folder frame window. When it creates the "contents pane" of
- // a shell folder (which provides IShellFolder interface), it calls its
- // CreateViewObject member function to create an IShellView object. Then,
- // it calls its CreateViewWindow member to create the "contents pane"
- // window. The pointer to the IShellBrowser interface is passed to
- // the IShellView object as a parameter to this CreateViewWindow member
- // function call.
- //
- // +--------------------------+ <-- Explorer window
- // | [] Explorer |
- // |--------------------------+ IShellBrowser
- // | File Edit View .. |
- // |--------------------------|
- // | | |
- // | | <-------- Content pane
- // | | |
- // | | | IShellView
- // | | |
- // | | |
- // +--------------------------+
- //
- //
- //
- // [Member functions]
- //
- //
- // IShellBrowser::GetWindow(phwnd)
- //
- // Inherited from IOleWindow::GetWindow.
- //
- //
- // IShellBrowser::ContextSensitiveHelp(fEnterMode)
- //
- // Inherited from IOleWindow::ContextSensitiveHelp.
- //
- //
- // IShellBrowser::InsertMenusSB(hmenuShared, lpMenuWidths)
- //
- // Similar to the IOleInPlaceFrame::InsertMenus. The explorer will put
- // "File" and "Edit" pulldown in the File menu group, "View" and "Tools"
- // in the Container menu group and "Help" in the Window menu group. Each
- // pulldown menu will have a uniqu ID, FCIDM_MENU_FILE/EDIT/VIEW/TOOLS/HELP.
- // The view is allowed to insert menuitems into those sub-menus by those
- // IDs must be between FCIDM_SHVIEWFIRST and FCIDM_SHVIEWLAST.
- //
- //
- // IShellBrowser::SetMenuSB(hmenuShared, holemenu, hwndActiveObject)
- //
- // Similar to the IOleInPlaceFrame::SetMenu. The explorer ignores the
- // holemenu parameter (reserved for future enhancement) and performs
- // menu-dispatch based on the menuitem IDs (see the description above).
- // It is important to note that the explorer will add different
- // set of menuitems depending on whether the view has a focus or not.
- // Therefore, it is very important to call ISB::OnViewWindowActivate
- // whenever the view window (or its children) gets the focus.
- //
- //
- // IShellBrowser::RemoveMenusSB(hmenuShared)
- //
- // Same as the IOleInPlaceFrame::RemoveMenus.
- //
- //
- // IShellBrowser::SetStatusTextSB(lpszStatusText)
- //
- // Same as the IOleInPlaceFrame::SetStatusText. It is also possible to
- // send messages directly to the status window via SendControlMsg.
- //
- //
- // IShellBrowser::EnableModelessSB(fEnable)
- //
- // Same as the IOleInPlaceFrame::EnableModeless.
- //
- //
- // IShellBrowser::TranslateAcceleratorSB(lpmsg, wID)
- //
- // Same as the IOleInPlaceFrame::TranslateAccelerator, but will be
- // never called because we don't support EXEs (i.e., the explorer has
- // the message loop). This member function is defined here for possible
- // future enhancement.
- //
- //
- // IShellBrowser::BrowseObject(pidl, wFlags)
- //
- // The view calls this member to let shell explorer browse to another
- // folder. The pidl and wFlags specifies the folder to be browsed.
- //
- // Following three flags specifies whether it creates another window or not.
- // SBSP_SAMEBROWSER -- Browse to another folder with the same window.
- // SBSP_NEWBROWSER -- Creates another window for the specified folder.
- // SBSP_DEFBROWSER -- Default behavior (respects the view option).
- //
- // Following three flags specifies open, explore, or default mode. These .
- // are ignored if SBSP_SAMEBROWSER or (SBSP_DEFBROWSER && (single window .
- // browser || explorer)). .
- // SBSP_OPENMODE -- Use a normal folder window
- // SBSP_EXPLOREMODE -- Use an explorer window
- // SBSP_DEFMODE -- Use the same as the current window
- //
- // Following three flags specifies the pidl.
- // SBSP_ABSOLUTE -- pidl is an absolute pidl (relative from desktop)
- // SBSP_RELATIVE -- pidl is relative from the current folder.
- // SBSP_PARENT -- Browse the parent folder (ignores the pidl)
- //
- //
- // IShellBrowser::GetViewStateStream(grfMode, ppstm)
- //
- // The browser returns an IStream interface as the storage for view
- // specific state information.
- //
- // grfMode -- Specifies the read/write access (STGM_READ/WRITE/READWRITE)
- // ppstm -- Specifies the LPSTREAM variable to be filled.
- //
- //
- // IShellBrowser::GetControlWindow(id, phwnd)
- //
- // The shell view may call this member function to get the window handle
- // of Explorer controls (toolbar or status winodw -- FCW_TOOLBAR or
- // FCW_STATUS).
- //
- //
- // IShellBrowser::SendControlMsg(id, uMsg, wParam, lParam, pret)
- //
- // The shell view calls this member function to send control messages to
- // one of Explorer controls (toolbar or status window -- FCW_TOOLBAR or
- // FCW_STATUS).
- //
- //
- // IShellBrowser::QueryActiveShellView(IShellView * ppshv)
- //
- // This member returns currently activated (displayed) shellview object.
- // A shellview never need to call this member function.
- //
- //
- // IShellBrowser::OnViewWindowActive(pshv)
- //
- // The shell view window calls this member function when the view window
- // (or one of its children) got the focus. It MUST call this member before
- // calling IShellBrowser::InsertMenus, because it will insert different
- // set of menu items depending on whether the view has the focus or not.
- //
- //
- // IShellBrowser::SetToolbarItems(lpButtons, nButtons, uFlags)
- //
- // The view calls this function to add toolbar items to the exporer's
- // toolbar. "lpButtons" and "nButtons" specifies the array of toolbar
- // items. "uFlags" must be one of FCT_MERGE, FCT_CONFIGABLE, FCT_ADDTOEND.
- //
- //-------------------------------------------------------------------------
-
- #undef INTERFACE
- #define INTERFACE IShellBrowser
-
- //
- // Values for wFlags parameter of ISB::BrowseObject() member.
- //
- #define SBSP_DEFBROWSER 0x0000
- #define SBSP_SAMEBROWSER 0x0001
- #define SBSP_NEWBROWSER 0x0002
-
- #define SBSP_DEFMODE 0x0000
- #define SBSP_OPENMODE 0x0010
- #define SBSP_EXPLOREMODE 0x0020
-
- #define SBSP_ABSOLUTE 0x0000
- #define SBSP_RELATIVE 0x1000
- #define SBSP_PARENT 0x2000
-
- #define SBSP_INITIATEDBYHLINKFRAME 0x80000000
- #define SBSP_REDIRECT 0x40000000
-
- //
- // Values for id parameter of ISB::GetWindow/SendControlMsg members.
- //
- // WARNING:
- // Any shell extensions which sends messages to those control windows
- // might not work in the future version of windows. If you really need
- // to send messages to them, (1) don't assume that those control window
- // always exist (i.e. GetControlWindow may fail) and (2) verify the window
- // class of the window before sending any messages.
- //
- #define FCW_STATUS 0x0001
- #define FCW_TOOLBAR 0x0002
- #define FCW_TREE 0x0003
-
- //
- // Values for uFlags paremeter of ISB::SetToolbarItems member.
- //
- #define FCT_MERGE 0x0001
- #define FCT_CONFIGABLE 0x0002
- #define FCT_ADDTOEND 0x0004
-
-
- DECLARE_INTERFACE_(IShellBrowser, IOleWindow)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) 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;
-
- // *** IShellBrowser methods *** (same as IOleInPlaceFrame)
- STDMETHOD(InsertMenusSB) (THIS_ HMENU hmenuShared,
- LPOLEMENUGROUPWIDTHS lpMenuWidths) PURE;
- STDMETHOD(SetMenuSB) (THIS_ HMENU hmenuShared, HOLEMENU holemenuReserved,
- HWND hwndActiveObject) PURE;
- STDMETHOD(RemoveMenusSB) (THIS_ HMENU hmenuShared) PURE;
- STDMETHOD(SetStatusTextSB) (THIS_ LPCOLESTR lpszStatusText) PURE;
- STDMETHOD(EnableModelessSB) (THIS_ BOOL fEnable) PURE;
- STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG lpmsg, WORD wID) PURE;
-
- // *** IShellBrowser methods ***
- STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST pidl, UINT wFlags) PURE;
- STDMETHOD(GetViewStateStream)(THIS_ DWORD grfMode,
- LPSTREAM *ppStrm) PURE;
- STDMETHOD(GetControlWindow)(THIS_ UINT id, HWND * lphwnd) PURE;
- STDMETHOD(SendControlMsg)(THIS_ UINT id, UINT uMsg, WPARAM wParam,
- LPARAM lParam, LRESULT * pret) PURE;
- STDMETHOD(QueryActiveShellView)(THIS_ struct IShellView ** ppshv) PURE;
- STDMETHOD(OnViewWindowActive)(THIS_ struct IShellView * ppshv) PURE;
- STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT nButtons,
- UINT uFlags) PURE;
- };
-
- typedef IShellBrowser * LPSHELLBROWSER;
-
- enum {
- SBSC_HIDE = 0,
- SBSC_SHOW = 1,
- SBSC_TOGGLE = 2,
- SBSC_QUERY = 3
- };
-
- // CommandTarget ids.
- enum {
- SBCMDID_ENABLESHOWTREE,
- SBCMDID_SHOWCONTROL, // variant vt_i4 = loword = FCW_* hiword = SBSC_*
- SBCMDID_CANCELNAVIGATION, // cancel last navigation
- SBCMDID_MAYSAVECHANGES, // about to close and may save changes
- SBCMDID_SETHLINKFRAME, // variant vt_i4 = phlinkframe
- SBCMDID_ENABLESTOP, // variant vt_bool = fEnable
- SBCMDID_OPTIONS, // the view.options page
- };
-
-
- //-------------------------------------------------------------------------
- // ICommDlgBrowser interface
- //
- // ICommDlgBrowser interface is the interface that is provided by the new
- // common dialog window to hook and modify the behavior of IShellView. When
- // a default view is created, it queries its parent IShellBrowser for the
- // ICommDlgBrowser interface. If supported, it calls out to that interface
- // in several cases that need to behave differently in a dialog.
- //
- // Member functions:
- //
- // ICommDlgBrowser::OnDefaultCommand()
- // Called when the user double-clicks in the view or presses Enter. The
- // browser should return S_OK if it processed the action itself, S_FALSE
- // to let the view perform the default action.
- //
- // ICommDlgBrowser::OnStateChange(ULONG uChange)
- // Called when some states in the view change. 'uChange' is one of the
- // CDBOSC_* values. This call is made after the state (selection, focus,
- // etc) has changed. There is no return value.
- //
- // ICommDlgBrowser::IncludeObject(LPCITEMIDLIST pidl)
- // Called when the view is enumerating objects. 'pidl' is a relative
- // IDLIST. The browser should return S_OK to include the object in the
- // view, S_FALSE to hide it
- //
- //-------------------------------------------------------------------------
-
- #undef INTERFACE
- #define INTERFACE ICommDlgBrowser
-
- #define CDBOSC_SETFOCUS 0x00000000
- #define CDBOSC_KILLFOCUS 0x00000001
- #define CDBOSC_SELCHANGE 0x00000002
- #define CDBOSC_RENAME 0x00000003
-
- DECLARE_INTERFACE_(ICommDlgBrowser, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** ICommDlgBrowser methods ***
- STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE;
- STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv,
- ULONG uChange) PURE;
- STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv,
- LPCITEMIDLIST pidl) PURE;
- };
-
- typedef ICommDlgBrowser * LPCOMMDLGBROWSER;
-
-
- //==========================================================================
- //
- // Interface: IShellView
- //
- // IShellView::GetWindow(phwnd)
- //
- // Inherited from IOleWindow::GetWindow.
- //
- //
- // IShellView::ContextSensitiveHelp(fEnterMode)
- //
- // Inherited from IOleWindow::ContextSensitiveHelp.
- //
- //
- // IShellView::TranslateAccelerator(lpmsg)
- //
- // Similar to IOleInPlaceActiveObject::TranlateAccelerator. The explorer
- // calls this function BEFORE any other translation. Returning S_OK
- // indicates that the message was translated (eaten) and should not be
- // translated or dispatched by the explorer.
- //
- //
- // IShellView::EnableModeless(fEnable)
- // Similar to IOleInPlaceActiveObject::EnableModeless.
- //
- //
- // IShellView::UIActivate(uState)
- //
- // The explorer calls this member function whenever the activation
- // state of the view window is changed by a certain event that is
- // NOT caused by the shell view itself.
- //
- // SVUIA_DEACTIVATE will be passed when the explorer is about to
- // destroy the shell view window; the shell view is supposed to remove
- // all the extended UIs (typically merged menu and modeless popup windows).
- //
- // SVUIA_ACTIVATE_NOFOCUS will be passsed when the shell view is losing
- // the input focus or the shell view has been just created without the
- // input focus; the shell view is supposed to set menuitems appropriate
- // for non-focused state (no selection specific items should be added).
- //
- // SVUIA_ACTIVATE_FOCUS will be passed when the explorer has just
- // created the view window with the input focus; the shell view is
- // supposed to set menuitems appropriate for focused state.
- //
- // SVUIA_INPLACEACTIVATE(new) will be passed when the shell view is opened
- // within an ActiveX control, which is not a UI active. In this case,
- // the shell view should not merge menus or put toolbas. To be compatible
- // with Win95 client, we don't pass this value unless the view supports
- // IShellView2.
- //
- // The shell view should not change focus within this member function.
- // The shell view should not hook the WM_KILLFOCUS message to remerge
- // menuitems. However, the shell view typically hook the WM_SETFOCUS
- // message, and re-merge the menu after calling IShellBrowser::
- // OnViewWindowActivated.
- //
- //
- // IShellView::Refresh()
- //
- // The explorer calls this member when the view needs to refresh its
- // contents (such as when the user hits F5 key).
- //
- //
- // IShellView::CreateViewWindow
- //
- // This member creates the view window (right-pane of the explorer or the
- // client window of the folder window).
- //
- //
- // IShellView::DestroyViewWindow
- //
- // This member destroys the view window.
- //
- //
- // IShellView::GetCurrentInfo
- //
- // This member returns the folder settings.
- //
- //
- // IShellView::AddPropertySHeetPages
- //
- // The explorer calls this member when it is opening the option property
- // sheet. This allows the view to add additional pages to it.
- //
- //
- // IShellView::SaveViewState()
- //
- // The explorer calls this member when the shell view is supposed to
- // store its view settings. The shell view is supposed to get a view
- // stream by calling IShellBrowser::GetViewStateStream and store the
- // current view state into that stream.
- //
- //
- // IShellView::SelectItem(pidlItem, uFlags)
- //
- // The explorer calls this member to change the selection state of
- // item(s) within the shell view window. If pidlItem is NULL and uFlags
- // is SVSI_DESELECTOTHERS, all items should be deselected.
- //
- //-------------------------------------------------------------------------
-
- #undef INTERFACE
- #define INTERFACE IShellView
-
- //
- // shellview select item flags
- //
- #define SVSI_DESELECT 0x0000
- #define SVSI_SELECT 0x0001
- #define SVSI_EDIT 0x0003 // includes select
- #define SVSI_DESELECTOTHERS 0x0004
- #define SVSI_ENSUREVISIBLE 0x0008
- #define SVSI_FOCUSED 0x0010
-
- //
- // shellview get item object flags
- //
- #define SVGIO_BACKGROUND 0x00000000
- #define SVGIO_SELECTION 0x00000001
- #define SVGIO_ALLVIEW 0x00000002
-
- //
- // uState values for IShellView::UIActivate
- //
- typedef enum {
- SVUIA_DEACTIVATE = 0,
- SVUIA_ACTIVATE_NOFOCUS = 1,
- SVUIA_ACTIVATE_FOCUS = 2,
- SVUIA_INPLACEACTIVATE = 3 // new flag for IShellView2
- } SVUIA_STATUS;
-
- DECLARE_INTERFACE_(IShellView, IOleWindow)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) 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;
-
- // *** IShellView methods ***
- STDMETHOD(TranslateAccelerator) (THIS_ LPMSG lpmsg) PURE;
- #ifdef _FIX_ENABLEMODELESS_CONFLICT
- STDMETHOD(EnableModelessSV) (THIS_ BOOL fEnable) PURE;
- #else
- STDMETHOD(EnableModeless) (THIS_ BOOL fEnable) PURE;
- #endif
- STDMETHOD(UIActivate) (THIS_ UINT uState) PURE;
- STDMETHOD(Refresh) (THIS) PURE;
-
- STDMETHOD(CreateViewWindow)(THIS_ IShellView *lpPrevView,
- LPCFOLDERSETTINGS lpfs, IShellBrowser * psb,
- RECT * prcView, HWND *phWnd) PURE;
- STDMETHOD(DestroyViewWindow)(THIS) PURE;
- STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS lpfs) PURE;
- STDMETHOD(AddPropertySheetPages)(THIS_ DWORD dwReserved,
- LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) PURE;
- STDMETHOD(SaveViewState)(THIS) PURE;
- STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST pidlItem, UINT uFlags) PURE;
- STDMETHOD(GetItemObject)(THIS_ UINT uItem, REFIID riid,
- LPVOID *ppv) PURE;
- };
-
- typedef IShellView * LPSHELLVIEW;
-
- typedef GUID SHELLVIEWID;
-
- #define SV2GV_CURRENTVIEW ((UINT)-1)
- #define SV2GV_DEFAULTVIEW ((UINT)-2)
-
- typedef struct _SV2CVW2_PARAMS
- {
- DWORD cbSize;
-
- IShellView *psvPrev;
- FOLDERSETTINGS const *pfs;
- IShellBrowser *psbOwner;
- RECT *prcView;
- SHELLVIEWID const *pvid;
-
- HWND hwndView;
- } SV2CVW2_PARAMS;
- typedef SV2CVW2_PARAMS *LPSV2CVW2_PARAMS;
-
- #undef INTERFACE
- #define INTERFACE IShellView2
-
- DECLARE_INTERFACE_(IShellView2, IShellView)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) 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;
-
- // *** IShellView methods ***
- STDMETHOD(TranslateAccelerator) (THIS_ LPMSG lpmsg) PURE;
- #ifdef _FIX_ENABLEMODELESS_CONFLICT
- STDMETHOD(EnableModelessSV) (THIS_ BOOL fEnable) PURE;
- #else
- STDMETHOD(EnableModeless) (THIS_ BOOL fEnable) PURE;
- #endif
- STDMETHOD(UIActivate) (THIS_ UINT uState) PURE;
- STDMETHOD(Refresh) (THIS) PURE;
-
- STDMETHOD(CreateViewWindow)(THIS_ IShellView *lpPrevView,
- LPCFOLDERSETTINGS lpfs, IShellBrowser * psb,
- RECT * prcView, HWND *phWnd) PURE;
- STDMETHOD(DestroyViewWindow)(THIS) PURE;
- STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS lpfs) PURE;
- STDMETHOD(AddPropertySheetPages)(THIS_ DWORD dwReserved,
- LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) PURE;
- STDMETHOD(SaveViewState)(THIS) PURE;
- STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST pidlItem, UINT uFlags) PURE;
- STDMETHOD(GetItemObject)(THIS_ UINT uItem, REFIID riid,
- LPVOID *ppv) PURE;
-
- // *** IShellView2 methods ***
- STDMETHOD(GetView)(THIS_ SHELLVIEWID* pvid, ULONG uView) PURE;
- STDMETHOD(CreateViewWindow2)(THIS_ LPSV2CVW2_PARAMS lpParams) PURE;
- };
-
- //-------------------------------------------------------------------------
- //
- // struct STRRET
- //
- // structure for returning strings from IShellFolder member functions
- //
- //-------------------------------------------------------------------------
- #define STRRET_WSTR 0x0000 // Use STRRET.pOleStr
- #define STRRET_OFFSET 0x0001 // Use STRRET.uOffset to Ansi
- #define STRRET_CSTR 0x0002 // Use STRRET.cStr
-
-
- typedef struct _STRRET
- {
- UINT uType; // One of the STRRET_* values
- union
- {
- LPWSTR pOleStr; // OLESTR that will be freed
- LPSTR pStr; // ANSI string that will be freed (needed?)
- UINT uOffset; // Offset into SHITEMID
- char cStr[MAX_PATH]; // Buffer to fill in (ANSI)
- } DUMMYUNIONNAME;
- } STRRET, *LPSTRRET;
-
-
- //-------------------------------------------------------------------------
- //
- // SHGetPathFromIDList
- //
- // This function assumes the size of the buffer (MAX_PATH). The pidl
- // should point to a file system object.
- //
- //-------------------------------------------------------------------------
-
- WINSHELLAPI BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath);
- WINSHELLAPI BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath);
-
- #ifdef UNICODE
- #define SHGetPathFromIDList SHGetPathFromIDListW
- #else
- #define SHGetPathFromIDList SHGetPathFromIDListA
- #endif
-
-
- //-------------------------------------------------------------------------
- //
- // SHGetSpecialFolderLocation
- //
- // Caller should call SHFree to free the returned pidl.
- //
- //-------------------------------------------------------------------------
- //
- // registry entries for special paths are kept in :
- #define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT("\\Shell Folders")
-
-
-
- #define CSIDL_DESKTOP 0x0000
- #define CSIDL_PROGRAMS 0x0002
- #define CSIDL_CONTROLS 0x0003
- #define CSIDL_PRINTERS 0x0004
- #define CSIDL_PERSONAL 0x0005
- #define CSIDL_FAVORITES 0x0006
- #define CSIDL_STARTUP 0x0007
- #define CSIDL_RECENT 0x0008
- #define CSIDL_SENDTO 0x0009
- #define CSIDL_BITBUCKET 0x000a
- #define CSIDL_STARTMENU 0x000b
- #define CSIDL_DESKTOPDIRECTORY 0x0010
- #define CSIDL_DRIVES 0x0011
- #define CSIDL_NETWORK 0x0012
- #define CSIDL_NETHOOD 0x0013
- #define CSIDL_FONTS 0x0014
- #define CSIDL_TEMPLATES 0x0015
- #define CSIDL_COMMON_STARTMENU 0x0016
- #define CSIDL_COMMON_PROGRAMS 0X0017
- #define CSIDL_COMMON_STARTUP 0x0018
- #define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
- #define CSIDL_APPDATA 0x001a
- #define CSIDL_PRINTHOOD 0x001b
-
- WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);
-
- //-------------------------------------------------------------------------
- //
- // SHBrowseForFolder API
- //
- //-------------------------------------------------------------------------
-
- typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
-
- typedef struct _browseinfoA {
- HWND hwndOwner;
- LPCITEMIDLIST 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;
- LPCITEMIDLIST 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;
-
- #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 0x0001 // For finding a folder to start document searching
- #define BIF_DONTGOBELOWDOMAIN 0x0002 // For starting the Find Computer
- #define BIF_STATUSTEXT 0x0004
- #define BIF_RETURNFSANCESTORS 0x0008
-
- #define BIF_BROWSEFORCOMPUTER 0x1000 // Browsing for Computers.
- #define BIF_BROWSEFORPRINTER 0x2000 // Browsing for Printers
- #define BIF_BROWSEINCLUDEFILES 0x4000 // Browsing for Everything
-
- // message from browser
- #define BFFM_INITIALIZED 1
- #define BFFM_SELCHANGED 2
-
- // 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)
-
-
- WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
- WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
-
- #ifdef UNICODE
- #define SHBrowseForFolder SHBrowseForFolderW
- #define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTW
- #define BFFM_SETSELECTION BFFM_SETSELECTIONW
- #else
- #define SHBrowseForFolder SHBrowseForFolderA
- #define BFFM_SETSTATUSTEXT BFFM_SETSTATUSTEXTA
- #define BFFM_SETSELECTION BFFM_SETSELECTIONA
- #endif
-
- //-------------------------------------------------------------------------
- //
- // SHLoadInProc
- //
- // When this function is called, the shell calls CoCreateInstance
- // (or equivalent) with CLSCTX_INPROC_SERVER and the specified CLSID
- // from within the shell's process and release it immediately.
- //
- //-------------------------------------------------------------------------
-
- WINSHELLAPI HRESULT WINAPI SHLoadInProc(REFCLSID rclsid);
-
-
- //-------------------------------------------------------------------------
- //
- // IEnumIDList interface
- //
- // IShellFolder::EnumObjects member returns an IEnumIDList object.
- //
- //-------------------------------------------------------------------------
-
- typedef struct IEnumIDList *LPENUMIDLIST;
-
- #undef INTERFACE
- #define INTERFACE IEnumIDList
-
- DECLARE_INTERFACE_(IEnumIDList, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IEnumIDList methods ***
- STDMETHOD(Next) (THIS_ ULONG celt,
- LPITEMIDLIST *rgelt,
- ULONG *pceltFetched) PURE;
- STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
- STDMETHOD(Reset) (THIS) PURE;
- STDMETHOD(Clone) (THIS_ IEnumIDList **ppenum) PURE;
- };
-
-
- //-------------------------------------------------------------------------
- //
- // IShellFolder interface
- //
- //
- // [Member functions]
- //
- // IShellFolder::BindToObject(pidl, pbc, riid, ppvOut)
- // This function returns an instance of a sub-folder which is specified
- // by the IDList (pidl).
- //
- // IShellFolder::BindToStorage(pidl, pbc, riid, ppvObj)
- // This function returns a storage instance of a sub-folder which is
- // specified by the IDList (pidl). The shell never calls this member
- // function in the first release of Win95.
- //
- // IShellFolder::CompareIDs(lParam, pidl1, pidl2)
- // This function compares two IDLists and returns the result. The shell
- // explorer always passes 0 as lParam, which indicates "sort by name".
- // It should return 0 (as CODE of the scode), if two id indicates the
- // same object; negative value if pidl1 should be placed before pidl2;
- // positive value if pidl2 should be placed before pidl1.
- //
- // IShellFolder::CreateViewObject(hwndOwner, riid, ppvOut)
- // This function creates a view object of the folder itself. The view
- // object is a difference instance from the shell folder object.
- // "hwndOwner" can be used as the owner window of its dialog box or
- // menu during the lifetime of the view object.
- // instance which has only one reference count. The explorer may create
- // more than one instances of view object from one shell folder object
- // and treat them as separate instances.
- //
- // IShellFolder::GetAttributesOf(cidl, apidl, prgfInOut)
- // This function returns the attributes of specified objects in that
- // folder. "cidl" and "apidl" specifies objects. "apidl" contains only
- // simple IDLists. The explorer initializes *prgfInOut with a set of
- // flags to be evaluated. The shell folder may optimize the operation
- // by not returning unspecified flags.
- //
- // IShellFolder::GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut)
- // This function creates a UI object to be used for specified objects.
- // The shell explorer passes either IID_IDataObject (for transfer operation)
- // or IID_IContextMenu (for context menu operation) as riid.
- //
- // IShellFolder::GetDisplayNameOf
- // This function returns the display name of the specified object.
- // If the ID contains the display name (in the locale character set),
- // it returns the offset to the name. Otherwise, it returns a pointer
- // to the display name string (UNICODE), which is allocated by the
- // task allocator, or fills in a buffer.
- //
- // IShellFolder::SetNameOf
- // This function sets the display name of the specified object.
- // If it changes the ID as well, it returns the new ID which is
- // alocated by the task allocator.
- //
- //-------------------------------------------------------------------------
-
- #undef INTERFACE
- #define INTERFACE IShellFolder
-
- // IShellFolder::GetDisplayNameOf/SetNameOf uFlags
- typedef enum tagSHGDN
- {
- SHGDN_NORMAL = 0, // default (display purpose)
- SHGDN_INFOLDER = 1, // displayed under a folder (relative)
- SHGDN_FORADDRESSBAR = 0x4000, // for displaying in the address (drives dropdown) bar
- SHGDN_FORPARSING = 0x8000, // for ParseDisplayName or path
- } SHGNO;
-
- // IShellFolder::EnumObjects
- typedef enum tagSHCONTF
- {
- SHCONTF_FOLDERS = 32, // for shell browser
- SHCONTF_NONFOLDERS = 64, // for default view
- SHCONTF_INCLUDEHIDDEN = 128, // for hidden/system objects
- } SHCONTF;
-
- // IShellFolder::GetAttributesOf flags
- #define SFGAO_CANCOPY DROPEFFECT_COPY // Objects can be copied
- #define SFGAO_CANMOVE DROPEFFECT_MOVE // Objects can be moved
- #define SFGAO_CANLINK DROPEFFECT_LINK // Objects can be linked
- #define SFGAO_CANRENAME 0x00000010L // Objects can be renamed
- #define SFGAO_CANDELETE 0x00000020L // Objects can be deleted
- #define SFGAO_HASPROPSHEET 0x00000040L // Objects have property sheets
- #define SFGAO_DROPTARGET 0x00000100L // Objects are drop target
- #define SFGAO_CAPABILITYMASK 0x00000177L
- #define SFGAO_LINK 0x00010000L // Shortcut (link)
- #define SFGAO_SHARE 0x00020000L // shared
- #define SFGAO_READONLY 0x00040000L // read-only
- #define SFGAO_GHOSTED 0x00080000L // ghosted icon
- #define SFGAO_DISPLAYATTRMASK 0x000F0000L
- #define SFGAO_FILESYSANCESTOR 0x10000000L // It contains file system folder
- #define SFGAO_FOLDER 0x20000000L // It's a folder.
- #define SFGAO_FILESYSTEM 0x40000000L // is a file system thing (file/folder/root)
- #define SFGAO_HASSUBFOLDER 0x80000000L // Expandable in the map pane
- #define SFGAO_CONTENTSMASK 0x80000000L
- #define SFGAO_VALIDATE 0x01000000L // invalidate cached information
- #define SFGAO_REMOVABLE 0x02000000L // is this removeable media?
- #define SFGAO_COMPRESSED 0x04000000L // Object is compressed (use alt color)
-
- DECLARE_INTERFACE_(IShellFolder, IUnknown)
- {
- // *** IUnknown methods ***
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- // *** IShellFolder methods ***
- STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner,
- LPBC pbcReserved, LPOLESTR lpszDisplayName,
- ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE;
-
- STDMETHOD(EnumObjects) ( THIS_ HWND hwndOwner, DWORD grfFlags, LPENUMIDLIST * ppenumIDList) PURE;
-
- STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved,
- REFIID riid, LPVOID * ppvOut) PURE;
- STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved,
- REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE;
- STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, LPVOID * ppvOut) PURE;
- STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl,
- ULONG * rgfInOut) PURE;
- STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,
- REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) PURE;
- STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE;
- STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl,
- LPCOLESTR lpszName, DWORD uFlags,
- LPITEMIDLIST * ppidlOut) PURE;
- };
-
- typedef IShellFolder * LPSHELLFOLDER;
-
- //
- // 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_IShellFolder, &pshf);
- //
- WINSHELLAPI HRESULT WINAPI SHGetDesktopFolder(LPSHELLFOLDER *ppshf);
-
-
-
-
- //==========================================================================
- // 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_PREFERREDDROPEFFECT TEXT("Preferred DropEffect")
-
- #ifdef UNICODE
- #define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORW
- #define CFSTR_FILENAME CFSTR_FILENAMEW
- #define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPW
- #else
- #define CFSTR_FILEDESCRIPTOR CFSTR_FILEDESCRIPTORA
- #define CFSTR_FILENAME CFSTR_FILENAMEA
- #define CFSTR_FILENAMEMAP CFSTR_FILENAMEMAPA
- #endif
-
- //
- // CF_OBJECTPOSITIONS
- //
- //
-
-
-
- #define DVASPECT_SHORTNAME 2 // use for CF_HDROP to get short name version
- //
- // format of CF_NETRESOURCE
- //
- typedef struct _NRESARRAY { // anr
- UINT cItems;
- NETRESOURCE nr[1];
- } NRESARRAY, * LPNRESARRAY;
-
- //
- // 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 to be used
- //
- typedef enum {
- FD_CLSID = 0x0001,
- FD_SIZEPOINT = 0x0002,
- FD_ATTRIBUTES = 0x0004,
- FD_CREATETIME = 0x0008,
- FD_ACCESSTIME = 0x0010,
- FD_WRITESTIME = 0x0020,
- FD_FILESIZE = 0x0040,
- FD_LINKUI = 0x8000, // 'link' UI is prefered
- } FD_FLAGS;
-
- typedef struct _FILEDESCRIPTORA { // fod
- 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 { // fod
- 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, FAR * LPDROPFILES;
-
-
- //====== File System Notification APIs ===============================
- //
-
-
-
- //
- // File System Notification flags
- //
-
-
-
- #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
- #define SHCNE_EXTENDED_EVENT 0x00080000L // Extended Event.
-
- #define SHCNE_ASSOCCHANGED 0x08000000L
-
- #define SHCNE_DISKEVENTS 0x0002381FL
- #define SHCNE_GLOBALEVENTS 0x0C0D81E0L // 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.
-
- #define SHCNEE_THEMECHANGED 0x00000001L // The theme changed
-
-
- // 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 0x2000
-
- #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
- //
- WINSHELLAPI void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags,
- LPCVOID dwItem1, LPCVOID dwItem2);
-
- //
- // SHAddToRecentDocs
- //
- #define SHARD_PIDL 0x00000001L
- #define SHARD_PATHA 0x00000002L
- #define SHARD_PATHW 0x00000003L
-
- #ifdef UNICODE
- #define SHARD_PATH SHARD_PATHW
- #else
- #define SHARD_PATH SHARD_PATHA
- #endif
-
- WINSHELLAPI void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
-
-
-
-
- WINSHELLAPI HRESULT WINAPI SHGetInstanceExplorer(IUnknown **ppunk);
-
- //
- // SHGetDataFromIDListA/W
- //
- #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
-
- typedef struct _SHDESCRIPTIONID {
- DWORD dwDescriptionId;
- CLSID clsid;
- } SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
-
- WINSHELLAPI HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
- int nFormat, PVOID pv, int cb);
- WINSHELLAPI HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
- int nFormat, PVOID pv, int cb);
-
- #ifdef UNICODE
- #define SHGetDataFromIDList SHGetDataFromIDListW
- #else
- #define SHGetDataFromIDList SHGetDataFromIDListA
- #endif
-
- #ifdef __cplusplus
- }
-
- #endif /* __cplusplus */
-
- #ifndef RC_INVOKED
- #pragma pack()
- #endif /* !RC_INVOKED */
-
- #endif // _SHLOBJ_H_
-