//=========================================================================== // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: shlobj.h // //=========================================================================== ;begin_internal //*************************************************************************** // --- SHELLAPI.W SHSEMIP.H SHLOBJ.W SHOBJIDL.IDL SHLDISP.IDL SHPRIV.IDL --- // Which header is best for my new API? // // SHLOBJ - *AVOID NEW USAGE*, PREFER OTHER HEADERS // used primarily for legacy compatibility // // SHELLAPI - ALL NEW SHELL32 EXPORTS public and private // used for both public and private exports from shell32 // // SHSEMIP - *AVOID _ALL_ USAGE*, NO EXPORTS, SUPER PRIVATE // used for very private shell defines. // // SHOBJIDL - ALL NEW SHELL PUBLIC INTERFACES // primary file for public shell (shell32+) interfaces // // SHLDISP - ALL NEW SHELL AUTOMATION INTERFACES // automation interfaces are always public // // SHPRIV - ALL NEW SHELL PRIVATE INTERFACES // private interfaces used anywhere in the shell // // // SHLOBJ was originally the file that defined all of shell32's interfaces. // it devolved into a dumping ground of public and private APIs and // interfaces. in the effort to better support COM and better API management // we are attempting to avoid using shlobj //*************************************************************************** ;end_internal #ifndef _SHLOBJ_H_ #define _SHLOBJ_H_ #ifndef _SHLOBJP_H_ ;Internal #define _SHLOBJP_H_ ;Internal #ifndef _WINRESRC_ #ifndef _WIN32_IE #define _WIN32_IE 0x0501 #else #if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500) #error _WIN32_IE setting conflicts with _WIN32_WINNT setting #endif #endif #endif #ifndef SNDMSG #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 #define NO_MONIKER ;Internal #include #ifndef _PRSHT_H_ #include #endif #ifndef _INC_COMMCTRL #include // for LPTBBUTTON #endif #ifndef INITGUID #include #endif /* !INITGUID */ #include ;Internal #include ;Internal ;begin_both #include /* Assume byte packing throughout */ #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ #include ;end_both #include #include ;Internal #include ;Internal ;begin_internal // HMONITOR is already declared in NT 5's windef.h. #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) DECLARE_HANDLE(HMONITOR); #define HMONITOR_DECLARED #endif #include ;end_internal //=========================================================================== // // 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) // //=========================================================================== SHSTDAPI SHGetMalloc(LPMALLOC * ppMalloc); ;begin_internal // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(void *) SHAlloc(SIZE_T cb); SHSTDAPI_(void *) SHRealloc(void * pv, SIZE_T cbNew); ;Internal SHSTDAPI_(SIZE_T) SHGetSize(void * pv); ;Internal ;begin_internal // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(void) SHFree(void * pv); //=========================================================================== // // 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). // hMonitor -- Specifies the default monitor (optional). // // // IContextMenu::GetCommandString // // This member function is called by the explorer either to get the // canonical (language independent) command name (uFlags == GCS_VERB) or // the help text ((uFlags & GCS_HELPTEXT) != 0) for the specified command. // The retrieved canonical string may be passed to its InvokeCommand // member function to invoke a command programmatically. The explorer // displays the help texts in its status bar; therefore, the length of // the help text should be reasonably short (<40 characters). // // Parameters: // idCmd -- Specifies menuitem ID offset (from idCmdFirst) // uFlags -- Either GCS_VERB or GCS_HELPTEXT // pwReserved -- Reserved (must pass NULL when calling, must ignore when 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_FINDHACK 0x00000080 // This is a hack - we should remove this bit ;Internal #define CMF_EXTENDEDVERBS 0x00000100 // rarely used verbs #define CMF_RESERVED 0xffff0000 // View specific ;begin_internal // // Private QueryContextMenuFlag passed from DefView // #define CMF_DVFILE 0x00010000 // "File" pulldown #define CMF_ICM3 0x00020000 // QueryContextMenu can assume IContextMenu3 semantics (i.e., // will receive WM_INITMENUPOPUP, WM_MEASUREITEM, WM_DRAWITEM, // and WM_MENUCHAR, via HandleMenuMsg2) ;end_internal // 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 #define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS #if (_WIN32_IE >= 0x0501) #define CMIC_MASK_SHIFT_DOWN 0x10000000 #define CMIC_MASK_CONTROL_DOWN 0x40000000 #endif // (_WIN32_IE >= 0x501) #if (_WIN32_IE >= 0x0560) #define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE #endif // (_WIN32_IE >= 0x560) #if (_WIN32_IE >= 0x0400) #define CMIC_MASK_PTINVOKE 0x20000000 #define CMICEXSIZE_NT4 (SIZEOF(CMINVOKECOMMANDINFOEX) - SIZEOF(POINT)) ;Internal #endif #define CMIC_MASK_NO_HOOKS SEE_MASK_NO_HOOKS ;internal_win40 #define CMIC_MASK_DATAOBJECT 0x40000000 // lpPara is IDataObject* ;Internal #define CMIC_MASK_MODAL 0x80000000 ;Internal #define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS ;Internal #include //NOTE: When SEE_MASK_HMONITOR is set, hIcon is treated as hMonitor typedef struct _CMINVOKECOMMANDINFO { DWORD cbSize; // sizeof(CMINVOKECOMMANDINFO) DWORD fMask; // any combination of CMIC_MASK_* HWND hwnd; // might be NULL (indicating no owner window) LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset) LPCSTR lpParameters; // might be NULL (indicating no parameter) LPCSTR lpDirectory; // might be NULL (indicating no specific directory) int nShow; // one of SW_ values for ShowWindow() API DWORD dwHotKey; HANDLE hIcon; } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO; typedef struct _CMInvokeCommandInfoEx { DWORD cbSize; // must be sizeof(CMINVOKECOMMANDINFOEX) DWORD fMask; // any combination of CMIC_MASK_* HWND hwnd; // might be NULL (indicating no owner window) LPCSTR lpVerb; // either a string or MAKEINTRESOURCE(idOffset) LPCSTR lpParameters; // might be NULL (indicating no parameter) LPCSTR lpDirectory; // might be NULL (indicating no specific directory) int nShow; // one of SW_ values for ShowWindow() API DWORD dwHotKey; HANDLE hIcon; LPCSTR lpTitle; // For CreateProcess-StartupInfo.lpTitle LPCWSTR lpVerbW; // Unicode verb (for those who can use it) LPCWSTR lpParametersW; // Unicode parameters (for those who can use it) LPCWSTR lpDirectoryW; // Unicode directory (for those who can use it) LPCWSTR lpTitleW; // Unicode title (for those who can use it) #if (_WIN32_IE >= 0x0400) POINT ptInvoke; // Point where it's invoked #endif } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX; #include /* Return to byte packing */ ;begin_internal #include // the struct below is used for cross-process passing of CMINVOKECOMMANDINFOEX structs // we store offsets for the strings into ourself and we are win64 safe typedef struct { DWORD cbSize; // size of the struct DWORD fMask; // any combination of CMIC_MASK_* DWORD dwHwnd; // might be NULL (indicating no owner window) int nShow; // one of SW_ values for ShowWindow() API DWORD dwHotKey; POINT ptInvoke; // Point where it's invoked DWORD dwVerbW; // offset from struct to lpVerbW DWORD dwParametersW; // offset from struct to lpParametersW - might be NULL (indicating no parameter) DWORD dwDirectoryW; // offset from struct to lpDirectoryW - might be NULL (indicating no specific directory) DWORD dwTitleW; // offset from struct to lpTitleW - might be NULL (indicating no title) }ICIX_PERSIST; #include ;end_internal #undef INTERFACE #define INTERFACE IContextMenu DECLARE_INTERFACE_(IContextMenu, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; STDMETHOD(GetCommandString)(THIS_ UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax) PURE; }; typedef IContextMenu * LPCONTEXTMENU; #define CONTEXTMENU_IDCMD_FIRST 1 // minimal QueryContextMenu idCmdFirst value // ;internal #define CONTEXTMENU_IDCMD_LAST 0x7fff // maximal QueryContextMenu idCmdLast value // ;internal // // IContextMenu2 (IContextMenu with one new member) // // IContextMenu2::HandleMenuMsg // // This function is called, if the client of IContextMenu is aware of // IContextMenu2 interface and receives one of following messages while // it is calling TrackPopupMenu (in the window proc of hwnd): // WM_INITPOPUP, WM_DRAWITEM and WM_MEASUREITEM // The callee may handle these messages to draw owner draw menuitems. // #undef INTERFACE #define INTERFACE IContextMenu2 DECLARE_INTERFACE_(IContextMenu2, IContextMenu) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IContextMenu methods *** STDMETHOD(QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; STDMETHOD(GetCommandString)(THIS_ UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax) PURE; // *** IContextMenu2 methods *** STDMETHOD(HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; }; typedef IContextMenu2 * LPCONTEXTMENU2; // // IContextMenu3 (IContextMenu with one new member) // // IContextMenu3::HandleMenuMsg2 // // This function is called, if the client of IContextMenu is aware of // IContextMenu3 interface and receives a menu message while // it is calling TrackPopupMenu (in the window proc of hwnd): // #undef INTERFACE #define INTERFACE IContextMenu3 DECLARE_INTERFACE_(IContextMenu3, IContextMenu2) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IContextMenu methods *** STDMETHOD(QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; STDMETHOD(GetCommandString)(THIS_ UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax) PURE; // *** IContextMenu2 methods *** STDMETHOD(HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; // *** IContextMenu3 methods *** STDMETHOD(HandleMenuMsg2)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plResult) PURE; }; typedef IContextMenu3 * LPCONTEXTMENU3; //---------------------------------------------------------------------------- ;Internal // Internal helper macro ;Internal //---------------------------------------------------------------------------- ;Internal ;Internal #define _IOffset(class, itf) ((UINT_PTR)&(((class *)0)->itf)) ;Internal #define IToClass(class, itf, pitf) ((class *)(((LPSTR)pitf)-_IOffset(class, itf))) ;Internal #define IToClassN(class, itf, pitf) IToClass(class, itf, pitf) ;Internal ;Internal // ;Internal // Helper macro definitions ;Internal // ;Internal #define S_BOOL(f) MAKE_SCODE(SEVERITY_SUCCESS, 0, f) ;Internal ;Internal #ifdef DEBUG ;Internal #define ReleaseAndAssert(punk) Assert(punk->lpVtbl->Release(punk)==0) ;Internal #else ;Internal #define ReleaseAndAssert(punk) (punk->lpVtbl->Release(punk)) ;Internal #endif ;Internal #if (_WIN32_IE >= 0x0500) #undef INTERFACE #define INTERFACE IPersistFolder3 #define CSIDL_FLAG_PFTI_TRACKTARGET CSIDL_FLAG_DONT_VERIFY // DESCRIPTION: PERSIST_FOLDER_TARGET_INFO // This stucture is used for Folder Shortcuts which allow the shell to // have a file system folder act like another area in the name space. // One of pidlTargetFolder, szTargetParsingName, or csidl needs to // specify the destination name space. // // pidlTargetFolder: This is a full pidl to the target folder. Can be NULL in the IPersistFolder3::InitializeEx() // call but not in the GetFolderTargetInfo() return structure. // szTargetParsingName: Empty string if not specified. Ortherwise, it is the parsible name // to the target. This name can be parsed by IShellFolder:: // ParsedName() from the desktop. // szNetworkProvider: Can be an empty string. If not empty, it specifies the type of network // provider that will be used when binding to the target. This is used // for performance optimizations for the WNet APIs. // dwAttributes: -1 if not known. These are the SFGAO_ flags for IShellFolder::GetAttributesOf() // csidl: This is -1 if it's not used. This can be used instead of pidlTargetFolder or // szTargetParsingName to indicate the TargetFolder. See the list of CSIDL_ folders // below. CSIDL_FLAG_PFTI_TRACKTARGET means that the IShellFolder's target folder // should change if the user changes the target of the underlying CSIDL value. // You can also pass CSIDL_FLAG_CREATE to indicate that the target folder // should be created if it does not exist. No other CSIDL_FLAG_* values are supported. #include typedef struct { LPITEMIDLIST pidlTargetFolder; // pidl for the folder we want to intiailize WCHAR szTargetParsingName[MAX_PATH]; // optional parsing name for the target WCHAR szNetworkProvider[MAX_PATH]; // optional network provider DWORD dwAttributes; // optional FILE_ATTRIBUTES_ flags (-1 if not used) int csidl; // optional folder index (SHGetFolderPath()) -1 if not used } PERSIST_FOLDER_TARGET_INFO; #include /* Return to byte packing */ // DESCRIPTION: IPersistFolder3 // This interface is implemented by an IShellFolder object that wants non-default // handling of Folder Shortcuts. In general, shell name space extensions should use // pidlRoot (the alias pidl) as their location in the name space and pass it to public // APIs, such as ShellExecute(). The one exception is that pidlTarget should be used // when sending ChangeNotifies or registering to listen for change notifies // (see SFVM_GETNOTIFY). // // InitializeEx: This method initializes an IShellFolder and specifies where // it is rooted in the name space. // pbc: May be NULL. // pidlRoot: This is the same parameter as IPersistFolder::Initialize(). Caller allocates // and frees this parameter. // ppfti: May be NULL, in which case this is the same as a call to IPersistFolder::Initialize(). // Otherwise this is a Folder Shortcut and this structure specifies the target // folder and it's attributes. // GetFolderTargetInfo: This is used by the caller to find information about // the folder shortcut. This structure may not be initialized by the caller, // so the callee needs to initialize every member. The callee allocates // pidlTargetFolder and the caller will free it. Filling in pidlTargetFolder is // ALWAYS required. DECLARE_INTERFACE_(IPersistFolder3, IPersistFolder2) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // *** IPersist methods *** STDMETHOD(GetClassID)(THIS_ LPCLSID lpClassID) PURE; // *** IPersistFolder methods *** STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidl) PURE; // *** IPersistFolder2 methods *** STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST *ppidl) PURE; // *** IPersistFolder3 methods *** STDMETHOD(InitializeEx)(THIS_ IBindCtx *pbc, LPCITEMIDLIST pidlRoot, const PERSIST_FOLDER_TARGET_INFO *ppfti) PURE; STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO *ppfti) PURE; }; ;begin_internal // // this interface is just the IID. return back // a pointer to the IPersist interface if the object // implementation is free threaded. this is used // for performance on free threaded objects. // #define IPersistFreeThreadedObject IPersist ;end_internal #endif // // this interface is just the IID. return back ;Internal // a pointer to the IDropTarget interface if the ;Internal // object calls DAD_DragLeave/DAD_SetDragImage ;Internal // in its IDropTarget::Drop(). ;Internal // ;Internal #define IDropTargetWithDADSupport IDropTarget ;Internal //=========================================================================== // // 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_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 // 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, void **ppv) 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, void **ppv) 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, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellIcon methods *** STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags, LPINT lpIconIndex) PURE; }; typedef IShellIcon *LPSHELLICON; //=========================================================================== // // IShellIconOverlayIdentifier // // 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_(IShellIconOverlayIdentifier, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, 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_ LPWSTR pwszIconFile, int cchMax, int * pIndex, DWORD * pdwFlags) PURE; STDMETHOD (GetPriority)(THIS_ 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 ;begin_internal // this is only inherited by CFSFolder_IconOverlayManager, it enumerates through all IconOverlayID's and // keep their information in an array. ;end_internal // // 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_(IShellIconOverlayManager, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellIconOverlayManager methods *** STDMETHOD(GetFileOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, int * pIndex, DWORD dwflags) PURE; STDMETHOD(GetReservedOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, int * pIndex, DWORD dwflags, int iReservedID) PURE; STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE; STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE; STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, 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 //=========================================================================== // // 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_(IShellIconOverlay, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellIconOverlay methods *** STDMETHOD(GetOverlayIndex)(THIS_ LPCITEMIDLIST pidl, int * pIndex) PURE; STDMETHOD(GetOverlayIconIndex)(THIS_ LPCITEMIDLIST pidl, int * pIconIndex) PURE; }; #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 SHSTDAPI_(int) SHGetIconOverlayIndex%(LPCTSTR% pszIconPath, int iIconIndex); ;begin_internal //=========================================================================== // // IBrowserBand // // IBrowserBand::GetObjectBB(REFIID riid, void **ppv) // Obtain a service from the web browser. // // IBrowserBand::SetBrowserBandInfo(DWORD dwMask, PBROWSERBANDINFO pbbi) // Set browser band properties based on members of browserbandinfo struct // specified by dwMask. These properties include title, deskband mode, and // current size. // //=========================================================================== typedef struct { UINT cbSize; DWORD dwModeFlags; BSTR bstrTitle; SIZE sizeMin; SIZE sizeMax; SIZE sizeCur; } BROWSERBANDINFO, *PBROWSERBANDINFO; #define BBIM_MODEFLAGS 0x00000001 #define BBIM_TITLE 0x00000002 #define BBIM_SIZEMIN 0x00000004 #define BBIM_SIZEMAX 0x00000008 #define BBIM_SIZECUR 0x00000010 #undef INTERFACE #define INTERFACE IBrowserBand DECLARE_INTERFACE_(IBrowserBand, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // *** IBrowserBand methods *** STDMETHOD(GetObjectBB)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(SetBrowserBandInfo)(THIS_ DWORD dwMask, PBROWSERBANDINFO pbbi) PURE; STDMETHOD(GetBrowserBandInfo)(THIS_ DWORD dwMask, PBROWSERBANDINFO pbbi) PURE; }; ;end_internal #if (_WIN32_IE >= 0x0400) ;begin_internal // NT4 Console Server included shell32\shlink.h to get structure // definitions and mimicked shell32\shlink.c to understand the // stream format so our stream format is fixed forever. This is // not bad since it was designed with extension in mind. We need // to publish (as privately as possible) the file format and // structures needed to read the file format. // // The stream format is a SHELL_LINK_DATA followed by // if SLDF_HAS_ID_LIST an ILSaveToStream followed by // if SLDF_HAS_LINK_INFO a LINKINFO followed by // if SLDF_HAS_NAME a STREAMSTRING followed by // if SLDF_RELPATH a STREAMSTRING followed by // if SLDF_WORKINGDIR a STREAMSTRING followed by // if SLDF_HAS_ARGS a STREAMSTRING followed by // if SLDF_HAS_ICON_LOCATION a STREAMSTRING followed by // SHWriteDataBlockList list of signature blocks // // Where a STREAMSTRING is a USHORT count of characters // followed by that many (SLDF_UNICODE ? WIDE : ANSI) characters. // typedef struct { // sld DWORD cbSize; // signature for this data structure CLSID clsid; // our GUID DWORD dwFlags; // SHELL_LINK_DATA_FLAGS enumeration DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeLow; int iIcon; int iShowCmd; WORD wHotkey; WORD wUnused; DWORD dwRes1; DWORD dwRes2; } SHELL_LINK_DATA, *LPSHELL_LINK_DATA; ;end_internal // IShellLinkDataList::GetFlags()/SetFlags() typedef enum { 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, // don't create a LINKINFO (make a dumb link) 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 SLDF_HAS_LOGO3ID = 0x00000800, // this link is a special Logo3/MSICD link SLDF_HAS_DARWINID = 0x00001000, // this link is a special Darwin link SLDF_RUNAS_USER = 0x00002000, // Run this link as a different user SLDF_HAS_EXP_ICON_SZ = 0x00004000, // contains expandable env string for icon path SLDF_NO_PIDL_ALIAS = 0x00008000, // don't ever resolve to a logical location SLDF_FORCE_UNCNAME = 0x00010000, // make GetPath() prefer the UNC name to the local name SLDF_RUN_WITH_SHIMLAYER = 0x00020000, // Launch the target of this link w/ shim layer active SLDF_RESERVED = 0x80000000, // Reserved-- so we can use the low word as an index value in the future } SHELL_LINK_DATA_FLAGS; typedef struct tagDATABLOCKHEADER { DWORD cbSize; // Size of this extra data block DWORD dwSignature; // signature of this extra data block } DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; typedef struct { #ifdef __cplusplus DATABLOCK_HEADER dbh; #else DATABLOCK_HEADER; #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 // This is a FE Console property typedef struct { #ifdef __cplusplus DATABLOCK_HEADER dbh; #else DATABLOCK_HEADER; #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; #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 // BUGBUG (reinerf) - this has the same value as EXP_SZ_ICON_SIG?!?!?! #define EXP_LOGO3_ID_SIG 0xA0000007 #endif #define EXP_SPECIAL_FOLDER_SIG 0xA0000005 // LPEXP_SPECIAL_FOLDER ;begin_internal typedef struct { DWORD cbSize; // Size of this extra data block DWORD dwSignature; // signature of this extra data block } EXP_HEADER, *LPEXP_HEADER; ;end _internal 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; ;begin_internal typedef struct { DWORD cbSize; // Size of this extra data block DWORD dwSignature; // signature of this extra data block BYTE abTracker[ 1 ]; // } EXP_TRACKER, *LPEXP_TRACKER; #define EXP_TRACKER_SIG 0xA0000003 // LPEXP_TRACKER typedef struct { DWORD cbSize; // Size of this extra data block DWORD dwSignature; // signature of this extra data block WCHAR wszLayerEnvName[64]; // name of shim layer to run with this link (eg "NT4SP5") } EXP_SHIMLAYER; #define EXP_SHIMLAYER_SIG 0xA0000008 ;end_internal 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) ;begin_internal // NT40 Console Control Panel Applet does a CoCreateInstance(CLSID_CShellLink), // used the CShellLink definition to get the 'this' pointer, and passed that // along to some private exports in shell32. This completely prevents us // from moving the CShellLink implementation to another DLL. (If we do, or an // ISV takes our stream format and implements a better link by pointing the // classid to their implementation, the NT40 Console CPA will fault.) // // To fix this problem in future revs, CShellLink will support IShellLinkDataList // AddDataBlock adds the data block // FindDataBloc returns a LocalAlloc()d COPY of a data block with the // signature dwSig (NOTE: this is different than SHFindDataBlock) // RemoveDataBlock removes a data block with signature dwSig // Plan is for NT50's Console CPA to use this interface instead. // ;end_internal #undef INTERFACE #define INTERFACE IShellLinkDataList DECLARE_INTERFACE_(IShellLinkDataList, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** IShellLinkDataList methods *** STDMETHOD(AddDataBlock)(THIS_ void * pDataBlock) PURE; STDMETHOD(CopyDataBlock)(THIS_ DWORD dwSig, void **ppDataBlock) PURE; STDMETHOD(RemoveDataBlock)(THIS_ DWORD dwSig) PURE; STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE; STDMETHOD(SetFlags)(THIS_ DWORD dwFlags) PURE; }; #endif // (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0500) #undef INTERFACE #define INTERFACE IResolveShellLink DECLARE_INTERFACE_(IResolveShellLink, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** IResolveShellLink methods *** STDMETHOD(ResolveShellLink)(THIS_ IUnknown* punk, HWND hwnd, DWORD fFlags) PURE; }; #endif // (_WIN32_IE >= 0x0500) #ifdef _INC_SHELLAPI /* for LPSHELLEXECUTEINFO */ //=========================================================================== // // IShellExecuteHook Interface // //=========================================================================== #undef INTERFACE #define INTERFACE IShellExecuteHookA DECLARE_INTERFACE_(IShellExecuteHookA, IUnknown) // shexhk { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) 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, void **ppv) 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 //=========================================================================== // // IURLSearchHook Interface ;begin_internal // // IURLSearchHook Interface is called whenever the browser navigates to a // non-standard URL. It can be used to redirect the user's request to a // search engine or a specific web site. // // A non-standard URL does not have a protocol prefix (e.g., // "www.microsoft.com") and the protocol cannot be easily guessed by // the browser (e.g., "home.microsoft.com"). // // The parameters of Translate(..) // lpwszSearchURL -- (IN/OUT) Wide char buffer that contains the request // "URL" user typed in as input and the tranlated URL // as output. // cchBufferSize -- (IN) size of lpwszSearchURL // // Return Values: // S_OK Search handled completely, pszResult has the full URL to // browse to. Stop running any further IURLSearchHooks and // pass this URL back to the browser for browsing. // // S_FALSE Query has been preprocessed, pszResult has the result of // the preprocess, further search still needed. Go on // executing the rest of the IURLSearchHooks. The // preprocessing steps can be: // // 1. replaced certain characters // 2. added more hints // // E_ABORT Search handled completely, stop running any further // IURLSearchHooks, but NO BROWSING NEEDED as a result, // pszResult is a copy of pcszQuery. // // ;BUGBUG: This is not fully implemented, yet, making IURLQualify return this ;Internal // involves too much change. ;Internal // ;Internal // BUGBUG:: E_ABORT is currently treated as E_FAIL. It requires too much change. ;Internal // // E_FAIL This Hook was unsuccessful. Search not handled at all, // pcszQueryURL has the query string. Please go on running // other IURLSearchHooks. // // BUGBUG: There is a potential danger in this Interface, that is people can write ;Internal // very bad SearchHooks, but we (Microsoft) take the blame. ;Internal ;end_internal // //=========================================================================== #undef INTERFACE #define INTERFACE IURLSearchHook DECLARE_INTERFACE_(IURLSearchHook, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** IURLSearchHook methods *** STDMETHOD(Translate)(THIS_ LPWSTR lpwszSearchURL, DWORD cchBufferSize) PURE; }; #undef INTERFACE #define INTERFACE ISearchContext DECLARE_INTERFACE_(ISearchContext, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** ISearchContext methods *** STDMETHOD(GetSearchUrl)(THIS_ BSTR * pbstrSearchUrl) PURE; STDMETHOD(GetSearchText)(THIS_ BSTR * pbstrSearchText) PURE; STDMETHOD(GetSearchStyle)(THIS_ DWORD * pdwSearchStyle) PURE; }; #undef INTERFACE #define INTERFACE IURLSearchHook2 DECLARE_INTERFACE_(IURLSearchHook2, IURLSearchHook) { // *** IURLSearchHook2 methods *** STDMETHOD(TranslateWithSearchContext)(THIS_ LPWSTR lpwszSearchURL, DWORD cchBufferSize, ISearchContext * pSearchContext) PURE; }; //=========================================================================== // // INewShortcutHook Interface // //=========================================================================== #undef INTERFACE #define INTERFACE INewShortcutHookA DECLARE_INTERFACE_(INewShortcutHookA, IUnknown) // nshhk { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, 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_ 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, 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_ 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 #define FOF_NOCOPYSECURITYATTRIBS 0x0800 // dont copy NT file Security Attributes #define FOF_NORECURSION 0x1000 // don't recurse into directories. #if (_WIN32_IE >= 0x500) #define FOF_NO_CONNECTED_ELEMENTS 0x2000 // don't operate on connected file elements. #define FOF_WANTNUKEWARNING 0x4000 // during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION) #endif // _WIN32_IE >= 0x500 #if (_WIN32_WINNT >= 0x0501) #define FOF_NORECURSEREPARSE 0x8000 // treat reparse points as objects, not containers #endif // (_WIN32_WINNT >= 0x501) typedef WORD FILEOP_FLAGS; // printer operations #define PO_DELETE 0x0013 // printer is being deleted #define PO_RENAME 0x0014 // printer is being renamed #define PO_PORTCHANGE 0x0020 // port this printer connected to is being 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, 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_(ICopyHookW, IUnknown) // sl { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, 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 //=========================================================================== // // IFileViewerSite Interface // // History: ;Internal // --/--/94 KurtE Created ;Internal // ;Internal //=========================================================================== #undef INTERFACE #define INTERFACE IFileViewerSite DECLARE_INTERFACE_(IFileViewerSite, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFileViewerSite methods *** 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. // // History: ;Internal // 3/4/94 kraigb Created ;Internal // ;Internal //=========================================================================== #include 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 /* 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(IFileViewerA) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFileViewer methods *** 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) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFileViewer methods *** 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 ;begin_internal // CGID_DefView Command Target IDs. used to persist global DefView state enum { DVID_SETASDEFAULT, // Set the DefView state of this folder as default for all of the same class DVID_RESETDEFAULT // Reset the DefView state to the default (delete subkeys) }; // CGID_ShellDocView Command Target IDs. for shell doc view wedge enum { SHDVID_FINALTITLEAVAIL, // DEAD: variantIn bstr - sent after final OLECMDID_SETTITLE is sent SHDVID_MIMECSETMENUOPEN, // mimecharset menu open commands SHDVID_PRINTFRAME, // print HTML frame SHDVID_PUTOFFLINE, // DEAD: The Offline property has been changed SHDVID_PUTSILENT, // DEAD: The frame's Silent property has been changed SHDVID_GOBACK, // Navigate Back SHDVID_GOFORWARD, // Navigate Forward SHDVID_CANGOBACK, // Is Back Navigation Possible? SHDVID_CANGOFORWARD, // Is Forward Navigation Possible? SHDVID_CANACTIVATENOW, // (down) (PICS) OK to navigate to this view now? SHDVID_ACTIVATEMENOW, // (up) (PICS) Rating checks out, navigate now SHDVID_CANSUPPORTPICS, // (down) variantIn I4: IOleCommandTarget to reply to SHDVID_PICSLABELFOUND, // (up) variantIn bstr: PICS label SHDVID_NOMOREPICSLABELS, // (up) End of document, no more PICS labels coming SHDVID_CANDEACTIVATENOW, // (QS down) (in script/etc) OK to deactivate view now? SHDVID_DEACTIVATEMENOW, // (EXEC up) (in script/etc) out of script, deactivate view now SHDVID_NODEACTIVATENOW, // (EXEC up) (in script/etc) entering script, disable deactivate SHDVID_AMBIENTPROPCHANGE, // variantIn I4: dispid of ambient property that changed SHDVID_GETSYSIMAGEINDEX, // variantOut: image index for current page SHDVID_GETPENDINGOBJECT, // variantOut: IUnknown of pending shellview/docobject SHDVID_GETPENDINGURL, // variantOut: BSTR of URL for pending docobject SHDVID_SETPENDINGURL, // variantIn: BSTR of URL passed to pending docobject SHDVID_ISDRAGSOURCE, // (down) varioutOut I4: non-zero if it's initiated drag&drop SHDVID_DOCFAMILYCHARSET, // variantOut: I4: windows (family) codepage SHDVID_DOCCHARSET, // variantOut: I4: actual (mlang) codepage SHDVID_RAISE, // vaIn:I4:DTRF_*, vaOut:NULL unless DTRF_QUERY SHDVID_GETTRANSITION, // (down) vaIn: I4: TransitionEvent; vaOut BSTR (CLSID), I4 (dwSpeed) SHDVID_GETMIMECSETMENU, // get menu handle for mimecharset SHDVID_DOCWRITEABORT, // Abort binding but activate pending docobject SHDVID_SETPRINTSTATUS, // VariantIn: BOOL, TRUE - Started printing, FALSE - Finished printing SHDVID_NAVIGATIONSTATUS, // QS for tooltip text and Exec when user clicks SHDVID_PROGRESSSTATUS, // QS for tooltip text and Exec when user clicks SHDVID_ONLINESTATUS, // QS for tooltip text and Exec when user clicks SHDVID_SSLSTATUS, // QS for tooltip text and Exec when user clicks SHDVID_PRINTSTATUS, // QS for tooltip text and Exec when user clicks SHDVID_ZONESTATUS, // QS for tooltip text and Exec when user clicks SHDVID_ONCODEPAGECHANGE, // variantIn I4: new specified codepage SHDVID_SETSECURELOCK, // set the secure icon SHDVID_SHOWBROWSERBAR, // show browser bar of clsid guid SHDVID_NAVIGATEBB, // navigate to pidl in browserbar. SHDVID_UPDATEOFFLINEDESKTOP,// put the desktop in ON-LINE mode, update and put it back in Offline mode SHDVID_PICSBLOCKINGUI, // (up) In I4: pointer to "ratings nugget" for block API SHDVID_ONCOLORSCHANGE, // (up) sent by mshtml to indicate color set change SHDVID_CANDOCOLORSCHANGE, // (down) used to query if document supports the above SHDVID_QUERYMERGEDHELPMENU, // was the help menu micro-merged? SHDVID_QUERYOBJECTSHELPMENU,// return the object's help menu SHDVID_HELP, // do help SHDVID_UEMLOG, // set UEM logging vaIn:I4:UEMIND_*, vaOut:NULL SHDVID_GETBROWSERBAR, // get IDeskBand for browser bar of clsid guid SHDVID_GETFONTMENU, SHDVID_FONTMENUOPEN, SHDVID_CLSIDTOIDM, // get the idm for the given clsid SHDVID_GETDOCDIRMENU, // get menu handle for document direction SHDVID_ADDMENUEXTENSIONS, // Context Menu Extensions SHDVID_CLSIDTOMONIKER, // CLSID to property page resource mapping SHDVID_RESETSTATUSBAR, // set the status bar back to "normal" icon w/out text SHDVID_ISBROWSERBARVISIBLE, // is browser bar of clsid guid visible? SHDVID_GETOPTIONSHWND, // gets hwnd for internet options prop sheet (NULL if not open) SHDVID_DELEGATEWINDOWOM, // set policy for whether window OM methods should be delegated. SHDVID_PAGEFROMPOSTDATA, // determines if page was generated by post data SHDVID_DISPLAYSCRIPTERRORS, // tells the top docobject host to display his script err dialog SHDVID_NAVIGATEBBTOURL, // Navigate to an URL in browserbar (used in Trident). SHDVID_NAVIGATEFROMDOC, // The document delegated the navigation for a non-html mime-type. SHDVID_STARTPICSFORWINDOW, // (up) variantIn: IUnknown of window that is navigating // variantOut: bool if pics process started SHDVID_CANCELPICSFORWINDOW, // (up) variantIn: IUnknown of window that is no longer navigating SHDVID_ISPICSENABLED, // (up) variantOut: bool SHDVID_PICSLABELFOUNDINHTTPHEADER,// (up) variantIn bstr: PICS label SHDVID_CHECKINCACHEIFOFFLINE, // Check in cache if offline SHDVID_CHECKDONTUPDATETLOG, // check if the current navigate is already dealing with the travellog correctly SHDVID_UPDATEDOCHOSTSTATE, // Sent from CBaseBrowser2::_UpdateBrowserState to tell the dochost to update its state. SHDVID_FIREFILEDOWNLOAD, SHDVID_COMPLETEDOCHOSTPASSING, SHDVID_NAVSTART, SHDVID_SETNAVIGATABLECODEPAGE, SHDVID_WINDOWOPEN, SHDVID_PRIVACYSTATUS, // QS for tooltip text and exec when user clicks SHDVID_FORWARDSECURELOCK, // asks CDocObjectHost to forward its security status up to the shell browser SHDVID_ISEXPLORERBARVISIBLE, // is any explorer bar visible? }; // CGID_DocHostCmdPriv Command Target IDs // enum { DOCHOST_DOCCANNAVIGATE, // The document knows how to navigate. DOCHOST_NAVIGATION_ERROR, // Navigation Error DOCHOST_DOCHYPERLINK, // The document is navigating. DOCHOST_SENDINGREQUEST, // The document is sending a request for download. Update the progress bar. DOCHOST_FINDINGRESOURCE, // The document is finding a resource. Update the progress bar. DOCHOST_RESETSEARCHINFO, // Reset search information (after a successful navigation) DOCHOST_SETBROWSERINDEX, // Sets the browser ID to use for TravelLog and frame targeting DOCHOST_NOTE_ERROR_PAGE, // Need to know when we're navigating to an error web page. DOCHOST_READYSTATE_INTERACTIVE, // a document on a page is readystate interactive DOCHOST_CONTENTDISPOSITIONATTACH // The document needs to be saved. }; // CGID_SearchBand Command Target IDs. enum { SBID_SEARCH_NEW, // (re)load the context-appropriate url SBID_SEARCH_NEXT, // cycle between multiple providers SBID_SEARCH_CUSTOMIZE, // navigate to customization url SBID_SEARCH_HELP, // what it says SBID_GETPIDL, // get the search pane's pidl SBID_HASPIDL, // does the search pane have a pidl (i.e, has it navigated) }; // CGID_MediaBar target ids enum { MBID_PLAY, // Play an url MBID_POPOUT // Detect state of player }; enum { MB_DOCKED, MB_POPOUT }; // // Private struct passed as argument to SHDVID_UPDATEDOCHOSTSTATE // struct DOCHOSTUPDATEDATA { LPITEMIDLIST _pidl; BOOL _fIsErrorUrl; }; // // this enum is used by SHDVID_SETSECURELOCK and SBCMDID_SETSECURELOCKICON // when adding new values, make sure to add to both SET and SUGGEST, and // the code depends on a direct correlation between the level of security // and the value of the enum. so keep new values in the correct order // enum { SECURELOCK_NOCHANGE = -1, SECURELOCK_SET_UNSECURE = 0, SECURELOCK_SET_MIXED, SECURELOCK_SET_SECUREUNKNOWNBIT, SECURELOCK_SET_SECURE40BIT, SECURELOCK_SET_SECURE56BIT, SECURELOCK_SET_FORTEZZA, SECURELOCK_SET_SECURE128BIT, SECURELOCK_FIRSTSUGGEST, SECURELOCK_SUGGEST_UNSECURE = SECURELOCK_FIRSTSUGGEST, SECURELOCK_SUGGEST_MIXED, SECURELOCK_SUGGEST_SECUREUNKNOWNBIT, SECURELOCK_SUGGEST_SECURE40BIT, SECURELOCK_SUGGEST_SECURE56BIT, SECURELOCK_SUGGEST_FORTEZZA, SECURELOCK_SUGGEST_SECURE128BIT, }; ;end_internal //========================================================================== // // 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) // 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) #define FCIDM_DRIVELIST (FCIDM_BROWSERFIRST + 2) // ;Internal #define FCIDM_TREE (FCIDM_BROWSERFIRST + 3) // ;Internal #define FCIDM_TABS (FCIDM_BROWSERFIRST + 4) // ;Internal #define FCIDM_REBAR (FCIDM_BROWSERFIRST + 5) // ;Internal #if (_WIN32_IE >= 0x0400) //-------------------------------------------------------------------------- // // The resource id of the offline cursor // This cursor is avaialble in shdocvw.dll #define IDC_OFFLINE_HAND 103 // //-------------------------------------------------------------------------- #endif ;begin_internal // SBCMDID_SHOWCONTROL enum { SBSC_HIDE = 0, SBSC_SHOW = 1, SBSC_TOGGLE = 2, SBSC_QUERY = 3 }; // SBCMDID_OPTIONS enum { SBO_DEFAULT = 0 , SBO_NOBROWSERPAGES = 1 }; // CGID_Explorer Command Target IDs enum { SBCMDID_ENABLESHOWTREE = 0, SBCMDID_SHOWCONTROL = 1, // variant vt_i4 = loword = FCW_* hiword = SBSC_* SBCMDID_CANCELNAVIGATION = 2, // cancel last navigation SBCMDID_MAYSAVECHANGES = 3, // about to close and may save changes SBCMDID_SETHLINKFRAME = 4, // variant vt_i4 = phlinkframe SBCMDID_ENABLESTOP = 5, // variant vt_bool = fEnable SBCMDID_OPTIONS = 6, // the view.options page SBCMDID_EXPLORER = 7, // are you explorer.exe? SBCMDID_ADDTOFAVORITES = 8, SBCMDID_ACTIVEOBJECTMENUS = 9, SBCMDID_MAYSAVEVIEWSTATE = 10, // Should we save view stream SBCMDID_DOFAVORITESMENU = 11, // popup the favorites menu SBCMDID_DOMAILMENU = 12, // popup the mail menu SBCMDID_GETADDRESSBARTEXT = 13, // get user-typed text SBCMDID_ASYNCNAVIGATION = 14, // do an async navigation SBCMDID_SEARCHBAROBSOLETE = 15, // OBSOLETE beta-1 SEARCHBAR SBCMDID_FLUSHOBJECTCACHE = 16, // flush object cache SBCMDID_CREATESHORTCUT = 17, // create a shortcut SBCMDID_SETMERGEDWEBMENU = 18, // set pre-merged menu for HTML SBCMDID_REMOVELOCKICON = 19, // Remove lock icon SBCMDID_SELECTHISTPIDL = 20, // QS:EXEC select history pidl on navigate SBCMDID_WRITEHIST = 21, // QS only:write history sf on navigate SBCMDID_GETHISTPIDL = 22, // EXEC gets most recent history pidl SBCMDID_REGISTERNSCBAND = 23, // EXEC registers NscBand when visible SBCMDID_COCREATEDOCUMENT = 24, // Create an instance of MSHTML SBCMDID_SETSECURELOCKICON = 25, // sets the SSL lock icon for the current page SBCMDID_INITFILECTXMENU = 26, // EXEC,QS: file context menu for band item SBCMDID_UNREGISTERNSCBAND = 27, // EXEC unregisters NscBand when invisible SBCMDID_SEARCHBAR = 28, // show/hide/toggle BrowserBar search SBCMDID_HISTORYBAR = 29, // show/hide/toggle BrowserBar history SBCMDID_FAVORITESBAR = 30, // show/hide/toggle BrowserBar favorites #ifdef ENABLE_CHANNELS SBCMDID_CHANNELSBAR = 31, // show/hide/toggle BrowserBar channels #endif SBCMDID_SENDPAGE = 32, // sends the current page via email SBCMDID_SENDSHORTCUT = 33, // sends a shortcut to current page via email SBCMDID_TOOLBAREMPTY = 34, // toolbar has nothing visible SBCMDID_EXPLORERBAR = 35, // show/hide/toggle BrowserBar all folders SBCMDID_GETUSERADDRESSBARTEXT = 36, // get the exact text the user-entered SBCMDID_HISTSFOLDER = 37, // EXEC varOut returns cached history IShellFolder SBCMDID_UPDATETRAVELLOG = 38, // updates the travellog with the current info SBCMDID_MIXEDZONE = 39, // The current view has mixed zones SBCMDID_REPLACELOCATION = 40, // replace the current URL with this one. SBCMDID_GETPANE = 41, // Browser asks the view for pane ordinal SBCMDID_FILERENAME = 42, // Browser forwards file->rename to explorer bar SBCMDID_FILEDELETE = 43, // Browser forwards file->delete to explorer bar SBCMDID_FILEPROPERTIES = 44, // Browser forwards file->properties to explorer bar SBCMDID_IESHORTCUT = 45, // Navigates the browser to an .url file SBCMDID_GETSHORTCUTPATH = 46, // Asks for the path to the shortcut - if it exists SBCMDID_DISCUSSIONBAND = 47, // show/hide/toggle the Office discussion band SBCMDID_SETADDRESSBARFOCUS = 48, // Set focus on address bar on WM_ACTIVATE (UNIX) SBCMDID_HASADDRESSBARFOCUS = 49, // Checks whether address bar has focus (UNIX) SBCMDID_MSGBAND = 50, // MsgBand Message (UNIX) SBCMDID_ISIEMODEBROWSER = 51, // returns S_OK if browser is in IE mode SBCMDID_GETTEMPLATEMENU = 52, // get handle to template menu SBCMDID_GETCURRENTMENU = 53, // get handle to current menu SBCMDID_ERRORPAGE = 54, // informs addressbar mru that this is an error page SBCMDID_AUTOSEARCHING = 55, // informs addressbar mru that we are trying a new url SBCMDID_STARTEDFORINTERNET = 56, // return S_OK if window started as IE window, S_FALSE otherwise SBCMDID_ISBROWSERACTIVE = 57, // return S_OK if the browser is active, S_FALSE otherwise SBCMDID_SUGGESTSAVEWINPOS = 58, // return S_OK if browser decides to save window position, S_FALSE otherwise SBCMDID_CACHEINETZONEICON = 59, // Cache/refresh internet zone icons painted by status bar SBCMDID_ONVIEWMOVETOTOP = 60, // Notification that the view window has moved to HWND_TOP SBCMDID_ONCLOSE = 61, // Close notification destined for the dochost. SBCMDID_CANCELANDCLOSE = 62, // Cancel the async download and close the browser. SBCMDID_MEDIABAR = 63, // show/hide/toggle MediaBar }; #define ZONE_UNKNOWN -1 #define ZONE_MIXED -2 #define IS_SPECIAL_ZONE(a) (((a) == ZONE_UNKNOWN) || ((a) == ZONE_MIXED)) ;end_internal // SBCMDID_GETPANE - not necessarily in order #define PANE_NONE -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 #define PANE_PRIVACY 7 ;begin_internal #if (_WIN32_IE >= 0x0400) // CGID_AddresseditBox Command Target IDs enum { AECMDID_SAVE = 0, // Ask AddressEditBox to save }; #endif ;end_internal //------------------------------------------------------------------------- // 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 // //------------------------------------------------------------------------- #define CDBOSC_SETFOCUS 0x00000000 #define CDBOSC_KILLFOCUS 0x00000001 #define CDBOSC_SELCHANGE 0x00000002 #define CDBOSC_RENAME 0x00000003 #define CDBOSC_STATECHANGE 0x00000004 #undef INTERFACE #define INTERFACE ICommDlgBrowser DECLARE_INTERFACE_(ICommDlgBrowser, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ICommDlgBrowser methods *** STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE; STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv, ULONG uChange) PURE; STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv, LPCITEMIDLIST pidl) PURE; }; typedef ICommDlgBrowser * LPCOMMDLGBROWSER; //------------------------------------------------------------------------- // ICommDlgBrowser2 interface // // Member functions: // // ICommDlgBrowser2::Notify(IShellView *pshv, DWORD dwNotfyType) // Called when the view is wants to notify common dialog when an event // occurrs. // // CDB2N_CONTEXTMENU_START indicates the context menu has started. // CDB2N_CONTEXTMENU_DONE indicates the context menu has completed. // // ICommDlgBrowser2::GetDefaultMenuText(IShellView *pshv, // WCHAR *pszText, INT cchMax) // Called when the view wants to get the default context menu text. // pszText points to buffer and cchMax specifies the size of the // buffer in characters. The browser on return has filled the buffer // with the default context menu text. The Shell will call this method // with at least a buffer size of MAX_PATH. The browser should return // S_OK if it returned a new default menu text, S_FALSE to let the view // to use the normal default menu text. // // ICommDlgBrowser2::GetViewFlags(DWORD *pdwFlags) // Called when the view wants to determine if special customization needs to // be done for the common dialog browser. For example View calls this function to // determin if all files(hidden and system)needs to be shown. If the GetViewFlags returns a DWORD with // CDB2GVF_SHOWALLFILES flag set then it will show all the files. //------------------------------------------------------------------------- #define CDB2N_CONTEXTMENU_DONE 0x00000001 #define CDB2N_CONTEXTMENU_START 0x00000002 //GetViewFlags #define CDB2GVF_SHOWALLFILES 0x00000001 #undef INTERFACE #define INTERFACE ICommDlgBrowser2 DECLARE_INTERFACE_(ICommDlgBrowser2, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ICommDlgBrowser methods *** STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE; STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv, ULONG uChange) PURE; STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv, LPCITEMIDLIST pidl) PURE; // *** ICommDlgBrowser2 methods *** STDMETHOD(Notify) (THIS_ struct IShellView * ppshv, DWORD dwNotifyType) PURE; STDMETHOD(GetDefaultMenuText) (THIS_ struct IShellView * ppshv, WCHAR *pszText, INT cchMax) PURE; STDMETHOD(GetViewFlags)(THIS_ DWORD *pdwFlags) PURE; }; typedef ICommDlgBrowser2 * LPCOMMDLGBROWSER2; ;begin_internal #ifdef NONAMELESSUNION #define NAMELESS_MEMBER(member) DUMMYUNIONNAME.##member #else #define NAMELESS_MEMBER(member) member #endif #define STRRET_OLESTR STRRET_WSTR // same as STRRET_WSTR #define STRRET_OFFPTR(pidl,lpstrret) ((LPSTR)((LPBYTE)(pidl)+(lpstrret)->NAMELESS_MEMBER(uOffset))) ;end_internal // // function assumes the size of the buffer (MAX_PATH). The pidl // should point to a file system object. SHSTDAPI_(BOOL) SHGetPathFromIDList%(LPCITEMIDLIST pidl, LPTSTR% pszPath); ;begin_internal // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(int) SHCreateDirectory(HWND hwnd, LPCWSTR pszPath); SHSTDAPI_(int) SHCreateDirectoryEx%(HWND hwnd, LPCTSTR% pszPath, SECURITY_ATTRIBUTES *psa); SHSTDAPI SHOpenFolderAndSelectItems(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl, DWORD dwFlags); SHSTDAPI SHCreateShellItem(LPCITEMIDLIST pidlParent, IShellFolder *psfParent, LPCITEMIDLIST pidl, IShellItem **ppsi); ;begin_internal SHSTDAPI SHParseShellItem(LPCWSTR psz, IShellItem **ppsi); SHSTDAPI SIEnumObjects(IShellItem *psi, HWND hwnd, SHCONTF flags, IEnumShellItems **ppenum); SHSTDAPI SHCreateShellItemArray(LPCITEMIDLIST pidlParent,IShellFolder *psfParent,UINT cidl, LPCITEMIDLIST *ppidl,IShellItemArray **ppsiItemArray); ;end_internal //------------------------------------------------------------------------- // // 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 REGSTR_PATH_INTERNET_EXPLORER TEXT("\\SOFTWARE\\Microsoft\\Internet Explorer") ; Internal #define REGSTR_PATH_IE_MAIN REGSTR_PATH_INTERNET_EXPLORER TEXT("\\Main") ; Internal #define REGSTR_VALUE_USER_AGENT TEXT("UserAgent") ; Internal #define REGSTR_DEFAULT_USER_AGENT TEXT("Mozilla/2.0 (compatible; MSIE 3.0A; Windows 95)") ; Internal #define CSIDL_DESKTOP 0x0000 // #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 // \Favorites #define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Startup #define CSIDL_RECENT 0x0008 // \Recent #define CSIDL_SENDTO 0x0009 // \SendTo #define CSIDL_BITBUCKET 0x000a // \Recycle Bin #define CSIDL_STARTMENU 0x000b // \Start Menu #define CSIDL_MYDOCUMENTS 0x000c // logical "My Documents" desktop icon #define CSIDL_MYMUSIC 0x000d // "My Music" folder #define CSIDL_MYVIDEO 0x000e // "My Videos" folder // 0x000f ;Internal #define CSIDL_DESKTOPDIRECTORY 0x0010 // \Desktop #define CSIDL_DRIVES 0x0011 // My Computer #define CSIDL_NETWORK 0x0012 // Network Neighborhood (My Network Places) #define CSIDL_NETHOOD 0x0013 // \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 // \Application Data #define CSIDL_PRINTHOOD 0x001b // \PrintHood #ifndef CSIDL_LOCAL_APPDATA #define CSIDL_LOCAL_APPDATA 0x001c // \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 // \Start Menu\Programs\Administrative Tools #endif // _SHFOLDER_H_ #define CSIDL_CONNECTIONS 0x0031 // Network and Dial-up Connections #define CSIDL_PERUSER_TEMP 0x0032 // per user TEMP (reserved, not impelemented);Internal #define CSIDL_9XCOMMAND 0x0033 // Win9x COMMANDN (dos programs) (reserved, not impelemented);Internal #define CSIDL_9XSYSTEM 0x0034 // Win9x/NT system (not system32) (reserved, not impelemented);Internal #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 ;begin_internal #define CSIDL_FLAG_DONT_UNEXPAND 0x2000 // combine with CSIDL_ value to avoid unexpanding environment variables ;end_internal #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) #define CSIDL_FLAG_MASK 0xFF00 // mask for all possible flag values SHSTDAPI SHGetSpecialFolderLocation(HWND hwnd, int csidl, LPITEMIDLIST *ppidl); #if (_WIN32_IE >= 0x0400) ;begin_internal // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(void) SHFlushSFCache(void); SHSTDAPI_(LPITEMIDLIST) SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate); SHSTDAPI_(BOOL) SHGetSpecialFolderPath%(HWND hwnd, LPTSTR% pszPath, int csidl, BOOL fCreate); #if (_WIN32_IE >= 0x0500) 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 SHGetFolderPath%(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPTSTR% pszPath); SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPITEMIDLIST *ppidl); SHFOLDERAPI SHGetFolderPathAndSubDir%(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPCTSTR% pszSubDir, LPTSTR% pszPath); ;begin_internal SHFOLDERAPI SHSetFolderPath%(int csidl, HANDLE hToken, DWORD dwFlags, LPCTSTR% pszPath); SHSTDAPI_(BOOL) MakeShellURLFromPath%(LPCTSTR% pszPathIn, LPTSTR% pszUrl, DWORD dwCch); SHSTDAPI_(BOOL) SHIsTempDisplayMode(); SHSTDAPI_(FILEDESCRIPTOR *) GetFileDescriptor(FILEGROUPDESCRIPTOR *pfgd, BOOL fUnicode, int nIndex, LPTSTR pszName); SHSTDAPI CopyStreamUI(IStream *pstmSrc, IStream *pstmDest, IProgressDialog *pdlg, ULONGLONG ullMaxBytes); ;end_internal #endif // _WIN32_IE >= 0x0500 #endif // _WIN32_IE >= 0x0400 ;begin_internal // DOC'ed for DOJ compliance ;end_internal #if (_WIN32_IE >= 0x0500) #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 #define FCSM_WEBVIEWTEMPLATE 0x00000002 #define FCSM_INFOTIP 0x00000004 #define FCSM_CLSID 0x00000008 #define FCSM_ICONFILE 0x00000010 #define FCSM_LOGO 0x00000020 #define FCSM_FLAGS 0x00000040 #include // Used by SHGetSetFolderCustomSettingsA typedef struct { DWORD dwSize; DWORD dwMask; // IN/OUT Which Attributes to Get/Set SHELLVIEWID* pvid; // OUT - if dwReadWrite is FCS_READ, IN - otherwise // The folder's WebView template path LPSTR pszWebViewTemplate; // OUT - if dwReadWrite is FCS_READ, IN - otherwise DWORD cchWebViewTemplate; // IN - Specifies the size of the buffer pointed to by pszWebViewTemplate // Ignored if dwReadWrite is FCS_READ LPSTR pszWebViewTemplateVersion; // currently IN only // Infotip for the folder LPSTR pszInfoTip; // OUT - if dwReadWrite is FCS_READ, IN - otherwise DWORD cchInfoTip; // IN - Specifies the size of the buffer pointed to by pszInfoTip // Ignored if dwReadWrite is FCS_READ // CLSID that points to more info in the registry CLSID* pclsid; // OUT - if dwReadWrite is FCS_READ, IN - otherwise // Other flags for the folder. Takes FCS_FLAG_* values DWORD dwFlags; // OUT - if dwReadWrite is FCS_READ, IN - otherwise LPSTR pszIconFile; // OUT - if dwReadWrite is FCS_READ, IN - otherwise DWORD cchIconFile; // IN - Specifies the size of the buffer pointed to by pszIconFile // Ignored if dwReadWrite is FCS_READ int iIconIndex; // OUT - if dwReadWrite is FCS_READ, IN - otherwise LPSTR pszLogo; // OUT - if dwReadWrite is FCS_READ, IN - otherwise DWORD cchLogo; // IN - Specifies the size of the buffer pointed to by pszIconFile // Ignored if dwReadWrite is FCS_READ } SHFOLDERCUSTOMSETTINGSA, *LPSHFOLDERCUSTOMSETTINGSA; // Used by SHGetSetFolderCustomSettingsW 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 } SHFOLDERCUSTOMSETTINGSW, *LPSHFOLDERCUSTOMSETTINGSW; #include /* 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 SHGetSetFolderCustomSettingsA(LPSHFOLDERCUSTOMSETTINGSA pfcs, LPCSTR pszPath, DWORD dwReadWrite); SHSTDAPI SHGetSetFolderCustomSettingsW(LPSHFOLDERCUSTOMSETTINGSW pfcs, LPCWSTR pszPath, DWORD dwReadWrite); #ifdef UNICODE #define SHFOLDERCUSTOMSETTINGS SHFOLDERCUSTOMSETTINGSW #define SHGetSetFolderCustomSettings SHGetSetFolderCustomSettingsW #define LPSHFOLDERCUSTOMSETTINGS LPSHFOLDERCUSTOMSETTINGSW #else #define SHFOLDERCUSTOMSETTINGS SHFOLDERCUSTOMSETTINGSA #define SHGetSetFolderCustomSettings SHGetSetFolderCustomSettingsA #define LPSHFOLDERCUSTOMSETTINGS LPSHFOLDERCUSTOMSETTINGSA #endif #endif // _WIN32_IE >= 0x0500 ;begin_internal // above was doc'ed for DOJ compliance ;end_internal //------------------------------------------------------------------------- // // SHBrowseForFolder API // // //------------------------------------------------------------------------- typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData); #include typedef struct _browseinfoA { HWND hwndOwner; LPCITEMIDLIST pidlRoot; LPSTR pszDisplayName; // Return display name of item selected. // pszTitle can be a resource, but the hinst is assumed to be shell32.dll ;Internal 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. // lpszTitle can be a resource, but the hinst is assumed to be shell32.dll ;Internal 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 /* 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 0x0001 // For finding a folder to start document searching #define BIF_DONTGOBELOWDOMAIN 0x0002 // For starting the Find Computer #define BIF_STATUSTEXT 0x0004 // 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 0x0008 #define BIF_EDITBOX 0x0010 // Add an editbox to the dialog #define BIF_VALIDATE 0x0020 // insist on valid result (or CANCEL) #define BIF_NEWDIALOGSTYLE 0x0040 // 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 0x0080 // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI) #define BIF_UAHINT 0x0100 // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX #define BIF_NONEWFOLDERBUTTON 0x0200 // Do not add the "New Folder" button to the dialog. Only applicable with BIF_NEWDIALOGSTYLE. #define BIF_NOTRANSLATETARGETS 0x0400 // don't traverse target as shortcut #define BIF_BROWSEFORCOMPUTER 0x1000 // Browsing for Computers. #define BIF_BROWSEFORPRINTER 0x2000 // Browsing for Printers #define BIF_BROWSEINCLUDEFILES 0x4000 // Browsing for Everything #define BIF_SHAREABLE 0x8000 // sharable resources displayed (remote shares, requires BIF_USENEWUI) // 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_(LPITEMIDLIST) SHBrowseForFolderA(LPBROWSEINFOA lpbi); SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderW(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 // // 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. // //------------------------------------------------------------------------- SHSTDAPI SHLoadInProc(REFCLSID rclsid); #if _WIN32_IE >= 0x0600 //------------------------------------------------------------------------- // // SHEnableServiceObject // // Like SHLoadInProc, but gives control over the object's lifetime // via fEnable parameter. TRUE tells the shell to create the object // and hold onto it, FALSE tells the shell to look for the previously // created instance of the object and release it. // //------------------------------------------------------------------------- SHSTDAPI SHEnableServiceObject(REFCLSID rclsid, BOOL fEnable); #endif ;begin_internal //------------------------------------------------------------------------- // // Shell Service Object // //------------------------------------------------------------------------- // Cmds for CGID_ShellServiceObject enum { SSOCMDID_OPEN = 2, SSOCMDID_CLOSE = 3, }; ;end_internal //------------------------------------------------------------------------- // // Internet Shortcut Object // //------------------------------------------------------------------------- // Cmds for CGID_ShortCut enum { ISHCUTCMDID_DOWNLOADICON = 0, ISHCUTCMDID_INTSHORTCUTCREATE = 1, }; #define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE ;begin_internal #define CMDID_SAVEASTHICKET 5 //------------------------------------------------------------------------- // STR_DISPLAY_UI_DURING_BINDING - IBindCtx Key //------------------------------------------------------------------------- // If displaying UI during binding is allowed, this parameter // will be in the IBindCtx so the object binding can get the // IUnknown* of the site in order to: // 1. Use the site's hwnd as the parent hwnd of any UI dialogs. // This is done via. IOleWindow::GetWindow() or IInternetSecurityMgrSite::GetWindow() // 2. While the dialog is being displayed, make the site modal // This is done via: // IOleInPlaceActiveObject::EnableModeless() // IOleInPlaceUIWindow::EnableModelessSB() // IInternetSecurityMgrSite::EnableModeless() #define STR_DISPLAY_UI_DURING_BINDING L"UI During Binding" // bindctx key, tells an FS folder to ignore the STGM_CREATE flag in ParseDisplayName. // otherwise it will always succeed, but we need to be able to force it to fail for // the cd-r drive. #define STR_DONT_FORCE_CREATE L"Don't Force Create" // bindctx key, passed to IShellFolder::ParseDisplayName(). gives netfldr extra // information it can use to route the parsing of the name we are giving it. #define STR_PARSE_NETFOLDER_INFO L"Net Parse Data" // in the property bag associated with STR_PARSE_NETFOLDER_INFO this string property // defines the WNetProvider to be used when calling WNetGetResourceInformation. #define STR_PARSE_NETFOLDER_PROVIDERNAME L"WNetProvider" ;end_internal // // 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); // SHSTDAPI SHGetDesktopFolder(IShellFolder **ppshf); // IShellFolder IBindCtx* parameters. the IUnknown for these are // accessed through IBindCtx::RegisterObjectParam/GetObjectParam // use this to provide the data needed create IDLists through // IShellFolder::ParseDisplayName(). this data applies to the last element // of the name that is parsed (c:\foo\bar.txt, data applies to bar.txt) // this makes creating these IDLists much faster that suppling the name only #define STR_FILE_SYS_BIND_DATA L"File System Bind Data" #undef INTERFACE #define INTERFACE IFileSystemBindData DECLARE_INTERFACE_(IFileSystemBindData, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFileSystemBindData methods *** STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW *pfd) PURE; STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW *pfd) PURE; }; ;begin_internal // // The IShellDetails interface was private in win95 and didnt have a _WIN32_IE guard, // so it is now in shlobj.h, along with the definition of SHELLDETAILS // ;end_internal #undef INTERFACE #define INTERFACE IShellDetails DECLARE_INTERFACE_(IShellDetails, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellDetails methods *** STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE; STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; }; ;begin_internal //------------------------------------------------------------------------- // // DELEGATEITEMID structure // // // A Delegate Item ID is a standard SHITEMID with some additional // fields defined. // //------------------------------------------------------------------------- typedef struct tagDELEGATEITEMID { WORD cbSize; // Size of entire item ID WORD wOuter; // Private data owned by the outer folder WORD cbInner; // Size of delegate's data BYTE rgb[1]; // Inner folder's data, // followed by outer folder's data. } DELEGATEITEMID; typedef const UNALIGNED DELEGATEITEMID *PCDELEGATEITEMID; typedef UNALIGNED DELEGATEITEMID *PDELEGATEITEMID; //------------------------------------------------------------------------- // // IDelegateFolder interface // // // [Member functions] // // IDelegateFolder::SetItemAlloc(pm) // This function gives the object an IMalloc interface that it // should use to alloc and free item IDs. These IDs are in the // form of DELEGATEITEMIDs. // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IDelegateFolder DECLARE_INTERFACE_(IDelegateFolder, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IDelegateFolder methods *** STDMETHOD(SetItemAlloc)(THIS_ IMalloc *pmalloc) PURE; }; #undef INTERFACE #define INTERFACE IMountedVolume DECLARE_INTERFACE_(IMountedVolume, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IMountedVolume methods *** STDMETHOD(Initialize)(THIS_ LPCWSTR pcszHostFolderPath) PURE; }; ;end_internal //------------------------------------------------------------------------- // // IObjMgr interface // // // [Member functions] // // 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_(IObjMgr, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** IObjMgr specific methods *** STDMETHOD(Append) (THIS_ IUnknown *punk) PURE; STDMETHOD(Remove) (THIS_ IUnknown *punk) PURE; }; //------------------------------------------------------------------------- // // ICurrentWorkingDirectory interface // // // [Member functions] // // 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_(ICurrentWorkingDirectory, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** ICurrentWorkingDirectory specific methods *** STDMETHOD(GetDirectory) (THIS_ LPWSTR pwzPath, DWORD cchSize) PURE; STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE; }; //------------------------------------------------------------------------- // // IACList interface // // // [Member functions] // // IObjMgr::Expand(LPCOLESTR) // 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_(IACList, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; // *** IACList specific methods *** STDMETHOD(Expand) (THIS_ LPCOLESTR pszExpand) PURE; }; //------------------------------------------------------------------------- // // IACList2 interface // // [Description] // 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 ACLO_FILESYSDIRS = 32, // enumerate only the file system dirs, UNC shares, and UNC servers. } AUTOCOMPLETELISTOPTIONS; DECLARE_INTERFACE_(IACList2, IACList) { // *** IACList2 specific methods *** STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; STDMETHOD(GetOptions)(THIS_ 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 modless, handling the user cancelling 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) #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 // 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. #undef INTERFACE #define INTERFACE IProgressDialog DECLARE_INTERFACE_(IProgressDialog, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IProgressDialog specific methods STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown * punkEnableModless, DWORD dwFlags, 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, LPCVOID pvResevered) PURE; STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID pvResevered) PURE; STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID pvResevered) PURE; }; ;begin_internal //------------------------------------------------------------------------- // This is the interface for a browser to "subclass" the main File Cabinet // window. Note that only the hwnd, message, wParam, and lParam fields of // the msg structure are used. The browser window will get a WM_NOTIFY // message with NULL ID, FCN_MESSAGE as the code, and a pointer to // FCMSG_NOTIFY as the lParam. // //------------------------------------------------------------------------- #include typedef struct tagFCMSG_NOTIFY { NMHDR hdr; MSG msg; LRESULT lResult; } FCMSG_NOTIFY; #include /* Return to byte packing */ #define FCN_MESSAGE (100) //--------------------------------------------------------------------------- // messages that can be send to the cabinet by other apps // // REVIEW: Do we really need to publish any of those? //--------------------------------------------------------------------------- #define NF_INHERITVIEW 0x0000 #define NF_LOCALVIEW 0x0001 // Change the path of an existing folder. // wParam: // 0: LPARAM is a pidl, handle the message immediately. // CSP_REPOST: LPARAM is a pidl, copy the pidl and handle the // message later. // CSP_NOEXECUTE: if this path is not a folder, fail, don't shell exec // // // lParam: LPITEMIDLIST of path. // // #define CSP_REPOST 0x0001 #define CSP_INITIATEDBYHLINKFRAME 0x0002 #define CSP_NOEXECUTE 0x0004 #define CSP_NONAVIGATE 0x0008 #define CWM_SETPATH (WM_USER + 2) // lpsv points to the Shell View extension that requested idle processing // uID is an app define identifier for the processor // returns: TRUE if there is more idle processing necessary, FALSE if all done // Note that the idle processor should do one "atomic" operation and return // as soon as possible. typedef BOOL (CALLBACK *FCIDLEPROC)(void *lpsv, UINT uID); // Inform the File Cabinet that you want idle messages. // This should ONLY be used by File Cabinet extensions. // wParam: app define UINT (passed to FCIDLEPROC). // lParam: pointer to an FCIDLEPROC. // return: TRUE if successful; FALSE otherwise // #define CWM_WANTIDLE (WM_USER + 3) // get or set the FOLDERSETTINGS for a view // wParam: BOOL TRUE -> set to view info buffer, FALSE -> get view info buffer // lParam: LPFOLDERSETTINGS buffer to get or set view info // #define CWM_GETSETCURRENTINFO (WM_USER + 4) #define FileCabinet_GetSetCurrentInfo(_hwnd, _bSet, _lpfs) \ SendMessage(_hwnd, CWM_GETSETCURRENTINFO, (WPARAM)(_bSet), (LPARAM)(LPFOLDERSETTINGS)_lpfs) // selects the specified item in the current view // wParam: SVSI_* flags // lParam: LPCITEMIDLIST of the item ID, NULL -> all items // #define CWM_SELECTITEM (WM_USER + 5) #define FileCabinet_SelectItem(_hwnd, _sel, _item) \ SendMessage(_hwnd, CWM_SELECTITEM, _sel, (LPARAM)(LPCITEMIDLIST)(_item)) // selects the specified path in the current view // wParam: SVSI_* flags // lParam: LPCSTR of the display name // #define CWM_SELECTPATH (WM_USER + 6) #define FileCabinet_SelectPath(_hwnd, _sel, _path) \ SendMessage(_hwnd, CWM_SELECTPATH, _sel, (LPARAM)(LPCSTR)(_path)) // Get the IShellBrowser object associated with an hwndMain #define CWM_GETISHELLBROWSER (WM_USER + 7) #define FileCabinet_GetIShellBrowser(_hwnd) \ (IShellBrowser*)SendMessage(_hwnd, CWM_GETISHELLBROWSER, 0, 0L) // // two pidls can have the same path, so we need a compare pidl message #define CWM_COMPAREPIDL (WM_USER + 9) // // sent when the global state changes #define CWM_GLOBALSTATECHANGE (WM_USER + 10) #define CWMF_GLOBALSTATE 0x0000 #define CWMF_SECURITY 0x0001 // sent to the desktop from a second instance #define CWM_COMMANDLINE (WM_USER + 11) // global clone your current pidl #define CWM_CLONEPIDL (WM_USER + 12) // See if the root of the instance is as specified #define CWM_COMPAREROOT (WM_USER + 13) // Tell desktop our root #define CWM_SPECIFYCOMPARE (WM_USER + 14) // See if the root of the instance matches a hwnd #define CWM_PERFORMCOMPARE (WM_USER + 15) // Forward SHChangeNotify events #define CWM_FSNOTIFY (WM_USER + 16) // Forward SHChangeRegistration events #define CWM_CHANGEREGISTRATION (WM_USER + 17) // For AddToRecentDocs processing by desktop #define CWM_ADDTORECENT (WM_USER + 18) // For SHWaitForFile processing by desktopop #define CWM_WAITOP (WM_USER + 19) // Notify for changes to the fav's folder. #define CWM_FAV_CHANGE (WM_USER + 20) #define CWM_SHOWDRAGIMAGE (WM_USER + 21) #define CWM_SHOWFOLDEROPT (WM_USER + 22) #define CWMW_FOLDEROPTIONS 0 // wParam for CWM_SHOWFOLDEROPT #define CWMW_TASKBAROPTIONS 1 // wParam for CWM_SHOWFOLDEROPT #define CWM_FSNOTIFYSUSPENDRESUME (WM_USER + 23) #define CWM_CREATELOCALSERVER (WM_USER + 24) #define CWM_GETSCNWINDOW (WM_USER + 25) #define CWM_TASKBARWAKEUP (WM_USER + 26) // Used to restore tray thread to normal priority in extremely stressed machines #define CWM_STARTNETCRAWLER (WM_USER + 27) #define CWM_RESERVEDFORCOMDLG_FIRST (WM_USER + 100) #define CWM_RESERVEDFORCOMDLG_LAST (WM_USER + 199) #define CWM_RESERVEDFORWEBBROWSER_FIRST (WM_USER + 200) #define CWM_RESERVEDFORWEBBROWSER_LAST (WM_USER + 299) ;end_internal //========================================================================== // IInputObjectSite/IInputObject interfaces // // These interfaces allow us (or ISVs) to install/update external Internet // Toolbar for IE and the shell. The frame will simply get the CLSID from // registry (to be defined) and CoCreateInstance it. // //========================================================================== //------------------------------------------------------------------------- // // IInputObjectSite interface // // A site implements this interface so the object can communicate // focus change to it. // // [Member functions] // // IInputObjectSite::OnFocusChangeIS(punkObj, fSetFocus) // Object (punkObj) is getting or losing the focus. // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IInputObjectSite DECLARE_INTERFACE_(IInputObjectSite, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IInputObjectSite specific methods *** STDMETHOD(OnFocusChangeIS)(THIS_ IUnknown* punkObj, BOOL fSetFocus) PURE; }; //------------------------------------------------------------------------- // // IInputObject interface // // An object implements this interface so the site can communicate // activation and accelerator events to it. // // [Member functions] // // IInputObject::UIActivateIO(fActivate, lpMsg) // Activates or deactivates the object. lpMsg may be NULL. Returns // S_OK if the activation succeeded. // // IInputObject::HasFocusIO() // Returns S_OK if the object has the focus, S_FALSE if not. // // IInputObject::TranslateAcceleratorIO(lpMsg) // Allow the object to process the message. Returns S_OK if the // message was processed (eaten). // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IInputObject DECLARE_INTERFACE_(IInputObject, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IInputObject specific methods *** STDMETHOD(UIActivateIO)(THIS_ BOOL fActivate, LPMSG lpMsg) PURE; STDMETHOD(HasFocusIO)(THIS) PURE; STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE; }; //========================================================================== // IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces // 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_(IDockingWindowSite, IOleWindow) { // *** 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 // // ;BUGBUG (scotth): fill this in ;Internal // // [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 ;begin_internal #define STFRF_NORMAL DWFRF_NORMAL #define STFRF_DELETECONFIGDATA DWFRF_DELETECONFIGDATA ;end_internal // flags for AddToolbar #define DWFAF_HIDDEN 0x0001 // add hidden #undef INTERFACE #define INTERFACE IDockingWindowFrame DECLARE_INTERFACE_(IDockingWindowFrame, IOleWindow) { // *** 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; }; ;begin_internal #undef INTERFACE #define INTERFACE IMultiMonitorDockingSite DECLARE_INTERFACE_(IMultiMonitorDockingSite, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IMultiMonitorDockingSite methods *** STDMETHOD(GetMonitor) (THIS_ IUnknown* punkSrc, HMONITOR * phMon) PURE; STDMETHOD(RequestMonitor) (THIS_ IUnknown* punkSrc, HMONITOR * phMon) PURE; STDMETHOD(SetMonitor) (THIS_ IUnknown* punkSrc, HMONITOR hMonNew, HMONITOR *phMonOld) PURE; }; ;end_internal #if (_WIN32_IE >= 0x0400) //------------------------------------------------------------------------- // // IRunnableTask interface // // This is a free threaded interface used for putting items on a background // scheduler for execution within the view. It allows a scheduler to start and // stop tasks on as many worker threads as it deems necessary. // // Run(), Kill() and Suspend() may be called from different threads. // // [Member functions] // // IRunnableTask::Run(void) // Initiate the task to run. This should return E_PENDING if the task // has been suspended. // // IRunnableTask::Kill(void) // // IRunnableTask::Suspend(void) // // IRunnableTask::Resume(void) // // IRunnableTask::IsRunning(void) // //------------------------------------------------------------------------- // Convenient state values #define IRTIR_TASK_NOT_RUNNING 0 #define IRTIR_TASK_RUNNING 1 #define IRTIR_TASK_SUSPENDED 2 #define IRTIR_TASK_PENDING 3 #define IRTIR_TASK_FINISHED 4 #undef INTERFACE #define INTERFACE IRunnableTask DECLARE_INTERFACE_( IRunnableTask, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; // *** IRunnableTask methods *** STDMETHOD (Run)(THIS) PURE; STDMETHOD (Kill)(THIS_ BOOL fWait ) PURE; STDMETHOD (Suspend)(THIS) PURE; STDMETHOD (Resume)(THIS) PURE; STDMETHOD_(ULONG, IsRunning)(THIS) PURE; }; typedef IRunnableTask * LPRUNNABLETASK; #endif #if (_WIN32_IE >= 0x0400) #define TASKOWNERID GUID #define REFTASKOWNERID REFGUID // ---IShellTaskScheduler // An interface for interacting with and controlling a task scheduler. This // interface does not need to be free-threaded unless the items in the queue // interact with the scheduler as well as the main execution thread on which the // task scheduler was created. // IShellTaskScheduler::AddTask() // Adds Tasks to the scheduler's background queue. The TASKOWNERID allow particular types // of tasks to be grouped so that they can be counted or removed. The lParam allows the task // to be associated with a particular item (for example an item in a listview). // IShellTaskScheduler::RemoveTasks() // Removes tasks from the scheduler's queue. These can be sepcified in terms of their TASKOWNERID // or their LPARAM, or both, or neither (TOID_NULL && ITSAT_DEFAULT_LPARAM results in all tasks being // removed). If a task that matches is currently running and ITaskScheduler::Status() has been // passeed ITSSFLAG_KILL_ON_DESTROY then the scheduler will attempt to kill the current task. The // fWaitIfRunning parameter is then passed to IRunnableTask::Kill(). // IShellTaskScheduler::CountTasks() // Counts the tasks in the queue depending upon the TASKOWNERID and the LPARAM passed. (TOID_NULL and // ITSAT_DEFAULT_LPARAM will count all tasks in the queue) // IShellTaskScheduler::Status() // This sets the ReleaseStatus for the current task and the background thread timeout. When // ITaskScheduler::RemoveTasks() is called and there is a task currently running that matches // ITSSFLAG_COMPLETE_ON_DESTROY will cause TRUE to be passed to the task's IRunnableTask::Kill(). // The dwThreadTimeout parameter if not set to the default will cause the background thread to // die if no new tasks have been added to the queue in the timeout period. The Thread will be // recreated when the next new task is added. //////////////////////// // Status() flags, // wait for the current task to complete before deleting the scheduler #define ITSSFLAG_COMPLETE_ON_DESTROY 0x0000 // kill the current task (if there is one) when the task scheduler is deleted #define ITSSFLAG_KILL_ON_DESTROY 0x0001 #define ITSSFLAG_SUPPORTS_TERMINATE 0x0002 #define ITSSFLAG_FLAGS_MASK 0x0003 // set the timeout for killing the thread when the object is terminated. // this timeout can be used to stop the object from blocking the system // indefinitely. #define ITSSFLAG_THREAD_TERMINATE_TIMEOUT 0x0010 // set the timeout for threads that are idle in the thread pool #define ITSSFLAG_THREAD_POOL_TIMEOUT 0x0020 // The default timeout passed to release Status to determine how long the thread // can be asleep before the thread is expired #define ITSS_THREAD_DESTROY_DEFAULT_TIMEOUT (60*1000) // default, we won't kill it... #define ITSS_THREAD_TERMINATE_TIMEOUT (INFINITE) // there is no change to the thread timeout #define ITSS_THREAD_TIMEOUT_NO_CHANGE (INFINITE - 1) // the LPARAM allows task to be associated with items thus all tasks owned by a // particular item can be accessed by passing a non default value for this parameter #define ITSAT_DEFAULT_LPARAM 0xffffffff // Task priorities // --------------- // This depends on the cooperation of tasks currently under execution. New tasks will // be inserted in the queue in priority order. If a task of a low priority is currently // under execution when a higher priority task is added, the scheduler will attempt // to suspend the task currently under execution. It will be resumed when the other tasks // have been completed. #define ITSAT_DEFAULT_PRIORITY 0x10000000 #define ITSAT_MAX_PRIORITY 0x7fffffff #define ITSAT_MIN_PRIORITY 0x00000000 #define TOID_NULL CLSID_NULL #undef INTERFACE #define INTERFACE IShellTaskScheduler DECLARE_INTERFACE_( IShellTaskScheduler, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; // *** IShellTaskScheduler methods *** STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask, REFTASKOWNERID rtoid, DWORD_PTR lParam, DWORD dwPriority ) PURE; STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid, DWORD_PTR lParam, BOOL fWaitIfRunning ) PURE; STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE; STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE; }; typedef IShellTaskScheduler * LPSHELLTASKSCHEDULER; #if (_WIN32_IE >= 0x0501) #define ITSSFLAG_TASK_PLACEINFRONT 0x00000001 #define ITSSFLAG_TASK_PLACEINBACK 0x00000002 #undef INTERFACE #define INTERFACE IShellTaskScheduler2 DECLARE_INTERFACE_( IShellTaskScheduler2, IShellTaskScheduler ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; // *** IShellTaskScheduler methods *** STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask, REFTASKOWNERID rtoid, DWORD_PTR lParam, DWORD dwPriority ) PURE; STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid, DWORD_PTR lParam, BOOL fWaitIfRunning ) PURE; STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE; STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE; // *** IShellTaskScheduler2 methods *** STDMETHOD (AddTask2)(THIS_ IRunnableTask * pTask, REFTASKOWNERID rtoid, DWORD_PTR lParam, DWORD dwPriority, DWORD grfFlags ) PURE; STDMETHOD (MoveTask)(THIS_ REFTASKOWNERID rtoid, DWORD_PTR lParam, DWORD dwPriority, DWORD grfFlags ) PURE; }; #endif // (_WIN32_IE >= 0x0501) #endif // (_WIN32_IE >= 0x0400) #if (_WIN32_IE >= 0x0400) /* ***************** IThumbnailCapture * CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specified * size as an hbitmap */ #undef INTERFACE #define INTERFACE IThumbnailCapture DECLARE_INTERFACE_ ( IThumbnailCapture, IUnknown ) { // *** IThumbnailCapture methods *** STDMETHOD (CaptureThumbnail) ( THIS_ const SIZE * pMaxSize, IUnknown * pHTMLDoc2, HBITMAP * phbmThumbnail ) PURE; }; typedef IThumbnailCapture * LPTHUMBNAILCAPTURE; #endif ;begin_internal #if (_WIN32_IE >= 0x0400) // Interface used to scale and sharpen images... // right now, always pass the palette from SHCreateShellPalette on a 256 colour machine... #undef INTERFACE #define INTERFACE IScaleAndSharpenImage2 DECLARE_INTERFACE_ (IScaleAndSharpenImage2, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** IScaleAndSharpenImage methods *** STDMETHOD( ScaleSharpen2 ) ( THIS_ BITMAPINFO * pbi, void * pBits, HBITMAP * phBmpThumbnail, const SIZE * prgSize, DWORD dwRecClrDepth, HPALETTE hpal, UINT uiSharpPct, BOOL fOrigSize) PURE; }; // IImageCache // Interface for controlling and accessing an imagecache of bitmaps for icons.. // flags for the dwMask member of IMAGECACHEINFO #define ICIFLAG_LARGE 0x0001 #define ICIFLAG_SMALL 0x0002 #define ICIFLAG_BITMAP 0x0004 #define ICIFLAG_ICON 0x0008 #define ICIFLAG_INDEX 0x0010 #define ICIFLAG_NAME 0x0020 #define ICIFLAG_FLAGS 0x0040 #define ICIFLAG_NOUSAGE 0x0080 #define ICIFLAG_DATESTAMP 0x0100 #define ICIFLAG_MIRROR 0x2000 #if (_WIN32_IE >= 0x0501) #define ICIFLAG_SYSTEM 0x4000 #endif typedef struct _tagImageCacheInfo { DWORD cbSize; DWORD dwMask; union { HBITMAP hBitmapLarge; HICON hIconLarge; }; HBITMAP hMaskLarge; union { HBITMAP hBitmapSmall; HICON hIconSmall; }; HBITMAP hMaskSmall; LPCWSTR pszName; int iIndex; DWORD dwFlags; #if (_WIN32_IE >= 0x0500) FILETIME ftDateStamp; #endif } IMAGECACHEINFO; typedef IMAGECACHEINFO * LPIMAGECACHEINFO; typedef const IMAGECACHEINFO * LPCIMAGECACHEINFO; #define ICIIFLAG_LARGE 0x0001 #define ICIIFLAG_SMALL 0x0002 #if (_WIN32_IE >= 0x0501) #define ICIIFLAG_SORTBYUSED 0x0004 #endif typedef struct _tagImageCacheInitInfo { DWORD cbSize; DWORD dwMask; HIMAGELIST himlLarge; HIMAGELIST himlSmall; SIZEL rgSizeLarge; SIZEL rgSizeSmall; DWORD dwFlags; int iStart; int iGrow; }IMAGECACHEINITINFO; typedef IMAGECACHEINITINFO * LPIMAGECACHEINITINFO; #undef INTERFACE #define INTERFACE IImageCache DECLARE_INTERFACE_ ( IImageCache, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** IImageCache methods *** STDMETHOD ( AddImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FindImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FreeImage ) ( THIS_ UINT iImageIndex ) PURE; STDMETHOD ( Flush )( THIS_ BOOL fRelease ) PURE; STDMETHOD ( ChangeImageInfo ) ( THIS_ UINT IImageIndex, LPCIMAGECACHEINFO pInfo ) PURE; STDMETHOD ( GetCacheSize ) ( THIS_ UINT * puSize ) PURE; STDMETHOD ( GetUsage ) ( THIS_ UINT uIndex, UINT * puUsage ) PURE; STDMETHOD( GetImageList ) ( THIS_ LPIMAGECACHEINITINFO pInfo ) PURE; }; typedef IImageCache * LPIMAGECACHE; #if (_WIN32_IE >= 0x0500) // IImageCache 2 #undef INTERFACE #define INTERFACE IImageCache2 DECLARE_INTERFACE_ ( IImageCache2, IImageCache ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** IImageCache methods *** STDMETHOD ( AddImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FindImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FreeImage ) ( THIS_ UINT iImageIndex ) PURE; STDMETHOD ( Flush )( THIS_ BOOL fRelease ) PURE; STDMETHOD ( ChangeImageInfo ) ( THIS_ UINT IImageIndex, LPCIMAGECACHEINFO pInfo ) PURE; STDMETHOD ( GetCacheSize ) ( THIS_ UINT * puSize ) PURE; STDMETHOD ( GetUsage ) ( THIS_ UINT uIndex, UINT * puUsage ) PURE; STDMETHOD( GetImageList ) ( THIS_ LPIMAGECACHEINITINFO pInfo ) PURE; // IImageCache2 methods STDMETHOD ( DeleteImage ) ( THIS_ UINT iImageIndex ) PURE; STDMETHOD ( GetImageInfo ) (THIS_ UINT iImageIndex, LPIMAGECACHEINFO pInfo ) PURE; }; #endif #if (_WIN32_IE >= 0x0501) // These are values returned from IImageCache::GetUsage which correspond // to the state of the cache entry #define ICD_USAGE_NOUSAGE (UINT) -1 #define ICD_USAGE_DELETED (UINT) -2 #define ICD_USAGE_SYSTEM (UINT) -3 // IImageCache 3 #undef INTERFACE #define INTERFACE IImageCache3 DECLARE_INTERFACE_ ( IImageCache3, IImageCache2 ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** IImageCache methods *** STDMETHOD ( AddImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FindImage ) ( THIS_ LPCIMAGECACHEINFO pInfo, UINT * puIndex ) PURE; STDMETHOD ( FreeImage ) ( THIS_ UINT iImageIndex ) PURE; STDMETHOD ( Flush )( THIS_ BOOL fRelease ) PURE; STDMETHOD ( ChangeImageInfo ) ( THIS_ UINT IImageIndex, LPCIMAGECACHEINFO pInfo ) PURE; STDMETHOD ( GetCacheSize ) ( THIS_ UINT * puSize ) PURE; STDMETHOD ( GetUsage ) ( THIS_ UINT uIndex, UINT * puUsage ) PURE; STDMETHOD ( GetImageList ) ( THIS_ LPIMAGECACHEINITINFO pInfo ) PURE; // *** IImageCache2 methods *** STDMETHOD ( DeleteImage ) ( THIS_ UINT iImageIndex ) PURE; STDMETHOD ( GetImageInfo ) (THIS_ UINT iImageIndex, LPIMAGECACHEINFO pInfo ) PURE; // *** IImageCache3 methods *** STDMETHOD ( GetImageIndexFromCacheIndex )( UINT iCacheIndex, UINT * puImageIndex ) PURE; }; #endif ;end_internal #if ( _WIN32_IE >= 0x0500 ) /////////////////////////////////////////////////////////////////////// // interface for #include typedef struct _EnumImageStoreDATAtag { WCHAR szPath[MAX_PATH]; FILETIME ftTimeStamp; } ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA; #include /* Return to byte packing */ #undef INTERFACE #define INTERFACE IEnumShellImageStore DECLARE_INTERFACE_( IEnumShellImageStore, IUnknown ) { 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_( IShellImageStore, IUnknown ) { 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 ;begin_internal // // Interface for interacting with the IE splash screen // #undef INTERFACE #define INTERFACE ISplashScreen DECLARE_INTERFACE_( ISplashScreen, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** ISplashScreen methods *** STDMETHOD ( Show ) ( THIS_ HINSTANCE hinst, UINT idResHi, UINT idResLow, HWND * phwnd ) PURE; STDMETHOD ( Dismiss ) (THIS) PURE; }; typedef ISplashScreen * LPSPLASHSCREEN; ;begin_internal // // Interface for Multiple Monitor Configurations // #define MD_PRIMARY 0x00000001 #define MD_ATTACHED 0x00000002 #include typedef struct _MonitorData { DWORD dwSize; DWORD dwFlags; DWORD dwStatus; RECT rcPos; } MonitorData, * LPMONITORDATA; #include /* Return to byte packing */ #undef INTERFACE #define INTERFACE IMultiMonConfig DECLARE_INTERFACE_( IMultiMonConfig, IUnknown ) { // *** IUnknown methods *** STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // *** IMultiMonConfig methods *** STDMETHOD ( Initialize ) ( THIS_ HWND hwndHost, WNDPROC WndProc, DWORD dwReserved) PURE; STDMETHOD ( GetNumberOfMonitors ) (THIS_ int * pCMon, DWORD dwReserved) PURE; STDMETHOD ( GetMonitorData) (THIS_ int iMonitor, MonitorData * pmd, DWORD dwReserved) PURE; STDMETHOD ( Paint) (THIS_ int iMonitor, DWORD dwReserved) PURE; }; typedef IMultiMonConfig * LPMULTIMONCONFIG; ;end_internal #endif // _WIN32_IE > 0x0400 //// IRestrict // For the pdwRestrictionResult out parameter in IRestrict::IsRestricted() for // all pguidIDs. typedef enum { RR_ALLOW = 1, RR_DISALLOW, RR_NOCHANGE, } RESTRICTION_RESULT; // IRestrict::IsRestricted() dwRestrictAction parameter values for // the RID_RDeskBars pguidID. typedef enum { RA_DRAG = 1, RA_DROP, RA_ADD, RA_CLOSE, RA_MOVE, } RESTRICT_ACTIONS; #undef INTERFACE #define INTERFACE IRestrict DECLARE_INTERFACE_(IRestrict, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IRestrict Methods *** STDMETHOD(IsRestricted) (THIS_ const GUID * pguidID, DWORD dwRestrictAction, VARIANT * pvarArgs, OUT DWORD * pdwRestrictionResult) PURE; }; //// IAddressBand #define OLECMD_REFRESH_TOPMOST 0x00000000 #define OLECMD_REFRESH_ENTIRELIST 0x00000001 #undef INTERFACE #define INTERFACE IAddressBand DECLARE_INTERFACE_(IAddressBand, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IAddressBand Methods *** STDMETHOD(FileSysChange) (THIS_ DWORD dwEvent, LPCITEMIDLIST * ppidl1) PURE; STDMETHOD(Refresh) (THIS_ VARIANT * pvarType) PURE; }; #undef INTERFACE #define INTERFACE IAddressEditBox // Init Flags #define AEB_INIT_DEFAULT 0x00000000 #define AEB_INIT_NOSHELL 0x00000001 #define AEB_INIT_NOWEB 0x00000002 #define AEB_INIT_NOFILE 0x00000004 #define AEB_INIT_AUTOEXEC 0x00000008 // Set if you want the item Navigated/ShellExeced when ENTER occurs. #define AEB_INIT_SUBCLASS 0x00000010 // If set parent needs to pass HWND events thru IWinEventHandler::OnWinEvent() #define AEB_INIT_NOASYNC 0x00000020 // Set if you don't want/support async navigation (from a modal dlg for instance) // Parse Flags for IAddressEditBox::ParseNow() #define SHURL_FLAGS_NONE 0x00000000 #define SHURL_FLAGS_NOUI 0x00000001 // Don't display any UI. #define SHURL_FLAGS_NOSNS 0x00000002 // Ignore SHELL URLs. (FILE and Internet URLs still work) #define SHURL_FLAGS_NOWEB 0x00000004 // Ignore WEB URLs. (Don't successfully parse if not found in shell name space) #define SHURL_FLAGS_NOPATHSEARCH 0x00000008 // don't search on dos paths or app path #define SHURL_FLAGS_AUTOCORRECT 0x00000010 // Try to autocorrect WEB URLs // Exec Flags for IAddressEditBox::Execute() #define SHURL_EXECFLAGS_NONE 0x00000000 #define SHURL_EXECFLAGS_SEPVDM 0x00000001 // If ShellExec(), set SEE_MASK_FLAG_SEPVDM fMask. #define SHURL_EXECFLAGS_DONTFORCEIE 0x00000002 // If some browser other than IE is associated with HTML files, allow them to launch. DECLARE_INTERFACE_(IAddressEditBox, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IAddressEditBox Methods *** STDMETHOD(Init) (THIS_ HWND hwnd, HWND hwndEditBox, DWORD dwFlags, IUnknown * punkParent) PURE; STDMETHOD(SetCurrentDir) (THIS_ LPCOLESTR pwzDir) PURE; STDMETHOD(ParseNow) (THIS_ DWORD dwParseFlags) PURE; STDMETHOD(Execute) (THIS_ DWORD dwExecFlags) PURE; STDMETHOD(Save) (THIS_ DWORD dwReserved) PURE; }; ;begin_both #if (_WIN32_IE >= 0x0400) ;end_both ;end_internal //// 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_MASK_ALL 0x0000003F // ;Internal #define ISFB_MASK_INVALID (~(ISFB_MASK_ALL)) // ;Internal #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_NOTITLE 0x00000008 // obsolete! (use cbs::SetBandState) ;Internal #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 ISFB_STATE_ALL 0x000001FF // ;Internal #define ISFBVIEWMODE_SMALLICONS 0x0001 #define ISFBVIEWMODE_LARGEICONS 0x0002 #define ISFBVIEWMODE_LOGOS 0x0003 #include 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] LPITEMIDLIST pidl; // [out] } BANDINFOSFB, *PBANDINFOSFB; #include /* Return to byte packing */ #undef INTERFACE #define INTERFACE IShellFolderBand DECLARE_INTERFACE_(IShellFolderBand, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolderBand Methods *** STDMETHOD(InitializeSFB)(THIS_ IShellFolder *psf, LPCITEMIDLIST pidl) PURE; STDMETHOD(SetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; STDMETHOD(GetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; }; // Command Target IDs enum { SFBID_PIDLCHANGED, }; ;begin_internal //------------------------------------------------------------------------- // // IWinEventHandler interface // // An object that wants to send messages to another object (typically // a sub-object) QI's for the sub-object's IWinEventHandler interface. // Once the object determines the hwnd is owned by the sub-object (via // IsWindowOwner), the object calls OnWinEvent for send the message. // // // [Member functions] // // IWinEventHandler::IsWindowOwner(hwnd) // Returns S_OK if the hwnd is owned by the object, S_FALSE if not. // // IWinEventHandler::OnWinEvent(hwnd, dwMsg, wParam, lParam, plRet) // Sends a message to the object. The Win32 return value (i.e., the // value returned by DefWindowProc) is returned in *plRet. Return // S_OK if the message is handled, otherwise S_FALSE. // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IWinEventHandler DECLARE_INTERFACE_(IWinEventHandler, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IWinEventHandler Methods *** STDMETHOD(OnWinEvent) (THIS_ HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres) PURE; STDMETHOD(IsWindowOwner) (THIS_ HWND hwnd) PURE; }; ;end_internal //// IDeskBarClient #undef INTERFACE #define INTERFACE IDeskBarClient DECLARE_INTERFACE_(IDeskBarClient, IOleWindow) { // *** 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; // *** IDeskBarClient methods *** STDMETHOD(SetDeskBarSite) (THIS_ IUnknown* punkSite) PURE; STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE; STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE; STDMETHOD(GetSize) (THIS_ DWORD dwWhich, 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) }; ;begin_both #endif // _WIN32_IE > 0x0400 ;end_both ;begin_internal //========================================================================== // IExplorerToolbar interfaces // // This is an interface to the shell toolbar which allows shell views // to add buttons and process. // See http://ohserv/users/satona/toolbar_extension.htm for spec. // //========================================================================== // Bitmap types #define BITMAP_NORMAL 0x1 #define BITMAP_HOT 0x2 #define BITMAP_DISABLED 0x3 // Band Visibility Flags #define VBF_TOOLS 0x00000001 #define VBF_ADDRESS 0x00000002 #define VBF_LINKS 0x00000004 #define VBF_BRAND 0x00000008 #define VBF_MENU 0x00000010 #define VBF_ONELINETEXT 0x00000020 #define VBF_TWOLINESTEXT 0x00000040 #define VBF_NOCUSTOMIZE 0x00000080 #define VBF_EXTERNALBANDS 0xFFFF0000 #define VBF_VALID (VBF_TOOLS | VBF_ADDRESS | VBF_LINKS | VBF_BRAND | VBF_MENU | VBF_EXTERNALBANDS) #undef INTERFACE #define INTERFACE IExplorerToolbar typedef enum { ETCMDID_GETBUTTONS = 0x0001, ETCMDID_NEWCOMMANDTARGET = 0x0002, // sent to the previous command target when a new one is coming in #if (_WIN32_IE >= 0x500) ETCMDID_RELOADBUTTONS = 0x0003, // command target needs to call AddButtons again #endif } ENUM_ETCMDID; DECLARE_INTERFACE_(IExplorerToolbar, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IExplorerToolbar methods *** STDMETHOD(SetCommandTarget) (THIS_ IUnknown* punkCmdTarget, const GUID* pguidCmdGrp, DWORD dwFlags) PURE; STDMETHOD(AddStdBrowserButtons) (THIS) PURE; // Wrap of the TB_* messages the messages that are implmented // are just the ones to add delete and modify the buttons, and not // the ones to manipulate the toolbar. STDMETHOD(AddButtons) (THIS_ const GUID * pguidButtonGroup, UINT nButtons, const TBBUTTON * lpButtons) PURE; STDMETHOD(AddString) (THIS_ const GUID * pguidButtonGroup, HINSTANCE hInst, UINT_PTR uiResID, LRESULT * pOffset) PURE; STDMETHOD(GetButton) (THIS_ const GUID * pguidButtonGroup, UINT uiCommand, LPTBBUTTON lpButton) PURE; STDMETHOD(GetState) (THIS_ const GUID * pguidButtonGroup, UINT uiCommand, UINT * pfState) PURE; STDMETHOD(SetState) (THIS_ const GUID * pguidButtonGroup, UINT uiCommand, UINT fState) PURE; STDMETHOD(AddBitmap) (THIS_ const GUID * pguidButtonGroup, UINT uiBMPType, UINT uiCount, TBADDBITMAP * ptb, LRESULT * pOffset, COLORREF rgbMask) PURE; STDMETHOD(GetBitmapSize) (THIS_ UINT * uiID) PURE; STDMETHOD(SendToolbarMsg) (THIS_ const GUID * pguidButtonGroup, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT * plRes) PURE; STDMETHOD(SetImageList) (THIS_ const GUID* pguidCmdGroup, HIMAGELIST himlNormal, HIMAGELIST himlHot, HIMAGELIST himlDisabled) PURE; STDMETHOD(ModifyButton) (THIS_ const GUID * pguidButtonGroup, UINT uiCommand, LPTBBUTTON lpButton) PURE; }; //========================================================================== // DefView supports a private service id for extended views. // DefView's IOleCommandTarget supports the below command group and ids too. //========================================================================== // SID_DefView and CGID_DefView are defined in shlguid.w // #define DVCMDID_GETTHISDIRPATH 1 // pvaOut = path to this directory (if in filesystem) #define DVCMDID_GETTHISDIRNAME 2 // pvaOut = friendly name of this directory #define DVCMDID_GETTEMPLATEDIRNAME 3 // pvaOut = webview template (.htt) dir ;end_internal #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. ;begin_internal #define IS_ADJUSTLISTVIEW 0x80000000 #define IS_INTERNALDUMMYBIT 0x40000000 #define IS_VALIDINTERNALBITS (IS_ADJUSTLISTVIEW | IS_INTERNALDUMMYBIT) ;end_internal //////////////////////////////////////////// // 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::GetWallpaperOptions() // IActiveDesktop::SetWallpaperOptions() #define WPSTYLE_CENTER 0 #define WPSTYLE_TILE 1 #define WPSTYLE_STRETCH 2 #define WPSTYLE_MAX 3 //////////////////////////////////////////// // 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_( IActiveDesktop, IUnknown ) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // IActiveDesktop methods STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE; STDMETHOD (GetWallpaper)(THIS_ LPWSTR pwszWallpaper, UINT cchWallpaper, DWORD dwReserved) PURE; STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE; STDMETHOD (GetWallpaperOptions)(THIS_ LPWALLPAPEROPT pwpo, DWORD dwReserved) PURE; STDMETHOD (SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT pwpo, DWORD dwReserved) PURE; STDMETHOD (GetPattern)(THIS_ LPWSTR pwszPattern, UINT cchPattern, DWORD dwReserved) PURE; STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE; STDMETHOD (GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT pco, DWORD dwReserved) PURE; STDMETHOD (SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT pco, DWORD dwReserved) PURE; STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, LPCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (ModifyDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwFlags) PURE; STDMETHOD (RemoveDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (GetDesktopItemCount)(THIS_ LPINT lpiCount, DWORD dwReserved) PURE; STDMETHOD (GetDesktopItem)(THIS_ int nComponent, LPCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, LPCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, LPCOMPONENT pcomp, DWORD dwReserved) PURE; STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, LPCOMPONENT pcomp, DWORD dwFlags) PURE; STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, 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_( IActiveDesktopP, IUnknown ) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, 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_ LPWSTR pwszSchemeName, DWORD *lpdwcchBuffer, DWORD dwFlags) PURE; // }; typedef IActiveDesktopP * LPACTIVEDESKTOPP; //Flags for GetObjectFlags #define GADOF_DIRTY 0x00000001 #undef INTERFACE #define INTERFACE IADesktopP2 DECLARE_INTERFACE_( IADesktopP2, IUnknown ) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // IADesktopP2 methods STDMETHOD (ReReadWallpaper)(THIS) PURE; STDMETHOD (GetADObjectFlags)(THIS_ DWORD *lpdwFlags, DWORD dwMask) PURE; STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE; STDMETHOD (MakeDynamicChanges)(THIS_ 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 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 /* Return to default */ #include 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 /* 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_(IColumnProvider, IUnknown) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, 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, SHCOLUMNINFO *psci) PURE; STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VARIANT *pvarData) PURE; }; /////////////////////////////////////////////////////// // // Drag and Drop helper // // Purpose: To expose the Shell drag images // // This interface is implemented in the shell by CLSID_DragDropHelper. // // To use: // If you are the source of a drag (i.e. in response to LV_DRAGBEGIN or // equivelent begin drag message) call // IDragSourceHelper::InitializeFromWindow // (, // , // ) // // NOTE: The Data object must support IDataObject::SetData with multiple // data types and GetData must implement data type cloning // (Including HGLOBAL), not just aliasing. // // If you wish to have an image while over your application add the // IDragImages::Dr* calls to your IDropTarget implementation. For Example: // // STDMETHODIMP CUserDropTarget::DragEnter(IDataObject* pDataObject, // DWORD grfKeyState, // POINTL pt, DWORD* pdwEffect) // { // // Process your DragEnter // // Call IDragImages::DragEnter last. // _pDropTargetHelper->DragEnter(_hwndDragOver, pDataObject, // (POINT*)&pt, *pdwEffect); // return hres; // } // // // If you wish to be able to source a drag image from a custom control, // implement a handler for the RegisterWindowMessage(DI_GETDRAGIMAGE). // The LPARAM is a pointer to an SHDRAGIMAGE structure. // // sizeDragImage - Calculate the length and width required to render // the images. // ptOffset - Calculate the offset from the upper left corner to // the mouse cursor within the image // hbmpDragImage - CreateBitmap( sizeDragImage.cx, sizeDragImage.cy, // GetDeviceCaps(hdcScreen, PLANES), // GetDeviceCaps(hdcScreen, BITSPIXEL), // NULL); // // Drag Images will only be displayed on Windows NT 5.0 or later. // // // Note about IDropTargetHelper::Show - This method is provided for // showing/hiding the Drag image in low color depth video modes. When // painting to a window that is currently being dragged over (i.e. For // indicating a selection) you need to hide the drag image by calling this // method passing FALSE. After the window is done painting, Show the image // again by passing TRUE. #include typedef struct { SIZE sizeDragImage; // OUT - The length and Width of the // rendered image POINT ptOffset; // OUT - The Offset from the mouse cursor to // the upper left corner of the image HBITMAP hbmpDragImage; // OUT - The Bitmap containing the rendered // drag images COLORREF crColorKey; // OUT - The COLORREF that has been blitted // to the background of the images } SHDRAGIMAGE, *LPSHDRAGIMAGE; #include /* Return to byte packing */ // This is sent to a window to get the rendered images to a bitmap // Call RegisterWindowMessage to get the ID #define DI_GETDRAGIMAGE TEXT("ShellGetDragImage") #undef INTERFACE #define INTERFACE IDropTargetHelper DECLARE_INTERFACE_( IDropTargetHelper, IUnknown ) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // IDropTargetHelper STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; STDMETHOD (DragLeave)(THIS) PURE; STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE; STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; STDMETHOD (Show)(THIS_ BOOL fShow) PURE; }; #undef INTERFACE #define INTERFACE IDragSourceHelper DECLARE_INTERFACE_( IDragSourceHelper, IUnknown ) { // IUnknown methods STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; STDMETHOD_(ULONG, Release) ( THIS ) PURE; // IDragSourceHelper STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE; STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE; }; #endif // _WIN32_IE >= 0x0500 #endif // _WIN32_IE //========================================================================== // Clipboard format which may be supported by IDataObject from system // defined shell folders (such as directories, network, ...). //========================================================================== #define CFSTR_SHELLIDLISTP TEXT("Shell IDLData Private") ;Internal #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_SHELLCOPYDATA TEXT("Shell Copy Data") ;Internal #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_DRAGCONTEXT TEXT("DragContext") #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_DROPEFFECTFOLDERLIST TEXT("DropEffectFolderList") ;Internal #define CFSTR_AUTOPLAY_SHELLIDLISTS TEXT("Autoplay Enumerated IDList Array") // (HGLOBAL with LPIDA) #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 // // format of CF_NETRESOURCE // typedef struct _NRESARRAY { // anr UINT cItems; NETRESOURCE nr[1]; } NRESARRAY, * LPNRESARRAY; #include /* 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 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_PROGRESSUI = 0x4000, // Show Progress UI w/Drag and Drop 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, *LPDROPFILES; // ;Internal // Win 3.1 style HDROP ;Internal // ;Internal // Notes: Our API works only if pFiles == sizeof(DROPFILES16) ;Internal // ;Internal typedef struct _DROPFILES16 { ;Internal WORD pFiles; // offset to double null list of files ;Internal POINTS pt; // drop point (client coords) ;Internal WORD fNC; // is it on non client area ;Internal // and pt is in screen coords ;Internal } DROPFILES16, * LPDROPFILES16; ;Internal ;Internal // ;Internal // format of CF_SHELLCOPYDATA ;Internal // ;Internal ;Internal typedef struct _SHELLCOPYDATA { ;Internal DWORD dwEffect; // Intended effect ;Internal } SHELLCOPYDATA; ;Internal ;begin_internal // // CFSTR_DROPEFFECTFOLDERLIST defines the drop effects to certain folders // this is applied when dropping to a file system folder. // typedef struct { DWORD dwDropEffect; WCHAR wszPath[MAX_PATH]; } DROPEFFECTFOLDER; typedef struct { DWORD dwDefaultDropEffect; // default drop effect (==0 for current behaviour) INT cFolders; // number of folders in the list DROPEFFECTFOLDER aFolders[1]; } DROPEFFECTFOLDERLIST; ;end_internal //====== File System Notification APIs =============================== // //------ See shelldll\fsnotify.c for function descriptions. ---------- ;Internal ;Internal // ;Internal // Definition of the function type to be called by the notification ;Internal // service when a file the client has registered to monitor changes. ;Internal // ;Internal // DOC'ed for DOJ compliance: ;Internal typedef struct _SHChangeNotifyEntry { LPCITEMIDLIST pidl; BOOL fRecursive; } SHChangeNotifyEntry; // // File System Notification flags // #define SHCNRF_InterruptLevel 0x0001 ;Internal #define SHCNRF_ShellLevel 0x0002 ;Internal // If the caller passes SHCNRF_RecursiveInterrupt (meaning that they want interrupt events on the whole ;Internal // subtree), then they must also pass SHCNRF_InterruptLevel flag (duh), and they must be a recursive (eg ;Internal // fRecursive == TRUE) type notification. ;Internal #define SHCNRF_RecursiveInterrupt 0x1000 ;Internal #define SHCNRF_ResumeThread 0x2000 ;Internal #define SHCNRF_CreateSuspended 0x4000 ;Internal #define SHCNRF_NewDelivery 0x8000 ;Internal ;begin_internal // !! WARNING !! // If you change/add any new SHCNE_ events, you will need // to possibly modify the SHCNE_XXXXEVENTS masks that are // defined below as well. ;end_internal #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 ;begin_internal // NOTE: SHCNE_GLOBALEVENTS are typically used to pass // non-pidl information (packed into pidl format). We cannot // extend SHCNE_GLOBALEVENTS and expect clients of the new // events to work on a down-level shell32. In fact, they // may very well fault during psfDesktop->CompareIDs. // So be careful when adding to this bitfield! // // Win95 and NT4 and IE4 shipped with 0x0C0581E0L. ;end_internal #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. ;begin_internal // We use this event mask to tell if we need to possibly throw out a SHCNE_UPDATEDIR that was // generated by the filesystem because we have a more specific event already in our queue. // NOTE: only non-interrupt events could cause us to throw out a interrupt generated UPDATEDIR event. #define SHCNE_UPDATEDIR_OVERRIDE_EVENTS 0x00023818L ;end_internal #if (_WIN32_IE >= 0x0400) // SHCNE_EXTENDED_EVENT extended events. These events are ordinals. // This is not a bitfield. ;begin_internal // This event was defined early on in IE4 for the Theme Switcher to // notify the shell that a system-wide update needed to happen. // This has been removed but I don't want to re-use the id just yet... // BUGBUG (scotth) 6/11/98: can we remove this yet?? //#define SHCNEE_THEMECHANGED 1L // The theme changed ;end_internal #define SHCNEE_ORDERCHANGED 2L // pidl2 is the changed folder ;begin_internal #define SHCNEE_WININETCHANGED 3L // dwItem2 contains CACHE_NOTIFY_* bits ;end_internal #define SHCNEE_MSI_CHANGE 4L // pidl2 is a SHChangeProductKeyAsIDList #define SHCNEE_MSI_UNINSTALL 5L // pidl2 is a SHChangeProductKeyAsIDList ;begin_internal #if (_WIN32_IE >= 0x0500) #define SHCNEE_PROMOTEDITEM 6L // pidl2 is the pidl of the Promoted item #define SHCNEE_DEMOTEDITEM 7L // pidl2 is the pidl of the demoted item #define SHCNEE_ALIASINUSE 8L // some alias style folder is now being used #endif #if (_WIN32_IE >= 0x0600) #define SHCNEE_SHORTCUTINVOKE 9L // an app has been launched via a shortcut // pidl1 = SHShortcutInvokeAsIDList, pidl2=unused #define SHCNEE_PINLISTCHANGED 10L // a change was made to the pin list // pidl1 = SHChangeDWORDAsIDList, pidl2=unused #define SHCNEE_USERINFOCHANGED 11L // A user picture was updated. pidl1 = SHChangeDWORDAsIDList, pidl2=unused #define SHCNEE_UPDATEFOLDERLOCATION 12L // a special folder changed pidl1 = {SHChangeDWORDAsIDList, csidlFolder}, pidl2=unused #endif ;end_internal #endif // Update types for the UpdateEntryList api ;Internal #define SHCNNU_SET 1 // Set the notify list to passed in list ;Internal #define SHCNNU_ADD 2 // Add the items to the current list ;Internal #define SHCNNU_REMOVE 3 // Remove the items from the current list ;Internal // 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_PRINTJOBA 0x0004 // dwItem1: printer name ;Internal // dwItem2: SHCNF_PRINTJOB_DATA ;Internal #define SHCNF_PATHW 0x0005 // path name #define SHCNF_PRINTERW 0x0006 // printer friendly name #define SHCNF_PRINTJOBW 0x0007 // dwItem1: printer name ;Internal // dwItem2: SHCNF_PRINTJOB_DATA ;Internal #define SHCNF_INSTRUMENT 0x0080 // dwItem1: LPSHCNF_INSTRUMENT ;Internal #define SHCNF_TYPE 0x00FF #define SHCNF_FLUSH 0x1000 #define SHCNF_FLUSHNOWAIT 0x2000 #define SHCNF_TRANSLATEDALIAS 0x4000 // for internals to filter on ;Internal #define SHCNF_ONLYNOTIFYINTERNALS 0x8000 // only notify internal clients ;Internal #ifdef UNICODE #define SHCNF_PATH SHCNF_PATHW #define SHCNF_PRINTER SHCNF_PRINTERW #else #define SHCNF_PATH SHCNF_PATHA #define SHCNF_PRINTER SHCNF_PRINTERA #endif #ifdef UNICODE ;Internal #define SHCNF_PRINTJOB SHCNF_PRINTJOBW ;Internal #else ;Internal #define SHCNF_PRINTJOB SHCNF_PRINTJOBA ;Internal #endif ;Internal ;Internal typedef struct tagSHCNF_PRINTJOB_DATA { ;Internal DWORD JobId; ;Internal DWORD Status; ;Internal DWORD TotalPages; ;Internal DWORD Size; ;Internal DWORD PagesPrinted; ;Internal } SHCNF_PRINTJOB_DATA, *LPSHCNF_PRINTJOB_DATA; ;Internal // ;Internal // This is all the INSTRUMENTation stuff... ;Internal // make this look like an ITEMIDLIST (uOffset points to 0 uTerm) ;Internal #include ;Internal typedef struct tagSHCNF_INSTRUMENT { ;Internal USHORT uOffset; ;Internal USHORT uAlign; ;Internal DWORD dwEventType; ;Internal DWORD dwEventStructure; ;Internal SYSTEMTIME st; ;Internal union tagEvents { ;Internal struct tagSTRING { ;Internal TCHAR sz[32]; ;Internal } string; ;Internal struct tagHOTKEY { ;Internal WPARAM wParam; ;Internal } hotkey; ;Internal struct tagWNDPROC { ;Internal HWND hwnd; ;Internal UINT uMsg; ;Internal WPARAM wParam; ;Internal LPARAM lParam; ;Internal } wndproc; ;Internal struct tagCOMMAND { ;Internal HWND hwnd; ;Internal UINT idCmd; ;Internal } command; ;Internal struct tagDROP { ;Internal HWND hwnd; ;Internal UINT idCmd; ;Internal // TCHAR sz[32]; // convert pDataObject into something we can log ;Internal } drop; ;Internal } e; ;Internal USHORT uTerm; ;Internal } SHCNF_INSTRUMENT_INFO, * LPSHCNF_INSTRUMENT_INFO; ;Internal #include ;Internal ;Internal #define SHCNFI_EVENT_STATECHANGE 0 // dwEventType ;Internal #define SHCNFI_EVENT_STRING 1 // e.string ;Internal #define SHCNFI_EVENT_HOTKEY 2 // e.hotkey ;Internal #define SHCNFI_EVENT_WNDPROC 3 // e.wndproc ;Internal #define SHCNFI_EVENT_WNDPROC_HOOK 4 // e.wndproc ;Internal #define SHCNFI_EVENT_ONCOMMAND 5 // e.command ;Internal #define SHCNFI_EVENT_INVOKECOMMAND 6 // e.command ;Internal #define SHCNFI_EVENT_TRACKPOPUPMENU 7 // e.command ;Internal #define SHCNFI_EVENT_DROP 8 // e.drop ;Internal #define SHCNFI_EVENT_MAX 9 ;Internal ;Internal #define SHCNFI_STRING_SHOWEXTVIEW 0 ;Internal ;Internal #define SHCNFI_STATE_KEYBOARDACTIVE 0 // _KEYBOARDACTIVE or _MOUSEACTIVE ;Internal #define SHCNFI_STATE_MOUSEACTIVE 1 // _KEYBOARDACTIVE or _MOUSEACTIVE ;Internal #define SHCNFI_STATE_ACCEL_TRAY 2 // _ACCEL_TRAY or _ACCEL_DESKTOP ;Internal #define SHCNFI_STATE_ACCEL_DESKTOP 3 // _ACCEL_TRAY or _ACCEL_DESKTOP ;Internal #define SHCNFI_STATE_START_DOWN 4 // _START_DOWN or _START_UP ;Internal #define SHCNFI_STATE_START_UP 5 // _START_DOWN or _START_UP ;Internal #define SHCNFI_STATE_TRAY_CONTEXT 6 ;Internal #define SHCNFI_STATE_TRAY_CONTEXT_CLOCK 7 ;Internal #define SHCNFI_STATE_TRAY_CONTEXT_START 8 ;Internal #define SHCNFI_STATE_DEFVIEWX_ALT_DBLCLK 9 ;Internal #define SHCNFI_STATE_DEFVIEWX_SHIFT_DBLCLK 10 ;Internal #define SHCNFI_STATE_DEFVIEWX_DBLCLK 11 ;Internal ;Internal #define SHCNFI_GLOBALHOTKEY 0 ;Internal ;Internal #define SHCNFI_CABINET_WNDPROC 0 ;Internal #define SHCNFI_DESKTOP_WNDPROC 1 ;Internal #define SHCNFI_PROXYDESKTOP_WNDPROC 2 ;Internal #define SHCNFI_TRAY_WNDPROC 3 ;Internal #define SHCNFI_DRIVES_WNDPROC 4 ;Internal #define SHCNFI_ONETREE_WNDPROC 5 ;Internal #define SHCNFI_MAIN_WNDPROC 6 ;Internal #define SHCNFI_FOLDEROPTIONS_DLGPROC 7 ;Internal #define SHCNFI_VIEWOPTIONS_DLGPROC 8 ;Internal #define SHCNFI_FT_DLGPROC 9 ;Internal #define SHCNFI_FTEdit_DLGPROC 10 ;Internal #define SHCNFI_FTCmd_DLGPROC 11 ;Internal #define SHCNFI_TASKMAN_DLGPROC 12 ;Internal #define SHCNFI_TRAYVIEWOPTIONS_DLGPROC 13 ;Internal #define SHCNFI_INITSTARTMENU_DLGPROC 14 ;Internal #define SHCNFI_PRINTERQUEUE_DLGPROC 15 ;Internal ;Internal #define SHCNFI_CABINET_ONCOMMAND 0 ;Internal #define SHCNFI_TRAYCOMMAND 1 ;Internal ;Internal #define SHCNFI_BITBUCKET_DFM_INVOKE 0 ;Internal #define SHCNFI_BITBUCKET_FNV_INVOKE 1 ;Internal #define SHCNFI_BITBUCKET_INVOKE 2 ;Internal #define SHCNFI_BITBUCKETBG_DFM_INVOKE 3 ;Internal #define SHCNFI_CONTROLS_DFM_INVOKE 4 ;Internal #define SHCNFI_CONTROLS_FNV_INVOKE 5 ;Internal #define SHCNFI_CONTROLSBG_DFM_INVOKE 6 ;Internal #define SHCNFI_DEFFOLDER_DFM_INVOKE 7 ;Internal #define SHCNFI_DEFFOLDER_INVOKE 8 ;Internal #define SHCNFI_FINDEXT_INVOKE 9 ;Internal #define SHCNFI_DEFFOLDER_FNV_INVOKE 10 ;Internal #define SHCNFI_DRIVESBG_DFM_INVOKE 11 ;Internal #define SHCNFI_DRIVES_FNV_INVOKE 12 ;Internal #define SHCNFI_DRIVES_DFM_INVOKE 13 ;Internal #define SHCNFI_FOLDERBG_DFM_INVOKE 14 ;Internal #define SHCNFI_FOLDER_FNV_INVOKE 15 ;Internal #define SHCNFI_FOLDER_DFM_INVOKE 16 ;Internal #define SHCNFI_NETWORKBG_DFM_INVOKE 17 ;Internal #define SHCNFI_NETWORK_FNV_INVOKE 18 ;Internal #define SHCNFI_NETWORK_DFM_INVOKE 19 ;Internal #define SHCNFI_NETWORKPRINTER_DFM_INVOKE 20 ;Internal #define SHCNFI_DESKTOPBG_DFM_INVOKE 21 ;Internal #define SHCNFI_DESKTOP_DFM_INVOKE 22 ;Internal #define SHCNFI_DESKTOP_FNV_INVOKE 23 ;Internal #define SHCNFI_PRINTERS_DFM_INVOKE 24 ;Internal #define SHCNFI_PRINTERSBG_DFM_INVOKE 25 ;Internal #define SHCNFI_PRINTERS_FNV_INVOKE 26 ;Internal #define SHCNFI_DEFVIEWX_INVOKE 27 ;Internal ;Internal #define SHCNFI_FOLDER_DROP 0 ;Internal #define SHCNFI_PRINTQUEUE_DROP 1 ;Internal #define SHCNFI_DEFVIEWX_TPM 2 ;Internal #define SHCNFI_DROP_EXE_TPM 3 ;Internal #define SHCNFI_IDLDT_TPM 4 ;Internal ;Internal #define SHCNFI_DROP_BITBUCKET 0 ;Internal #define SHCNFI_DROP_PRINTFOLDER 1 ;Internal #define SHCNFI_DROP_PRINTER 2 ;Internal #define SHCNFI_DROP_RUN 3 ;Internal #define SHCNFI_DROP_SHELLLINK 4 ;Internal #define SHCNFI_DROP_DRIVES 5 ;Internal #define SHCNFI_DROP_FS 6 ;Internal #define SHCNFI_DROP_EXE 7 ;Internal #define SHCNFI_DROP_NETROOT 8 ;Internal #define SHCNFI_DROP_PRINTQUEUE 9 ;Internal #define SHCNFI_DROP_BRIEFCASE 10 ;Internal ;Internal #ifdef WANT_SHELL_INSTRUMENTATION ;Internal #define INSTRUMENT_STATECHANGE(t) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_STATECHANGE; \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_STRING(t,p) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_STRING; \ ;Internal lstrcpyn(s.e.string.sz,(p),ARRAYSIZE(s.e.string.sz)); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_HOTKEY(t,w) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_HOTKEY; \ ;Internal s.e.hotkey.wParam=(w); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_WNDPROC(t,h,u,w,l) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_WNDPROC; \ ;Internal s.e.wndproc.hwnd=(h); \ ;Internal s.e.wndproc.uMsg=(u); \ ;Internal s.e.wndproc.wParam=(w); \ ;Internal s.e.wndproc.lParam=(l); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_WNDPROC_HOOK(h,u,w,l) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=0; \ ;Internal s.dwEventStructure=SHCNFI_EVENT_WNDPROC_HOOK; \ ;Internal s.e.wndproc.hwnd=(h); \ ;Internal s.e.wndproc.uMsg=(u); \ ;Internal s.e.wndproc.wParam=(w); \ ;Internal s.e.wndproc.lParam=(l); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_ONCOMMAND(t,h,u) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_ONCOMMAND; \ ;Internal s.e.command.hwnd=(h); \ ;Internal s.e.command.idCmd=(u); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_INVOKECOMMAND(t,h,u) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_INVOKECOMMAND; \ ;Internal s.e.command.hwnd=(h); \ ;Internal s.e.command.idCmd=(u); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_TRACKPOPUPMENU(t,h,u) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_TRACKPOPUPMENU; \ ;Internal s.e.command.hwnd=(h); \ ;Internal s.e.command.idCmd=(u); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #define INSTRUMENT_DROP(t,h,u,p) \ ;Internal { \ ;Internal SHCNF_INSTRUMENT_INFO s; \ ;Internal s.dwEventType=(t); \ ;Internal s.dwEventStructure=SHCNFI_EVENT_DROP; \ ;Internal s.e.drop.hwnd=(h); \ ;Internal s.e.drop.idCmd=(u); \ ;Internal SHChangeNotify(SHCNE_INSTRUMENT,SHCNF_INSTRUMENT,&s,NULL); \ ;Internal } ;Internal #else ;Internal #define INSTRUMENT_STATECHANGE(t) ;Internal #define INSTRUMENT_STRING(t,p) ;Internal #define INSTRUMENT_HOTKEY(t,w) ;Internal #define INSTRUMENT_WNDPROC(t,h,u,w,l) ;Internal #define INSTRUMENT_WNDPROC_HOOK(h,u,w,l) ;Internal #define INSTRUMENT_ONCOMMAND(t,h,u) ;Internal #define INSTRUMENT_INVOKECOMMAND(t,h,u) ;Internal #define INSTRUMENT_TRACKPOPUPMENU(t,h,u) ;Internal #define INSTRUMENT_DROP(t,h,u,p) ;Internal #endif //WANT_SHELL_INSTRUMENTATION ;Internal // ;Internal // // APIs // SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2); // // IShellChangeNotify // #undef INTERFACE #define INTERFACE IShellChangeNotify DECLARE_INTERFACE_(IShellChangeNotify, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellChangeNotify methods *** STDMETHOD(OnChange) (THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; } ; // // IQueryInfo // //------------------------------------------------------------------------- // // IQueryInfo interface // // [Methods] // ::GetInfoTip() //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE IQueryInfo DECLARE_INTERFACE_(IQueryInfo, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IQueryInfo methods *** STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR **ppwszTip) PURE; STDMETHOD(GetInfoFlags)(THIS_ DWORD *pdwFlags) PURE; } ; #define QITIPF_DEFAULT 0x00000000 #define QITIPF_USENAME 0x00000001 #define QITIPF_LINKNOTARGET 0x00000002 #define QITIPF_LINKUSETARGET 0x00000004 #define QITIPF_USESLOWTIP 0x00000008 // Flag says it's OK to take a long time generating tip #define QIF_CACHED 0x00000001 #define QIF_DONTEXPANDFOLDER 0x00000002 ;begin_internal // // IQueryCodePage // #undef INTERFACE #define INTERFACE IQueryCodePage DECLARE_INTERFACE_(IQueryCodePage, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IQueryCodePage methods *** STDMETHOD(GetCodePage)(THIS_ UINT * puiCodePage) PURE; STDMETHOD(SetCodePage)(THIS_ UINT uiCodePage) PURE; } ; ;end_internal // // 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 SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv); ;begin_internal SHSTDAPI_(void) SHWaitOp_Operate(HANDLE hWaitOp, DWORD dwProcId); // DOC'ed for DOJ compliance: ;end_internal typedef struct _SHChangeDWORDAsIDList { USHORT cb; DWORD dwItem1; DWORD dwItem2; USHORT cbZero; } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; #if (_WIN32_IE >= 0x0400) ;both ;begin_internal // Use this instead of SHChangeDWORDAsIDList for SHCNEE_ORDERCHANGED // SHCNEE_PROMOTEDITEM and SHCNEE_DEMOTEDITEM // // When filling in the pSender, cast LPVOID directly to INT64. // Do not cast through DWORD_PTR because that will not sign extend // properly on Win32. typedef struct _SHChangeMenuAsIDList { USHORT cb; DWORD dwItem1; // SHCNEE_EXTENDED_EVENT requires this // pSender must appear immediately after dwItem1 for IE5.0 compat INT64 pSender; // address of sender (64-bit for Win64) DWORD dwProcessID; // pid of sender USHORT cbZero; } SHChangeMenuAsIDList, * LPSHChangeMenuAsIDList; // DOC'ed for DOJ Compliance ;end_internal typedef struct _SHChangeUpdateImageIDList { USHORT cb; int iIconIndex; int iCurIndex; UINT uFlags; DWORD dwProcessID; WCHAR szName[MAX_PATH]; USHORT cbZero; } SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList; SHSTDAPI_(int) SHHandleUpdateImage( LPCITEMIDLIST pidlExtra ); ;begin_internal ;end_internal typedef struct _SHChangeProductKeyAsIDList { USHORT cb; WCHAR wszProductKey[39]; USHORT cbZero; } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; ;begin_internal typedef struct _SHShortcutInvokeAsIDList { USHORT cb; DWORD dwItem1; // SHCNEE_EXTENDED_EVENT requires this DWORD dwPid; // PID of target application WCHAR szShortcutName[MAX_PATH]; // Path to shortcut WCHAR szTargetName[MAX_PATH]; // Path to target application USHORT cbZero; } SHShortcutInvokeAsIDList, *LPSHShortcutInvokeAsIDList; ;end_internal SHSTDAPI_(void) SHUpdateImage%(LPCTSTR% pszHashItem, int iIndex, UINT uFlags, int iImageIndex); #endif /* _WIN32_IE */ ;both ;begin_internal #define SHChangeNotifyHandleEvents() SHChangeNotify(0, SHCNF_FLUSH, NULL, NULL) // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg, int cEntries, SHChangeNotifyEntry *pshcne); ;begin_internal #define SHChangeNotifyRegisterORD 2 // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID); ;begin_internal #define SHChangeNotifyDeregisterORD 4 SHSTDAPI_(BOOL) SHChangeNotifyUpdateEntryList(unsigned long ulID, int iUpdateType, int cEntries, SHChangeNotifyEntry *pshcne); SHSTDAPI_(void) SHChangeNotifyReceive(LONG lEvent, UINT uFlags, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlExtra); SHSTDAPI_(BOOL) SHChangeRegistrationReceive(HANDLE hChangeNotification, DWORD dwProcId); SHSTDAPI_(void) SHChangeNotifyDeregisterWindow(HWND hwnd); SHSTDAPI_(LRESULT) SHChangeNotifySuspendResumeReceive(WPARAM wParam, LPARAM lParam); SHSTDAPI_(BOOL) SHChangeNotifySuspendResume(BOOL bSuspend, LPITEMIDLIST pidlSuspend, BOOL bRescursive, DWORD dwReserved); typedef HANDLE LPSHChangeNotificationLock; // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId, LPITEMIDLIST **pppidl, LONG *plEvent); SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock); ;begin_internal // END Internal SHChangeNotify HELPERS // DOC'ed for DOJ compliance ;end_internal #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, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal); #endif // _WIN32_IE >= 0x0400 SHSTDAPI SHGetInstanceExplorer(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 #define SHDID_COMPUTER_IMAGING 18 #define SHDID_COMPUTER_AUDIO 19 #define SHDID_COMPUTER_SHAREDDOCS 20 #include typedef struct _SHDESCRIPTIONID { DWORD dwDescriptionId; CLSID clsid; } SHDESCRIPTIONID, *LPSHDESCRIPTIONID; #include /* Return to byte packing */ // these delegate to IShellFolder2::GetItemData() SHSTDAPI SHGetDataFromIDList%(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat, void *pv, int cb); ;begin_internal #ifndef NOOCHOST // { // // ====== OCHOST CONTROL ========================================== // // The following are all definations of structures, windows messages needed for OCHOST, // the window control you can use to host an OC. // To use OCHOST, you must specify the window class as OCHOST_CLASS or "OCHOST" // -- To Create and initialize OCHOST: // 1. CreateWindow with window title = the string version of class id or the OC // 2. CreateWindow with a pointer to the OCHINITSTRUCT structure as the last parameter // you must allocate and initialize the OCHINITSTRUCT structure // 3. CreateWindow with no title and the last param == NULL, then use the OCM_INITIALIZE message // or the OCHost_InitOC macro to initialize it. // 4. Use OCM_QUERYINTERFACE to QI an interface pointer from the OC. // 5. Simply destroy the window when you exit. // SHDRC -- Shell Doc Register Classes typedef struct _SHDRC { DWORD cbSize; // size of this structure in bytes DWORD dwFlags; // SHDRCF_ flags } SHDRC; #define SHDRCF_OCHOST 0x0001 // Register the OCHOST_CLASS window #define SHDRCF_ALL 0x0001 // ;Internal SHDOCAPI_(BOOL) DllRegisterWindowClasses(const SHDRC * pshdrc); BROWSEUIAPI_(BOOL) InitOCHostClass(const SHDRC *pshdrc); #define OCHOST_CLASSA "OCHost" #define OCHOST_CLASSW L"OCHost" #ifdef UNICODE #define OCHOST_CLASS OCHOST_CLASSW #else #define OCHOST_CLASS OCHOST_CLASSA #endif // ------------------- Window messages for OC Host -------------------- // IUnknown::QueryInterface the hosted OC typedef struct _QIMSG { const IID * qiid; void **ppvObject; } QIMSG, *LPQIMSG; // ................. Query Interface Message .......... #define OCM_QUERYINTERFACE (WM_USER+0) #ifdef __cplusplus inline HRESULT OCHost_QueryInterface(HWND hwndOCH, REFIID riid, void **ppv) \ { QIMSG qimsg = {&riid, ppv}; \ return (HRESULT)SNDMSG((hwndOCH), OCM_QUERYINTERFACE, (WPARAM)sizeof(qimsg), (LPARAM)&qimsg); \ } #else #define OCHost_QueryInterface(hwndOCH, riid, ppv) \ { QIMSG qimsg = {&riid, ppv}; \ SNDMSG((hwndOCH), OCM_QUERYINTERFACE, (WPARAM)sizeof(qimsg), (LPARAM)&qimsg); \ } #endif // ------------------- OC Initialization Structure --------------------- // This is intended to be passed in as the lParam of the OCM_INITOC message typedef struct _OCHINITSTRUCT { UINT cbSize; // size of this structure CLSID clsidOC; // class ID of the OC IUnknown * punkOwner; // owner of OCHOST } OCHINITSTRUCT, *LPOCHINITSTRUCT; //-------------------------------------------------------------------- // ................ Initialize and activate the OC ............... #define OCM_INITIALIZE (WM_USER+1) #define OCM_INITOC OCM_INITIALIZE #define OCHost_InitOC(hwndOCH, lpOCS) \ (HRESULT)SNDMSG((hwndOCH), OCM_INITOC, 0, (LPARAM)lpOCS) // ............... give ochost a parent IUnknown ....... #define OCM_SETOWNER (WM_USER+2) #define OCHost_SetOwner(hwndOC, punk) \ (HRESULT)SNDMSG((hwndOC), OCM_SETOWNER, 0, (LPARAM)(IUnknown*)(punk)) // ............... DoVerb the OC ....... // n.b. iVerb is technically a long, WPARAM might truncate it #define OCM_DOVERB (WM_USER+3) #define OCHost_DoVerb(hwndOC, iVerb, lpMsg) \ (HRESULT)SNDMSG((hwndOC), OCM_DOVERB, (WPARAM)iVerb, (LPARAM)lpMsg) //.................Enable/Disable OC event notifications #define OCM_ENABLEEVENTS (WM_USER+4) // WPARAM: TRUE to enable event notifications, FALSE to disable. // returns: TRUE if successful, otherwise FALSE. // Event notification is in the form of a WM_NOTIFY with // code OCN_OCEVENT and an NMOCEVENT block. #define OCHost_EnableEvents(hwndOC, bEnable) \ (BOOL)SNDMSG((hwndOC), OCM_ENABLEEVENTS, (WPARAM)bEnable, 0L) #define OCM_SETSERVICEPROVIDER (WM_USER+5) // LPARAM: IServiceProvider* pSP. // This message sets a service provider for SID_OleClientSite delegation. // Currently, OCHost will just call this guy with (SID_OleClientSite, IDispatch) // and the client-implemented service provider can return an IDispatch to // handle ambient properties. #define OCHost_SetServiceProvider(hwndOC, pSP) \ (BOOL)SNDMSG((hwndOC), OCM_SETSERVICEPROVIDER, 0L, (LPARAM) pSP) // ------------------ Window Notify messages from OC Host -------------- #define OCN_FIRST 0x1300 #define OCN_COCREATEINSTANCE (OCN_FIRST + 1) typedef struct _OCNCOCREATEMSG { NMHDR nmhdr; CLSID clsidOC; IUnknown ** ppunk; } OCNCOCREATEMSG, *LPOCNCOCREATEMSG; // NOTE: return values are defined as the following // If the handler of OCN_COCREATEINSTANCE Notify message returns OCNCOCREATE_ALREADYCREATED, // on return the (*ppvObj) is assumed to have the value of the OC's IUnkown pointer #define OCNCOCREATE_CONTINUE 0 #define OCNCOCREATE_HANDLED -1 #define OCN_PERSISTINIT (OCN_FIRST + 2) // NOTE: return values are defined as the following // If the handler of OCN_PERSISTINIT Notify message returns OCNPERSIST_ABORT, // the OCHOST will abort IPersist's initialization. #define OCNPERSISTINIT_CONTINUE 0 #define OCNPERSISTINIT_HANDLED -1 // The return value on the following notify messages are ignored. #define OCN_ACTIVATE (OCN_FIRST + 3) #define OCN_DEACTIVATE (OCN_FIRST + 4) #define OCN_EXIT (OCN_FIRST + 5) #define OCN_ONPOSRECTCHANGE (OCN_FIRST + 6) typedef struct _OCNONPOSRECTCHANGEMSG { NMHDR nmhdr; LPCRECT prcPosRect; } OCNONPOSRECTCHANGEMSG, *LPOCNONPOSRECTCHANGEMSG; #define OCN_ONUIACTIVATE (OCN_FIRST + 7) typedef struct _OCNONUIACTIVATEMSG { NMHDR nmhdr; IUnknown *punk; } OCNONUIACTIVATEMSG, *LPOCNONUIACTIVATEMSG; #define OCNONUIACTIVATE_HANDLED -1 #define OCN_ONSETSTATUSTEXT (OCN_FIRST + 8) typedef struct _OCNONSETSTATUSTEXT { NMHDR nmhdr; LPCOLESTR pwszStatusText; } OCNONSETSTATUSTEXTMSG, *LPOCNONSETSTATUSTEXTMSG; #define OCN_OCEVENT (OCN_FIRST + 9) // OC event notification block. // Recipient should return nonzero if any outbound parameters were modified // and should be returned to the ActiveX control object; otherwse zero. // NOTE: Structure is not properly aligned. Already shipped so too late to fix;internal typedef struct tagNMOCEVENT { IN NMHDR hdr ; IN DISPID dispID ; IN IID iid ; IN LCID lcid ; IN WORD wFlags ; IN OUT DISPPARAMS *pDispParams ; OUT VARIANT *pVarResult ; OUT EXCEPINFO *pExepInfo ; OUT UINT *puArgErr ; } NMOCEVENT, *PNMOCEVENT, *LPNMOCEVENT ; #endif // NOOCHOST // } ;end_internal ;begin_internal // // Access to shdocvw's active session count // enum SessionOp { SESSION_QUERY = 0, SESSION_INCREMENT, SESSION_DECREMENT, SESSION_INCREMENT_NODEFAULTBROWSERCHECK }; long SetQueryNetSessionCount(enum SessionOp Op); SHDOCAPI_(void) IEWriteErrorLog(const EXCEPTION_RECORD* pexr); ;end_internal //=========================================================================== ;begin_internal // // Internal APIs Follow. NOT FOR PUBLIC CONSUMPTION. // // Errors shared in the shell #define E_FILE_NOT_FOUND MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) #define E_PATH_NOT_FOUND MAKE_SCODE(SEVERITY_ERROR, FACILITY_WIN32, ERROR_PATH_NOT_FOUND) // Useful macros #define ResultFromShort(i) MAKE_HRESULT(SEVERITY_SUCCESS, 0, (USHORT)(i)) #define ShortFromResult(r) (short)HRESULT_CODE(r) #if (defined(UNICODE) && !defined(_X86_)) // all non-x86 systems require alignment #ifndef ALIGNMENT_SCENARIO #define ALIGNMENT_SCENARIO #endif #endif #ifndef LPNTSTR_DEFINED #define LPNTSTR_DEFINED typedef UNALIGNED const WCHAR * LPNCWSTR; typedef UNALIGNED WCHAR * LPNWSTR; #ifdef UNICODE #define LPNCTSTR LPNCWSTR #define LPNTSTR LPNWSTR #else #define LPNCTSTR LPCSTR #define LPNTSTR LPSTR #endif #endif // LPNTSTR_DEFINED #define RFN_FIRST (0U-510U) // run file dialog notify #define RFN_LAST (0U-519U) //======================================================================= // String constants for // 1. Registration database keywords (prefix STRREG_) // 2. Exported functions from handler dlls (prefix STREXP_) // 3. .INI file keywords (prefix STRINI_) // 4. Others (prefix STR_) //======================================================================= #define STRREG_SHELLUI TEXT("ShellUIHandler") #define STRREG_SHELL TEXT("Shell") #define STRREG_DEFICON TEXT("DefaultIcon") #define STRREG_SHEX TEXT("shellex") #define STRREG_SHEX_PROPSHEET STRREG_SHEX TEXT("\\PropertySheetHandlers") #define STRREG_SHEX_DDHANDLER STRREG_SHEX TEXT("\\DragDropHandlers") #define STRREG_SHEX_MENUHANDLER STRREG_SHEX TEXT("\\ContextMenuHandlers") #define STRREG_SHEX_COPYHOOK TEXT("Directory\\") STRREG_SHEX TEXT("\\CopyHookHandlers") #define STRREG_SHEX_PRNCOPYHOOK TEXT("Printers\\") STRREG_SHEX TEXT("\\CopyHookHandlers") #define STRREG_STARTMENU TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Start Menu") #define STRREG_STARTMENU2 TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Start Menu2") #define STRREG_FAVORITES TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MenuOrder\\Favorites") #define STRREG_DISCARDABLE TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Discardable") #define STRREG_POSTSETUP TEXT("\\PostSetup") #define STREXP_CANUNLOAD "DllCanUnloadNow" // From OLE 2.0 #define STRINI_CLASSINFO TEXT(".ShellClassInfo") // secton name #define STRINI_SHELLUI TEXT("ShellUIHandler") #define STRINI_OPENDIRICON TEXT("OpenDirIcon") #define STRINI_DIRICON TEXT("DirIcon") #define STR_DESKTOPINI TEXT("desktop.ini") #define STR_DESKTOPINIA "desktop.ini" #define DRIVEID(path) ((*path - 'A') & 31) #define PATH_CCH_EXT 64 // DOC'ed for DOJ Compliance ;end_internal // 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 ;begin_internal #ifndef NOUSER ;internal_win40 typedef struct { ;internal_win40 NMHDR hdr; ;internal_win40 TCHAR% szCmd[MAX_PATH*2]; ;internal_win40 DWORD dwHotKey; ;internal_win40 HMONITOR hMonitor; ;internal_win40 } NMVIEWFOLDER%, *LPNMVIEWFOLDER%; ;internal_win40 #endif // ;internal_win40 // DDE related APIs ;internal_win40 // ;internal_win40 SHSTDDOCAPI_(void) ShellDDEInit(BOOL fInit); ;internal_win40 SHSTDDOCAPI_(BOOL) DDEHandleViewFolderNotify(IShellBrowser* psb, HWND hwnd, LPNMVIEWFOLDER lpnm); ;internal_win40 SHSTDDOCAPI_(LPNMVIEWFOLDER) DDECreatePostNotify(LPNMVIEWFOLDER lpnm); ;internal_win40 // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn); SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWORD dwReasonCode); SHSTDAPI SHCoCreateInstance(LPCWSTR pszCLSID, const CLSID *pclsid, IUnknown *pUnkOuter, REFIID riid, void **ppv); ;begin_internal SHSTDAPI CIDLData_CreateFromIDArray(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[], IDataObject **ppdtobj); SHSTDAPI SHCreateFileDataObject(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl, IDataObject *pdtInner, IDataObject **pdtobj); // Common strings #define STR_DESKTOPCLASS "Progman" // // Storage name of a scrap/bookmark item // #define WSTR_SCRAPITEM L"\003ITEM000" // DOC'ed for DOJ Compliance ;end_internal // For CallCPLEntry16 // DECLARE_HANDLE(FARPROC16); SHSTDAPI_(LRESULT) CallCPLEntry16(HINSTANCE hinst, FARPROC16 lpfnEntry, HWND hwndCPL, UINT msg, LPARAM lParam1, LPARAM lParam2); ;begin_internal #ifdef RFN_FIRST #define RFN_EXECUTE (RFN_FIRST - 0) typedef struct { NMHDR hdr; LPCTSTR% lpszCmd; LPCTSTR% lpszWorkingDir; int nShowCmd; } NMRUNFILE%, *LPNMRUNFILE%; #endif // DOC'ed for DOJ compliance ;end_internal SHSTDAPI SHCreateStdEnumFmtEtc(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **ppenumFormatEtc); ;begin_internal // Shell create link API #define SHCL_USETEMPLATE 0x0001 #define SHCL_USEDESKTOP 0x0002 #define SHCL_CONFIRM 0x0004 #define SHCL_MAKEFOLDERSHORTCUT 0x0008 #if (_WIN32_IE >= 0x0600) #define SHCL_NOUNIQUE 0x0010 #endif // _WIN2_IE >= 0x0600 SHSTDAPI SHCreateLinks(HWND hwnd, LPCTSTR pszDir, IDataObject *pDataObj, UINT fFlags, LPITEMIDLIST* ppidl); SHSTDAPI SHRegisterDragDrop(HWND hwnd, IDropTarget *pdtgt); SHSTDAPI SHRevokeDragDrop(HWND hwnd); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI SHDoDragDrop(HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD dwEffect, DWORD *pdwEffect); ;begin_internal //=========================================================================== // office 9 pluggable UI //=========================================================================== #define PUI_OFFICE_COMMAND (WM_USER + 0x901) #define PLUGUI_CMD_SHUTDOWN 0 // wParam value #define PLUGUI_CMD_QUERY 1 // wParam value #define OFFICE_VERSION_9 9 // standardized value to return for Office 9 apps typedef struct _PLUGUI_INFO { unsigned uMajorVersion : 8; // Used to indicate App's major version number unsigned uOleServer : 1; // BOOL, TRUE if this is an OLE process unsigned uUnused : 23; // not used } PLUGUI_INFO; typedef union _PLUGUI_QUERY { UINT uQueryVal; PLUGUI_INFO PlugUIInfo; } PLUGUI_QUERY; //=========================================================================== // Image dragging API (definitely private) //=========================================================================== // DOC'ed for DOJ Compliance ;end_internal // 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; ;begin_internal //Contains the drag context header. // Must be pack1 since it's persisted into a stream that travels between ;internal // processes. ;internal typedef struct { BOOL fImage; BOOL fLayered; POINT ptOffset; } DragContextHeader; #define DAD_InitScrollData(pad) (pad)->bFull = FALSE, (pad)->iNextSample = 0, (pad)->dwLastScroll = 0 // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) DAD_SetDragImage(HIMAGELIST him, POINT * pptOffset); ;begin_internal SHSTDAPI_(BOOL) DAD_DragEnter(HWND hwndTarget); // DOC'ed for DOJ Compliance ;end_internal 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); SHSTDAPI_(BOOL) DAD_SetDragImageFromListView(HWND hwndLV, POINT ptOffset); ;internal SHSTDAPI_(void) DAD_InvalidateCursors(void); ;internal ;begin_internal //---------------------------------------------------------------------------- // CABINETSTATE holds the global configuration for the Explorer and its cohorts. // // Originally the cLength was an 'int', it is now two words, allowing us to // specify a version number. //---------------------------------------------------------------------------- // DOC'ed for DOJ Compliance ;end_internal 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( LPCABINETSTATE lpState, int iSize ); SHSTDAPI_(BOOL) WriteCabinetState( LPCABINETSTATE lpState ); ;begin_internal // RUN FILE RETURN values from notify message #define RFR_NOTHANDLED 0 #define RFR_SUCCESS 1 #define RFR_FAILURE 2 #define PathGetExtensionORD 158 SHSTDAPI_(LPTSTR) PathGetExtension(LPCTSTR pszPath, LPTSTR pszExtension, int cchExt); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) PathMakeUniqueName(LPWSTR pszUniqueName, UINT cchMax, LPCWSTR pszTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir); ;begin_internal SHSTDAPI_(BOOL) PathGetShortName(LPCTSTR pszLongName, LPTSTR pszShortName, UINT cbShortName); SHSTDAPI_(BOOL) PathGetLongName(LPCTSTR pszShortName, LPTSTR pszLongName, UINT cbLongName); SHSTDAPI_(BOOL) PathDirectoryExists(LPCTSTR pszDir); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(void) PathQualify(LPWSTR psz); ;begin_internal SHSTDAPI_(LPTSTR) PathGetNextComponent(LPCTSTR pszPath, LPTSTR pszComponent); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath); ;begin_internal SHSTDAPI_(BOOL) PathIsEqualOrSubFolder(LPCTSTR pszFolder, LPCTSTR pszSubFolder); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) PathIsSlow%(LPCTSTR% pszFile, DWORD dwAttr); ;begin_internal SHSTDAPI_(BOOL) PathIsTemporary%(LPCTSTR% pszPath); // DOC'ed for DOJ Compliance ;end_internal // // 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, LPWSTR pszSpec); ;begin_internal SHSTDAPI_(int) PathCleanupSpecEx(LPCTSTR pszDir, LPTSTR pszSpec); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(int) PathResolve(LPWSTR pszPath, LPCWSTR dirs[], UINT fFlags); ;begin_internal SHSTDAPI_(BOOL) ParseField(LPCTSTR szData, int n, LPTSTR szBuf, int iBufLen); // Needed for RunFileDlg #define RFD_NOBROWSE 0x00000001 #define RFD_NODEFFILE 0x00000002 #define RFD_USEFULLPATHDIR 0x00000004 #define RFD_NOSHOWOPEN 0x00000008 #define RFD_WOW_APP 0x00000010 #define RFD_NOSEPMEMORY_BOX 0x00000020 SHSTDAPI_(int) RunFileDlg(HWND hwnd, HICON hIcon, LPCTSTR pszWorkingDir, LPCTSTR pszTitle, LPCTSTR pszPrompt, DWORD dwFlags); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, LPWSTR pszFilePath, UINT cbFilePath, LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, LPCWSTR pszFilters, LPCWSTR pszTitle); SHSTDAPI_(int) DriveType(int iDrive); ;begin_internal SHSTDAPI_(int) RealDriveTypeFlags(int iDrive, BOOL fOKToHitNet); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet); ;begin_internal SHSTDAPI_(void) InvalidateDriveType(int iDrive); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(int) IsNetDrive(int iDrive); ;begin_internal // // Constants used for dwNumFmtFlags argument in Int64ToString and LargeIntegerToString. // #define NUMFMT_IDIGITS 0x00000001 #define NUMFMT_ILZERO 0x00000002 #define NUMFMT_SGROUPING 0x00000004 #define NUMFMT_SDECIMAL 0x00000008 #define NUMFMT_STHOUSAND 0x00000010 #define NUMFMT_INEGNUMBER 0x00000020 #define NUMFMT_ALL 0xFFFFFFFF SHSTDAPI_(int) LargeIntegerToString(LARGE_INTEGER *pN, LPTSTR szOutStr, UINT nSize, BOOL bFormat, NUMBERFMT *pFmt, DWORD dwNumFmtFlags); SHSTDAPI_(int) Int64ToString(_int64 n, LPTSTR szOutStr, UINT nSize, BOOL bFormat, NUMBERFMT *pFmt, DWORD dwNumFmtFlags); //-------- drive type identification -------------- // iDrive drive index (0=A, 1=B, ...) // #define DRIVE_CDROM 5 // extended DriveType() types #define DRIVE_RAMDRIVE 6 #define DRIVE_TYPE 0x000F // type masek #define DRIVE_SLOW 0x0010 // drive is on a slow link #define DRIVE_LFN 0x0020 // drive supports LFNs #define DRIVE_AUTORUN 0x0040 // drive has AutoRun.inf in root. #define DRIVE_AUDIOCD 0x0080 // drive is a AudioCD #define DRIVE_AUTOOPEN 0x0100 // should *always* auto open on insert #define DRIVE_NETUNAVAIL 0x0200 // Network drive that is not available #define DRIVE_SHELLOPEN 0x0400 // should auto open on insert, if shell has focus #define DRIVE_SECURITY 0x0800 // Supports ACLs #define DRIVE_COMPRESSED 0x1000 // Root of volume is compressed #define DRIVE_ISCOMPRESSIBLE 0x2000 // Drive supports compression (not nescesarrily compressed) #define DRIVE_DVD 0x4000 // drive is a DVD #define DriveTypeFlags(iDrive) DriveType('A' + (iDrive)) #define DriveIsSlow(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_SLOW) #define DriveIsLFN(iDrive) (RealDriveTypeFlags(iDrive, TRUE) & DRIVE_LFN) #define DriveIsAutoRun(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_AUTORUN) #define DriveIsAutoOpen(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_AUTOOPEN) #define DriveIsShellOpen(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_SHELLOPEN) #define DriveIsAudioCD(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_AUDIOCD) #define DriveIsNetUnAvail(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_NETUNAVAIL) #define DriveIsSecure(iDrive) (RealDriveTypeFlags(iDrive, TRUE) & DRIVE_SECURITY) #define DriveIsCompressed(iDrive) (RealDriveTypeFlags(iDrive, TRUE) & DRIVE_COMPRESSED) #define DriveIsCompressible(iDrive) (RealDriveTypeFlags(iDrive, TRUE) & DRIVE_ISCOMPRESSIBLE) #define DriveIsDVD(iDrive) (RealDriveTypeFlags(iDrive, FALSE) & DRIVE_DVD) #define IsCDRomDrive(iDrive) (RealDriveType(iDrive, FALSE) == DRIVE_CDROM) #define IsRamDrive(iDrive) (RealDriveType(iDrive, FALSE) == DRIVE_RAMDRIVE) #define IsRemovableDrive(iDrive) (RealDriveType(iDrive, FALSE) == DRIVE_REMOVABLE) #define IsRemoteDrive(iDrive) (RealDriveType(iDrive, FALSE) == DRIVE_REMOTE) // // For SHCreateDefClassObject // typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); SHSTDAPI SHCreateDefClassObject(REFIID riid, void **ppv, LPFNCREATEINSTANCE lpfn, UINT *pcRefDll, REFIID riidInstance); // DOC'ed for DOJ compliance ;end_internal // 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); ;begin_internal typedef HANDLE HNRES; // for SHGetNetResource SHSTDAPI_(UINT) SHGetNetResource(HNRES hnres, UINT iItem, LPNETRESOURCE pnres, UINT cbMax); ;end_internal /* * The SHObjectProperties API provides an easy way to invoke * the Properties context menu command on shell objects. * * PARAMETERS * * hwnd The window handle of the window which will own the dialog * dwType A SHOP_ value as defined below * lpObject Name of the object, see SHOP_ values below * lpPage The name of the property sheet page to open to or NULL. * * RETURN * * TRUE if the Properties command was invoked */ SHSTDAPI_(BOOL) SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR lpObject, LPCWSTR lpPage); #define SHOP_PRINTERNAME 0x00000001 // lpObject points to a printer friendly name #define SHOP_FILEPATH 0x00000002 // lpObject points to a fully qualified path+file name #define SHOP_VOLUMEGUID 0x00000004 // lpObject points to a Volume GUID ;begin_internal #define SHOP_TYPEMASK 0x00000007 #define SHOP_MODAL 0x80000000 ;end_internal /* * 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); ;begin_internal SHSTDAPI_(DWORD) SHChkDskDrive(HWND hwnd, UINT drive); // DOC'ed for DOJ compliance ;end_internal // // 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 ;begin_internal //====== SEMI-PRIVATE API =============================== // DOC'ed for DOJ compliance ;end_internal #ifndef HPSXA_DEFINED #define HPSXA_DEFINED DECLARE_HANDLE( HPSXA ); #endif WINSHELLAPI HPSXA SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey, UINT max_iface ); WINSHELLAPI void SHDestroyPropSheetExtArray( HPSXA hpsxa ); WINSHELLAPI UINT SHAddFromPropSheetExtArray( HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam ); WINSHELLAPI UINT SHReplaceFromPropSheetExtArray( HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam ); ;begin_internal WINSHELLAPI HPSXA SHCreatePropSheetExtArrayEx( HKEY hKey, LPCTSTR pszSubKey, UINT max_iface, IDataObject * pdo ); //====== SEMI-PRIVATE API ORDINALS =============================== // This is the list of semi-private ordinals we semi-publish. #define SHGetNetResourceORD 69 #define SHObjectPropertiesORD 178 #define SHAddFromPropSheetExtArrayORD 167 #define SHCreatePropSheetExtArrayORD 168 #define SHDestroyPropSheetExtArrayORD 169 #define SHReplaceFromPropSheetExtArrayORD 170 #define SHCreateDefClassObjectORD 70 #define SHEXP_SHGETNETRESOURCE MAKEINTRESOURCE(SHGetNetResourceORD) #define SHEXP_SHADDFROMPROPSHEETEXTARRAY MAKEINTRESOURCE(SHAddFromPropSheetExtArrayORD) #define SHEXP_SHCREATEPROPSHEETEXTARRAY MAKEINTRESOURCE(SHCreatePropSheetExtArrayORD) #define SHEXP_SHDESTROYPROPSHEETEXTARRAY MAKEINTRESOURCE(SHDestroyPropSheetExtArrayORD) #define SHEXP_SHREPLACEFROMPROPSHEETEXTARRAY MAKEINTRESOURCE(SHReplaceFromPropSheetExtArrayORD) #define SHEXP_SHCREATEDEFCLASSOBJECT MAKEINTRESOURCE(SHCreateDefClassObjectORD) // This avoids duplicate definition problems in the net\config project // which defines *some* of its own PIDL utility functions, but depends on // us for others (ILClone()) // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(LPITEMIDLIST) ILClone(LPCITEMIDLIST pidl); ;begin_internal #ifndef AVOID_NET_CONFIG_DUPLICATES //=========================================================================== // ITEMIDLIST //=========================================================================== // flags for ILGetDisplayNameEx #define ILGDN_FULLNAME 0 #define ILGDN_ITEMONLY 1 #define ILGDN_INFOLDER 2 // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(LPITEMIDLIST) ILGetNext(LPCITEMIDLIST pidl); SHSTDAPI_(UINT) ILGetSize(LPCITEMIDLIST pidl); SHSTDAPI_(LPITEMIDLIST) ILFindLastID(LPCITEMIDLIST pidl); SHSTDAPI_(BOOL) ILRemoveLastID(LPITEMIDLIST pidl); ;begin_internal #define ILIsEmpty(pidl) ((pidl) == NULL || (pidl)->mkid.cb==0) SHSTDAPI_(LPITEMIDLIST) ILCreate(void); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(LPITEMIDLIST) ILAppendID(LPITEMIDLIST pidl, LPCSHITEMID pmkid, BOOL fAppend); SHSTDAPI_(void) ILFree(LPITEMIDLIST pidl); ;begin_internal SHSTDAPI_(void) ILGlobalFree(LPITEMIDLIST pidl); SHSTDAPI_(BOOL) ILGetDisplayName(LPCITEMIDLIST pidl, LPTSTR pszName); SHSTDAPI_(BOOL) ILGetDisplayNameEx(IShellFolder *psfRoot, LPCITEMIDLIST pidl, LPTSTR pszName, int fType); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(LPITEMIDLIST) ILCloneFirst(LPCITEMIDLIST pidl); ;begin_internal SHSTDAPI_(LPITEMIDLIST) ILGlobalClone(LPCITEMIDLIST pidl); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); SHSTDAPI_(BOOL) ILIsParent(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOOL fImmediate); SHSTDAPI_(LPITEMIDLIST) ILFindChild(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild); SHSTDAPI_(LPITEMIDLIST) ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); SHSTDAPI ILLoadFromStream(IStream *pstm, LPITEMIDLIST *pidl); SHSTDAPI ILSaveToStream(IStream *pstm, LPCITEMIDLIST pidl); ;begin_internal SHSTDAPI ILLoadFromFile(HFILE hfile, LPITEMIDLIST *pidl); SHSTDAPI ILSaveToFile(HFILE hfile, LPCITEMIDLIST pidl); // DOC'ed for DOJ Compliance ;end_internal #if (_WIN32_IE >= 0x0400) SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathA(LPCSTR pszPath); SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathW(LPCWSTR pszPath); #ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH SHSTDAPI_(LPITEMIDLIST) ILCreateFromPath(LPCTSTR pszPath); #else #ifdef UNICODE #define ILCreateFromPath ILCreateFromPathW #else #define ILCreateFromPath ILCreateFromPathA #endif // !UNICODE #endif #endif SHSTDAPI SHILCreateFromPath(LPCWSTR szPath, LPITEMIDLIST *ppidl, DWORD *rgfInOut); ;begin_internal // helper macros #define ILCreateFromID(pmkid) ILAppendID(NULL, pmkid, TRUE) #endif // AVOID_NET_CONFIG_DUPLICATES // WARNING: this interface is not supported on the current platform, just downlevel ;end_internal #undef INTERFACE #define INTERFACE IDefViewFrame DECLARE_INTERFACE_(IDefViewFrame, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IDefViewFrame methods *** STDMETHOD(GetWindowLV) (THIS_ HWND * phwnd) PURE; STDMETHOD(ReleaseWindowLV) (THIS) PURE; STDMETHOD(GetShellFolder)(THIS_ IShellFolder **ppsf) PURE; }; ;begin_internal #undef INTERFACE #define INTERFACE IWebViewOCWinMan DECLARE_INTERFACE_(IWebViewOCWinMan, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IWebViewOCWinMan methods *** STDMETHOD(SwapWindow) (THIS_ HWND hwndLV, IWebViewOCWinMan **pocWinMan) PURE; }; // DOC'ed for DOJ compliance ;end_internal //=========================================================================== // Shell restrictions. (Parameter for SHRestricted) typedef enum RESTRICTIONS { ;begin_internal // Classic Win95 policy bits. Do NOT add any more bits in // this range. See the ranges below to add new policies. // | | // v v ;end_internal 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, ;begin_internal // Values starting at 4000001 are treated as raw INTs. New // *shell-specific* policies (NOT browser policies) should // be added in this range. Use SHRestricted() with these bits. // | | // v v ;end_internal 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, REST_NOLOGO3CHANNELNOTIFY = 0x4000001C, 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 REST_NORECENTDOCSNETHOOD = 0x4000003D, // dont add the recent docs shares to nethood 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. REST_NOCOMPUTERSNEARME = 0x4000004B, // removes the "Computers near me" link REST_NOVIEWONDRIVE = 0x4000004C, // disallows CreateViewObject() on specified drives (CFSFolder only) REST_NONETCRAWL = 0x4000004D, // disables the crawling of the WNet namespace. REST_NOSHAREDDOCUMENTS = 0x4000004E, // don't auto share the Shared Documents/create link REST_NOSMMYDOCS = 0x4000004F, // Don't show the My Documents item on the Start Menu. 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 REST_MYCOMPNOPROP = 0x40000058, // disables Properties on My Computer's context menu REST_MYDOCSNOPROP = 0x40000059, // disables Properties on My Documents' context menu 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. REST_STARTRUNNOHOMEPATH = 0x40000061, // dont use the %HOMEPATH% env var for the Start-Run dialog 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 ;begin_internal //--- UNUSED -- USE THIS SPACE --- 0x4000006C to 0x4000006E ;end_internal REST_NOSMCONFIGUREPROGRAMS = 0x4000006F, // No Configure Programs on Settings Menu REST_HIDECLOCK = 0x40000070, // don't show the clock REST_NOLOWDISKSPACECHECKS = 0x40000071, // disable the low disk space checking REST_NOENTIRENETWORK = 0x40000072, // removes the "Entire Network" link (i.e. from "My Network Places") 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 REST_NOSTRCMPLOGICAL = 0x4000007E, // dont use StrCmpLogical() instead use default CompareString() 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 REST_ALLOWLEGACYWEBVIEW = 0x40000083, // allow legacy webview template to be shown. REST_REVERTWEBVIEWSECURITY = 0x40000084, // disable added webview security measures (revert to w2k functionality). REST_INHERITCONSOLEHANDLES = 0x40000086, // ShellExec() will check for the current process and target process being console processes to inherit handles 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 } RESTRICTIONS; ;begin_internal // Browser restrictions (parameter for SHRestricted2) // // The browser restrictions are divided into two ranges, "explorer restrictions" and // "infodelivery restrictions". Explorer restrictions are kept under "Software\\Microsoft\\ // Windows\\CurrentVersion\\Policies\\Explorer," while infodelivery restrictions are kept // under "Software\\Policies\\Microsoft\\Internet Explorer\\Infodelivery\\Restrictions." // // **NOTE**: SHRestricted2 assumes each range is continuous. typedef enum { // explorer restrictions REST_BROWSER_NONE = 0x00000000, // REST_EXPLORER_FIRST REST_NOTOOLBARCUSTOMIZE = 0x00000001, REST_NOBANDCUSTOMIZE = 0x00000002, REST_SMALLICONS = 0x00000003, REST_LOCKICONSIZE = 0x00000004, REST_SPECIFYDEFAULTBUTTONS = 0x00000005, REST_BTN_BACK = 0x00000006, REST_BTN_FORWARD = 0x00000007, REST_BTN_STOPDOWNLOAD = 0x00000008, REST_BTN_REFRESH = 0x00000009, REST_BTN_HOME = 0x0000000A, REST_BTN_SEARCH = 0x0000000B, REST_BTN_HISTORY = 0x0000000C, REST_BTN_FAVORITES = 0x0000000D, REST_BTN_ALLFOLDERS = 0x0000000E, REST_BTN_THEATER = 0x0000000F, REST_BTN_TOOLS = 0x00000010, REST_BTN_MAIL = 0x00000011, REST_BTN_FONTS = 0x00000012, REST_BTN_PRINT = 0x00000013, REST_BTN_EDIT = 0x00000014, REST_BTN_DISCUSSIONS = 0x00000015, REST_BTN_CUT = 0x00000016, REST_BTN_COPY = 0x00000017, REST_BTN_PASTE = 0x00000018, REST_BTN_ENCODING = 0x00000019, REST_NoUserAssist = 0x0000001A, REST_NoWindowsUpdate = 0x0000001B, REST_NoExpandedNewMenu = 0x0000001C, REST_NOFILEURL = 0x0000001D, REST_BTN_PRINTPREVIEW = 0X0000001E, REST_BTN_MEDIABAR = 0x0000001F, // REST_EXPLORER_LAST // infodelivery restrictions REST_NoChannelUI = 0x50000001, // REST_INFO_FIRST REST_NoAddingChannels = 0x50000002, REST_NoEditingChannels = 0x50000003, REST_NoRemovingChannels = 0x50000004, REST_NoAddingSubscriptions = 0x50000005, REST_NoEditingSubscriptions = 0x50000006, REST_NoRemovingSubscriptions = 0x50000007, REST_NoChannelLogging = 0x50000008, REST_NoManualUpdates = 0x50000009, REST_NoScheduledUpdates = 0x5000000A, REST_NoUnattendedDialing = 0x5000000B, REST_NoChannelContent = 0x5000000C, REST_NoSubscriptionContent = 0x5000000D, REST_NoEditingScheduleGroups = 0x5000000E, REST_MaxChannelSize = 0x5000000F, REST_MaxSubscriptionSize = 0x50000010, REST_MaxChannelCount = 0x50000011, REST_MaxSubscriptionCount = 0x50000012, REST_MinUpdateInterval = 0x50000013, REST_UpdateExcludeBegin = 0x50000014, REST_UpdateExcludeEnd = 0x50000015, REST_UpdateInNewProcess = 0x50000016, REST_MaxWebcrawlLevels = 0x50000017, REST_MaxChannelLevels = 0x50000018, REST_NoSubscriptionPasswords = 0x50000019, REST_NoBrowserSaveWebComplete = 0x5000001A, REST_NoSearchCustomization = 0x5000001B, REST_NoSplash = 0x5000001C, // REST_INFO_LAST // restrictions ported from SP2 REST_NoFileOpen = 0x60000001, // REST_BROWSER_FIRST REST_NoFileNew = 0x60000002, REST_NoBrowserSaveAs = 0x60000003, REST_NoBrowserOptions = 0x60000004, REST_NoFavorites = 0x60000005, REST_NoSelectDownloadDir = 0x60000006, REST_NoBrowserContextMenu = 0x60000007, REST_NoBrowserClose = 0x60000008, REST_NoOpeninNewWnd = 0x60000009, REST_NoTheaterMode = 0x6000000A, REST_NoFindFiles = 0x6000000B, REST_NoViewSource = 0x6000000C, REST_GoMenu = 0x6000000D, REST_NoToolbarOptions = 0x6000000E, REST_NoHelpItem_TipOfTheDay = 0x6000000F, REST_NoHelpItem_NetscapeHelp = 0x60000010, REST_NoHelpItem_Tutorial = 0x60000011, REST_NoHelpItem_SendFeedback = 0x60000012, REST_AlwaysPromptWhenDownload = 0x60000013, REST_NoNavButtons = 0x60000014, REST_NoHelpMenu = 0x60000015, REST_NoBrowserBars = 0x60000016, REST_NoToolBar = 0x60000017, REST_NoAddressBar = 0x60000018, REST_NoLinksBar = 0x60000019, REST_NoPrinting = 0x60000020, REST_No_LaunchMediaBar = 0x60000021, REST_No_MediaBarOnlineContent = 0x60000022, // REST_BROWSER_LAST } BROWSER_RESTRICTIONS; #define REST_EXPLORER_FIRST REST_BROWSER_NONE #define REST_EXPLORER_LAST REST_BTN_MEDIABAR #define REST_INFO_FIRST REST_NoChannelUI #define REST_INFO_LAST REST_NoSplash #define REST_BROWSER_FIRST REST_NoFileOpen #define REST_BROWSER_LAST REST_No_MediaBarOnlineContent // codes for REST_BTN policies #define RESTOPT_BTN_STATE_DEFAULT 0 // must be zero, else break browseui\itbar.cpp assumption #define RESTOPT_BTN_STATE_VISIBLE 1 #define RESTOPT_BTN_STATE_HIDDEN 2 // REST_INTELLIMENUS #define RESTOPT_INTELLIMENUS_USER 0 #define RESTOPT_INTELLIMENUS_DISABLED 1 // Match Restriction assumption: 1 == Off #define RESTOPT_INTELLIMENUS_ENABLED 2 // FTP Exports STDAPI IsIEDefautlFTPClient(void); STDAPI MakeIEDefautlFTPClient(void); STDAPI RestoreFTPClient(void); SHSTDAPI_(void) SHSettingsChanged(WPARAM wParam, LPARAM lParam); SHSTDAPI_(BOOL) SHIsBadInterfacePtr(LPCVOID pv, UINT cbVtbl); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD grfMode); ;begin_internal SHSTDAPI_(void) SHHandleDiskFull(HWND hwnd, int idDrive); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(BOOL) SHFindFiles(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile); ;begin_internal SHSTDAPI_(BOOL) SHFindComputer(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(void) PathGetShortPath(LPWSTR pszLongPath); SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(LPWSTR pszUniqueName, LPCWSTR pszPath, LPCWSTR pszShort, LPCWSTR pszFileSpec); ;begin_internal SHSTDAPI_(BOOL) Win32CreateDirectory(LPCTSTR pszPath, SECURITY_ATTRIBUTES *psa); SHSTDAPI_(BOOL) Win32RemoveDirectory(LPCTSTR pszPath); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath); ;begin_internal SHSTDAPI_(void) SHUpdateRecycleBinIcon(); // DOC'ed for DOJ Compliance ;end_internal // // 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_NORELATIVEOBJECTQUALIFY 0x00000020 // don't return fully qualified relative objects #define PPCF_FORCEQUALIFY 0x00000040 // qualify even non-relative names #define PPCF_LONGESTPOSSIBLE 0x00000080 // always find the longest possible name SHSTDAPI_(LONG) PathProcessCommand(LPCWSTR lpSrc, LPWSTR lpDest, int iMax, DWORD dwFlags); ;begin_internal SHSTDAPI_(LPITEMIDLIST) SHLogILFromFSIL(LPCITEMIDLIST pidlFS); SHSTDAPI_(BOOL) StrRetToStrN(LPTSTR szOut, UINT uszOut, STRRET *pStrRet, LPCITEMIDLIST pidl); SHSTDAPI_(DWORD) SHWaitForFileToOpen(LPCITEMIDLIST pidl, UINT uOptions, DWORD dwtimeout); SHSTDAPI_(void) SetAppStartingCursor(HWND hwnd, BOOL fSet); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest); ;begin_internal SHSTDAPI_(void *) SHGetHandlerEntry(LPCTSTR szHandler, LPCSTR szProcName, HINSTANCE *lpModule); // This is sent to a browser windows letting them know that we have // opened a folder, i.e. the folder open operation is done. // Call RegisterWindowMessage to get the ID #define SH_FILEOPENED TEXT("ShellFileOpened") // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(BOOL) SignalFileOpen(LPCITEMIDLIST pidl); SHSTDAPI_(LPITEMIDLIST) SHSimpleIDListFromPath(LPCWSTR pszPath); ;begin_internal SHSTDAPI SHCreatePropertyBag(REFIID riid, void **ppv); SHSTDAPI_(DWORD) SHNetConnectionDialog(HWND hwnd, LPTSTR pszRemoteName, DWORD dwType); // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI SHLoadOLE(LPARAM lParam); SHSTDAPI SHStartNetConnectionDialog%(HWND hwnd, LPCTSTR% pszRemoteName, DWORD dwType); SHSTDAPI SHDefExtractIcon%(LPCTSTR% pszIconFile, int iIndex, UINT uFlags, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); ;begin_internal SHSTDAPI_(int) SHLookupIconIndex%(LPCTSTR% pszFile, int iIconIndex, UINT uFlags); SHSTDAPI_(UINT) SHExtractIcons%(LPCTSTR% pszFileName, int nIconIndex, int cxIcon, int cyIcon, HICON *phicon, UINT *piconid, UINT nIcons, UINT flags); SHSTDAPI SHGetAssociations(LPCITEMIDLIST pidl, void **ppvQueryAssociations); #define SHLookupIconIndexAORD 7 #define SHLookupIconIndexWORD 8 #ifdef UNICODE #define SHLookupIconIndexORD SHLookupIconIndexWORD #else #define SHDefExtractIcon SHDefExtractIconA #endif // BUGBUG (scotth): temporary. move to shdocvw. // OpenAsInfo flags #define OAIF_ALLOW_REGISTRATION 0x00000001 // enable the "always use this file" checkbox (NOTE if you dont pass this, it will be disabled) #define OAIF_REGISTER_EXT 0x00000002 // do the registration after the user hits "ok" #define OAIF_EXEC 0x00000004 // execute file after registering #define OAIF_FORCE_REGISTRATION 0x00000008 // force the "always use this file" checkbox to be checked (normally, you wont use the OAIF_ALLOW_REGISTRATION wen you pass this) #define OAIF_ALL (OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC | OAIF_FORCE_REGISTRATION) // ;internal #include typedef struct _openasinfo { LPCTSTR pcszFile; // [in] file name LPCTSTR pcszClass; // [in] file class description. NULL means // use pcszFile's extension DWORD dwInFlags; // [in] input flags from OAIF_* TCHAR szApp[MAX_PATH]; // [out] application selected } OPENASINFO, * POPENASINFO; #include /* Return to byte packing */ SHSTDAPI OpenAsDialog(HWND hwnd, POPENASINFO poainfo); // // Interface pointer validation // #define IsBadInterfacePtr(pitf, ITF) SHIsBadInterfacePtr(pitf, sizeof(ITF##Vtbl)) //=========================================================================== // Another block of private API //=========================================================================== // indexes into the shell image lists (Shell_GetImageList) for default images // If you add to this list, you also need to update II_LASTSYSICON! #define II_DOCNOASSOC 0 // document (blank page) (not associated) #define II_DOCUMENT 1 // document (with stuff on the page) #define II_APPLICATION 2 // application (exe, com, bat) #define II_FOLDER 3 // folder (plain) #define II_FOLDEROPEN 4 // folder (open) #define II_DRIVE525 5 #define II_DRIVE35 6 #define II_DRIVEREMOVE 7 #define II_DRIVEFIXED 8 #define II_DRIVENET 9 #define II_DRIVENETDISABLED 10 #define II_DRIVECD 11 #define II_DRIVERAM 12 #define II_WORLD 13 #define II_NETWORK 14 #define II_SERVER 15 #define II_PRINTER 16 #define II_MYNETWORK 17 #define II_GROUP 18 // Startmenu images. #define II_STPROGS 19 #define II_STDOCS 20 #define II_STSETNGS 21 #define II_STFIND 22 #define II_STHELP 23 #define II_STRUN 24 #define II_STSUSPEND 25 #define II_STEJECT 26 #define II_STSHUTD 27 #define II_SHARE 28 #define II_LINK 29 #define II_SLOWFILE 30 #define II_RECYCLER 31 #define II_RECYCLERFULL 32 #define II_RNA 33 #define II_DESKTOP 34 // More startmenu image. #define II_STCPANEL 35 #define II_STSPROGS 36 #define II_STPRNTRS 37 #define II_STFONTS 38 #define II_STTASKBR 39 #define II_CDAUDIO 40 #define II_TREE 41 #define II_STCPROGS 42 #define II_STFAVORITES 43 #define II_STLOGOFF 44 #define II_STFLDRPROP 45 #define II_WINUPDATE 46 #define II_MU_STSECURITY 47 #define II_MU_STDISCONN 48 #ifdef WINNT // hydra specific id #define II_LASTSYSICON II_MU_STDISCONN #else // Last system image list icon index - used by icon cache manager #define II_LASTSYSICON II_WINUPDATE #endif // Overlay indexes #define II_OVERLAYFIRST II_SHARE #define II_OVERLAYLAST II_SLOWFILE #define II_NDSCONTAINER 72 #define II_SERVERSHARE 73 SHSTDAPI_(BOOL) FileIconInit( BOOL fRestoreCache ); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(BOOL) Shell_GetImageLists(HIMAGELIST *phiml, HIMAGELIST *phimlSmall); ;begin_internal SHSTDAPI_(void) Shell_SysColorChange(void); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(int) Shell_GetCachedImageIndex(LPCWSTR pszIconPath, int iIconIndex, UINT uIconFlags); ;begin_internal // // OLE string // SHSTDAPI_(int) OleStrToStrN(LPTSTR, int, LPCOLESTR, int); SHSTDAPI_(int) StrToOleStrN(LPOLESTR, int, LPCTSTR, int); SHSTDAPI_(int) OleStrToStr(LPTSTR, LPCOLESTR); SHSTDAPI_(int) StrToOleStr(LPOLESTR, LPCTSTR); #define LIPF_ENABLE 0x00000001 // create the object (vs release the object) #define LIPF_HOLDREF 0x00000002 // hold ref on object after creation (vs release immediately) typedef struct { CLSID clsid; DWORD dwFlags; } LOADINPROCDATA, *PLOADINPROCDATA; // Tray CopyData Messages #define TCDM_APPBAR 0x00000000 #define TCDM_NOTIFY 0x00000001 #define TCDM_LOADINPROC 0x00000002 // // Private QueryContextMenuFlag passed from Bands // #define CMF_BANDCMD 0x00020000 // Install Band Context menu commands // // Functions to help the cabinets sync to each other // uOptions parameter to SHWaitForFileOpen // #define WFFO_WAITTIME 10000L #define WFFO_ADD 0x0001 #define WFFO_REMOVE 0x0002 #define WFFO_WAIT 0x0004 #define WFFO_SIGNAL 0x0008 // // NOTES: IShellService is used when we share a service component // (which implements a certain interface) among multiple clients // (such as IE 3.0 and Explorer). The client always CoCreateInstance // it and call SetOwner(this). When the client is going away // (typically when the window is closed), it calls SetOwner(NULL) // to let the service object releases the reference to the owner // object. // #undef INTERFACE #define INTERFACE IShellService DECLARE_INTERFACE_(IShellService, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellService specific methods *** STDMETHOD(SetOwner)(THIS_ struct IUnknown* punkOwner) PURE; }; // // NOTES: IHistSFPrivate is used when manipulating a history IShellFolder object // It includes methods for pointing the shell folder at the correct virtual // directory. QIing for IHistSFPrivate also guarantees the pidl format can // safely be delved into to access the INTERNET_CACHE_ENTRY_INFO structure // #undef INTERFACE #define INTERFACE IHistSFPrivate DECLARE_INTERFACE_(IHistSFPrivate, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IHistPrivate specific methods *** STDMETHOD(SetCachePrefix)(THIS_ LPCWSTR pszCachePrefix) PURE; STDMETHOD(SetDomain)(THIS_ LPCWSTR pszDomain) PURE; STDMETHOD(WriteHistory)(THIS_ LPCWSTR pszPrefixedUrl, FILETIME ftExpires, FILETIME ftModified, LPITEMIDLIST * ppidlSelect) PURE; STDMETHOD(ClearHistory) (THIS) PURE; }; // // NOTES: IShellFolderViewType lets a shell folder support different "views" on // its contents (meaning different hierarchical layouts of its data) with // the default "view" being the one the shell folder displays normally. // This enumerator returns pidls that are special hidden folders at the // top level of the shell folder (which are not otherwise enumerated). #undef INTERFACE #define INTERFACE IShellFolderViewType DECLARE_INTERFACE_(IShellFolderViewType, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolderViewType Methods *** // NOTE: "Views" are seen by the user as hidden folders off the // root (represented by pidls). Whenever appropriate, the // default view (coming off the root folder) is represented // as the NULL *or* empty pidl. // EnumViews: // Return an enumerator which will give out one pidl for every extended view. STDMETHOD(EnumViews)(THIS_ ULONG grfFlags, IEnumIDList **ppenum) PURE; // GetDefaultViewName: // Return the name of the default view. The names of the other views // can be retrieved by calling GetDisplayNameOf. STDMETHOD(GetDefaultViewName)(THIS_ DWORD uFlags, LPWSTR *ppwszName) PURE; STDMETHOD(GetViewTypeProperties)(THIS_ LPCITEMIDLIST pidl, DWORD *pdwFlags) PURE; // TranslateViewPidl: // Attempt to take a pidl represented in one heirarchical representation of // the shell folder, and find it in a different representation. // pidl should be relative to the root folder. // Remember to ILFree ppidlOut STDMETHOD(TranslateViewPidl)(THIS_ LPCITEMIDLIST pidl, LPCITEMIDLIST pidlView, LPITEMIDLIST *ppidlOut) PURE; }; #define SFVTFLAG_NOTIFY_CREATE 0x00000001 #define SFVTFLAG_NOTIFY_RESORT 0x00000002 // // NOTES: IShellFolderSearchableCallback allows the searcher to provide // callback routines that moniter the search process // #undef INTERFACE #define INTERFACE IShellFolderSearchableCallback DECLARE_INTERFACE_(IShellFolderSearchableCallback, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolderSearchableCallback Methods *** // NOTE: Caller may pass NULL for pVar or pdwFlags as a legal value STDMETHOD(RunBegin)(THIS_ DWORD dwReserved) PURE; STDMETHOD(RunEnd)(THIS_ DWORD dwReserved) PURE; }; // // NOTES: IShellFolderSearchable allows a shell extension to provide a searchable // namespace. #undef INTERFACE #define INTERFACE IShellFolderSearchable DECLARE_INTERFACE_(IShellFolderSearchable, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolderSearchable methods *** // FindString - // The returned shell folder's enumerator will have any // search hits for the given search string. // As no flags are currently defined, we suggest you pass // NULL as lpdword // punkOnAsyncSearch will be QI'd for IShellFolderSearchableCallback STDMETHOD(FindString)(THIS_ LPCWSTR pwszTarget, DWORD *pdwFlags, IUnknown *punkOnAsyncSearch, LPITEMIDLIST *ppidlOut) PURE; // CancelAsyncSearch - // Begins the process of cancelling any pending // asynchronous search from this pidl. // When the search is actually cancelled, RunEnd will be called // Returns: S_OK => cancelling, S_FALSE => not running STDMETHOD(CancelAsyncSearch) (THIS_ LPCITEMIDLIST pidlSearch, DWORD *pdwFlags) PURE; // InvalidateSearch - // Makes this pidl no longer a valid portion of the shell folder // also does some cleanup of any databases used in the search and // will cause the eventual release of the IRunHook callback // May cause async search to be cancelled STDMETHOD(InvalidateSearch) (THIS_ LPCITEMIDLIST pidlSearch, DWORD *pdwFlags) PURE; }; // // NOTES: IBandSiteHelper is used to let explorer's BandSite implementation, // which aggregates shdocvw's BandSite, provide callback hooks for shdocvw // to call. // #undef INTERFACE #define INTERFACE IBandSiteHelper DECLARE_INTERFACE_(IBandSiteHelper, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IBandSiteHelper specific methods *** STDMETHOD(LoadFromStreamBS)(THIS_ struct IStream* pstm, REFIID riid, void **ppv) PURE; STDMETHOD(SaveToStreamBS)(THIS_ struct IUnknown* punk, struct IStream* pstm) PURE; }; // This private interface is added such that some of the support features that is in // SHDocvw's Internet explorer frame automation code, that is not part of publicly // defined interfaces can be used in the Explorer code... // // Note: FindCIE4ConnectionPoint was a hack for IE4. New code should use // shlwapi helper functions like IConnectionPoint_Invoke instead. // #ifdef __cplusplus class CIE4ConnectionPoint; #else typedef struct CIE4ConnectionPoint CIE4ConnectionPoint; #endif #undef INTERFACE #define INTERFACE IExpDispSupport DECLARE_INTERFACE_(IExpDispSupport, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IExpDispSupport specific methods *** STDMETHOD(FindCIE4ConnectionPoint)(THIS_ REFIID riid, CIE4ConnectionPoint **ppccp) PURE; STDMETHOD(OnTranslateAccelerator)(THIS_ MSG *pMsg, DWORD grfModifiers) PURE; STDMETHOD(OnInvoke)(THIS_ DISPID dispidMember, REFIID iid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pVarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr) PURE; }; // // This interface is related to the above. It contains functions // that would only be implemented on the WebBrowserOC version if IExpDispSupport. // #undef INTERFACE #define INTERFACE IExpDispSupportOC DECLARE_INTERFACE_(IExpDispSupportOC, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IExpDispSupportOC specific methods *** STDMETHOD(OnOnControlInfoChanged)(THIS) PURE; STDMETHOD(GetDoVerbMSG)(THIS_ MSG *pMsg) PURE; }; //=========================================================================== // IConnectionPointCB interface #undef INTERFACE #define INTERFACE IConnectionPointCB DECLARE_INTERFACE_(IConnectionPointCB, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IConnectionPointCB Methods *** STDMETHOD(OnAdvise) (THIS_ REFIID iid, DWORD cSinks, ULONG_PTR dwCookie) PURE; STDMETHOD(OnUnadvise) (THIS_ REFIID iid, DWORD cSinks, ULONG_PTR dwCookie) PURE; }; //=========================================================================== // IDelegateDropTargetCB interface // // This interface is used by CDelegateDropTarget implementation in shdocvw // to generate an IDropTarget implementation that delegates to different // IDropTarget implementations depending on the point currently over. The // implementor of IDelegateDropTargetCB can handle feedback, scrolling, // hit testing, and returning interfaces for ids returned from hit testing. // // GetWindows returns the hwnd to lock and the hwnd to scroll (not necesarily // the same window, as you often want to lock the parent of the window // you want to scroll) // // HitTest should return an id of the object over as well as // uptate UI (highlights, etc). if ppt is NULL // that means remove any UI as the drag is terminating. // this should be able to handle hittesting on points not // even inside hwndScroll. // // GetObject returns an interface for an id returned from HitTest // // OnDrop gives the CB a chance to take action on the drop. // returning S_FALSE from this function prevents // CDelegateDropTarget from calling pdt->Drop(...). // #undef INTERFACE #define INTERFACE IDelegateDropTargetCB DECLARE_INTERFACE_(IDelegateDropTargetCB, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IDelegateDropTargetCB Methods *** STDMETHOD(GetWindows) (THIS_ HWND * phwndLock, HWND * phwndScroll) PURE; STDMETHOD(HitTest) (THIS_ LPPOINT ppt, DWORD * pdwId) PURE; STDMETHOD(GetObject) (THIS_ DWORD dwId, REFIID riid, void **ppv) PURE; STDMETHOD(OnDrop) (THIS_ IDropTarget *pdt, IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) PURE; }; #ifdef __COMMCTRL_DA_DEFINED__ // we need HDPAs for this interface // // IOrderList - for ordering info in favorites/channels // // Typical usage is: GetOrderList, AllocOrderItem, insert into correct // position, SetOrderList, and then FreeOrderList. // typedef struct { LPITEMIDLIST pidl; // IDlist for this item int nOrder; // Ordinal indicating user preference DWORD lParam; // store custom order info. } ORDERITEM, * PORDERITEM; // Values for SortOrderList #define OI_SORTBYNAME 0 #define OI_SORTBYORDINAL 1 #define OI_MERGEBYNAME 2 #undef INTERFACE #define INTERFACE IOrderList DECLARE_INTERFACE_(IOrderList, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IOrderList Methods *** STDMETHOD(GetOrderList)(THIS_ HDPA * phdpa) PURE; STDMETHOD(SetOrderList)(THIS_ HDPA hdpa, IShellFolder *psf) PURE; STDMETHOD(FreeOrderList)(THIS_ HDPA hdpa) PURE; STDMETHOD(SortOrderList)(THIS_ HDPA hdpa, DWORD dw) PURE; STDMETHOD(AllocOrderItem)(THIS_ PORDERITEM * ppoi, LPCITEMIDLIST pidl) PURE; STDMETHOD(FreeOrderItem)(THIS_ PORDERITEM poi) PURE; }; #undef INTERFACE #define INTERFACE IOrderList2 DECLARE_INTERFACE_(IOrderList2, IOrderList) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IOrderList Methods *** STDMETHOD(GetOrderList)(THIS_ HDPA * phdpa) PURE; // BUGBUG (lamadio): This assumes Favorites Menu STDMETHOD(SetOrderList)(THIS_ HDPA hdpa, IShellFolder *psf) PURE; // BUGBUG (lamadio): This assumes Favorites Menu STDMETHOD(FreeOrderList)(THIS_ HDPA hdpa) PURE; STDMETHOD(SortOrderList)(THIS_ HDPA hdpa, DWORD dw) PURE; STDMETHOD(AllocOrderItem)(THIS_ PORDERITEM * ppoi, LPCITEMIDLIST pidl) PURE; STDMETHOD(FreeOrderItem)(THIS_ PORDERITEM poi) PURE; // *** IOrderList2 STDMETHOD(LoadFromStream)(THIS_ IStream* pstm, HDPA* phdpa, IShellFolder* psf) PURE; STDMETHOD(SaveToStream)(THIS_ IStream* pstm, HDPA hdpa) PURE; }; #endif //=========================================================================== // IShellHTMLWindowSupport private COmWindow interface. This should never be exposed. typedef struct IHTMLElement IHTMLElement; #undef INTERFACE #define INTERFACE IShellHTMLWindowSupport DECLARE_INTERFACE_(IShellHTMLWindowSupport, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(ViewReleaseIntelliForms)(THIS) PURE; STDMETHOD(ViewReleased)(THIS) PURE; STDMETHOD(ViewActivated)(THIS) PURE; STDMETHOD(ReadyStateChangedTo)(THIS_ long, IShellView* ) PURE; STDMETHOD(CanNavigate)(THIS) PURE; STDMETHOD(ActiveElementChanged)(THIS_ IHTMLElement * pHTMLElement) PURE; }; //=========================================================================== // IShellHTMLWindowSupport2 private COmWindow interface. This should never be exposed. #undef INTERFACE #define INTERFACE IShellHTMLWindowSupport2 DECLARE_INTERFACE_(IShellHTMLWindowSupport2, IShellHTMLWindowSupport) { STDMETHOD(IsGalleryMeta)(THIS_ BOOL bFlag) PURE; }; //=========================================================================== // IBandProxy private COmWindow interface. This should never be exposed. #undef INTERFACE #define INTERFACE IBandProxy DECLARE_INTERFACE_(IBandProxy, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IBandProxy Methods *** STDMETHOD(SetSite) (THIS_ IUnknown* punkSite) PURE; STDMETHOD(CreateNewWindow) (THIS_ IUnknown** ppunk) PURE; STDMETHOD(GetBrowserWindow) (THIS_ IUnknown** ppunk) PURE; STDMETHOD(IsConnected) (THIS) PURE; STDMETHOD(NavigateToPIDL) (THIS_ LPCITEMIDLIST pidl) PURE; STDMETHOD(NavigateToURL) (THIS_ LPCWSTR wzUrl, VARIANT * Flags) PURE; }; //=========================================================================== // // Make it sure that we include ole2x.h and shlobj.h // #if defined(__IOleInPlaceSite_FWD_DEFINED__) && defined(FCIDM_SHVIEWFIRST) #ifdef HLINK_H #include typedef struct { HWND _hwnd; ITravelLog *_ptl; IHlinkFrame *_phlf; IWebBrowser2 *_pautoWB2; // use this to reference _pauto's IWebBrowser2 functions IExpDispSupport *_pautoEDS; // use this to reference _pauto's IExpDispSupport functions IShellService *_pautoSS; // use this to reference _pauto's IShellService functions int _eSecureLockIcon; DWORD _fCreatingViewWindow :1; UINT _uActivateState; // this is the state we should use when we go active.. // this is here so that derived classes can set us for UI or non-UI active // The following pidl is used in CBaseBrowser2::GetViewStateStream because // at that time, neither _pidlCur nor _pidlPending are initialized. LPCITEMIDLIST _pidlNewShellView; IOleCommandTarget* _pctView; LPITEMIDLIST _pidlCur; IShellView *_psv; IShellFolder *_psf; // IShellFolder for _psv (used in CVOCBrowser) HWND _hwndView; LPWSTR _pszTitleCur; LPITEMIDLIST _pidlPending; IShellView *_psvPending; IShellFolder *_psfPending; HWND _hwndViewPending; LPWSTR _pszTitlePending; BOOL _fIsViewMSHTML; BOOL _fPrivacyImpacted; } BASEBROWSERDATA, *LPBASEBROWSERDATA; typedef const BASEBROWSERDATA *LPCBASEBROWSERDATA; #include #else // so (unref'ed) ifaces will compile (?) typedef LPVOID BASEBROWSERDATA; typedef LPCVOID *LPBASEBROWSERDATA; // BUGBUG LPVOID? typedef LPCVOID *LPCBASEBROWSERDATA; #endif // hlink_h typedef struct _travellog * PTRAVELLOG; #undef INTERFACE #define INTERFACE IBrowserService DECLARE_INTERFACE_(IBrowserService, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IBrowserService specific methods *** STDMETHOD(GetParentSite)(THIS_ struct IOleInPlaceSite** ppipsite) PURE; STDMETHOD(SetTitle)(THIS_ IShellView* psv, LPCWSTR pszName) PURE; STDMETHOD(GetTitle)(THIS_ IShellView* psv, LPWSTR pszName, DWORD cchName) PURE; STDMETHOD(GetOleObject)(THIS_ struct IOleObject** ppobjv) PURE; // think about this one.. I'm not sure we want to expose this -- Chee // BUGBUG:: Yep soon we should have interface instead. // My impression is that we won't document this whole interface??? STDMETHOD(GetTravelLog)(THIS_ ITravelLog** pptl) PURE; STDMETHOD(ShowControlWindow)(THIS_ UINT id, BOOL fShow) PURE; STDMETHOD(IsControlWindowShown)(THIS_ UINT id, BOOL *pfShown) PURE; STDMETHOD(IEGetDisplayName)(THIS_ LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) PURE; STDMETHOD(IEParseDisplayName)(THIS_ UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST * ppidlOut) PURE; STDMETHOD(DisplayParseError)(THIS_ HRESULT hres, LPCWSTR pwszPath) PURE; STDMETHOD(NavigateToPidl)(THIS_ LPCITEMIDLIST pidl, DWORD grfHLNF) PURE; STDMETHOD (SetNavigateState)(THIS_ BNSTATE bnstate) PURE; STDMETHOD (GetNavigateState) (THIS_ BNSTATE *pbnstate) PURE; STDMETHOD (NotifyRedirect) (THIS_ struct IShellView* psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) PURE; STDMETHOD (UpdateWindowList) (THIS) PURE; STDMETHOD (UpdateBackForwardState) (THIS) PURE; STDMETHOD(SetFlags)(THIS_ DWORD dwFlags, DWORD dwFlagMask) PURE; STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE; // Tells if it can navigate now or not. STDMETHOD (CanNavigateNow) (THIS) PURE; STDMETHOD (GetPidl) (THIS_ LPITEMIDLIST *ppidl) PURE; STDMETHOD (SetReferrer) (THIS_ LPITEMIDLIST pidl) PURE; STDMETHOD_(DWORD, GetBrowserIndex)(THIS) PURE; STDMETHOD (GetBrowserByIndex)(THIS_ DWORD dwID, IUnknown **ppunk) PURE; STDMETHOD (GetHistoryObject)(THIS_ IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) PURE; STDMETHOD (SetHistoryObject)(THIS_ IOleObject *pole, BOOL fIsLocalAnchor) PURE; STDMETHOD (CacheOLEServer)(THIS_ IOleObject *pole) PURE; STDMETHOD (GetSetCodePage)(THIS_ VARIANT* pvarIn, VARIANT* pvarOut) PURE; STDMETHOD (OnHttpEquiv)(THIS_ IShellView* psv, BOOL fDone, VARIANT* pvarargIn, VARIANT* pvarargOut) PURE; STDMETHOD (GetPalette)( THIS_ HPALETTE * hpal ) PURE; STDMETHOD (RegisterWindow)(THIS_ BOOL fUnregister, int swc) PURE; // Warning! Do not add any new methods to this interface // because IE4 shell32.dll uses it, so changing the interface // breaks IE4 interop. }; #define BSF_REGISTERASDROPTARGET 0x00000001 #define BSF_THEATERMODE 0x00000002 #define BSF_NOLOCALFILEWARNING 0x00000010 #define BSF_UISETBYAUTOMATION 0x00000100 #define BSF_RESIZABLE 0x00000200 #define BSF_CANMAXIMIZE 0x00000400 #define BSF_TOPBROWSER 0x00000800 #define BSF_NAVNOHISTORY 0x00001000 #define BSF_HTMLNAVCANCELED 0x00002000 #define BSF_DONTSHOWNAVCANCELPAGE 0x00004000 #define BSF_SETNAVIGATABLECODEPAGE 0x00008000 #define BSF_DELEGATEDNAVIGATION 0x00010000 #define TRAVELLOG_LOCALANCHOR 0x00000001 #define TRAVELLOG_FORCEUPDATE 0x00000002 #include typedef struct SToolbarItem { IDockingWindow * ptbar; BORDERWIDTHS rcBorderTool; LPWSTR pwszItem; BOOL fShow; HMONITOR hMon; } TOOLBARITEM, *LPTOOLBARITEM; #define ITB_VIEW ((UINT)-1) // view #include /* Assume byte packing throughout */ struct tagFolderSetData; // TEMPORARY. this is so that we don't have to keep writing dummy subs in basesb as we're // building basesb2 DECLARE_INTERFACE_(IBrowserService2, IBrowserService) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IBrowserService specific methods *** // TODO: break into 3 sections (outer, inner, and both/inherit) STDMETHOD(GetParentSite)(THIS_ struct IOleInPlaceSite** ppipsite) PURE; STDMETHOD(SetTitle)(THIS_ IShellView* psv, LPCWSTR pszName) PURE; STDMETHOD(GetTitle)(THIS_ IShellView* psv, LPWSTR pszName, DWORD cchName) PURE; STDMETHOD(GetOleObject)(THIS_ struct IOleObject** ppobjv) PURE; // think about this one.. I'm not sure we want to expose this -- Chee // BUGBUG:: Yep soon we should have interface instead. // My impression is that we won't document this whole interface??? STDMETHOD(GetTravelLog)(THIS_ ITravelLog** pptl) PURE; STDMETHOD(ShowControlWindow)(THIS_ UINT id, BOOL fShow) PURE; STDMETHOD(IsControlWindowShown)(THIS_ UINT id, BOOL *pfShown) PURE; STDMETHOD(IEGetDisplayName)(THIS_ LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) PURE; STDMETHOD(IEParseDisplayName)(THIS_ UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST * ppidlOut) PURE; STDMETHOD(DisplayParseError)(THIS_ HRESULT hres, LPCWSTR pwszPath) PURE; STDMETHOD(NavigateToPidl)(THIS_ LPCITEMIDLIST pidl, DWORD grfHLNF) PURE; STDMETHOD (SetNavigateState)(THIS_ BNSTATE bnstate) PURE; STDMETHOD (GetNavigateState) (THIS_ BNSTATE *pbnstate) PURE; STDMETHOD (NotifyRedirect) (THIS_ struct IShellView* psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) PURE; STDMETHOD (UpdateWindowList) (THIS) PURE; STDMETHOD (UpdateBackForwardState) (THIS) PURE; STDMETHOD(SetFlags)(THIS_ DWORD dwFlags, DWORD dwFlagMask) PURE; STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE; // Tells if it can navigate now or not. STDMETHOD (CanNavigateNow) (THIS) PURE; STDMETHOD (GetPidl) (THIS_ LPITEMIDLIST *ppidl) PURE; STDMETHOD (SetReferrer) (THIS_ LPITEMIDLIST pidl) PURE; STDMETHOD_(DWORD, GetBrowserIndex)(THIS) PURE; STDMETHOD (GetBrowserByIndex)(THIS_ DWORD dwID, IUnknown **ppunk) PURE; STDMETHOD (GetHistoryObject)(THIS_ IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) PURE; STDMETHOD (SetHistoryObject)(THIS_ IOleObject *pole, BOOL fIsLocalAnchor) PURE; STDMETHOD (CacheOLEServer)(THIS_ IOleObject *pole) PURE; STDMETHOD (GetSetCodePage)(THIS_ VARIANT* pvarIn, VARIANT* pvarOut) PURE; STDMETHOD (OnHttpEquiv)(THIS_ IShellView* psv, BOOL fDone, VARIANT* pvarargIn, VARIANT* pvarargOut) PURE; STDMETHOD (GetPalette)( THIS_ HPALETTE * hpal ) PURE; STDMETHOD (RegisterWindow)(THIS_ BOOL fUnregister, int swc) PURE; // Stuff added for shbrowse->shbrows2 split // These remove "friend" functions and classes // STDMETHOD_(LRESULT, WndProcBS)(THIS_ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (SetAsDefFolderSettings)(THIS) PURE; STDMETHOD (GetViewRect)(THIS_ RECT * prc) PURE; STDMETHOD (OnSize)(THIS_ WPARAM wParam) PURE; STDMETHOD (OnCreate)(THIS_ LPCREATESTRUCT pcs) PURE; STDMETHOD_(LRESULT, OnCommand)(THIS_ WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (OnDestroy)(THIS ) PURE; STDMETHOD_(LRESULT, OnNotify)(THIS_ NMHDR * pnm) PURE; STDMETHOD (OnSetFocus)(THIS ) PURE; STDMETHOD (OnFrameWindowActivateBS)(THIS_ BOOL fActive) PURE; STDMETHOD (ReleaseShellView)(THIS ) PURE; STDMETHOD (ActivatePendingView)(THIS ) PURE; STDMETHOD (CreateViewWindow)(THIS_ IShellView* psvNew, IShellView* psvOld, LPRECT prcView, HWND* phwnd) PURE; STDMETHOD (CreateBrowserPropSheetExt)(THIS_ REFIID riid, void **ppv) PURE; // these could be base browser only interfaces // they are not overridden by anyone, and perhaps only there for the aggregators to get info from the // aggregatee. NOTE: where basesb calls these, // it does NOT go through _pbsOuter STDMETHOD (GetViewWindow)(THIS_ HWND * phwndView) PURE; STDMETHOD (GetBaseBrowserData)(THIS_ LPCBASEBROWSERDATA * pbbd) PURE; STDMETHOD_(LPBASEBROWSERDATA, PutBaseBrowserData)(THIS) PURE; STDMETHOD (InitializeTravelLog)(THIS_ ITravelLog* ptl, DWORD dw) PURE; STDMETHOD (SetTopBrowser)(THIS) PURE; STDMETHOD (Offline)(THIS_ int iCmd) PURE; STDMETHOD (AllowViewResize)(THIS_ BOOL f) PURE; STDMETHOD (SetActivateState)(THIS_ UINT u) PURE; STDMETHOD (UpdateSecureLockIcon)(THIS_ int eSecureLock) PURE; STDMETHOD (InitializeDownloadManager)(THIS) PURE; STDMETHOD (InitializeTransitionSite)(THIS) PURE; STDMETHOD (_Initialize)(THIS_ HWND hwnd, IUnknown *pauto) PURE; // BEGIN REVIEW: review names and need of each. // // this first set could be basebrowser only members. no one overrides // NOTE: where basesb calls these, it does NOT go throug _pbsOuter STDMETHOD (_CancelPendingNavigationAsync)(THIS) PURE; STDMETHOD (_CancelPendingView)(THIS) PURE; STDMETHOD (_MaySaveChanges)(THIS) PURE; STDMETHOD (_PauseOrResumeView)(THIS_ BOOL fPaused) PURE; STDMETHOD (_DisableModeless)(THIS) PURE; // rethink these... are all of these necessary? STDMETHOD (_NavigateToPidl)(THIS_ LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags)PURE; STDMETHOD (_TryShell2Rename)(THIS_ IShellView* psv, LPCITEMIDLIST pidlNew)PURE; STDMETHOD (_SwitchActivationNow)(THIS )PURE; // this set is overridden and called thru _pbsOuter (and SUPER:_pbsInner) STDMETHOD (_ExecChildren)(THIS_ IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)PURE; STDMETHOD (_SendChildren)(THIS_ HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; //END REVIEW: // querying from the outer. STDMETHOD (GetFolderSetData)(THIS_ struct tagFolderSetData* pfsd) PURE; // Toolbar stuff is here temporarily. Eventually it will move out // of basesb into commonsb, so I'm keeping the underscore "_" // Except those noted below, none of these are overridden by // outer guys, so no calls are made through _pbsOuter STDMETHOD (_OnFocusChange)(THIS_ UINT itb) PURE; STDMETHOD (v_ShowHideChildWindows)(THIS_ BOOL fChildOnly) PURE; // NOTE: overridden and called thru _pbsOuter STDMETHOD_(UINT,_get_itbLastFocus)(THIS) PURE; STDMETHOD (_put_itbLastFocus)(THIS_ UINT itbLastFocus) PURE; STDMETHOD (_UIActivateView)(THIS_ UINT uState) PURE; // Check the following functions STDMETHOD (_GetViewBorderRect)(THIS_ RECT* prc) PURE; STDMETHOD (_UpdateViewRectSize)(THIS) PURE; STDMETHOD (_ResizeNextBorder)(THIS_ UINT itb) PURE; STDMETHOD (_ResizeView)(THIS) PURE; STDMETHOD (_GetEffectiveClientArea)(THIS_ LPRECT lprectBorder, HMONITOR hmon) PURE; // Desktop needs to override this from commonsb STDMETHOD_(IStream*,v_GetViewStream)(THIS_ LPCITEMIDLIST pidl, DWORD grfMode, LPCWSTR pwszName) PURE; // Desktop needs access to these commonsb functions, they are not overridden: STDMETHOD_(LRESULT,ForwardViewMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (SetAcceleratorMenu)(THIS_ HACCEL hacc) PURE; STDMETHOD_(int,_GetToolbarCount)(THIS) PURE; STDMETHOD_(LPTOOLBARITEM,_GetToolbarItem)(THIS_ int itb) PURE; STDMETHOD (_SaveToolbars)(THIS_ IStream* pstm) PURE; STDMETHOD (_LoadToolbars)(THIS_ IStream* pstm) PURE; STDMETHOD (_CloseAndReleaseToolbars)(THIS_ BOOL fClose) PURE; STDMETHOD (v_MayGetNextToolbarFocus)(THIS_ LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM * pptbi, HWND * phwnd) PURE; STDMETHOD (_ResizeNextBorderHelper)(THIS_ UINT itb, BOOL bUseHmonitor) PURE; STDMETHOD_(UINT,_FindTBar)(THIS_ IUnknown* punkSrc) PURE; STDMETHOD (_SetFocus)(THIS_ LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) PURE; STDMETHOD (v_MayTranslateAccelerator)(THIS_ MSG* pmsg) PURE; STDMETHOD (_GetBorderDWHelper)(THIS_ IUnknown* punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) PURE; // Shell browser needs to override this from basesb. STDMETHOD (v_CheckZoneCrossing)(THIS_ LPCITEMIDLIST pidl) PURE; }; DECLARE_INTERFACE_(IBrowserService3, IBrowserService2) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IBrowserService specific methods *** // TODO: break into 3 sections (outer, inner, and both/inherit) STDMETHOD(GetParentSite)(THIS_ struct IOleInPlaceSite** ppipsite) PURE; STDMETHOD(SetTitle)(THIS_ IShellView* psv, LPCWSTR pszName) PURE; STDMETHOD(GetTitle)(THIS_ IShellView* psv, LPWSTR pszName, DWORD cchName) PURE; STDMETHOD(GetOleObject)(THIS_ struct IOleObject** ppobjv) PURE; // think about this one.. I'm not sure we want to expose this -- Chee // BUGBUG:: Yep soon we should have interface instead. // My impression is that we won't document this whole interface??? STDMETHOD(GetTravelLog)(THIS_ ITravelLog** pptl) PURE; STDMETHOD(ShowControlWindow)(THIS_ UINT id, BOOL fShow) PURE; STDMETHOD(IsControlWindowShown)(THIS_ UINT id, BOOL *pfShown) PURE; STDMETHOD(IEGetDisplayName)(THIS_ LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) PURE; STDMETHOD(IEParseDisplayName)(THIS_ UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST * ppidlOut) PURE; STDMETHOD(DisplayParseError)(THIS_ HRESULT hres, LPCWSTR pwszPath) PURE; STDMETHOD(NavigateToPidl)(THIS_ LPCITEMIDLIST pidl, DWORD grfHLNF) PURE; STDMETHOD (SetNavigateState)(THIS_ BNSTATE bnstate) PURE; STDMETHOD (GetNavigateState) (THIS_ BNSTATE *pbnstate) PURE; STDMETHOD (NotifyRedirect) (THIS_ struct IShellView* psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) PURE; STDMETHOD (UpdateWindowList) (THIS) PURE; STDMETHOD (UpdateBackForwardState) (THIS) PURE; STDMETHOD(SetFlags)(THIS_ DWORD dwFlags, DWORD dwFlagMask) PURE; STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE; // Tells if it can navigate now or not. STDMETHOD (CanNavigateNow) (THIS) PURE; STDMETHOD (GetPidl) (THIS_ LPITEMIDLIST *ppidl) PURE; STDMETHOD (SetReferrer) (THIS_ LPITEMIDLIST pidl) PURE; STDMETHOD_(DWORD, GetBrowserIndex)(THIS) PURE; STDMETHOD (GetBrowserByIndex)(THIS_ DWORD dwID, IUnknown **ppunk) PURE; STDMETHOD (GetHistoryObject)(THIS_ IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) PURE; STDMETHOD (SetHistoryObject)(THIS_ IOleObject *pole, BOOL fIsLocalAnchor) PURE; STDMETHOD (CacheOLEServer)(THIS_ IOleObject *pole) PURE; STDMETHOD (GetSetCodePage)(THIS_ VARIANT* pvarIn, VARIANT* pvarOut) PURE; STDMETHOD (OnHttpEquiv)(THIS_ IShellView* psv, BOOL fDone, VARIANT* pvarargIn, VARIANT* pvarargOut) PURE; STDMETHOD (GetPalette)( THIS_ HPALETTE * hpal ) PURE; STDMETHOD (RegisterWindow)(THIS_ BOOL fUnregister, int swc) PURE; // Stuff added for shbrowse->shbrows2 split // These remove "friend" functions and classes // STDMETHOD_(LRESULT, WndProcBS)(THIS_ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (SetAsDefFolderSettings)(THIS) PURE; STDMETHOD (GetViewRect)(THIS_ RECT * prc) PURE; STDMETHOD (OnSize)(THIS_ WPARAM wParam) PURE; STDMETHOD (OnCreate)(THIS_ LPCREATESTRUCT pcs) PURE; STDMETHOD_(LRESULT, OnCommand)(THIS_ WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (OnDestroy)(THIS ) PURE; STDMETHOD_(LRESULT, OnNotify)(THIS_ NMHDR * pnm) PURE; STDMETHOD (OnSetFocus)(THIS ) PURE; STDMETHOD (OnFrameWindowActivateBS)(THIS_ BOOL fActive) PURE; STDMETHOD (ReleaseShellView)(THIS ) PURE; STDMETHOD (ActivatePendingView)(THIS ) PURE; STDMETHOD (CreateViewWindow)(THIS_ IShellView* psvNew, IShellView* psvOld, LPRECT prcView, HWND* phwnd) PURE; STDMETHOD (CreateBrowserPropSheetExt)(THIS_ REFIID riid, void **ppv) PURE; // these could be base browser only interfaces // they are not overridden by anyone, and perhaps only there for the aggregators to get info from the // aggregatee. NOTE: where basesb calls these, // it does NOT go through _pbsOuter STDMETHOD (GetViewWindow)(THIS_ HWND * phwndView) PURE; STDMETHOD (GetBaseBrowserData)(THIS_ LPCBASEBROWSERDATA * pbbd) PURE; STDMETHOD_(LPBASEBROWSERDATA, PutBaseBrowserData)(THIS) PURE; STDMETHOD (InitializeTravelLog)(THIS_ ITravelLog* ptl, DWORD dw) PURE; STDMETHOD (SetTopBrowser)(THIS) PURE; STDMETHOD (Offline)(THIS_ int iCmd) PURE; STDMETHOD (AllowViewResize)(THIS_ BOOL f) PURE; STDMETHOD (SetActivateState)(THIS_ UINT u) PURE; STDMETHOD (UpdateSecureLockIcon)(THIS_ int eSecureLock) PURE; STDMETHOD (InitializeDownloadManager)(THIS) PURE; STDMETHOD (InitializeTransitionSite)(THIS) PURE; STDMETHOD (_Initialize)(THIS_ HWND hwnd, IUnknown *pauto) PURE; // BEGIN REVIEW: review names and need of each. // // this first set could be basebrowser only members. no one overrides // NOTE: where basesb calls these, it does NOT go throug _pbsOuter STDMETHOD (_CancelPendingNavigationAsync)(THIS) PURE; STDMETHOD (_CancelPendingView)(THIS) PURE; STDMETHOD (_MaySaveChanges)(THIS) PURE; STDMETHOD (_PauseOrResumeView)(THIS_ BOOL fPaused) PURE; STDMETHOD (_DisableModeless)(THIS) PURE; // rethink these... are all of these necessary? STDMETHOD (_NavigateToPidl)(THIS_ LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags)PURE; STDMETHOD (_TryShell2Rename)(THIS_ IShellView* psv, LPCITEMIDLIST pidlNew)PURE; STDMETHOD (_SwitchActivationNow)(THIS )PURE; // this set is overridden and called thru _pbsOuter (and SUPER:_pbsInner) STDMETHOD (_ExecChildren)(THIS_ IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)PURE; STDMETHOD (_SendChildren)(THIS_ HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; //END REVIEW: // querying from the outer. STDMETHOD (GetFolderSetData)(THIS_ struct tagFolderSetData* pfsd) PURE; // Toolbar stuff is here temporarily. Eventually it will move out // of basesb into commonsb, so I'm keeping the underscore "_" // Except those noted below, none of these are overridden by // outer guys, so no calls are made through _pbsOuter STDMETHOD (_OnFocusChange)(THIS_ UINT itb) PURE; STDMETHOD (v_ShowHideChildWindows)(THIS_ BOOL fChildOnly) PURE; // NOTE: overridden and called thru _pbsOuter STDMETHOD_(UINT,_get_itbLastFocus)(THIS) PURE; STDMETHOD (_put_itbLastFocus)(THIS_ UINT itbLastFocus) PURE; STDMETHOD (_UIActivateView)(THIS_ UINT uState) PURE; // Check the following functions STDMETHOD (_GetViewBorderRect)(THIS_ RECT* prc) PURE; STDMETHOD (_UpdateViewRectSize)(THIS) PURE; STDMETHOD (_ResizeNextBorder)(THIS_ UINT itb) PURE; STDMETHOD (_ResizeView)(THIS) PURE; STDMETHOD (_GetEffectiveClientArea)(THIS_ LPRECT lprectBorder, HMONITOR hmon) PURE; // Desktop needs to override this from commonsb STDMETHOD_(IStream*,v_GetViewStream)(THIS_ LPCITEMIDLIST pidl, DWORD grfMode, LPCWSTR pwszName) PURE; // Desktop needs access to these commonsb functions, they are not overridden: STDMETHOD_(LRESULT,ForwardViewMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD (SetAcceleratorMenu)(THIS_ HACCEL hacc) PURE; STDMETHOD_(int,_GetToolbarCount)(THIS) PURE; STDMETHOD_(LPTOOLBARITEM,_GetToolbarItem)(THIS_ int itb) PURE; STDMETHOD (_SaveToolbars)(THIS_ IStream* pstm) PURE; STDMETHOD (_LoadToolbars)(THIS_ IStream* pstm) PURE; STDMETHOD (_CloseAndReleaseToolbars)(THIS_ BOOL fClose) PURE; STDMETHOD (v_MayGetNextToolbarFocus)(THIS_ LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM * pptbi, HWND * phwnd) PURE; STDMETHOD (_ResizeNextBorderHelper)(THIS_ UINT itb, BOOL bUseHmonitor) PURE; STDMETHOD_(UINT,_FindTBar)(THIS_ IUnknown* punkSrc) PURE; STDMETHOD (_SetFocus)(THIS_ LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) PURE; STDMETHOD (v_MayTranslateAccelerator)(THIS_ MSG* pmsg) PURE; STDMETHOD (_GetBorderDWHelper)(THIS_ IUnknown* punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) PURE; // Shell browser needs to override this from basesb. STDMETHOD (v_CheckZoneCrossing)(THIS_ LPCITEMIDLIST pidl) PURE; // IBrowserService3 STDMETHOD (_PositionViewWindow)(THIS_ HWND hwnd, LPRECT prc) PURE; // this was virtual in basesb/shbrowse, but missed this interface! }; typedef enum { NAVDATA_DONTUPDATETRAVELLOG = 0x00000001, NAVDATA_FRAMEWINDOW = 0x00000002, NAVDATA_FRAMECREATION = 0x00000004, NAVDATA_RESTARTLOAD = 0x00000008, } ENUMNAVDATA; typedef struct IHTMLWindow2 IHTMLWindow2; #undef INTERFACE #define INTERFACE ITridentService DECLARE_INTERFACE_(ITridentService, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ITridentService specific methods *** STDMETHOD(FireBeforeNavigate2)(THIS_ IDispatch * pDispatch, LPCTSTR lpszUrl, DWORD dwFlags, LPCTSTR lpszFrameName, LPBYTE pPostData, DWORD cbPostData, LPCTSTR lpszHeaders, BOOL fPlayNavSound, BOOL * pfCancel) PURE; STDMETHOD(FireNavigateComplete2)(THIS_ IHTMLWindow2 * pHTMLWindow2, DWORD dwFlags) PURE; STDMETHOD(FireDownloadBegin)(THIS) PURE; STDMETHOD(FireDownloadComplete)(THIS) PURE; STDMETHOD(FireDocumentComplete)(THIS_ IHTMLWindow2 * pHTMLWindow, DWORD dwFlags) PURE; STDMETHOD(UpdateDesktopComponent)(THIS_ IHTMLWindow2 * pHTMLWindow) PURE; STDMETHOD(GetPendingUrl)(THIS_ BSTR * pbstrPendingUrl) PURE; STDMETHOD(ActiveElementChanged)(THIS_ IHTMLElement * pHTMLElement) PURE; STDMETHOD(GetUrlSearchComponent)(THIS_ BSTR * pbstrSearch) PURE; STDMETHOD(IsErrorUrl)(THIS_ LPCTSTR lpszUrl, BOOL *pfIsError) PURE; }; #undef INTERFACE #define INTERFACE ITridentService2 DECLARE_INTERFACE_(ITridentService2, ITridentService) { // *** ITridentService2 methods *** STDMETHOD(AttachMyPics)(THIS_ void *pDoc2, void **ppMyPics) PURE; STDMETHOD_(BOOL,ReleaseMyPics)(THIS_ void *pMyPics) PURE; STDMETHOD(IsGalleryMeta)(THIS_ BOOL bFlag, void *pMyPics) PURE; STDMETHOD(EmailPicture)(THIS_ BSTR bstrURL) PURE; STDMETHOD(FireNavigateError)(THIS_ IHTMLWindow2 * pHTMLWindow2, BSTR bstrURL, BSTR bstrTargetFrameName, DWORD dwStatusCode, BOOL * pfCancel) PURE; STDMETHOD(FirePrintTemplateEvent)(THIS_ IHTMLWindow2 * pHTMLWindow2, DISPID dispidPrintEvent) PURE; STDMETHOD(FireUpdatePageStatus)(THIS_ IHTMLWindow2 * pHTMLWindow2, DWORD nPage, BOOL fDone) PURE; STDMETHOD(FirePrivacyImpactedStateChange)(THIS_ BOOL bPrivacyImpacted) PURE; STDMETHOD(InitAutoImageResize)(THIS) PURE; STDMETHOD(UnInitAutoImageResize)(THIS) PURE; }; #undef INTERFACE #define INTERFACE IWebBrowserPriv DECLARE_INTERFACE_(IWebBrowserPriv, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IWebBrowserPriv specific methods *** STDMETHOD(NavigateWithBindCtx)(THIS_ VARIANT *pvarUrl, VARIANT *pvarFlags, VARIANT *pvarTargetFrameName, VARIANT *pvarPostData, VARIANT *pvarHeaders, IBindCtx * pBindCtx, BSTR bstrLocation) PURE; STDMETHOD(OnClose)(THIS) PURE; }; // these MUST be listed in the same order a c_szPropNames in deskbar.cpp typedef enum { PROPDATA_SIDE = 0, PROPDATA_MODE, PROPDATA_LEFT, PROPDATA_TOP, PROPDATA_RIGHT, PROPDATA_BOTTOM, PROPDATA_DELETEABLE, PROPDATA_X, PROPDATA_Y, PROPDATA_CX, PROPDATA_CY, PROPDATA_COUNT } ENUMPROPDATA ; // PROPDATA_MODE values: // (aka. WBM_* -- webbar modes (_eMode)) #define WBM_BOTTOMMOST ((UINT) 0x0) // bottommost #define WBM_TOPMOST ((UINT) 0x1) // topmost #define WBM_FLOATING ((UINT) 0x2) // floating #define WBM_NIL ((UINT) 0x7) // nil #undef INTERFACE #define INTERFACE IDockingBarPropertyBagInit DECLARE_INTERFACE_(IDockingBarPropertyBagInit, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // *** IDockingBarPropertyBag *** STDMETHOD(SetDataDWORD)(THIS_ ENUMPROPDATA e, DWORD dwData) PURE; } ; #if (_WIN32_IE) >= 0x0400 //=========================================================================== // IAddressList private COmWindow interface. This should never be exposed. #undef INTERFACE #define INTERFACE IAddressList DECLARE_INTERFACE_(IAddressList, IWinEventHandler) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IWinEventHandler Methods *** STDMETHOD(OnWinEvent) (THIS_ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres) PURE; STDMETHOD(IsWindowOwner) (THIS_ HWND hwnd) PURE; // *** IAddressList Methods *** STDMETHOD(Connect) (THIS_ BOOL fConnect, HWND hwnd, IBrowserService* pbs, IBandProxy* pbp, IAutoComplete * pac) PURE; STDMETHOD(NavigationComplete) (THIS_ void *pvCShellUrl) PURE; STDMETHOD(Refresh) (THIS_ DWORD dwType) PURE; STDMETHOD(Load) (THIS) PURE; STDMETHOD(Save) (THIS) PURE; STDMETHOD(SetToListIndex) (THIS_ int nIndex, void *pvShelLUrl) PURE; STDMETHOD(FileSysChangeAL) (THIS_ DWORD dw, LPCITEMIDLIST *ppidl) PURE; }; #endif // DOC'ed for DOJ compliance ;end_internal // // IDocViewSite // #undef INTERFACE #define INTERFACE IDocViewSite DECLARE_INTERFACE_(IDocViewSite, IUnknown) { // *** 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; } ; ;begin_internal #endif //=========================================================================== // IDwnCodePage: This is a private interface to pass codepage info. #undef INTERFACE #define INTERFACE IDwnCodePage DECLARE_INTERFACE_(IDwnCodePage, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IDwnCodePage Methods *** STDMETHOD_(UINT,GetCodePage) (THIS) PURE; STDMETHOD(SetCodePage) (THIS_ UINT uiCP) PURE; }; SHSTDAPI SHDllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv); //=========================================================================== //---------------------------------------------------------------------------- #define IsLFNDriveORD 119 SHSTDAPI_(int) SHOutOfMemoryMessageBox(HWND hwndOwner, LPTSTR pszTitle, UINT fuStyle); SHSTDAPI_(BOOL) SHWinHelp(HWND hwndMain, LPCTSTR pszHelp, UINT usCommand, ULONG_PTR ulData); SHSTDAPI_(BOOL) RLBuildListOfPaths(void); #ifdef WINNT SHSTDAPI_(BOOL) RegenerateUserEnvironment(void **pPrevEnv, BOOL bSetCurrentEnv); #endif #define SHValidateUNCORD 173 // DOC'ed for DOJ compliance ;end_internal #define VALIDATEUNC_NOUI 0x0002 // don't bring up UI #define VALIDATEUNC_CONNECT 0x0001 // connect a drive letter #define VALIDATEUNC_PRINT 0x0004 // validate as print share instead of disk share #define VALIDATEUNC_VALID 0x0007 // valid flags SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, LPWSTR pszFile, UINT fConnect); ;begin_internal //---------------------------------------------------------------------------- #define OleStrToStrNORD 78 #define SHCloneSpecialIDListORD 89 #define SHDllGetClassObjectORD 128 #define SHLogILFromFSILORD 95 #define SHMapPIDLToSystemImageListIndexORD 77 #define SHShellFolderView_MessageORD 73 #define Shell_GetImageListsORD 71 #define SHGetSpecialFolderPathORD 175 #define StrToOleStrNORD 79 #define ILCloneORD 18 #define ILCloneFirstORD 19 #define ILCombineORD 25 #define ILCreateFromPathORD 157 #define ILFindChildORD 24 #define ILFreeORD 155 #define ILGetNextORD 153 #define ILGetSizeORD 152 #define ILIsEqualORD 21 #define ILRemoveLastIDORD 17 #define PathAddBackslashORD 32 #define PathCombineORD 37 #define PathIsExeORD 43 #define PathMatchSpecORD 46 #define SHGetSetSettingsORD 68 #define SHILCreateFromPathORD 28 #define SHFreeORD 195 #define CheckWinIniForAssocsORD 711 // DOC'ed for DOJ Compliance ;end_internal #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, LPCWSTR pszPIF, UINT hInf, UINT flOpt); SHSTDAPI_(int) PifMgr_GetProperties(HANDLE hProps, LPCSTR pszGroup, void *lpProps, int cbProps, UINT flOpt); SHSTDAPI_(int) PifMgr_SetProperties(HANDLE hProps, LPCSTR pszGroup, const VOID *lpProps, int cbProps, UINT flOpt); SHSTDAPI_(HANDLE) PifMgr_CloseProperties(HANDLE hProps, UINT flOpt); SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk); ;begin_internal #ifndef WINNT // Always usr TerminateThreadEx. BOOL APIENTRY TerminateThreadEx(HANDLE hThread, DWORD dwExitCode, BOOL bCleanupFlag); #define TerminateThread(hThread, dwExitCode) TerminateThreadEx(hThread, dwExitCode, TRUE) #endif // DOC'ed for DOJ Compliance ;end_internal SHSTDAPI_(BOOL) IsUserAnAdmin(void); ;begin_internal SHSTDAPI SHCreateSessionKey(REGSAM sam, HKEY *phkOut); // Sortof Gross but if we pass this flag in with STGM_CREATE we will fail if file already exists // with ERROR_ALREADY_EXISTS #define CSOF_FAILIFTHERE 0x80000000L //=========================================================================== // Structure for covert communication // between shdocvw's CShellBrowser::Exec() // and shell32's DefView WM_COMMAND handler // NOTE: this structure is revealed in the KB // (articles Q252610 and Q216954). So even though // it's in a private section, treat it as public. struct _DFVCMDDATA { HWND hwnd; // Browser hwnd VARIANTARG *pva; // Args passed to Exec() DWORD nCmdIDTranslated; // Replacement OLECMDID_* value }; typedef struct _DFVCMDDATA DFVCMDDATA; typedef struct _DFVCMDDATA *LPDFVCMDDATA; typedef const struct _DFVCMDDATA *LPCDFVCMDDATA; SHSTDAPI_(DWORD) SHGetProcessDword(DWORD idProcess, LONG iIndex); SHSTDAPI_(BOOL) SHSetShellWindowEx(HWND hwnd, HWND hwndChild); #define CCH_MENUMAX 80 // DOC: max size of a menu string // WinEventHandler message ranges #define MBHM_FIRST (0x00000001) // MenuBandHandler #define MBHM_LAST (0x000000ff) #define MSFM_FIRST (0x00000100) // MenuShellFolder #define MSFM_LAST (0x000001ff) #define FSFM_FIRST (0x00000200) // FileShellFolder #define FSFM_LAST (0x000002ff) //------------------------------------------------------------------------- // // SID_SMenuBandHandler // // The menuband calls QueryService(SID_SMenuBandHandler, IID_IWinEventHandler) // on its shellfolder. If the shellfolder supports this service, the // menuband will call the event handler on certain menu events. These // events and messages are as follows: // // MBHM_INITMENUPOPUP sent when a drop-down menu or submenu is // about to become active. // // // File-system ShellFolder events: // // FSFM_COMMAND sent when a file-system item is executed // //------------------------------------------------------------------------- typedef struct tagMBINITMENUPOPUP { DWORD dwMask; // MBIMP_* IShellFolder * psf; LPCITEMIDLIST pidl; HMENU hmenu; int iPos; } MBINITMENUPOPUP; #define MBIMP_HMENU 0x00000001 // hmenu and iPos are set // Messages sent to the WinEventHandler wParam lParam *plRet // ------ ------ --- #define MBHM_INITMENUPOPUP (MBHM_FIRST+0) // 0 MBINITMENUPOPUP * // Messages sent to the WinEventHandler wParam lParam *plRet // ------ ------ ------ #define FSFM_COMMAND (FSFM_FIRST+0) // cmd ID pidl //------------------------------------------------------------------------- // // IAugmentedShellFolder interface // // This provides methods to add multiple Shell Folder objects to a // single augmented object (CLSID_AugmentedShellFolder), which will // enumerate them as if they were in a single namespace. // // // [Member functions] // // IAugmentedShellFolder::AddNameSpace(rguidObject, psf, pidl) // Add the object represented by the IShellFolder interface to // the augmented list. The rguidObject is used to identify the // given object. It may be NULL. The optional pidl refers to // the location of the psf. // // IAugmentedShellFolder::GetNameSpaceID(pidl, rguidOut) // This method returns the rguidObject associated with the given // pidl. This is how a caller can identify which namespace the // pidl resides, given the list of IShellFolder objects that were // added to this augmented object. // // IAugmentedShellFolder::QueryNameSpace(dwNameSpaceID, pguidOut, ppsf) // Returns the shellfolder and guid associated with the given ID. // // IAugmentedShellFolder::EnumNameSpace(uNameSpace, pdwNameSpaceID) // Enumerates the namespace shellfolders. If uNameSpace is -1, // pdwNameSpaceID is ignored and this method returns the count of // shellfolders in the augmented namespace. Call this method with // uNameSpace starting at 0 to begin enumerating. Returns S_OK and // and namespace ID in *pdwNameSpaceID. // //------------------------------------------------------------------------- // IAugmentedShellFolder::AddNameSpace flags enum { ASFF_DEFAULT = 0x00000000, // There are no applicable Flags ASFF_SORTDOWN = 0x00000001, // Sort the items in this ISF to the bottom. ASFF_MERGESAMEGUID = 0x00000002, // Merge only namespaces with the same pguidObjects ASFF_COMMON = 0x00000004, // this is a "Common" or "All Users" folder // the following should all be collapsed to one ASFF_DEFNAMESPACE ASFF_DEFNAMESPACE_BINDSTG = 0x00000100, // The namespace is the default handler for BindToStorage() for merged child items. ASFF_DEFNAMESPACE_COMPARE = 0x00000200, // The namespace is the default handler for CompareIDs() for merged child items. ASFF_DEFNAMESPACE_VIEWOBJ = 0x00000400, // The namespace is the default handler for CreateViewObject() for merged child items. ASFF_DEFNAMESPACE_ATTRIB = 0x00001800, // The namespace is the default handler for GetAttributesOf() for merged child items. ASFF_DEFNAMESPACE_DISPLAYNAME = 0x00001000, // The namespace is the default handler for GetDisplayNameOf(), SetNameOf() and ParseDisplayName() for merged child items. ASFF_DEFNAMESPACE_UIOBJ = 0x00002000, // The namespace is the default handler for GetUIObjectOf() for merged child items. ASFF_DEFNAMESPACE_ITEMDATA = 0x00004000, // The namespace is the default handler for GetItemData() for merged child items. ASFF_DEFNAMESPACE_ALL = 0x0000FF00 // The namespace is the primary handler for all IShellFolder operations on merged child items. }; enum QUERYNAMESPACEINFO_MASK { ASFQNSI_FLAGS = 0x00000001, ASFQNSI_FOLDER = 0x00000002, ASFQNSI_GUID = 0x00000004, ASFQNSI_PIDL = 0x00000008, }; #include typedef struct QUERYNAMESPACEINFO { DWORD cbSize; DWORD dwMask; DWORD dwFlags; // ASFF_* IShellFolder *psf; GUID guidObject; LPITEMIDLIST pidl; } QUERYNAMESPACEINFO; #include /* Return to byte packing */ #undef INTERFACE #define INTERFACE IAugmentedShellFolder DECLARE_INTERFACE_(IAugmentedShellFolder, IShellFolder) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolder methods *** STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner,LPBC pbc, LPOLESTR pszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) (THIS_ HWND hwndOwner, DWORD grfFlags, IEnumIDList ** ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; // *** IAugmentedShellFolder methods *** STDMETHOD(AddNameSpace) (THIS_ const GUID * pguidObject, IShellFolder * psf, LPCITEMIDLIST pidl, DWORD dwFlags) PURE; STDMETHOD(GetNameSpaceID) (THIS_ LPCITEMIDLIST pidl, GUID * pguidOut) PURE; STDMETHOD(QueryNameSpace) (THIS_ DWORD dwID, GUID * pguidOut, IShellFolder ** ppsf) PURE; STDMETHOD(EnumNameSpace) (THIS_ DWORD uNameSpace, DWORD * pdwID) PURE; }; #undef INTERFACE #define INTERFACE IAugmentedShellFolder2 DECLARE_INTERFACE_(IAugmentedShellFolder2, IAugmentedShellFolder) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolder methods *** STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner, LPBC pbc, LPOLESTR pszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) (THIS_ HWND hwndOwner, DWORD grfFlags, IEnumIDList ** ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; // *** IAugmentedShellFolder methods *** STDMETHOD(AddNameSpace) (THIS_ const GUID * pguidObject, IShellFolder * psf, LPCITEMIDLIST pidl, DWORD dwFlags) PURE; STDMETHOD(GetNameSpaceID) (THIS_ LPCITEMIDLIST pidl, GUID * pguidOut) PURE; STDMETHOD(QueryNameSpace) (THIS_ DWORD dwID, GUID * pguidOut, IShellFolder ** ppsf) PURE; STDMETHOD(EnumNameSpace) (THIS_ DWORD uNameSpace, DWORD * pdwID) PURE; // *** IAugmentedShellFolder2 methods *** STDMETHOD(UnWrapIDList) (THIS_ LPCITEMIDLIST pidlWrap, LONG cPidls, IShellFolder ** apsf, LPITEMIDLIST * apidlFolder, LPITEMIDLIST * apidlItems, LONG * pcFetched ) PURE ; }; #undef INTERFACE #define INTERFACE IAugmentedShellFolder3 DECLARE_INTERFACE_(IAugmentedShellFolder3, IAugmentedShellFolder2) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolder methods *** STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner, LPBC pbc, LPOLESTR pszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) (THIS_ HWND hwndOwner, DWORD grfFlags, IEnumIDList ** ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; // *** IAugmentedShellFolder methods *** STDMETHOD(AddNameSpace) (THIS_ const GUID * pguidObject, IShellFolder * psf, LPCITEMIDLIST pidl, DWORD dwFlags) PURE; STDMETHOD(GetNameSpaceID) (THIS_ LPCITEMIDLIST pidl, GUID * pguidOut) PURE; STDMETHOD(QueryNameSpace) (THIS_ DWORD dwID, GUID * pguidOut, IShellFolder ** ppsf) PURE; STDMETHOD(EnumNameSpace) (THIS_ DWORD uNameSpace, DWORD * pdwID) PURE; // *** IAugmentedShellFolder2 methods *** STDMETHOD(UnWrapIDList) (THIS_ LPCITEMIDLIST pidlWrap, LONG cPidls, IShellFolder ** apsf, LPITEMIDLIST * apidlFolder, LPITEMIDLIST * apidlItems, LONG * pcFetched ) PURE ; // *** IAugmentedShellFolder3 methods *** STDMETHOD(QueryNameSpace2) (THIS_ DWORD dwID, QUERYNAMESPACEINFO *pqnsi) PURE; }; //------------------------------------------------------------------------- // // IProxyShellFolder interface // // This provides methods to set a proxy object which can respond // to GetUIObjectOf instead of or in addition to the hosted object // the supports IShellFolder. All other methods are forwarded onto // the hosted object. The CLSID_HostProxyShellFolder object implements // this interface. // // The Win95 shell does not support aggregation, so this object // must be extra careful that it follows the rules of COM. // // This interface is implemented by an object that wishes to provide // more support for GetUIObjectOf on behalf of another object that // implements an original IShellFolder. // // [Member functions] // // IProxyShellFolder::InitHostProxy(psf, pidl, punk, dwFlags) // Set the object that implements IProxyShellFolder. Depending // on dwFlags, this object will be called instead of or in addition // to the host's method. // // SPF_PRIORITY - call the proxy's method instead of // the host's method. // SPF_SECONDARY - call the proxy's method only if the // host's method doesn't support it. // SPF_INHERIT - create a new object of this class and // hand it back for BindToObject. // SPF_FOLDERPRECEDENCE - have the proxy give folders priority // over files in a call to CompareIDs. // SPF_HAVECALLBACK - have the proxy call the owner's // IOleCommandTarget on each enumerated // object, for filtering. // // Also sets as the host the given object which fully implements // IShellFolder. pidl refers to the shell folder. // // IProxyShellFolder::CloneProxyPSF(riid, ppv) // Tells the object to clone itself. The host proxy will call this // whenever IShellFolder::BindToObject is called. // // IProxyShellFolder::GetUIObjectOfPSF(hwndOwner, cidl, apidl, riid, prgfInOut, ppv) // Called by CLSID_HostProxyShellFolder to allow the proxy object // an opportunity to respond. // // IProxyShellFolder::CreateViewObjectPSF(hwndOwner, riid, ppv) // Called by CLSID_HostProxyShellFolder to allow the proxy object // an opportunity to respond. // //------------------------------------------------------------------------- // SetProxyObject flags #define SPF_PRIORITY 0x00000001 // This is mutually exclusive w/ SPF_SECONDARY #define SPF_SECONDARY 0x00000002 #define SPF_INHERIT 0x00000004 #define SPF_FOLDERPRECEDENCE 0x00000008 #define SPF_HAVECALLBACK 0x00000010 //For filtering of Pidls #define PHID_FilterOutPidl 0 #undef INTERFACE #define INTERFACE IProxyShellFolder DECLARE_INTERFACE_(IProxyShellFolder, IShellFolder) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolder methods *** STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner, LPBC pbc, LPOLESTR pszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) (THIS_ HWND hwndOwner, DWORD grfFlags, IEnumIDList ** ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; // *** IProxyShellFolder methods *** STDMETHOD(InitHostProxy) (THIS_ IShellFolder * psf, LPCITEMIDLIST pidl, DWORD dwFlags) PURE; STDMETHOD(CloneProxyPSF) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD(GetUIObjectOfPSF) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(CreateViewObjectPSF) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; }; //------------------------------------------------------------------------- // // BUGBUG (scotth): I don't think we're using this anymore. // // ISetWinHandler interface // // [Member functions] // // ISetWinHandler::SetWindow(hwndOwner) // Specifies the window owner. This may be NULL. // // ISetWinHandler::SetWinHandler(punk) // Gives a pointer to an object which supports IWinEventHandler. The // hwnd will be the window handle set by the SetWindow method. The // handler should return S_OK if the message is handled, otherwise S_FALSE. // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE ISetWinHandler DECLARE_INTERFACE_(ISetWinHandler, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ISetWinHandler methods *** STDMETHOD(SetWindow) (THIS_ HWND hwndOwner) PURE; STDMETHOD(SetWinHandler) (THIS_ IUnknown * punk) PURE; }; //------------------------------------------------------------------------- // // IMenuShellFolder interface // // This wraps a static HMENU with an IShellFolder interface. // // // [Member functions] // // IMenuShellFolder::SetMenu(hmenu) // Specifies the hmenu to wrap. This may be NULL. // // BUGBUG (scotth): does this copy or not? // // IMenuShellFolder::GetMenu(phmenu) // Returns the current menu in *phmenu. Returns S_FALSE if no menu is // set (*phmenu will be NULL). // // IMenuShellFolder::SetWindow(hwndOwner) // Specifies the window owner. This may be NULL. // //------------------------------------------------------------------------- // Messages sent to the WinEventHandler wParam lParam *plRet // ------ ------ --- #define MSFM_COMMAND (MSFM_FIRST+0) // cmd ID 0 #define MSFM_ISDROPTARGET (MSFM_FIRST+1) // id 0 1 if yes #undef INTERFACE #define INTERFACE IMenuShellFolder DECLARE_INTERFACE_(IMenuShellFolder, IShellFolder) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellFolder methods *** STDMETHOD(ParseDisplayName) (THIS_ HWND hwndOwner, LPBC pbc, LPOLESTR pszDisplayName, ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes) PURE; STDMETHOD(EnumObjects) (THIS_ HWND hwndOwner, DWORD grfFlags, IEnumIDList ** ppenumIDList) PURE; STDMETHOD(BindToObject) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(BindToStorage) (THIS_ LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) PURE; STDMETHOD(CompareIDs) (THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(CreateViewObject) (THIS_ HWND hwndOwner, REFIID riid, void **ppv) PURE; STDMETHOD(GetAttributesOf) (THIS_ UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfInOut) PURE; STDMETHOD(GetUIObjectOf) (THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, void **ppv) PURE; STDMETHOD(GetDisplayNameOf) (THIS_ LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName) PURE; STDMETHOD(SetNameOf) (THIS_ HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD uFlags, LPITEMIDLIST * ppidlOut) PURE; // *** IMenuShellFolder methods *** STDMETHOD(SetMenu) (THIS_ HMENU hmenu) PURE; STDMETHOD(GetMenu) (THIS_ HMENU * phmenu) PURE; STDMETHOD(SetWindow) (THIS_ HWND hwndOwner) PURE; STDMETHOD(GetWindow) (THIS_ HWND *phwndOwner) PURE; STDMETHOD(GetIDPosition) (THIS_ LPCITEMIDLIST pidl, int * pnPos) PURE; }; //------------------------------------------------------------------------- // // ITranslateShellChangeNotify interface // // This interface allows an object to translate the pidls that are // passed to it. // // Note: IE4 had an interface of the same name but with a different IID, // so there is no conflict. // // [Member functions] // // ITranslateShellChangeNotify::TranslateIDs(&lEvent, pidl1, pidl2, ppidlOut1, ppidlOut2) // Return converted pidls given the event. it also can change the event if appropriate // //------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE ITranslateShellChangeNotify DECLARE_INTERFACE_(ITranslateShellChangeNotify, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ITranslateShellChangeNotify methods *** STDMETHOD(TranslateIDs) (THIS_ LONG *plEvent , LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, LPITEMIDLIST * ppidlOut1, LPITEMIDLIST * ppidlOut2, LONG *plEvent2, LPITEMIDLIST * ppidlOut1Event2, LPITEMIDLIST * ppidlOut2Event2) PURE; STDMETHOD(IsChildID)(THIS_ LPCITEMIDLIST pidlKid, BOOL fImmediate) PURE; STDMETHOD(IsEqualID)(THIS_ LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; STDMETHOD(Register)(THIS_ HWND hwnd, UINT uMsg, long lEvents) PURE; STDMETHOD(Unregister)(THIS) PURE; }; //////////////////////////////////////////////////// // // IRegTreeOptions // typedef enum tagBUTTON_STATES { IDCHECKED, IDUNCHECKED, IDRADIOON, IDRADIOOFF, IDUNKNOWN } BUTTON_STATES; // // Avoid conflicts in the windows\shell project // #ifndef NO_SHELL_TREE_TYPE typedef enum tagTREE_TYPE { TREE_CHECKBOX, TREE_RADIO, TREE_GROUP, TREE_UNKNOWN } TREE_TYPE; #endif // NO_SHELL_TREE_TYPE typedef enum tagWALK_TREE_CMD { WALK_TREE_SAVE, WALK_TREE_DELETE, WALK_TREE_RESTORE, WALK_TREE_REFRESH } WALK_TREE_CMD; enum REG_CMD { REG_SET, REG_GET, REG_GETDEFAULT }; #undef INTERFACE #define INTERFACE IRegTreeOptions DECLARE_INTERFACE_(IRegTreeOptions, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IRegTreeOptions specific methods *** STDMETHOD(InitTree)(THIS_ HWND hwndTree, HKEY hkeyRoot, LPCSTR pszRegKey, LPCSTR pszParam) PURE; STDMETHOD(WalkTree)(THIS_ WALK_TREE_CMD cmd ) PURE; STDMETHOD(ToggleItem)(THIS_ HTREEITEM hti ) PURE; STDMETHOD(ShowHelp)(THIS_ HTREEITEM hti , DWORD dwFlags ) PURE; }; // // Interface: IShellHotKey // #undef INTERFACE #define INTERFACE IShellHotKey DECLARE_INTERFACE_(IShellHotKey, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellHotKey methods *** STDMETHOD(RegisterHotKey)(THIS_ IShellFolder * psf, LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidl) PURE; }; // // Interface: ITrayPriv // // Purpose: Talks to the new Start Menu code in Shdocvw from explorer.exe // // For flags on ShowFolder see inc\IETHREAD.H // #undef INTERFACE #define INTERFACE ITrayPriv DECLARE_INTERFACE_(ITrayPriv, IOleWindow) { // *** 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; // *** ITrayPriv methods *** STDMETHOD(ExecItem)(THIS_ IShellFolder* psf, LPCITEMIDLIST pidl) PURE; STDMETHOD(GetFindCM)(THIS_ HMENU hmenu, UINT idFirst, UINT idLast, IContextMenu** ppcmFind) PURE; STDMETHOD(GetStaticStartMenu)(THIS_ HMENU* phmenu) PURE; }; // ITrayPriv2 - new for Whistler // // Purpose: Allows Explorer Start Menu object to participate in customdraw. // #undef INTERFACE #define INTERFACE ITrayPriv2 DECLARE_INTERFACE_(ITrayPriv2, ITrayPriv) { // *** 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; // *** ITrayPriv methods *** STDMETHOD(ExecItem)(THIS_ IShellFolder* psf, LPCITEMIDLIST pidl) PURE; STDMETHOD(GetFindCM)(THIS_ HMENU hmenu, UINT idFirst, UINT idLast, IContextMenu** ppcmFind) PURE; STDMETHOD(GetStaticStartMenu)(THIS_ HMENU* phmenu) PURE; // *** ITrayPriv2 methods *** STDMETHOD(ModifySMInfo)(THIS_ IN LPSMDATA psmd, IN OUT SMINFO *psminfo) PURE; }; ;end_internal #undef INTERFACE #define INTERFACE IInitializeObject DECLARE_INTERFACE_(IInitializeObject, IUnknown) { // *** 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_(IBanneredBar, IUnknown) { // *** 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; }; ;begin_internal // // Interface: IFolderShortcutConvert // // Purpose: Converts between FolderShortcuts and links // #undef INTERFACE #define INTERFACE IFolderShortcutConvert DECLARE_INTERFACE_(IFolderShortcutConvert, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; //*** IFolderShortcutConvert methods *** STDMETHOD(ConvertToLink)(THIS_ LPCOLESTR pszFSPath, DWORD fFlags) PURE; STDMETHOD(ConvertToFolderShortcut)(THIS_ LPCOLESTR pszLinkPath, DWORD fFlags) PURE; }; // // Interface: IShellFolderTask // // Purpose: Initializes a task that does something by enumerating a shellfolder // #undef INTERFACE #define INTERFACE IShellFolderTask DECLARE_INTERFACE_(IShellFolderTask, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // *** IShellFolderTask methods *** STDMETHOD(InitTaskSFT)(THIS_ IShellFolder *psfParent, LPITEMIDLIST pidlFull, LONG nMaxRecursionLevel, DWORD dwFlags, DWORD dwTaskPriority) PURE; }; // Flags for InitTaskSFT #define ITSFT_RECURSE 0x00000001 // recurse into subfolders // // Interface: IStartMenuTask // // Purpose: Initializes a task that does something for the start menu // #undef INTERFACE #define INTERFACE IStartMenuTask DECLARE_INTERFACE_(IStartMenuTask, IShellFolderTask) { // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // *** IShellFolderTask methods *** STDMETHOD(InitTaskSFT)(THIS_ IShellFolder *psfParent, LPITEMIDLIST pidlFull, LONG nMaxRecursionLevel, DWORD dwFlags, DWORD dwTaskPriority) PURE; // *** IStartMenuTask methods *** STDMETHOD(InitTaskSMT)(THIS_ IShellHotKey * photkey, int iThreadPriority) PURE; }; // // Interface: IContextMenuCB // // Purpose: A call defview context menu callback object // #undef INTERFACE #define INTERFACE IContextMenuCB DECLARE_INTERFACE_(IContextMenuCB, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IContextMenuCB methods *** STDMETHOD(CallBack) (THIS_ IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; }; // // Possible underline settings for shell icons. // enum { ICON_YES, ICON_NO, ICON_HOVER, ICON_IE // Use IE hyperlink settings }; //----------------------------------------------- // IOleCommand Target Command IDs // CGID_BandHandler // Get the order stream from parent. #define BHCMDID_GetOrderStream 0x00000001 // CGID_Persist // Set the storage key. #define MCBID_SetKey 0x00000001 // CGID_MenuBandItem #define MBICMDID_IsVisible 0x00000001 // CGID_MenuBand #define MBANDCID_REFRESH 0x10000000 // // Interface: IShellMallocSpy // // Purpose: Facilitate IMallocSpy in the shell // #undef INTERFACE #define INTERFACE IShellMallocSpy DECLARE_INTERFACE_(IShellMallocSpy, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IShellMallocSpy methods *** STDMETHOD(RegisterSpy) (THIS) PURE; STDMETHOD(RevokeSpy) (THIS) PURE; STDMETHOD(SetTracking) (THIS_ BOOL bTrack) PURE; STDMETHOD(AddToList) (THIS_ void *pv, SIZE_T cb) PURE; STDMETHOD(RemoveFromList) (THIS_ void *pv) PURE; }; #undef INTERFACE #define INTERFACE ISearchProvider DECLARE_INTERFACE_(ISearchProvider, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ISearchObject methods *** STDMETHOD(GetSearchGUID)(THIS_ LPGUID lpGuid) PURE; }; #undef INTERFACE #define INTERFACE ISearchItems DECLARE_INTERFACE_(ISearchItems, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ISearchItems methods *** //used by CSearchBand STDMETHOD(GetDefaultSearchUrl) (THIS_ LPWSTR pwzUrl, UINT cch) PURE; }; #undef INTERFACE #define INTERFACE ISearchBandTBHelper50 DECLARE_INTERFACE_(ISearchBandTBHelper50, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ISearchBandTBHelper50 methods *** // implemented by CSearchBand STDMETHOD(AddNextMenuItem) (THIS_ LPCWSTR pwszText, int idItem) PURE; STDMETHOD(SetOCCallback) (THIS_ IOleCommandTarget *pOleCmdTarget) PURE; STDMETHOD(ResetNextMenu) (THIS) PURE; }; #undef INTERFACE #define INTERFACE ISearchBandTBHelper DECLARE_INTERFACE_(ISearchBandTBHelper, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** ISearchBandTBHelper methods *** // implemented by CSearchBand STDMETHOD(AddNextMenuItem) (THIS_ LPCWSTR pwszText, int idItem) PURE; STDMETHOD(SetOCCallback) (THIS_ IOleCommandTarget *pOleCmdTarget) PURE; STDMETHOD(ResetNextMenu) (THIS) PURE; STDMETHOD(NavigateToPidl) (THIS_ LPCITEMIDLIST pidl) PURE; }; #undef INTERFACE #define INTERFACE IEnumUrlSearch #include typedef struct { GUID guid; WCHAR wszName[80]; WCHAR wszUrl[2048]; } URLSEARCH, *LPURLSEARCH; #include /* Return to byte packing */ DECLARE_INTERFACE_(IEnumUrlSearch, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IEnumUrlSearch methods *** STDMETHOD(Next)(THIS_ ULONG celt, LPURLSEARCH rgelt, ULONG *pceltFetched) PURE; STDMETHOD(Skip)(THIS_ ULONG celt) PURE; STDMETHOD(Reset)(THIS) PURE; STDMETHOD(Clone)(THIS_ IEnumUrlSearch **ppenum) PURE; }; #undef INTERFACE #define INTERFACE IFolderSearches DECLARE_INTERFACE_(IFolderSearches, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFolderSearches methods *** STDMETHOD(EnumSearches) (THIS_ IEnumUrlSearch **ppenum) PURE; STDMETHOD(DefaultSearch) (THIS_ GUID *pguid) PURE; }; #undef INTERFACE #define INTERFACE IUserAssist typedef struct { DWORD cbSize; // SIZEOF DWORD dwMask; // INOUT requested/given (UEIM_*) int cHit; // profile count DWORD dwAttrs; // attributes (UEIA_*) FILETIME ftExecute; // Last execute filetime } UEMINFO, *LPUEMINFO; #define UEIM_HIT 0x01 #define UEIM_FILETIME 0x02 DECLARE_INTERFACE_(IUserAssist, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IUserAssist methods *** STDMETHOD(FireEvent)(THIS_ const GUID *pguidGrp, int eCmd, DWORD dwFlags, WPARAM wParam, LPARAM lParam) PURE; STDMETHOD(QueryEvent)(THIS_ const GUID *pguidGrp, int eCmd, WPARAM wParam, LPARAM lParam, LPUEMINFO pui) PURE; STDMETHOD(SetEvent)(THIS_ const GUID *pguidGrp, int eCmd, WPARAM wParam, LPARAM lParam, LPUEMINFO pui) PURE; }; // This exists for the Internet Control Panel to be able to toggle who is the // currently installed handler for FTP for the browser. DECLARE_INTERFACE_(IFtpInstaller, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IFtpInstaller methods *** STDMETHOD(IsIEDefautlFTPClient)(THIS) PURE; STDMETHOD(RestoreFTPClient)(THIS) PURE; STDMETHOD(MakeIEDefautlFTPClient)(THIS) PURE; }; // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lParam); // // Callback interface for the IShellFolderView // #undef INTERFACE #define INTERFACE IShellFolderViewCB DECLARE_INTERFACE_(IShellFolderViewCB, IUnknown) { // *** 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; }; ;begin_internal #define CLR_MYINVALID 0x8fffffff // I need to use a special value since CLR_INVALID == CLR_NONE!!!! #define ISVALIDCOLOR(a) ((a) != CLR_MYINVALID) // The following are used as indexes into the crCustomColors array. #define CRID_CUSTOMTEXTBACKGROUND 0 #define CRID_CUSTOMTEXT 1 #define CRID_COLORCOUNT 2 typedef struct _CUSTOMVIEWSDATA { DWORD cchSizeOfBlock; // size of lpDataBlock in WCHARs LPWSTR lpDataBlock; // Pointer to the Strings data block, allocated by the task allocator (SHAlloc) // The following are offsets (in WCHARs) to be added to lpDataBlock. // If the offset is -1 => That data is not present for this view. int acchOffExtViewUIstr[6]; // ID_EXTVIEWSTRCOUNT was 6, but is no longer used COLORREF crCustomColors[CRID_COLORCOUNT]; // Once IE4 ships, we can extend this structure by adding new SFVF_ flags // in the main structure that say "customviewsdata contains xxx info". } CUSTOMVIEWSDATA; // // Interface for enumerating "external" views for the ShellFolderView // typedef struct _SFVVIEWSDATA { // idView specifies the view. Unless specified in pCustomData, look up // HKLM\CLSID\Software\Microsoft\Windows\CurrentVersion\ExtShellFolderViews\idView // to find the menu name, help text, tt text. // // the shell's IShellFolderView implementations get these as // subkeys of the shellex\ExtShellFolderViews key under the folder's // clsid type (or progid type, depending on the IShellFolderView impl). // // In desktop.ini, these are keys read from the [ExtShellFolderViews] // section, in the form of "{idView}" or "{idView}={idExtShellView}" // GUID idView; // This is the GUID that specifies the View. // idExtShellView specifies the IDefViewExtInit IShellView extension // to use for this view. // // the shell's IShellFolderView implementations get this from // the "ISV" value under the shellex\ExtShellFolderViews\{idView} // key in the registry. // // In desktop.ini, this is read from the [ExtShellFolderViews] // section, in the form of "{idView}={idExtShellView}" // GUID idExtShellView; // [optional] This is the GUID for the extended IShellView // dwFlags - see the SFVF_ flags below. // // the shell's IShellFolderView implementations get this from // the "Attributes" value under the shellex\ExtShellFolderViews\{idView} // key in the registry. // // In desktop.ini, this is read from the [{idView}] section, // from the "Attributes=" line. // DWORD dwFlags; // lParam is passed to IShellView view extensions // // the shell's IShellFolderView implementations get this from // the "lparam" value under the shellex\ExtShellFolderViews\{idView} // key in the registry. // // In desktop.ini, this is read from the [{idView}] section, // from the "LParam=" line. // DWORD lParam; // wszMoniker is used to either bind to a docobject extended view, // or as the data for an idExtShellView view. // // the shell's IShellFolderView implementations get this from // the "PersistMoniker" value under the shellex\ExtShellFolderViews\{idView} // key in the registry. // // In desktop.ini, this is read from the [{idView}] section, // from the "PersistMoniker=" line. // WCHAR wszMoniker[MAX_PATH]; // pCustomData overrides/provides menu and other ui options // for this view. If a WebViewFolderContents OC appears in the // docobject extended view, it pays attention to color and // background bitmaps. // // the shell's IShellFolderView implementations do not fill out this structure. // // In desktop.ini, this is read from the [{idView}] section, // from the "IconArea_Image", "IconArea_TextBackground", and "IconArea_Text". // CUSTOMVIEWSDATA *pCustomData; //This is valid only if SFVF_CUSTOMIZEDVIEW is set. } SFVVIEWSDATA; // // SFVF_CUSTOMIZEDVIEW - This flag is set only for those views whose // data are picked up from the Desktop.ini. // #define SFVF_CUSTOMIZEDVIEW 0x80000000 // // SFVF_TREATASNORMAL - This flag is set for those views that wish to // be treated as normal views, this means they will show up in the file-open/SaveAs // Dialogs. // #define SFVF_TREATASNORMAL 0x40000000 // // SFVF_NOWEBVIEWFOLDERCONTENTS - This is used to detect those views that // never host the WebViewFolderContents OC and so cannot toggle on and off, // ie, they are exclusive views such as Thumbnail View. // #define SFVF_NOWEBVIEWFOLDERCONTENTS 0x20000000 #undef INTERFACE #define INTERFACE IEnumSFVViews DECLARE_INTERFACE_(IEnumSFVViews, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IEnumSFVViews methods *** STDMETHOD(Next) (THIS_ ULONG celt, SFVVIEWSDATA **ppData, ULONG *pceltFetched) PURE; STDMETHOD(Skip) (THIS_ ULONG celt) PURE; STDMETHOD(Reset) (THIS) PURE; STDMETHOD(Clone) (THIS_ IEnumSFVViews **ppenum) PURE; }; #undef INTERFACE #define INTERFACE IPersistString DECLARE_INTERFACE_(IPersistString, IUnknown) { // *** IUnknown methods *** STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // *** IPersist methods *** STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE; // *** IPersistString methods *** STDMETHOD(Initialize) (THIS_ LPCWSTR pwszInit) PURE; }; #pragma warning (disable: 4200) #pragma warning (disable: 4510) #pragma warning (disable: 4512) #pragma warning (disable: 4610) // From sdkinc\platform.h // We can't simply include that file because it breaks other projects // that include platform.h. // DOC'ed for DOJ compliance: ;end_internal ;begin_both #include ;end_both #undef UNSIZED_ARRAY2 #undef EMPTY_SIZE2 #define UNSIZED_ARRAY2 #define EMPTY_SIZE2 UNSIZED_ARRAY2 #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; ;begin_internal typedef struct _SFVM_SELCHANGE_DATA { UINT uOldState; UINT uNewState; LPARAM lParamItem; } SFVM_SELCHANGE_DATA; typedef struct _COPYHOOKINFO { HWND hwnd; DWORD wFunc; DWORD wFlags; LPCTSTR pszSrcFile; DWORD dwSrcAttribs; LPCTSTR pszDestFile; DWORD dwDestAttribs; } COPYHOOKINFO; ;end_internal typedef struct _DETAILSINFO { LPCITEMIDLIST pidl; int fmt; int cxChar; STRRET str; int iImage; } DETAILSINFO; 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; ;begin_internal typedef struct { DWORD bWantWebview; // in: caller should return template DWORD dwOptions; // out: SFVMQVI_ flags WCHAR szWebView[MAX_PATH]; // out: webview template path } SFVM_VIEWINFO_DATA; typedef struct { DWORD dwOptions; // out: SFVMQVI_ flags for the [in,wParam]uViewMode } SFVM_VIEW_DATA; // dwOptions control the state of corresponding [in,wParam]uViewMode: #define SFVMQVI_NORMAL 0x0 // out: let defview decide what to do #define SFVMQVI_INCLUDE 0x1 // out: force include #define SFVMQVI_EXCLUDE 0x2 // out: force exclude typedef struct { FOLDERVIEWMODE fvm; // out: view mode BOOL fGroupView; // out: group view on/off UINT uSortCol; // out: sort by scid int iSortDirection; // out: ascending or descending sort FOLDERFLAGS fFlags; // out: folder flags to set (supports FWF_AUTOARRANGE) } SFVM_DEFERRED_VIEW_SETTINGS; typedef struct { WCHAR szWebView[MAX_PATH]; // out: webview template path for [in,wParam]uViewMode } SFVM_WEBVIEW_TEMPLATE_DATA; typedef struct _SFVM_CUSTOMVIEWINFO_DATA { COLORREF crCustomColors[CRID_COLORCOUNT]; WCHAR szIconAreaImage[MAX_PATH]; // Note: the old struct used INTERNET_MAX_URL_LENGTH, but we only use local cases so this isn't needed } SFVM_CUSTOMVIEWINFO_DATA; typedef struct { DWORD dwLayout; // out: SFVMWLV_ for [in,wParam]uViewMode IUnknown* punkPreview; // out: IUnknown of preview control, if SFVMWVL_PREVIEW specified } SFVM_WEBVIEW_LAYOUT_DATA; // dwLayout: #define SFVMWVL_NORMAL 0 // standard Web View format #define SFVMWVL_PREVIEW 1 // "preview" Web View format #define SFVMWVL_DETAILS 2 // standard Web View format with details expanded by default #define SFVMWVL_ITEMS 0x00000000 // HACK (added for Whistler, remove in BlackComb): item Web View format #define SFVMWVL_FILES 0x00010000 // HACK (added for Whistler, remove in BlackComb): file Web View format #define SFVMWVL_NOPRINT 0x00020000 // HACK (added for Whistler, remove in BlackComb): unconditionally hide "Print this file" folder task #define SFVMWVL_NOPUBLISH 0x00040000 // HACK (added for Whistler, remove in BlackComb): unconditionally hide "Publish this file" folder task #define SFVMWVL_ORDINAL_MASK 0x0000ffff // HACK (added for Whistler, remove in BlackComb): overload dwLayout for ordinals and flags #define SFVMWVL_FLAGS_MASK 0xffff0000 // HACK (added for Whistler, remove in BlackComb): overload dwLayout for ordinals and flags typedef struct { DWORD dwFlags; IUIElement* pIntroText; // can be NULL for no explanatory text IUIElement* pSpecialTaskHeader; // can be NULL for no special task section IUIElement* pFolderTaskHeader; // if NULL, defview will provide a default folder task section IEnumIDList* penumOtherPlaces; // if NULL, defview will provide a default Other Places list } SFVM_WEBVIEW_CONTENT_DATA; // dwFlags: #define SFVMWVF_BARRICADE 0x00000001 // this is a barricaded folder #define SFVMWVF_ENUMTASKS 0x00000002 // Folder uses non-standard tasks. Will enumerate. #define SFVMWVF_NOMORETASKS 0x00000004 // No more tasks in enumeration. #define SFVMWVF_SPECIALTASK 0x00000008 // Used in ENUMTASKSECTION_DATA.dwFlags. #define SFVMWVF_CONTENTSCHANGE 0x00000010 // Refresh WV content when folder contents change. typedef struct { IEnumUICommand* penumSpecialTasks; // can be NULL for no special task section IEnumUICommand* penumFolderTasks; // if NULL, defview will provide a default folder task section DWORD dwUpdateFlags; // bitmask of the extra special events that we should listen to } SFVM_WEBVIEW_TASKSECTION_DATA; // dwUpdateFlags: #define SFVMWVTSDF_CONTENTSCHANGE 0x00000001 typedef struct { LPCWSTR pszThemeID; // [out] fill with a pointer a string who's lifetime is at least as long as your IShellFolderViewCB object. } SFVM_WEBVIEW_THEME_DATA; // // To replace the standard webview tasks with a set enumerated by the view // callback, the callback sets the SFVMWVF_ENUMTASKS flag in the dwFlags // member of SFVM_WEBVIEWCONTENT_DATA. This causes the shell to send // SFVM_ENUMWEBVIEWTASKS repeatedly in place of SFVM_GETWEBVIEWCONTENT and // SFVM_GETWEBVIEWTASKS. Each time SFVM_ENUMWEBVIEWTASKS is sent, // the view callback provides a header and task enumerator via a // SFVM_WEBVIEW_ENUMTASKSECTION_DATA structure. The message is sent to the // view repeatedly until the handler sets the SFVMWVF_NOMORETASKS flag // in SFVM_WEBVIEW_ENUMTASKSECTION_DATA.dwFlags. The top-down display order // of task sections is the same as the order in which they are provided by // the view callback. // // The dwFlags member of SFVM_WEBVIEW_ENUMTASKSECTION_DATA supports // the following values: // SFVMWVF_SPECIALTASK - Use the 'special' task section style. // If not set, use the 'normal' style. // SFVMWVF_NOMORETASKS - Terminate the enumeration. // typedef struct { DWORD dwFlags; // SFVMWVF_XXXX flags. See above. IUIElement *pHeader; IEnumUICommand *penumTasks; int idBitmap; // Valid only for SPECIALTASK sections. int idWatermark; // Valid only for SPECIALTASK sections. } SFVM_WEBVIEW_ENUMTASKSECTION_DATA; // WebView Task helper functions provided by shell32 // to help answer SFVM_GETWEBVIEWCONTENT and SFVM_GETWEBVIEWTASKS messages. // // The idea here being that you provide task implementations in the static // functions with a pv parameter that gets passed through to your static functions // so they can get back to your IShellFolderViewCB object. These helper // functions assume that all strings are resources to be loaded out of your DLL. // typedef HRESULT (*PFN_get_State)(IUnknown* pv,IShellItemArray *psiItemArray, BOOL fOkToBeSlow, UISTATE* puisState); typedef HRESULT (*PFN_Invoke)(IUnknown* pv,IShellItemArray *psiItemArray, IBindCtx *pbc); typedef struct { const GUID* pguidCanonicalName; LPCWSTR pszDllName; DWORD dwTitleIndexNoSelection; DWORD dwTitleIndexFileSelected; DWORD dwTitleIndexFolderSelected; DWORD dwTitleIndexMultiSelected; DWORD dwTooltipIndex; DWORD dwIconIndex; PFN_get_State pfn_get_State; PFN_Invoke pfn_Invoke; } WVTASKITEM; // Use for tasks that want to be displayed when something is selected, where the UI is independent of the selection #define WVTI_ENTRY(g, d, t, p, i, s, k) {&(g), (d), (0), (t), (t), (t), (p), (i), (s), (k)} // Use for tasks that want to be displayed when nothing is selected #define WVTI_ENTRY_NOSELECTION(g, d, t, p, i, s, k) {&(g), (d), (t), 0, 0, 0, (p), (i), (s), (k)} // Use for tasks that want to be displayed when a file is selected #define WVTI_ENTRY_FILE(g, d, t, p, i, s, k) {&(g), (d), (0), (t), (0), (0), (p), (i), (s), (k)} // Use for tasks that want to be displayed when something is selected, and you want different UI depending on the selection // Use this one if you want to control the title, but the tooltip is constant: #define WVTI_ENTRY_TITLE(g, d, t2, t3, t4, p, i, s, k) {&(g), (d), (0), (t2), (t3), (t4), (p), (i), (s), (k)} // Use this one if you want the same text everywhere: #define WVTI_ENTRY_ALL(g, d, t, p, i, s, k) {&(g), (d), (t), (t), (t), (t), (p), (i), (s), (k)} // Use this one if you want to control everything: #define WVTI_ENTRY_ALL_TITLE(g, d, t1, t2, t3, t4, p, i, s, k) {&(g), (d), (t1), (t2), (t3), (t4), (p), (i), (s), (k)} // Use this one for a header: #define WVTI_HEADER(d, t, p) {&(CLSID_NULL), (d), (t), (t), (t), (t), (p), 0, NULL, NULL} // Use this one for a header that changes with the selection: #define WVTI_HEADER_ENTRY(d, t1, t2, t3, t4, p) {&(CLSID_NULL), (d), (t1), (t2), (t3), (t4), (p), 0, NULL, NULL} // Creates an IEnumUICommand over an array of WVTASKITEM structures. // The enumerator/objects hold a ref on the pv param for the lifetime of the enumerator/objects. // The pv param gets passed through to the static WVTASKITEM.pfn functions. // HRESULT Create_IEnumUICommand(IUnknown *pv, const WVTASKITEM* rgwvti, UINT cwvti, IEnumUICommand**ppenum); // Creates an IUICommand out of a single WVTASKITEM, never calling the pfn functions HRESULT Create_IUIElement(const WVTASKITEM* pwvti, IUIElement**ppuie); // SFVM_GETNOTIFY: The shell will use the pidl returned from this message to synch // change notifies. Folders in Folder Shortcuts should return pidlTarget // because that is where the change notifies are sent. // // DOC'ed for DOJ compliance: ;end_internal // 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 ;begin_internal #define SFVM_SELCHANGE 8 // idCmdFirst,nItem SFVM_SELCHANGE_DATA* #define SFVM_DRAWITEM 9 // idCmdFirst DRAWITEMSTRUCT* #define SFVM_MEASUREITEM 10 // idCmdFirst MEASUREITEMSTRUCT* #define SFVM_EXITMENULOOP 11 // - - #define SFVM_PRERELEASE 12 // - - #define SFVM_GETCCHMAX 13 // LPCITEMIDLIST pcchMax #define SFVM_FSNOTIFY 14 // LPCITEMIDLIST* lEvent // DOC'ed for DOJ compliance: ;end_internal #define SFVM_WINDOWCREATED 15 // hwnd - ;begin_internal #define SFVM_WINDOWDESTROY 16 // hwnd - #define SFVM_REFRESH 17 // BOOL fPreOrPost - NB: this may be called multiple times in a row #define SFVM_SETFOCUS 18 // - - #define SFVM_QUERYCOPYHOOK 20 // - - #define SFVM_NOTIFYCOPYHOOK 21 // - COPYHOOKINFO* // DOC'ed for DOJ compliance: ;end_internal #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 ;begin_internal #define SFVM_INSERTITEM 29 // pidl - #define SFVM_DELETEITEM 30 // pidl - // DOC'ed for DOJ compliance: ;end_internal #define SFVM_UPDATESTATUSBAR 31 // fInitialize - #define SFVM_BACKGROUNDENUM 32 // - - ;begin_internal #define SFVM_GETWORKINGDIR 33 // uMax pszDir #define SFVM_GETCOLSAVESTREAM 34 // flags IStream ** #define SFVM_SELECTALL 35 // - - // DOC'ed for DOJ compliance: ;end_internal #define SFVM_DIDDRAGDROP 36 // dwEffect IDataObject * ;begin_internal #define SFVM_SUPPORTSIDENTITY 37 // - - // NOT USED: must support IShellFolder2 #define SFVM_FOLDERISPARENT 38 // - pidlChild // DOC'ed for DOJ compliance: ;end_internal #define SFVM_SETISFV 39 // - IShellFolderView* ;begin_internal #define SFVM_GETVIEWS 40 // SHELLVIEWID* IEnumSFVViews ** // DOC'ed for DOJ compliance: ;end_internal #define SFVM_THISIDLIST 41 // - LPITMIDLIST* ;begin_internal #define SFVM_GETITEMIDLIST 42 // iItem LPITMIDLIST* #define SFVM_SETITEMIDLIST 43 // iItem LPITEMIDLIST #define SFVM_INDEXOFITEMIDLIST 44 // *iItem LPITEMIDLIST #define SFVM_ODFINDITEM 45 // *iItem NM_FINDITEM* #define SFVM_HWNDMAIN 46 // hwndMain // DOC'ed for DOJ compliance: ;end_internal #define SFVM_ADDPROPERTYPAGES 47 // - SFVM_PROPPAGE_DATA * #define SFVM_BACKGROUNDENUMDONE 48 // - - #define SFVM_GETNOTIFY 49 // LPITEMIDLIST* LONG* ;begin_internal #define SFVM_ARRANGE 50 // - lParamSort #define SFVM_QUERYSTANDARDVIEWS 51 // - BOOL * // NOT USED: must use SFVM_GETVIEWDATA instead #define SFVM_QUERYREUSEEXTVIEW 52 // - BOOL * // NOT USED // DOC'ed for DOJ compliance: ;end_internal #define SFVM_GETSORTDEFAULTS 53 // iDirection iParamSort ;begin_internal #define SFVM_GETEMPTYTEXT 54 // cchMax pszText #define SFVM_GETITEMICONINDEX 55 // iItem int *piIcon #define SFVM_DONTCUSTOMIZE 56 // - BOOL *pbDontCustomize // NOT USED // DOC'ed for DOJ compliance: ;end_internal #define SFVM_SIZE 57 // - - #define SFVM_GETZONE 58 // - DWORD* #define SFVM_GETPANE 59 // Pane ID DWORD* ;begin_internal #define SFVM_ISOWNERDATA 60 // ISOWNERDATA BOOL * #define SFVM_GETODRANGEOBJECT 61 // iWhich ILVRange ** #define SFVM_ODCACHEHINT 62 // - NMLVCACHEHINT * // DOC'ed for DOJ compliance: ;end_internal #define SFVM_GETHELPTOPIC 63 // - SFVM_HELPTOPIC_DATA * ;begin_internal #define SFVM_OVERRIDEITEMCOUNT 64 // - UINT* // NOT USED: allowed override of actual item count for sizing calculations #define SFVM_GETHELPTEXTW 65 // idCmd,cchMax pszText - unicode #define SFVM_GETTOOLTIPTEXTW 66 // idCmd,cchMax pszText - unicode #define SFVM_GETIPERSISTHISTORY 67 // IPersistHistory ** #define SFVM_GETANIMATION 68 // HINSTANCE * WCHAR * #define SFVM_GETHELPTEXTA 69 // idCmd,cchMax pszText - ansi #define SFVM_GETTOOLTIPTEXTA 70 // idCmd,cchMax pszText - ansi // The below two messages are only used in ownder data case, i.e. when SFVM_ISOWNERDATA returns TRUE #define SFVM_GETICONOVERLAY 71 // iItem int iOverlayIndex #define SFVM_SETICONOVERLAY 72 // iItem int * piOverlayIndex #define SFVM_ALTERDROPEFFECT 73 // DWORD* IDataObject* #define SFVM_DELAYWINDOWCREATE 74 // HWND - posted version of SFVM_WINDOWCREATED, no params #define SFVM_FORCEWEBVIEW 75 // BOOL* - #define SFVM_GETVIEWINFO 76 // fvm.uViewMode SFVM_VIEWINFO_DATA* // NOT USED: shipped in Whistler Beta 1 only, remove soon #define SFVM_GETCUSTOMVIEWINFO 77 // - SFVM_CUSTOMVIEWINFO_DATA* #define SFVM_FOLDERSETTINGSFLAGS 78 // - DWORD * (FWF_ flags) #define SFVM_ENUMERATEDITEMS 79 // UINT celt LPCITEMIDLIST* rgpidl // fired once at view creation, before first SFVM_GETVIEWDATA SFVM_GETDEFERREDVIEWSETTINGS #define SFVM_GETVIEWDATA 80 // fvm.uViewMode SFVM_VIEW_DATA* #define SFVM_GETWEBVIEW_TEMPLATE 81 // fvm.uViewMode SFVM_WEBVIEW_TEMPLATE_DATA* // NOTE: going away soon #define SFVM_GETWEBVIEWLAYOUT 82 // fvm.uViewMode SFVM_WEBVIEW_LAYOUT_DATA* #define SFVM_GETWEBVIEWCONTENT 83 // - SFVM_WEBVIEW_CONTENT_DATA* #define SFVM_GETWEBVIEWTASKS 84 // - SFVM_WEBVIEW_TASKSECTION_DATA* #define SFVM_GETWEBVIEWTHEME 86 // - SFVM_WEBVIEW_THEME_DATA* // HACK for Whistler, will remove when DirectUI goes DLL #define SFVM_SORTLISTDATA 87 // PFNLVCOMPARE lParamSort #define SFVM_GETWEBVIEWBARRICADE 88 // - Element* // HACK for Whistler, will remove when DirectUI goes DLL #define SFVM_ENUMWEBVIEWTASKS 90 // - SFVM_WEBVIEW_ENUMTASKSECTION_DATA* #define SFVM_SETEMPTYTEXT 91 // - pszText #define SFVM_GETDEFERREDVIEWSETTINGS 92 // - SFVM_DEFERRED_VIEW_SETTINGS* // set the default view settings // All of these macros are compatible with HANDLE_MSG in WINDOWSX.H #define HANDLE_SFVM_MERGEMENU(pv, wP, lP, fn) \ ((fn)((pv), (QCMINFO*)(lP))) #define HANDLE_SFVM_INVOKECOMMAND(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP))) #define HANDLE_SFVM_GETHELPTEXT(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(wP), HIWORD(wP), (LPTSTR)(lP))) #define HANDLE_SFVM_GETTOOLTIPTEXT(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(wP), HIWORD(wP), (LPTSTR)(lP))) #define HANDLE_SFVM_GETBUTTONINFO(pv, wP, lP, fn) \ ((fn)((pv), (TBINFO*)(lP))) #define HANDLE_SFVM_GETBUTTONS(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(wP), HIWORD(wP), (TBBUTTON*)(lP))) #define HANDLE_SFVM_INITMENUPOPUP(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(wP), HIWORD(wP), (HMENU)(lP))) #define HANDLE_SFVM_SELCHANGE(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(wP), HIWORD(wP), (SFVM_SELCHANGE_DATA*)(lP))) #define HANDLE_SFVM_DRAWITEM(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (DRAWITEMSTRUCT*)(lP))) #define HANDLE_SFVM_MEASUREITEM(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (MEASUREITEMSTRUCT*)(lP))) #define HANDLE_SFVM_EXITMENULOOP(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_PRERELEASE(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_GETCCHMAX(pv, wP, lP, fn) \ ((fn)((pv), (LPCITEMIDLIST)(wP), (UINT*)(lP))) #define HANDLE_SFVM_FSNOTIFY(pv, wP, lP, fn) \ ((fn)((pv), (LPCITEMIDLIST*)(wP), (lP))) #define HANDLE_SFVM_WINDOWCREATED(pv, wP, lP, fn) \ ((fn)((pv), (HWND)(wP))) #define HANDLE_SFVM_WINDOWDESTROY(pv, wP, lP, fn) \ ((fn)((pv), (HWND)(wP))) #define HANDLE_SFVM_REFRESH(pv, wP, lP, fn) \ ((fn)((pv), (BOOL) wP)) #define HANDLE_SFVM_SETFOCUS(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_QUERYCOPYHOOK(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_NOTIFYCOPYHOOK(pv, wP, lP, fn) \ ((fn)((pv), (COPYHOOKINFO*)(lP))) #define HANDLE_SFVM_GETDETAILSOF(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (DETAILSINFO*)(lP))) #define HANDLE_SFVM_COLUMNCLICK(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP))) #define HANDLE_SFVM_QUERYFSNOTIFY(pv, wP, lP, fn) \ ((fn)((pv), (SHChangeNotifyEntry*)(lP))) #define HANDLE_SFVM_DEFITEMCOUNT(pv, wP, lP, fn) \ ((fn)((pv), (UINT*)(lP))) #define HANDLE_SFVM_OVERRIDEITEMCOUNT(pv, wP, lP, fn) \ ((fn)((pv), (UINT*)(lP))) #define HANDLE_SFVM_DEFVIEWMODE(pv, wP, lP, fn) \ ((fn)((pv), (FOLDERVIEWMODE*)(lP))) #define HANDLE_SFVM_UNMERGEMENU(pv, wP, lP, fn) \ ((fn)((pv), (HMENU)(lP))) #define HANDLE_SFVM_INSERTITEM(pv, wP, lP, fn) \ ((fn)((pv), (LPCITEMIDLIST)(lP))) #define HANDLE_SFVM_DELETEITEM(pv, wP, lP, fn) \ ((fn)((pv), (LPCITEMIDLIST)(lP))) #define HANDLE_SFVM_UPDATESTATUSBAR(pv, wP, lP, fn) \ ((fn)((pv), (BOOL)(wP))) #define HANDLE_SFVM_BACKGROUNDENUM(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_GETWORKINGDIR(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (LPTSTR)(lP))) #define HANDLE_SFVM_GETCOLSAVESTREAM(pv, wP, lP, fn) \ ((fn)((pv), (wP), (IStream**)(lP))) #define HANDLE_SFVM_SELECTALL(pv, wP, lP, fn) \ ((fn)(pv)) #define HANDLE_SFVM_DIDDRAGDROP(pv, wP, lP, fn) \ ((fn)((pv), (DWORD)(wP), (IDataObject*)(lP))) #define HANDLE_SFVM_SUPPORTSIDENTITY(pv, wp, lP, fn) \ ((fn)(pv)) /* Only 1 parameter */ #define HANDLE_SFVM_HWNDMAIN(pv, wP, lP, fn) \ ((fn)((pv), (HWND)(lP))) #define HANDLE_SFVM_GETNOTIFY(pv, wP, lP, fn) \ ((fn)((pv), (LPITEMIDLIST*)(wP), (LONG*)(lP))) #define HANDLE_SFVM_SETISFV(pv, wP, lP, fn) \ ((fn)((pv), (IShellFolderView*)(lP))) #define HANDLE_SFVM_GETVIEWS(pv, wP, lP, fn) \ ((fn)((pv), (SHELLVIEWID*)(wP), (IEnumSFVViews**)(lP))) #define HANDLE_SFVM_THISIDLIST(pv, wP, lP, fn) \ ((fn)((pv), (LPITEMIDLIST*)(lP))) #define HANDLE_SFVM_GETITEMIDLIST(pv, wP, lP, fn) \ ((fn)((pv), (wP), (LPITEMIDLIST*)(lP))) #define HANDLE_SFVM_SETITEMIDLIST(pv, wP, lP, fn) \ ((fn)((pv), (wP), (LPITEMIDLIST)(lP))) #define HANDLE_SFVM_INDEXOFITEMIDLIST(pv, wP, lP, fn) \ ((fn)((pv), (int*)(wP), (LPITEMIDLIST)(lP))) #define HANDLE_SFVM_ODFINDITEM(pv, wP, lP, fn) \ ((fn)((pv), (int*)(wP), (NM_FINDITEM*)(lP))) #define HANDLE_SFVM_ADDPROPERTYPAGES(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_PROPPAGE_DATA *)(lP))) #define HANDLE_SFVM_FOLDERISPARENT(pv, wP, lP, fn) \ ((fn)((pv), (LPITEMIDLIST)(lP))) #define HANDLE_SFVM_ARRANGE(pv, wP, lP, fn) \ ((fn)((pv), (LPARAM)(lP))) #define HANDLE_SFVM_QUERYSTANDARDVIEWS(pv, wP, lP, fn) \ ((fn)((pv), (BOOL*)(lP))) #define HANDLE_SFVM_QUERYREUSEEXTVIEW(pv, wP, lP, fn) \ ((fn)((pv), (BOOL*)(lP))) #define HANDLE_SFVM_GETEMPTYTEXT(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (LPTSTR)(lP))) #define HANDLE_SFVM_GETITEMICONINDEX(pv, wP, lP, fn) \ ((fn)((pv), (wP), (int*)(lP))) #define HANDLE_SFVM_SIZE(pv, wP, lP, fn) \ ((fn)((pv), LOWORD(lP), HIWORD(lP))) #define HANDLE_SFVM_GETZONE(pv, wP, lP, fn) \ ((fn)((pv), (DWORD *)(lP))) #define HANDLE_SFVM_GETPANE(pv, wP, lP, fn) \ ((fn)((pv), (wP), (DWORD *)(lP))) #define HANDLE_SFVM_ISOWNERDATA(pv, wP, lP, fn) \ ((fn)((pv), (BOOL*)(lP))) #define HANDLE_SFVM_GETODRANGEOBJECT(pv, wP, lP, fn) \ ((fn)((pv), (wP), (ILVRange **)(lP))) #define HANDLE_SFVM_ODCACHEHINT(pv, wP, lP, fn) \ ((fn)((pv), (NMLVCACHEHINT*)(lP))) #define HANDLE_SFVM_GETHELPTOPIC(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_HELPTOPIC_DATA *)(lP))) #define HANDLE_SFVM_GETIPERSISTHISTORY(pv, wP, lP, fn) \ ((fn)((pv), (IPersistHistory **)(lP))) #define HANDLE_SFVM_SETICONOVERLAY(pv, wP, lP, fn) \ ((fn)((pv), (wP), (int)(lP))) #define HANDLE_SFVM_GETICONOVERLAY(pv, wP, lP, fn) \ ((fn)((pv), (wP), (int *)(lP))) #define HANDLE_SFVM_ALTERDROPEFFECT(pv, wP, lP, fn) \ ((fn)((pv), (DWORD *)(wP), (IDataObject *)(lP))) #define HANDLE_SFVM_DELAYWINDOWCREATE(pv, wP, lP, fn) \ ((fn)((pv), (HWND)(wP))) #define HANDLE_SFVM_FORCEWEBVIEW(pv, wP, lP, fn) \ ((fn)((pv), (BOOL*)(wP))) #define HANDLE_SFVM_GETVIEWINFO(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (SFVM_VIEWINFO_DATA*)lP)) #define HANDLE_SFVM_GETCUSTOMVIEWINFO(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_CUSTOMVIEWINFO_DATA*)(lP))) #define HANDLE_SFVM_FOLDERSETTINGSFLAGS(pv, wP, lP, fn) \ ((fn)((pv), (DWORD*)(lP))) #define HANDLE_SFVM_ENUMERATEDITEMS(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (LPCITEMIDLIST*)(lP))) #define HANDLE_SFVM_GETVIEWDATA(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (SFVM_VIEW_DATA*)lP)) #define HANDLE_SFVM_GETWEBVIEW_TEMPLATE(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (SFVM_WEBVIEW_TEMPLATE_DATA*)(lP))) #define HANDLE_SFVM_GETWEBVIEWLAYOUT(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (SFVM_WEBVIEW_LAYOUT_DATA*)(lP))) #define HANDLE_SFVM_GETWEBVIEWCONTENT(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_WEBVIEW_CONTENT_DATA*)(lP))) #define HANDLE_SFVM_GETWEBVIEWTASKS(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_WEBVIEW_TASKSECTION_DATA*)(lP))) #define HANDLE_SFVM_ENUMWEBVIEWTASKS(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_WEBVIEW_ENUMTASKSECTION_DATA*)(lP))) #define HANDLE_SFVM_GETWEBVIEWTHEME(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_WEBVIEW_THEME_DATA*)(lP))) #define HANDLE_SFVM_SORTLISTDATA(pv, wP, lP, fn) \ ((fn)((pv), (PFNLVCOMPARE)(wP), (lP))) #define HANDLE_SFVM_GETDEFERREDVIEWSETTINGS(pv, wP, lP, fn) \ ((fn)((pv), (SFVM_DEFERRED_VIEW_SETTINGS*)(lP))) #define HANDLE_SFVM_SETEMPTYTEXT(pv, wP, lP, fn) \ ((fn)((pv), (UINT)(wP), (LPCTSTR)(lP))) // // Return values for SFVM_GETICONOVERLAY: // If the icon overlay is not set and you want the shell to set it for you. // return SFVOVERLAY_UNSET. This will cause the shell to retrieve the overlay and // send SFVM_SETICONOVERLAY. // If there is no overlay for this item at all, the correct return value is // SFVOVERLAY_DEFAULT // If you return SFVOVERLAY_UNSET every time for SFVM_GETICONOVERLAY, the // shell will keep setting it indefinitely, so there is a danger of infinite loop // #define SFV_ICONOVERLAY_DEFAULT 0 #define SFV_ICONOVERLAY_UNSET 0xFFFFFFFF // // What you can return from SFVM_UPDATESTATUSBAR: // // E_NOTIMPL - Message not handled; DefView should manage status bar // // Otherwise, update the status bar yourself and return a bitmask of the // following codes indicating what you want DefView to do for you. // #define SFVUSB_HANDLED 0x0000 // Client handled completely - DefView does nothing #define SFVUSB_INITED 0x0001 // Client initialized parts - DefView will set text #define SFVUSB_ALL 0x0001;internal // IShellFolderView interface for getting the SFV to do things // typedef struct _ITEMSPACING { int cxSmall; int cySmall; int cxLarge; int cyLarge; } ITEMSPACING; // Define OPtions for 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 // Inver the selection // defines for IShellFolderView::QuerySupport() // allows a view to be queried to see if it supports various operations (useful for // enabling menu items) #define SFVQS_AUTO_ARRANGE 0x0001 #define SFVQS_ARRANGE_GRID 0x0002 #define SFVQS_SELECT_ALL 0x0004 #define SFVQS_SELECT_NONE 0x0008 #define SFVQS_SELECT_INVERT 0x0010 #undef INTERFACE #define INTERFACE IShellFolderView DECLARE_INTERFACE_(IShellFolderView, IUnknown) { // *** 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; STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE; STDMETHOD(ArrangeGrid) (THIS) PURE; STDMETHOD(AutoArrange) (THIS) PURE; STDMETHOD(GetAutoArrange) (THIS) PURE; STDMETHOD(AddObject) (THIS_ LPITEMIDLIST pidl, UINT *puItem) PURE; STDMETHOD(GetObject) (THIS_ LPITEMIDLIST *ppidl, UINT uItem) PURE; STDMETHOD(RemoveObject) (THIS_ LPITEMIDLIST pidl, UINT *puItem) PURE; STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE; STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE; STDMETHOD(UpdateObject) (THIS_ LPITEMIDLIST pidlOld, LPITEMIDLIST pidlNew, UINT *puItem) PURE; STDMETHOD(RefreshObject) (THIS_ LPITEMIDLIST pidl, UINT *puItem) PURE; STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE; STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE; STDMETHOD(GetSelectedObjects) (THIS_ LPCITEMIDLIST **pppidl, UINT *puItems) PURE; STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE; STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE; STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE; STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE; STDMETHOD(SetItemPos) (THIS_ LPCITEMIDLIST pidl, POINT *ppt) PURE; STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE; STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE; STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE; STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE; STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE; STDMETHOD(Select) ( THIS_ UINT dwFlags ) PURE; STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE; STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE; } ; // DOC'ed for DOJ compliance: ;end_internal // SHCreateShellFolderView struct typedef struct _SFV_CREATE { UINT cbSize; IShellFolder* pshf; IShellView* psvOuter; IShellFolderViewCB* psfvcb; // No callback if NULL } SFV_CREATE; SHSTDAPI SHCreateShellFolderView(const SFV_CREATE* pcsfv, IShellView **ppsv); ;begin_internal #define SHCreateShellFolderViewORD 256 SHSTDAPI_(IShellFolderViewCB*) SHGetShellFolderViewCB(HWND hwndMain); #define SHGetShellFolderViewCBORD 257 //=========================================================================== // Defview APIs to make name space author lives somewhat easier // DOC'ed for DOJ compliance ;end_internal typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam); SHSTDAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm); SHSTDAPI_(BOOL) SHOpenPropSheet%(LPCTSTR% pszCaption, HKEY ahkeys[], UINT cikeys, const CLSID * pclsidDefault, IDataObject *pdtobj, IShellBrowser *psb, LPCTSTR% pStartPage); ;begin_internal // 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 } 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 // DOC'ed for DOJ compliance ;end_internal // uMsg wParam lParam #define DFM_MERGECONTEXTMENU 1 // uFlags LPQCMINFO #define DFM_INVOKECOMMAND 2 // idCmd pszArgs ;begin_internal #define DFM_ADDREF 3 // 0 0 #define DFM_RELEASE 4 // 0 0 #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 ;end_internal #define DFM_GETDEFSTATICID 14 // idCmd * 0 ;begin_internal #define DFM_GETVERBW 15 // idCmd,cchMax pszText -Unicode #define DFM_GETVERBA 16 // idCmd,cchMax pszText -Ansi #define DFM_MERGECONTEXTMENU_BOTTOM 17 // uFlags LPQCMINFO ;end_internal // Commands from DFM_INVOKECOMMAND when strings are passed in ;begin_internal #define DFM_CMD_DELETE ((UINT)-1) #define DFM_CMD_MOVE ((UINT)-2) #define DFM_CMD_COPY ((UINT)-3) #define DFM_CMD_LINK ((UINT)-4) ;end_internal #define DFM_CMD_PROPERTIES ((UINT)-5) ;begin_internal #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) SHSTDAPI CDefFolderMenu_Create(LPCITEMIDLIST pidlFolder, HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, HKEY hkeyProgID, HKEY hkeyBaseProgID, IContextMenu ** ppcm); SHSTDAPI_(void) CDefFolderMenu_MergeMenu(HINSTANCE hinst, UINT idMainMerge, UINT idPopupMerge, LPQCMINFO pqcm); STDAPI_(void) Def_InitFileCommands(ULONG dwAttr, HMENU hmInit, UINT idCmdFirst, BOOL bContext); STDAPI_(void) Def_InitEditCommands(ULONG dwAttr, HMENU hmInit, UINT idCmdFirst, IDropTarget *pdtgt, UINT fContext); // indeces in bitmap strip #define VIEW_MOVETO 24 #define VIEW_COPYTO 25 #define VIEW_OPTIONS 26 //=========================================================================== // Default IShellView for IShellFolder //=========================================================================== // Menu ID's #define SFVIDM_FIRST (FCIDM_SHVIEWLAST-0x0fff) #define SFVIDM_LAST (FCIDM_SHVIEWLAST) // Hardcoded message values => This range can be used for messages that we // pass from shdoc401 to shell32 #define SFVIDM_HARDCODED_FIRST (SFVIDM_LAST-0x0010) #define SFVIDM_HARDCODED_LAST (SFVIDM_LAST) #define SFVIDM_MISC_SETWEBVIEW (SFVIDM_HARDCODED_FIRST) // Popup menu ID's used in merging menus #define SFVIDM_MENU_ARRANGE (SFVIDM_FIRST + 0x0001) #define SFVIDM_MENU_VIEW (SFVIDM_FIRST + 0x0002) #define SFVIDM_MENU_SELECT (SFVIDM_FIRST + 0x0003) #define SHARED_FILE_FIRST 0x0010 #define SHARED_FILE_LINK (SHARED_FILE_FIRST + 0x0000) #define SHARED_FILE_DELETE (SHARED_FILE_FIRST + 0x0001) #define SHARED_FILE_RENAME (SHARED_FILE_FIRST + 0x0002) #define SHARED_FILE_PROPERTIES (SHARED_FILE_FIRST + 0x0003) #define SHARED_EDIT_FIRST 0x0018 #define SHARED_EDIT_CUT (SHARED_EDIT_FIRST + 0x0000) #define SHARED_EDIT_COPY (SHARED_EDIT_FIRST + 0x0001) #define SHARED_EDIT_PASTE (SHARED_EDIT_FIRST + 0x0002) #define SHARED_EDIT_UNDO (SHARED_EDIT_FIRST + 0x0003) #define SHARED_EDIT_PASTELINK (SHARED_EDIT_FIRST + 0x0004) #define SHARED_EDIT_PASTESPECIAL (SHARED_EDIT_FIRST + 0x0005) #define SHARED_EDIT_COPYTO (SHARED_EDIT_FIRST + 0x0006) #define SHARED_EDIT_MOVETO (SHARED_EDIT_FIRST + 0x0007) #define SFVIDM_FILE_FIRST (SFVIDM_FIRST + SHARED_FILE_FIRST) #define SFVIDM_FILE_LINK (SFVIDM_FIRST + SHARED_FILE_LINK) #define SFVIDM_FILE_DELETE (SFVIDM_FIRST + SHARED_FILE_DELETE) #define SFVIDM_FILE_RENAME (SFVIDM_FIRST + SHARED_FILE_RENAME) #define SFVIDM_FILE_PROPERTIES (SFVIDM_FIRST + SHARED_FILE_PROPERTIES) #define SFVIDM_EDIT_FIRST (SFVIDM_FIRST + SHARED_EDIT_FIRST) #define SFVIDM_EDIT_CUT (SFVIDM_FIRST + SHARED_EDIT_CUT) #define SFVIDM_EDIT_COPY (SFVIDM_FIRST + SHARED_EDIT_COPY) #define SFVIDM_EDIT_PASTE (SFVIDM_FIRST + SHARED_EDIT_PASTE) #define SFVIDM_EDIT_UNDO (SFVIDM_FIRST + SHARED_EDIT_UNDO) #define SFVIDM_EDIT_PASTELINK (SFVIDM_FIRST + SHARED_EDIT_PASTELINK) #define SFVIDM_EDIT_PASTESPECIAL (SFVIDM_FIRST + SHARED_EDIT_PASTESPECIAL) #define SFVIDM_EDIT_COPYTO (SFVIDM_FIRST + SHARED_EDIT_COPYTO) #define SFVIDM_EDIT_MOVETO (SFVIDM_FIRST + SHARED_EDIT_MOVETO) #define SFVIDM_SELECT_FIRST (SFVIDM_FIRST + 0x0020) #define SFVIDM_SELECT_ALL (SFVIDM_SELECT_FIRST + 0x0001) #define SFVIDM_SELECT_INVERT (SFVIDM_SELECT_FIRST + 0x0002) #define SFVIDM_DESELECT_ALL (SFVIDM_SELECT_FIRST + 0x0003) #define SFVIDM_VIEW_FIRST (SFVIDM_FIRST + 0x0028) #define SFVIDM_VIEW_FIRSTVIEW (SFVIDM_VIEW_FIRST + 1) #define SFVIDM_VIEW_ICON (SFVIDM_VIEW_FIRST + 1) #define SFVIDM_VIEW_SMALLICON (SFVIDM_VIEW_FIRST + 2) #define SFVIDM_VIEW_LIST (SFVIDM_VIEW_FIRST + 3) #define SFVIDM_VIEW_DETAILS (SFVIDM_VIEW_FIRST + 4) #define SFVIDM_VIEW_THUMBNAIL (SFVIDM_VIEW_FIRST + 5) #define SFVIDM_VIEW_TILE (SFVIDM_VIEW_FIRST + 6) #define SFVIDM_VIEW_THUMBSTRIP (SFVIDM_VIEW_FIRST + 7) #define SFVIDM_VIEW_LASTVIEW (SFVIDM_VIEW_FIRST + 7) // TileView // One more for safe keeping #define SFVIDM_VIEW_OPTIONS (SFVIDM_VIEW_FIRST + 0x0008) #define SFVIDM_VIEW_VIEWMENU (SFVIDM_VIEW_FIRST + 0x0009) #define SFVIDM_VIEW_CUSTOMWIZARD (SFVIDM_VIEW_FIRST + 0x000A) #define SFVIDM_VIEW_COLSETTINGS (SFVIDM_VIEW_FIRST + 0x000B) #define SFVIDM_VIEW_EXTFIRST (SFVIDM_VIEW_FIRST + 0x000C) #define SFVIDM_VIEW_EXTLAST (SFVIDM_VIEW_EXTFIRST + 0x0017) #define SFVIDM_VIEW_SVEXTFIRST (SFVIDM_VIEW_EXTFIRST) #define SFVIDM_VIEW_SVEXTLAST (SFVIDM_VIEW_EXTFIRST + 0x000F) #define SFVIDM_VIEW_EXTENDEDFIRST (SFVIDM_VIEW_EXTFIRST + 0x0010) #define SFVIDM_VIEW_EXTENDEDLAST (SFVIDM_VIEW_EXTLAST) // #define SFVIDM_VIEW_THUMBNAIL (SFVIDM_VIEW_FIRST + 0x0021) defined above #define SFVIDM_ARRANGE_FIRST (SFVIDM_FIRST + 0x0050) #define SFVIDM_ARRANGE_AUTO (SFVIDM_ARRANGE_FIRST + 0x0001) #define SFVIDM_ARRANGE_GRID (SFVIDM_ARRANGE_FIRST + 0x0002) #define SFVIDM_ARRANGE_DISPLAYICONS (SFVIDM_ARRANGE_FIRST + 0x0003) #define SFVIDM_ARRANGE_AUTOGRID (SFVIDM_ARRANGE_FIRST + 0x0004) #define SFVIDM_TOOL_FIRST (SFVIDM_FIRST + 0x0060) #define SFVIDM_TOOL_CONNECT (SFVIDM_TOOL_FIRST + 0x0001) #define SFVIDM_TOOL_DISCONNECT (SFVIDM_TOOL_FIRST + 0x0002) #define SFVIDM_TOOL_OPTIONS (SFVIDM_TOOL_FIRST + 0x0003) #define SFVIDM_DEBUG_WEBVIEW (SFVIDM_TOOL_FIRST + 0x0004) #define SFVIDM_HELP_FIRST (SFVIDM_FIRST + 0x0070) #define SFVIDM_HELP_TOPIC (SFVIDM_HELP_FIRST + 0x0001) #define SFVIDM_MISC_FIRST (SFVIDM_FIRST + 0x0100) #define SFVIDM_MISC_REFRESH (SFVIDM_MISC_FIRST + 0x0003) #define SFVIDM_MISC_HARDREFRESH (SFVIDM_MISC_FIRST + 0x0004) // Range for the client's additional menus #define SFVIDM_CLIENT_FIRST (SFVIDM_FIRST + 0x0200) #define SFVIDM_CLIENT_LAST (SFVIDM_FIRST + 0x02ff) // ---- SFVIDM_UNUSED_FIRST (SFVIDM_FIRST + 0x0300) #define SFVIDM_DESKTOP_FIRST (SFVIDM_FIRST + 0x0400) #define SFVIDM_DESKTOPHTML_WEBCONTENT (SFVIDM_DESKTOP_FIRST + 0x0001) #define SFVIDM_DESKTOPHTML_ICONS (SFVIDM_DESKTOP_FIRST + 0x0002) #define SFVIDM_DESKTOPHTML_LOCK (SFVIDM_DESKTOP_FIRST + 0x0003) #define SFVIDM_DESKTOPHTML_WIZARD (SFVIDM_DESKTOP_FIRST + 0x0004) #define SFVIDM_DESKTOP_LAST (SFVIDM_FIRST + 0x04ff) #define SFVIDM_COLUMN_FIRST (SFVIDM_FIRST + 0x0500) #define SFVIDM_COLUMN_LAST (SFVIDM_FIRST + 0x05ff) #define SFVIDM_GROUPSEP (SFVIDM_FIRST + 0x0600) #define SFVIDM_GROUPBY (SFVIDM_FIRST + 0x0601) #define SFVIDM_GROUPSFIRST (SFVIDM_FIRST + 0x0602) #define SFVIDM_GROUPSLAST (SFVIDM_FIRST + 0x067f) #define SFVIDM_GROUPSEXTENDEDFIRST (SFVIDM_FIRST + 0x0680) #define SFVIDM_GROUPSEXTENDEDLAST (SFVIDM_FIRST + 0x06ff) // Range for context menu id's #define SFVIDM_CONTEXT_FIRST (SFVIDM_FIRST + 0x0800) #define SFVIDM_CONTEXT_LAST (SFVIDM_FIRST + 0x0900) #define SFVIDM_BACK_CONTEXT_FIRST (SFVIDM_FIRST + 0x0901) #define SFVIDM_BACK_CONTEXT_LAST (SFVIDM_FIRST + 0x09ff) // DOC'ed for DOJ compliance: ;end_internal typedef TBINFO * LPTBINFO; typedef DETAILSINFO *PDETAILSINFO; ;begin_internal typedef COPYHOOKINFO *LPCOPYHOOKINFO; // uMsg wParam lParam #define DVM_MERGEMENU SFVM_MERGEMENU // uFlags LPQCMINFO #define DVM_INVOKECOMMAND SFVM_INVOKECOMMAND // idCmd 0 #define DVM_GETHELPTEXT SFVM_GETHELPTEXT // idCmd,cchMax pszText - Ansi #define DVM_GETTOOLTIPTEXT SFVM_GETTOOLTIPTEXT // idCmd,cchMax pszText #define DVM_GETBUTTONINFO SFVM_GETBUTTONINFO // 0 LPTBINFO #define DVM_GETBUTTONS SFVM_GETBUTTONS // idCmdFirst,cbtnMax LPTBBUTTON #define DVM_INITMENUPOPUP SFVM_INITMENUPOPUP // idCmdFirst,nIndex hmenu #define DVM_SELCHANGE SFVM_SELCHANGE // idCmdFirst,nItem PDVSELCHANGEINFO #define DVM_DRAWITEM SFVM_DRAWITEM // idCmdFirst pdis #define DVM_MEASUREITEM SFVM_MEASUREITEM // idCmdFirst pmis #define DVM_EXITMENULOOP SFVM_EXITMENULOOP // - - #define DVM_RELEASE SFVM_PRERELEASE // - lSelChangeInfo (ShellFolder private) #define DVM_GETCCHMAX SFVM_GETCCHMAX // pidlItem pcchMax #define DVM_FSNOTIFY SFVM_FSNOTIFY // LPITEMIDLIST* lEvent #define DVM_WINDOWCREATED SFVM_WINDOWCREATED // hwnd PDVSELCHANGEINFO #define DVM_WINDOWDESTROY SFVM_WINDOWDESTROY // hwnd PDVSELCHANGEINFO #define DVM_REFRESH SFVM_REFRESH // - lSelChangeInfo #define DVM_SETFOCUS SFVM_SETFOCUS // - lSelChangeInfo #define DVM_KILLFOCUS 19 // unused #define DVM_QUERYCOPYHOOK SFVM_QUERYCOPYHOOK // - - #define DVM_NOTIFYCOPYHOOK SFVM_NOTIFYCOPYHOOK // - LPCOPYHOOKINFO #define DVM_NOTIFY SFVM_NOTIFY // idFrom LPNOTIFY #define DVM_GETDETAILSOF SFVM_GETDETAILSOF // iColumn PDETAILSINFO #define DVM_COLUMNCLICK SFVM_COLUMNCLICK // iColumn - #define DVM_QUERYFSNOTIFY SFVM_QUERYFSNOTIFY // - FSNotifyEntry * #define DVM_DEFITEMCOUNT SFVM_DEFITEMCOUNT // - PINT #define DVM_DEFVIEWMODE SFVM_DEFVIEWMODE // - PFOLDERVIEWMODE #define DVM_UNMERGEMENU SFVM_UNMERGEMENU // uFlags #define DVM_INSERTITEM SFVM_INSERTITEM // pidl PDVSELCHANGEINFO #define DVM_DELETEITEM SFVM_DELETEITEM // pidl PDVSELCHANGEINFO #define DVM_UPDATESTATUSBAR SFVM_UPDATESTATUSBAR // - lSelChangeInfo #define DVM_BACKGROUNDENUM SFVM_BACKGROUNDENUM // #define DVM_GETWORKINGDIR SFVM_GETWORKINGDIR // #define DVM_GETCOLSAVESTREAM SFVM_GETCOLSAVESTREAM // flags IStream ** #define DVM_SELECTALL SFVM_SELECTALL // lSelChangeInfo #define DVM_DIDDRAGDROP SFVM_DIDDRAGDROP // dwEffect IDataObject * #define DVM_SUPPORTSIDENTIFY SFVM_SUPPORTSIDENTITY // - - #define DVM_FOLDERISPARENT SFVM_FOLDERISPARENT // - pidlChild // max length for guid strings #define GUIDSTR_MAX (1+ 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1) typedef struct _DVSELCHANGEINFO { UINT uOldState; UINT uNewState; LPARAM lParamItem; LPARAM* plParam; } DVSELCHANGEINFO, *PDVSELCHANGEINFO; // DOC'ed for DOJ compliance: ;end_internal 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; LPCITEMIDLIST pidl; LONG lEvents; LPFNVIEWCALLBACK pfnCallback; // No callback if NULL FOLDERVIEWMODE fvm; } CSFV, * LPCSFV; ;begin_internal // DOC'ed for DOJ Compliance ;end_internal // 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) ;begin_internal // Get the last sorting parameter given to FolderView #define SFVM_GETARRANGEPARAM 0x00000002 #define ShellFolderView_GetArrangeParam(_hwnd) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETARRANGEPARAM, 0L) // DOC'ed for DOJ Compliance ;end_internal // Add an OBJECT into the view #define SFVM_ADDOBJECT 0x00000003 #define ShellFolderView_AddObject(_hwnd, _pidl) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)_pidl) ;begin_internal // Gets the count of objects in the view #define SFVM_GETOBJECTCOUNT 0x00000004 #define ShellFolderView_GetObjectCount(_hwnd) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETOBJECTCOUNT, (LPARAM)0) // Returns a pointer to the Idlist associated with the specified index // Returns NULL if at end of list. #define SFVM_GETOBJECT 0x00000005 #define ShellFolderView_GetObject(_hwnd, _iObject) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETOBJECT, _iObject) // DOC'ed for DOJ Compliance ;end_internal // 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) ;begin_internal // Sets the redraw mode for the window that is displaying the information #define SFVM_SETREDRAW 0x00000008 #define ShellFolderView_SetRedraw(_hwnd, fRedraw) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_SETREDRAW, (LPARAM)fRedraw) // DOC'ed for DOJ Compliance ;end_internal // 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) ;begin_internal // Checks if the current drop is on the view window // lparam is unused // return value is TRUE if the current drop is upon the background of the // view window, FALSE otherwise #define SFVM_ISDROPONSOURCE 0x0000000a #define ShellFolderView_IsDropOnSource(_hwnd, _pdtgt) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_ISDROPONSOURCE, (LPARAM)_pdtgt) // Moves the selected icons in the listview // lparam is a pointer to a drop target // return value is unused #define SFVM_MOVEICONS 0x0000000b #define ShellFolderView_MoveIcons(_hwnd, _pdt) \ (void)SHShellFolderView_Message(_hwnd, SFVM_MOVEICONS, (LPARAM)(LPDROPTARGET)_pdt) // Gets the start point of a drag-drop // lparam is a pointer to a point // return value is unused #define SFVM_GETDRAGPOINT 0x0000000c #define ShellFolderView_GetDragPoint(_hwnd, _ppt) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETDRAGPOINT, (LPARAM)(LPPOINT)_ppt) // Gets the end point of a drag-drop // lparam is a pointer to a point // return value is unused #define SFVM_GETDROPPOINT 0x0000000d #define ShellFolderView_GetDropPoint(_hwnd, _ppt) \ SHShellFolderView_Message(_hwnd, SFVM_GETDROPPOINT, (LPARAM)(LPPOINT)_ppt) #define ShellFolderView_GetAnchorPoint(_hwnd, _fStart, _ppt) \ (BOOL)((_fStart) ? ShellFolderView_GetDragPoint(_hwnd, _ppt) : ShellFolderView_GetDropPoint(_hwnd, _ppt)) // DOC'ed for DOJ Compliance ;end_internal typedef struct _SFV_SETITEMPOS { LPCITEMIDLIST pidl; POINT pt; } SFV_SETITEMPOS, *LPSFV_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);} ;begin_internal // Determines if a given drop target interface is the one being used for // the background of the ShellFolderView (as opposed to an object in the // view) // lparam is a pointer to a drop target interface // return value is TRUE if it is the background drop target, FALSE otherwise #define SFVM_ISBKDROPTARGET 0x0000000f #define ShellFolderView_IsBkDropTarget(_hwnd, _pdptgt) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_ISBKDROPTARGET, (LPARAM)(LPDROPTARGET)_pdptgt) // DOC'ed for DOJ Compliance ;end_internal // Notifies a ShellView when one of its objects get put on the clipboard // as a result of a menu command. // // called by defcm.c when it does a copy/cut ;internal // // 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)) ;begin_internal // sets auto arrange #define SFVM_AUTOARRANGE 0x00000011 #define ShellFolderView_AutoArrange(_hwnd) \ (void)SHShellFolderView_Message(_hwnd, SFVM_AUTOARRANGE, 0) // sets snap to grid #define SFVM_ARRANGEGRID 0x00000012 #define ShellFolderView_ArrangeGrid(_hwnd) \ (void)SHShellFolderView_Message(_hwnd, SFVM_ARRANGEGRID, 0) #define SFVM_GETAUTOARRANGE 0x00000013 #define ShellFolderView_GetAutoArrange(_hwnd) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETAUTOARRANGE, 0) #define SFVM_GETSELECTEDCOUNT 0x00000014 #define ShellFolderView_GetSelectedCount(_hwnd) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDCOUNT, 0) typedef ITEMSPACING *LPITEMSPACING; #define SFVM_GETITEMSPACING 0x00000015 #define ShellFolderView_GetItemSpacing(_hwnd, lpis) \ (BOOL)SHShellFolderView_Message(_hwnd, SFVM_GETITEMSPACING, (LPARAM)lpis) // Causes an object to be repainted #define SFVM_REFRESHOBJECT 0x00000016 #define ShellFolderView_RefreshObject(_hwnd, _ppidl) \ (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REFRESHOBJECT, (LPARAM)_ppidl) // Causes the the whole view to be refreshed #define ShellFolderView_RefreshAll(_hwnd) \ (LPARAM)PostMessage(_hwnd, WM_KEYDOWN, (WPARAM)VK_F5, (LPARAM)0); // DOC'ed for DOJ Compliance ;end_internal #define SFVM_SETPOINTS 0x00000017 #define ShellFolderView_SetPoints(_hwnd, _pdtobj) \ (void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)_pdtobj) ;begin_internal // SVM_SELECTANDPOSITIONITEM lParam typedef struct { LPCITEMIDLIST pidl; // relative pidl to the view UINT uSelectFlags; // select flags BOOL fMove; // if true, we should also move it to point pt POINT pt; } SFM_SAP; // shell view messages #define SVM_SELECTITEM (WM_USER + 1) #define SVM_SELECTANDPOSITIONITEM (WM_USER + 5) ;end_internal ;begin_both #include /* Return to byte packing */ ;end_both ;begin_internal //=========================================================================== // CDefShellFolder members (for easy subclassing) //=========================================================================== // Default implementation (no dependencies to the instance data) STDMETHODIMP CDefShellFolder_QueryInterface(IShellFolder *psf, REFIID riid, void **ppv); STDMETHODIMP CDefShellFolder_BindToStorage(IShellFolder *psf, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv); STDMETHODIMP CDefShellFolder_BindToObject(IShellFolder *psf, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv); STDMETHODIMP CDefShellFolder_GetAttributesOf(IShellFolder *psf, UINT cidl, LPCITEMIDLIST * apidl, ULONG * rgfOut); STDMETHODIMP CDefShellFolder_SetNameOf(IShellFolder *psf, HWND hwndOwner, LPCITEMIDLIST pidl, LPCOLESTR pszName, DWORD dwReserved, LPITEMIDLIST * ppidlOut); // File Search APIS // DOC'ed for DOJ compliance ;end_internal SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast); ;begin_internal SHSTDAPI_(void) Control_RunDLL(HWND hwndStub, HINSTANCE hAppInstance, LPSTR pszCmdLine, int nCmdShow); SHSTDAPI_(void) Control_RunDLLW(HWND hwndStub, HINSTANCE hAppInstance, LPWSTR pszCmdLine, int nCmdShow); SHSTDAPI_(void) Control_RunDLLAsUserW(HWND hwndStub, HINSTANCE hAppInstance, LPWSTR lpwszCmdLine, int nCmdShow); // to add 16 bit pages to 32bit things. hGlobal can be NULL SHSTDAPI_(UINT) SHAddPages16(HGLOBAL hGlobal, LPCTSTR pszDllEntry, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); // DOC'ed for DOJ compliance ;end_internal SHSTDAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, IShellView ** ppsv); ;begin_internal // Access to MSHMTL's ditherer /* Definition of interface: IIntDitherer */ #undef INTERFACE #define INTERFACE IIntDitherer DECLARE_INTERFACE_(IIntDitherer, IUnknown) { #ifndef NO_BASEINTERFACE_FUNCS // *** IUnknown methods *** STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; #endif // *** IIntDitherer methods *** STDMETHOD(DitherTo8bpp)(THIS_ BYTE * pDestBits, LONG nDestPitch, BYTE * pSrcBits, LONG nSrcPitch, REFGUID bfidSrc, RGBQUAD * prgbDestColors, RGBQUAD * prgbSrcColors, BYTE * pbDestInvMap, LONG x, LONG y, LONG cx, LONG cy, LONG lDestTrans, LONG lSrcTrans) PURE; }; #ifdef COBJMACROS #define IntDitherer_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IntDitherer_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IntDitherer_Release(This) \ (This)->lpVtbl -> Release(This) #define IntDitherer_DitherTo8bpp(This, pDestBits, nDestPitch, \ pSrcBits, nSrcPitch, bfidSrc, \ prgbDestColors, prgbSrcColors, \ pbDestInvMap, x, y, cx, cy, \ lDestTrans, lSrcTrans) \ (This)->lpVtbl -> DitherTo8bpp(This, pDestBits, nDestPitch, pSrcBits, nSrcPitch, bfidSrc, \ prgbDestColors, prgbSrcColors, pbDestInvMap, x, y, cx, cy, lDestTrans, lSrcTrans) #endif ;end_internal // // 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_SCHEME [VT_UI4] Scheme value ;Internal // 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_FIRST 2 ;Internal #define PID_IS_URL 2 #define PID_IS_SCHEME 3 ;Internal #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 #define PID_IS_IDLIST 14 ;Internal #define PID_IS_LAST 14 ;Internal // // 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_FLAGS [VT_UI4] PIDISF_ flags ;Internal // PID_INTSITE_CONTENTLEN [VT_UI4] Content length ;Internal // PID_INTSITE_CONTENTCODE [VT_UI8] Content code ;Internal // 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_FRAGMENT [VT_NULL] Fragments ;Internal // 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. #define PID_INTSITE_FIRST 2 ;Internal #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_FRAGMENT 17 ;Internal #define PID_INTSITE_CODEPAGE 18 #define PID_INTSITE_TRACKING 19 #define PID_INTSITE_ICONINDEX 20 #define PID_INTSITE_ICONFILE 21 #define PID_INTSITE_LAST 21 ;Internal // Flags for PID_IS_FLAGS #define PIDISF_RECENTLYCHANGED 0x00000001 #define PIDISF_CACHEDSTICKY 0x00000002 #define PIDISF_CACHEIMAGES 0x00000010 #define PIDISF_FOLLOWALLLINKS 0x00000020 //Is URL entered in IE history bucket? ; Internal #define PIDISF_HISTORY 0x10000000 ; Internal // 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". ;begin_internal // Athena needs this to determine whether to double click or not. // // NOTE: if user uninstalls IE4, the Win95 code will // realize that the size has changed (even though it's not // in this struct, it is saved) and drop back to default state. // // Since we're exporting this so ISVs can get access to our flags, // let's avoid the need for a thunk and export the beginning section // of this structure ONLY. Here are the A and W versions for internal use: // // DOC'ed for DOJ compliance ;end_internal typedef struct { // These were in Win95 //;Internal BOOL fShowAllObjects : 1; BOOL fShowExtensions : 1; BOOL fNoConfirmRecycle : 1; // The below were added for IE4 //;Internal 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 ;begin_internal // These must have been an OSR release, as they aren't on \\guilo\slmadd\src\dev\inc16\shsemip.h ;end_internal // Note: Not a typo! This is a persisted structure so we cannot use LPARAM LONG lParamSort; int iSortDirection; ;begin_internal // This was added for IE4 ;end_internal 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. // If you need a new flag, steal a bit from from fSpareFlags.;internal UINT fSpareFlags : 13; // ;internal // If you add any fields to this structure, you ;internal // must also add upgrade code to shell32\util.cpp. ;internal // ;internal } 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. // If you need a new flag, steal a bit from from fSpareFlags. UINT fSpareFlags : 13; // ;internal // If you add any fields to this structure, you ;internal // must also add upgrade code to shell32\util.cpp. ;internal // ;internal } SHELLSTATEW, *LPSHELLSTATEW; #define SHELLSTATEVERSION_IE4 9 #define SHELLSTATEVERSION_WIN2K 10 #define SHELLSTATEVERSION 13 // rev if defaults change but size doesn't //;Internal #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(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet); ;begin_internal // And here's the beginning portion for public use: ;end_internal // // 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; UINT fRestFlags : 3; } SHELLFLAGSTATE, *LPSHELLFLAGSTATE; #define SSF_SHOWALLOBJECTS 0x00000001 #define SSF_SHOWEXTENSIONS 0x00000002 #define SSF_HIDDENFILEEXTS 0x00000004 // ;Internal - not supported #define SSF_SHOWCOMPCOLOR 0x00000008 #define SSF_SORTCOLUMNS 0x00000010 // ;Internal - corresponding SHELLSTATE fields don't exist in SHELLFLAGSTATE #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 // ;Internal - corresponding SHELLSTATE fields don't exist in SHELLFLAGSTATE #define SSF_WEBVIEW 0x00020000 // ;Internal #define SSF_SHOWSUPERHIDDEN 0x00040000 // ;Internal #define SSF_SEPPROCESS 0x00080000 // ;Internal #define SSF_NONETCRAWLING 0x00100000 // ;Internal #define SSF_STARTPANELON 0x00200000 // ;Internal #define SSF_SHOWSTARTPAGE 0x00400000 // ;Internal // SHGetSettings(LPSHELLFLAGSTATE lpss, DWORD dwMask) // // 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(LPSHELLFLAGSTATE lpsfs, DWORD dwMask); // SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast) // // 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(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast); // SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut) // // 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 // SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut); // SHPathPrepareForWrite(HWND hwnd, IUnknown *punkEnableModless, LPCTSTR pszPath, DWORD dwFlags) // // DESCRIPTION: // This API will 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. #define SHPPFW_MEDIACHECKONLY 0x00000010 // do the retrys on the media (or net path), return errors if the file can't be found SHSTDAPI SHPathPrepareForWrite%(HWND hwnd, IUnknown *punkEnableModless, LPCTSTR% pszPath, DWORD dwFlags); //-------------------------------------------------------------------------- // // Interface used for exposing the INI file methods on a shortcut file // // //-------------------------------------------------------------------------- #undef INTERFACE #define INTERFACE INamedPropertyBag DECLARE_INTERFACE_(INamedPropertyBag, IUnknown) { // *** 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] */ LPCOLESTR pszBagname, /* [in] */ LPCOLESTR pszPropName, /* [out][in] */ PROPVARIANT *pVar) PURE; STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, /* [in] */ LPCOLESTR pszPropName, /* [in] */ PROPVARIANT *pVar) PURE; STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, /* [in] */ LPCOLESTR 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 szDistUnit, DWORD dwFlags, LPSOFTDISTINFO psdi ); #endif // if __urlmon_h__ ;begin_internal // CmdID's for CGID_MENUDESKBAR #define MBCID_GETSIDE 1 #define MBCID_RESIZE 2 #define MBCID_SETEXPAND 3 #define MBCID_SETFLAT 4 #define MBCID_NOBORDER 5 // menubar orientation #define MENUBAR_LEFT ABE_LEFT #define MENUBAR_TOP ABE_TOP #define MENUBAR_RIGHT ABE_RIGHT #define MENUBAR_BOTTOM ABE_BOTTOM // // Net Access Wizard - called from NetID and WinLogon. // #define NAW_NETID 0x00 // called from netid tab #define NAW_PSDOMAINJOINED 0x02 // post setup (joined domain) #define NAW_PSDOMAINJOINFAILED 0x03 // post setup (domain joined failed) STDAPI NetAccessWizard(HWND hwnd, UINT uType, BOOL *pfReboot); typedef HRESULT (CALLBACK *LPNETACCESSWIZARD)(HWND hwnd, UINT uType, BOOL *pfReboot); STDAPI ClearAutoLogon(VOID); // // Net Places API's called from mpr. // typedef enum { NETPLACES_WIZARD_MAPDRIVE = 0, NETPLACES_WIZARD_ADDPLACE, } NETPLACESWIZARDTYPE; STDAPI_(DWORD) NetPlacesWizardDoModal( LPCONNECTDLGSTRUCTW lpConnDlgStruct, NETPLACESWIZARDTYPE npwt, BOOL fIsRoPath ); // Definition for the exported function types (for GetProcAddress) typedef DWORD (STDAPICALLTYPE*NetPlacesWizardDoModal_t)(LPCONNECTDLGSTRUCTW lpConnDlgStruct, NETPLACESWIZARDTYPE npwt, BOOL fIsROPath); // // moved here from nettarg.h (shell\inc) // // nCmdID #define CFCID_SETENUMTYPE 0 //nCmdExecOpt #define CFCOPT_ENUMINCOMING 1 #define CFCOPT_ENUMOUTGOING 2 #define CFCOPT_ENUMALL 3 /**************************************************** Items to display in the shutdown dialog (dwItems) ------------------------------------------------- These flags can be |'d when passed in. A single value will be returned, with NONE indicating an error or the user clicked cancel. -dsheldon ****************************************************/ #define SHTDN_NONE 0x000000000 #define SHTDN_LOGOFF 0x000000001 #define SHTDN_SHUTDOWN 0x000000002 #define SHTDN_RESTART 0x000000004 #define SHTDN_RESTART_DOS 0x000000008 #define SHTDN_SLEEP 0x000000010 #define SHTDN_SLEEP2 0x000000020 #define SHTDN_HIBERNATE 0x000000040 #define SHTDN_DISCONNECT 0x000000080 // Shutdown dialog function exported from MSGINA.dll STDAPI_(DWORD) ShellShutdownDialog(HWND hwndParent, LPCTSTR szUsername, DWORD dwExcludeItems); typedef DWORD (STDAPICALLTYPE*PFNSHELLSHUTDOWNDIALOG)(HWND hwndParent, LPCTSTR szUsername, DWORD dwExcludeItems); // Define a clipboard format for a data object to pass a user's SID // A data object supporting this format is passed to IShellExtInit::Initialize // before calling IShellPropSheetExt::AddPages. #define CFSTR_USERPROPPAGESSID TEXT("UserPropertyPagesSid") // Registry paths where extra IShellPropSheetExt handlers can be put so that // extended pages are added to the CPL or User Properties #define REGSTR_USERSANDPASSWORDS_CPL \ /* HKLM\\ */ TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Users and Passwords") // CLSIDs go in HKLM\Software\Microsoft\Windows\CurrentVersion\Control Panel\Users and Passwords\shellex\PropertySheetHandlers #define REGSTR_USERPROPERTIES_SHEET \ /* HKLM\\ */ TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Users and Passwords\\User Properties") // CLSIDs go in HKLM\Software\Microsoft\Windows\CurrentVersion\Control Panel\Users and Passwords\User Properties\shellex\PropertySheetHandlers // // SHFileSysBindToStorage() // Wrap of file system IShellFolder::BindToStorage // // pszPath // storage path // grfFileAttrib // optional Win32/64 file attribute bits. Use 0 to specify default behavior // grfMode // STGM_ mode flags. // grfFlags // BIND_xxx bind flags // riid // storage interface ID // **ppv // outbound storage interface pointer. // SHSTDAPI SHFileSysBindToStorage(LPCWSTR pszPath, DWORD grfFileAttrib, DWORD grfMode, DWORD grfFlags, REFIID riid, void **ppv); // DOC'ed for DOJ compliance ;end_internal // 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( IPropertySetStorage* psstg, REFFMTID fmtid, CLSID* pclsid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, OUT IPropertyStorage** ppstg, OUT OPTIONAL 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, PROPSPEC const rgpspec[], 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, UINT* puCodePage, ULONG cpspec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[], PROPID propidNameFirst ); ;begin_internal // SHIsLegacyAnsiProperty() // // Determine whether the property is a legacy ANSI property, and if so, // compute a conversion type for the property. // // fmtid, // property set identifier // propid, // property identifier // pvt, // optional: if non-null, contains on input the VARTYPE for the property; on output, // the converted type. (e.g., VT_LPSTR <--> VT_LPWSTR). SHSTDAPI_(BOOL) SHIsLegacyAnsiProperty( REFFMTID fmtid, PROPID propid, IN OUT OPTIONAL VARTYPE* pvt ); //-------------------------------------------------------------------------// // linkwnd.h - declaration of LinkWindow control // // LinkWindow supports HTML-like embedded links in the caption text. // (e.g. "Click Here to see something cool" // // An unlimited number of embedded links are supported. When the user clicks // on a link, an WM_NOTIFY - LWN_CLICK notification message is sent to the // parent window. The message data includes the zero-based index // (left to right orientation) of the link that was clicked. // // scotthan: author/owner // dsheldon: moved this to shlobjp.h. Eventually destined for comctl32. EXTERN_C BOOL WINAPI LinkWindow_RegisterClass() ; EXTERN_C BOOL WINAPI LinkWindow_UnregisterClass( HINSTANCE ) ; #define INVALID_LINK_INDEX (-1) #define MAX_LINKID_TEXT 48 #define LINKWINDOW_CLASS TEXT("Link Window") #define LWS_TRANSPARENT 0x0001 #define LWS_HOTTRACK 0x0002 #define LWIF_ITEMINDEX 0x00000001 #define LWIF_STATE 0x00000002 #define LWIF_ITEMID 0x00000004 #define LWIF_URL 0x00000008 #define LWIS_FOCUSED 0x0001 #define LWIS_ENABLED 0x0002 #define LWIS_VISITED 0x0004 #define LWIS_SHELLEXECURL 0x00000008 // If the caller didn't handle the msg (NM_CLICK), then ShellExecute the szURL // BUGBUG: we've got to change the following definition to // wininet.h::INTERNET_MAX_URL_LENGTH. // Currently, this breaks various dependents. #define LW_MAX_URL_LENGTH (2048 + 32 + sizeof("://")) // LWITEM typedef struct tagLWITEMA { UINT mask ; int iLink ; UINT state ; UINT stateMask ; CHAR szID[MAX_LINKID_TEXT] ; CHAR szUrl[LW_MAX_URL_LENGTH] ; //bugbug: INTERNET_MAX_URL_LENGTH } LWITEMA, *LPLWITEMA; typedef struct tagLWITEMW { UINT mask ; int iLink ; UINT state ; UINT stateMask ; WCHAR szID[MAX_LINKID_TEXT] ; WCHAR szUrl[LW_MAX_URL_LENGTH] ; //bugbug: INTERNET_MAX_URL_LENGTH } LWITEMW, *LPLWITEMW; // LWHITTESTINFO typedef struct tagLWHITTESTINFOA { POINT pt ; LWITEMA item ; } LWHITTESTINFOA, *LPLWHITTESTINFOA; // LWHITTESTINFO typedef struct tagLWHITTESTINFOW { POINT pt ; LWITEMW item ; } LWHITTESTINFOW, *LPLWHITTESTINFOW; // NMLINKWND typedef struct tagNMLINKWNDA { NMHDR hdr; LWITEMA item ; } NMLINKWNDA, *LPNMLINKWNDA; typedef struct tagNMLINKWNDW { NMHDR hdr; LWITEMW item ; } NMLINKWNDW, *LPNMLINKWNDW; #ifdef UNICODE #define LWITEM LWITEMW #define LPLWITEM LPLWITEMW #define LWHITTESTINFO LWHITTESTINFOW #define LPLWHITTESTINFO LPLWHITTESTINFOW #define NMLINKWND NMLINKWNDW #define LPNMLINKWND LPNMLINKWNDW #else //UNICODE #define LWITEM LWITEMA #define LPLWITEM LPLWITEMA #define LWHITTESTINFO LWHITTESTINFOA #define LPLWHITTESTINFO LPLWHITTESTINFOA #define NMLINKWND NMLINKWNDA #define LPNMLINKWND LPNMLINKWNDA #endif //UNICODE // LinkWindow notifications // NM_CLICK // wParam: n/a, lParam: LPLWITEM, ret: ignored. // LinkWindow messages #define LWM_HITTEST (WM_USER+0x300) // wParam: n/a, lparam: LPLWHITTESTINFO, ret: BOOL #define LWM_GETIDEALHEIGHT (WM_USER+0x301) // wParam: n/a, lparam: n/a, ret: cy #define LWM_SETITEM (WM_USER+0x302) // wParam: n/a, lparam: LWITEM*, ret: BOOL #define LWM_GETITEM (WM_USER+0x303) // wParam: n/a, lparam: LWITEM*, ret: BOOL //-------------------------------------------------------------------------// // INTERNAL: Darwin link tracking for start menu // lives in unicpp\startmnu.cpp #if _WIN32_IE >= 0x0600 // Note: SHRegisterDarwinLink takes ownership of pidlFull. fUpdate means: update the Darwin state right away SHSTDAPI_(BOOL) SHRegisterDarwinLink(LPITEMIDLIST pidlFull, LPWSTR pszDarwinID, BOOL fUpdate); // Use this function to update the Darwin state for all registered Darwin shortcuts. SHSTDAPI_(void) SHReValidateDarwinCache(); SHSTDAPI SHParseDarwinIDFromCacheW(LPWSTR pszDarwinDescriptor, LPWSTR *ppwszOut); #endif // // GroupButton is a variation of a group box control but supports a link-like // caption bar, and optionally, can be buddied to a containee window for // auto-positioning behavior. // // scotthan: author/owner #define GROUPBUTTON_CLASS TEXT("GroupButton") EXTERN_C ATOM WINAPI GroupButton_RegisterClass() ; EXTERN_C BOOL WINAPI GroupButton_UnregisterClass() ; #include typedef struct tagGBPLACEMENT { LONG x ; // in: top left; -1 to ignore LONG y ; // in: top right; -1 to ignore LONG cx ; // in: width to assign; -1 to ignore. // If cx != -1, cxContain and cxMax are ignored. LONG cy ; // in: height to assign; -1 to ignore. // If cy != -1, cyContain and cyMax are ignored. LONG cxBuddy ; // in: width of buddy area; -1 to ignore LONG cyBuddy ; // in: height of buddy area; -1 to ignore LONG cxBuddyMargin ;// in: width of buddy margin; -1 to ignore LONG cyBuddyMargin ;// in: height of buddy margin; -1 to ignore RECT rcBuddy ; // out: new buddy rect in parent coords. RECT rcWindow ; // out: new window rect in parent coords. HDWP hdwp ; // optional in: Non-NULL => DeferWindowPos, // NULL => SetWindowPos } GBPLACEMENT, *PGBPLACEMENT, *LPGBPLACEMENT ; #include /* Return to byte packing */ // Buddy flags #define GBBF_HRESIZE 0x00000001 #define GBBF_VRESIZE 0x00000002 #define GBBF_HSCROLL 0x00000004 #define GBBF_VSCROLL 0x00000008 #define GBBF_HSLAVE 0x00000010 #define GBBF_VSLAVE 0x00000020 // Group button messages #define GBM_FIRST (WM_USER+0x400) // arbitrary #define GBM_SETPLACEMENT (GBM_FIRST+0) // WPARAM: n/a, LPARAM: PGBPLACEMENT, return: BOOL #define GBM_SETBUDDY (GBM_FIRST+1) // WPARAM: HWND hwndBuddy, LPARAM: dwBuddyFlags, return: BOOL #define GBM_GETBUDDY (GBM_FIRST+2) // WPARAM: n/a, LPARAM: n/a, return: HWND #define GBM_SETDROPSTATE (GBM_FIRST+3) // WPARAM: BOOL fDropped, LPARAM: n/a, return: BOOL #define GBM_GETDROPSTATE (GBM_FIRST+4) // WPARAM: n/a, LPARAM: n/a, return: BOOL fDropped #define GBM_LAST GBM_GETDROPSTATE typedef struct tagGBNQUERYBUDDYSIZE { NMHDR hdr; LONG cx ; LONG cy ; } GBNQUERYBUDDYSIZE, *LPGBNQUERYBUDDYSIZE, *PGBNQUERYBUDDYSIZE ; // Group button notifications #define GBN_FIRST 2000U #define GBN_LAST 2020U #define GBN_QUERYBUDDYHEIGHT (GBN_FIRST+0) // LPARAM: LPGBNQUERYBUDDYSIZE #define GBN_QUERYBUDDYWIDTH (GBN_FIRST+1) // LPARAM: LPGBNQUERYBUDDYSIZE. // create standard IExtractIcon for file system like things (that does not really exist) // DOC'ed for DOJ compliance ;end_internal SHSTDAPI SHCreateFileExtractIcon%(LPCTSTR% pszFile, DWORD dwFileAttributes, REFIID riid, void **ppv); ;begin_internal // Limit Input Mask values: #define LIM_FLAGS 0x00000001 // dwFlags contains valid data. Otherwise all default values are used. #define LIM_FILTER 0x00000002 // pszFilter contains valid data. At least one of the filter and mask fields must be used. Both can be used it desired. #define LIM_HINST 0x00000008 // hinst contains valid data #define LIM_TITLE 0x00000010 // pszTitle contains valid data. This data will be shown in bold at the top of any tooltips displayed. #define LIM_MESSAGE 0x00000020 // pszMessage contains valid data. This data will be shown in default font below the title if a title is also used. #define LIM_ICON 0x00000040 // hicon contains valid data. This icon will be displayed in front of the title if a title is given. #define LIM_NOTIFY 0x00000080 // hwndNotify contains the window handle that should receive any notification messages. By default, the parent of hwndEdit recieves notifications. #define LIM_TIMEOUT 0x00000100 // iTimeout is valid. Otherwise the default timeout of 10 seconds is used. #define LIM_TIPWIDTH 0x00000200 // cxTipWidth is valid. Otherwiser the default is 500 pixels. // Limit Input Flags values: #define LIF_INCLUDEFILTER 0x00000000 // default value. pszFilter is a string of allowable characters. #define LIF_EXCLUDEFILTER 0x00000001 // pszFilter is a string of excluded characters. #define LIF_CATEGORYFILTER 0x00000002 // pszFilter is not a pointer, but rather its a bitfield indicating types or characters. If combined with LIF_EXCLUDEFILTER these are excluded categories, otherwise they are allowed categories. #define LIF_WARNINGBELOW 0x00000000 // default value. Balloon tooltips will be shown below the window by default. #define LIF_WARNINGABOVE 0x00000004 // Ballon tooltips will be shown above the window by default. #define LIF_WARNINGCENTERED 0x00000008 // Ballon tooltips will be shown pointing to the center of the window. #define LIF_WARNINGOFF 0x00000010 // no balloon tooltip will be displayed upon invalid input. #define LIF_FORCEUPPERCASE 0x00000020 // all characters will be converted to upper case. Cannot be use with LIF_FORCELOWERCASE. #define LIF_FORCELOWERCASE 0x00000040 // all characters will be converted to lower case. Cannot be use with LIF_FORCEUPPERCASE. #define LIF_MEESAGEBEEP 0x00000000 // default value. A tone will be played to alert the user if they attemp invalid input. #define LIF_SILENT 0x00000080 // No tone will be played. #define LIF_NOTIFYONBADCHAR 0x00000100 // a notify message will be sent to hwndNotify when invalid input is attempted. #define LIF_HIDETIPONVALID 0x00000200 // if the tooltip is displayed, it should be hidden when the next valid character is entered. By default, the tip remains visible for iTimeOut milliseconds. #define LIF_PASTESKIP 0x00000000 // default value. When pasting, skip the bad characters and paste all of the good characters. #define LIF_PASTESTOP 0x00000400 // When pasting, stop when the first bad character is incountered. Valid characters in front of this will get pasted. #define LIF_PASTECANCEL 0x00000800 // When pasting, abort the entire paste if any characters are invalid. #define LIF_KEEPCLIPBOARD 0x00001000 // When pasting, don't modify the contents of the clipboard when there are invalid characters. By defualt the clipboard is changed. How it is changed depends on which LIF_PASTE* flag is used. // Limit Input Category Filters: // these flags use the result of GetStringTypeEx with CT_TYPE1: #define LICF_UPPER 0x00000001 // Uppercase #define LICF_LOWER 0x00000002 // Lowercase #define LICF_DIGIT 0x00000004 // Decimal digits #define LICF_SPACE 0x00000008 // Space characters #define LICF_PUNCT 0x00000010 // Punctuation #define LICF_CNTRL 0x00000020 // Control characters #define LICF_BLANK 0x00000040 // Blank characters #define LICF_XDIGIT 0x00000080 // Hexadecimal digits #define LICF_ALPHA 0x00000100 // Any linguistic character: alphabetic, syllabary, or ideographic // these flags check for a few things that GetStringTypeEx doesn't check #define LICF_BINARYDIGIT 0x00010000 // 0-1 #define LICF_OCTALDIGIT 0x00020000 // 0-7 #define LICF_ATOZUPPER 0x00100000 // A-Z (use LICF_ALPHA for language independent check) #define LICF_ATOZLOWER 0x00200000 // a-z (use LICF_ALPHA for language independent check) #define LICF_ATOZ (LICF_ATOZUPPER|LICF_ATOZLOWER) // a-z, A-Z ;end_internal ;begin_both #include ;end_both ;begin_internal typedef struct tagLIMITINPUT { DWORD cbSize; DWORD dwMask; DWORD dwFlags; HINSTANCE hinst; LPWSTR pszFilter; // pointer to a string, or the ID of a string resource if hinst is also given, or LPSTR_TEXTCALLBACK if the parent window should be notified to provide a string. LPWSTR pszTitle; // pointer to a string, or the ID of a string resource if hinst is also given, or LPSTR_TEXTCALLBACK if the parent window should be notified to provide a string. LPWSTR pszMessage; // pointer to a string, or the ID of a string resource if hinst is also given, or LPSTR_TEXTCALLBACK if the parent window should be notified to provide a string. HICON hIcon; // handle to an icon, or I_ICONCALLBACK if the notify window should be asked to provide an icon. HWND hwndNotify; // handle to a window to process notify messages INT iTimeout; // time in milliseconds to display the tooltip INT cxTipWidth; // max width of the tooltip in pixels. Defaults to 500. } LIMITINPUT; typedef struct tagNMLIDISPINFO { NMHDR hdr; // standard notification header structure LIMITINPUT li; // the mask member indicates which fields must be filled out. } NMLIDISPINFO, * LPNMLIDISPINFO, NMLIFILTERINFO, * LPNMLIFILTERINFO; #define LIN_GETDISPINFO 0x01 // notify code sent to retrieve tooltip display info #define LIN_GETFILTERINFO 0x02 // notify code sent to retrieve filter or mask info typedef struct tagNMLIBADCHAR { NMHDR hdr; // standard notification header structure WPARAM wParam; // wParam sent in WM_CHAR message LPARAM lParam; // lParam sent in WM_CHAR message } NMLIBADCHAR, * LPNMLIBADCHAR; #define LIN_BADCHAR 0x03 // notify code sent when a character is filtered out #define I_ICONCALLBACK ((HICON)-1L) // Helpers which prevent entry of invalid (as defined by the folder) characters. Call on LVN_BEGIN_INPUT_EDIT // doc'ed for DOJ compliance ;end_internal SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf); ;begin_internal SHSTDAPI SHLimitInputEditWithFlags(HWND hwndEdit, LIMITINPUT * pil); SHSTDAPI SHLimitInputEditChars(HWND hwndEdit, LPCWSTR pszValidChars, LPCWSTR pszInvalidChars); SHSTDAPI SHLimitInputCombo(HWND hwndComboBox, IShellFolder *psf); // DOC'ed for DOJ Compliance ;end_internal #if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) // // 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 #if (_WIN32_IE >= 0x0600) // // typedef void (CALLBACK *PFNASYNCICONTASKBALLBACK)(LPCITEMIDLIST pidl, LPVOID pvData, LPVOID pvHint, INT iIconIndex, INT iOpenIconIndex); // HRESULT SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFolder *psf, LPCITEMIDLIST pidl, UINT flags, // PFNASYNCICONTASKBALLBACK pfn, LPVOID pvData, LPVOID pvHint, int *piIndex, int *piIndexSel); // A usefull function for asynchronously mapping idlist into index into system // image list. Optionally it can also look up the index of the selected icon. // pts Task scheduler interface to use to create the background task // psf Shell folder relating to the pidl // pidl Item whose icon is requested // flags GIL_ flags // pfn Function called back when the background task is done // pvData User data passed back in the (*pfn) callback // pvHint User data passed back in the (*pfn) callback // piIndex Icon index returned. This is the temporary index if the function returns E_PENDING. The final index will be provided thru the callback // piIndexSel Optional icon index for the open icon case (GIL_OPENICON). // // Returns S_OK if all the requested info was available. E_PENDING means that you get temporary icons, and will be called back // asynchronously with the final icons. Other failure code means the function failed. SHSTDAPI SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFolder *psf, LPCITEMIDLIST pidl, UINT flags, PFNASYNCICONTASKBALLBACK pfn, LPVOID pvData, LPVOID pvHint, int *piIndex, int *piIndexSel); #endif // (_WIN32_IE >= 0x0600) // A usefull function in Defview for mapping idlist into index into system // image list. Optionally it can also look up the index of the selected // icon. SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, LPCITEMIDLIST pidl, int *piIndexSel); ;begin_internal // DOC'ed for DOJ Compliance ;end_internal EXTERN_C WINSHELLAPI HRESULT STDAPICALLTYPE SHCLSIDFromString(LPCWSTR lpsz, LPCLSID lpclsid); HANDLE _SHAllocShared(LPCVOID pvData, DWORD dwSize, DWORD dwDestinationProcessId); BOOL _SHFreeShared(HANDLE hData, DWORD dwSourceProcessId); void *_SHLockShared(HANDLE hData, DWORD dwSourceProcessId); BOOL _SHUnlockShared(void * pvData); STDAPI SHFlushClipboard(void); STDAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker** ppmoniker); HINSTANCE WINAPI SHGetShellStyleHInstance(void); STDAPI_(void) PerUserInit(void); WINSHELLAPI BOOL WINAPI SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgParent); #ifndef _SHLOBJ_NO_PICKICONDLG WINSHELLAPI int WINAPI PickIconDlg(HWND hwnd, LPWSTR pszIconPath, UINT cbIconPath, int *piIconIndex); #endif 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; ;begin_internal int _cdecl ShellMessageBoxWrapW(HINSTANCE hInst, HWND hWnd, LPCWSTR pszMsg, LPCWSTR pszTitle, UINT fuStyle, ...); #ifdef UNICODE #define ShellMessageBoxWrap ShellMessageBoxWrapW #else #define ShellMessageBoxWrap ShellMessageBoxA #endif // Helpers for handling IDataObject stuff - from shell32.dll // DOC'ed for DOJ compliance ;end_internal STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, DWORD *pdwAttributes, UINT *pcItems); ;begin_internal STDAPI SHSimulateDropOnClsid(REFCLSID clsidDrop, IUnknown* punkSite, IDataObject* pdo); ;end_internal ;begin_both #include /* Return to byte packing */ ;end_both ;begin_both #ifdef __cplusplus } #endif /* __cplusplus */ #include ;end_both SHDOCAPI_(BOOL) ImportPrivacySettings( LPCWSTR szFilename, IN OUT BOOL* pfParsePrivacyPreferences, IN OUT BOOL* pfParsePerSiteRules); #ifndef IEnumPrivacyRecords typedef interface IEnumPrivacyRecords IEnumPrivacyRecords; #endif SHDOCAPI DoPrivacyDlg( HWND hwndParent, LPOLESTR pszUrl, IEnumPrivacyRecords *pPrivacyEnum, BOOL fReportAllSites); #endif // _SHLOBJ_H_ #endif // _SHLOBJP_H_ ;Internal