4 * Copyright 2014 David Quintana
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 interface IAugmentedShellFolder
: public IShellFolder
24 virtual HRESULT STDMETHODCALLTYPE
AddNameSpace(LPGUID
, IShellFolder
*, LPCITEMIDLIST
, ULONG
) = 0;
25 virtual HRESULT STDMETHODCALLTYPE
GetNameSpaceID(LPCITEMIDLIST
, LPGUID
) = 0;
26 virtual HRESULT STDMETHODCALLTYPE
QueryNameSpace(ULONG
, LPGUID
, IShellFolder
**) = 0;
27 virtual HRESULT STDMETHODCALLTYPE
EnumNameSpace(ULONG
, PULONG
) = 0;
30 interface IAugmentedShellFolder2
: public IAugmentedShellFolder
32 virtual HRESULT STDMETHODCALLTYPE
UnWrapIDList(LPCITEMIDLIST
, LONG
, IShellFolder
**, LPITEMIDLIST
*, LPITEMIDLIST
*, LONG
*) = 0;
35 /* No idea what QUERYNAMESPACEINFO struct contains, yet */
36 struct QUERYNAMESPACEINFO
41 interface IAugmentedShellFolder3
: public IAugmentedShellFolder2
43 virtual HRESULT STDMETHODCALLTYPE
QueryNameSpace2(ULONG
, QUERYNAMESPACEINFO
*) = 0;
46 class CEnumMergedFolder
;
49 public CComCoClass
<CMergedFolder
, &CLSID_MergedFolder
>,
50 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
52 public IPersistFolder2
,
53 public IAugmentedShellFolder3
// -- undocumented
54 //public IShellService, // DEPRECATED IE4 interface: https://msdn.microsoft.com/en-us/library/windows/desktop/bb774870%28v=vs.85%29.aspx
55 //public ITranslateShellChangeNotify,// -- undocumented
57 //public IPersistPropertyBag,
58 //public IShellIconOverlay, // -- undocumented
59 //public ICompositeFolder, // -- undocumented
60 //public IItemNameLimits, // https://msdn.microsoft.com/en-us/library/windows/desktop/bb761776%28v=vs.85%29.aspx
63 CComPtr
<IShellFolder
> m_UserLocal
;
64 CComPtr
<IShellFolder
> m_AllUsers
;
65 CComPtr
<CEnumMergedFolder
> m_EnumSource
;
67 LPITEMIDLIST m_UserLocalPidl
;
68 LPITEMIDLIST m_AllUsersPidl
;
69 LPITEMIDLIST m_shellPidl
;
73 virtual ~CMergedFolder();
75 HRESULT
_SetSources(IShellFolder
* userLocal
, IShellFolder
* allUSers
);
77 DECLARE_REGISTRY_RESOURCEID(IDR_MERGEDFOLDER
)
78 DECLARE_NOT_AGGREGATABLE(CMergedFolder
)
79 DECLARE_PROTECT_FINAL_CONSTRUCT()
81 BEGIN_COM_MAP(CMergedFolder
)
82 COM_INTERFACE_ENTRY2_IID(IID_IShellFolder
, IShellFolder
, IShellFolder2
)
83 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2
, IShellFolder2
)
84 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
85 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder
, IPersistFolder
)
86 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2
, IPersistFolder2
)
87 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder
, IAugmentedShellFolder
)
88 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder2
, IAugmentedShellFolder2
)
89 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder3
, IAugmentedShellFolder3
)
90 //COM_INTERFACE_ENTRY_IID(IID_IStorage, IStorage)
91 //COM_INTERFACE_ENTRY_IID(IID_IShellService, IShellService)
92 //COM_INTERFACE_ENTRY_IID(IID_ITranslateShellChangeNotify,ITranslateShellChangeNotify)
93 //COM_INTERFACE_ENTRY_IID(IID_IPersistPropertyBag,IPersistPropertyBag)
94 //COM_INTERFACE_ENTRY_IID(IID_IShellIconOverlay, IShellIconOverlay)
95 //COM_INTERFACE_ENTRY_IID(IID_ICompositeFolder, ICompositeFolder)
96 //COM_INTERFACE_ENTRY_IID(IID_IItemNameLimits, IItemNameLimits)
100 virtual HRESULT STDMETHODCALLTYPE
ParseDisplayName(
103 LPOLESTR lpszDisplayName
,
106 ULONG
*pdwAttributes
);
108 virtual HRESULT STDMETHODCALLTYPE
EnumObjects(
111 IEnumIDList
**ppenumIDList
);
113 virtual HRESULT STDMETHODCALLTYPE
BindToObject(
119 virtual HRESULT STDMETHODCALLTYPE
BindToStorage(
125 virtual HRESULT STDMETHODCALLTYPE
CompareIDs(
128 LPCITEMIDLIST pidl2
);
130 virtual HRESULT STDMETHODCALLTYPE
CreateViewObject(
135 virtual HRESULT STDMETHODCALLTYPE
GetAttributesOf(
137 PCUITEMID_CHILD_ARRAY apidl
,
140 virtual HRESULT STDMETHODCALLTYPE
GetUIObjectOf(
143 PCUITEMID_CHILD_ARRAY apidl
,
148 virtual HRESULT STDMETHODCALLTYPE
GetDisplayNameOf(
153 virtual HRESULT STDMETHODCALLTYPE
SetNameOf(
158 LPITEMIDLIST
*ppidlOut
);
161 virtual HRESULT STDMETHODCALLTYPE
GetDefaultSearchGUID(
164 virtual HRESULT STDMETHODCALLTYPE
EnumSearches(
165 IEnumExtraSearch
**ppenum
);
167 virtual HRESULT STDMETHODCALLTYPE
GetDefaultColumn(
172 virtual HRESULT STDMETHODCALLTYPE
GetDefaultColumnState(
174 SHCOLSTATEF
*pcsFlags
);
176 virtual HRESULT STDMETHODCALLTYPE
GetDetailsEx(
178 const SHCOLUMNID
*pscid
,
181 virtual HRESULT STDMETHODCALLTYPE
GetDetailsOf(
186 virtual HRESULT STDMETHODCALLTYPE
MapColumnToSCID(
191 virtual HRESULT STDMETHODCALLTYPE
GetClassID(CLSID
*lpClassId
);
194 virtual HRESULT STDMETHODCALLTYPE
Initialize(PCIDLIST_ABSOLUTE pidl
);
197 virtual HRESULT STDMETHODCALLTYPE
GetCurFolder(PIDLIST_ABSOLUTE
* pidl
);
199 // IAugmentedShellFolder2
200 virtual HRESULT STDMETHODCALLTYPE
AddNameSpace(LPGUID lpGuid
, IShellFolder
* psf
, LPCITEMIDLIST pcidl
, ULONG dwUnknown
);
201 virtual HRESULT STDMETHODCALLTYPE
GetNameSpaceID(LPCITEMIDLIST pcidl
, LPGUID lpGuid
);
202 virtual HRESULT STDMETHODCALLTYPE
QueryNameSpace(ULONG dwUnknown
, LPGUID lpGuid
, IShellFolder
** ppsf
);
203 virtual HRESULT STDMETHODCALLTYPE
EnumNameSpace(ULONG dwUnknown
, PULONG lpUnknown
);
204 virtual HRESULT STDMETHODCALLTYPE
UnWrapIDList(LPCITEMIDLIST pcidl
, LONG lUnknown
, IShellFolder
** ppsf
, LPITEMIDLIST
* ppidl1
, LPITEMIDLIST
*ppidl2
, LONG
* lpUnknown
);
206 // IAugmentedShellFolder3
207 virtual HRESULT STDMETHODCALLTYPE
QueryNameSpace2(ULONG
, QUERYNAMESPACEINFO
*);