windows-nt/Source/XPSP1/NT/shell/shell32/sdspatch/sdspatch.h
2020-09-26 16:20:57 +08:00

234 lines
8.4 KiB
C++

#ifndef __SHDISP_H__
#define __SHDISP_H__
#ifdef __cplusplus
EXTERN_C GUID g_guidLibSdspatch;
EXTERN_C USHORT g_wMajorVerSdspatch;
EXTERN_C USHORT g_wMinorVerSdspatch;
#define SDSPATCH_TYPELIB g_guidLibSdspatch, g_wMajorVerSdspatch, g_wMinorVerSdspatch
HRESULT MakeSafeForScripting(IUnknown** ppDisp);
class CImpConPtCont;
typedef CImpConPtCont *PCImpConPtCont;
class CConnectionPoint;
typedef CConnectionPoint *PCConnectionPoint;
class CImpISupportErrorInfo;
typedef CImpISupportErrorInfo *PCImpISupportErrorInfo;
class CFolder;
HRESULT GetItemFolder(CFolder *psdfRoot, LPCITEMIDLIST pidl, CFolder **ppsdf);
HRESULT GetObjectSafely(IShellFolderView *psfv, LPCITEMIDLIST *ppidl, UINT iType);
STDAPI CShellDispatch_CreateInstance(IUnknown* punkOuter, REFIID riid, void **ppv);
HRESULT CFolder_Create(HWND hwnd, LPCITEMIDLIST pidl, IShellFolder *psf, REFIID riid, void **ppv);
HRESULT CFolder_Create2(HWND hwnd, LPCITEMIDLIST pidl, IShellFolder *psf, CFolder **psdf);
HRESULT CFolderItems_Create(CFolder *psdf, BOOL fSelected, FolderItems **ppitems);
HRESULT CFolderItemsFDF_Create(CFolder *psdf, FolderItems **ppitems);
HRESULT CFolderItem_Create(CFolder *psdf, LPCITEMIDLIST pidl, FolderItem **ppid);
HRESULT CFolderItem_CreateFromIDList(HWND hwnd, LPCITEMIDLIST pidl, FolderItem **ppid);
HRESULT CShortcut_CreateIDispatch(HWND hwnd, IShellFolder *psf, LPCITEMIDLIST pidl, IDispatch **ppid);
HRESULT CSDWindow_Create(HWND hwndFldr, IDispatch ** ppsw);
HRESULT CFolderItemVerbs_Create(IContextMenu *pcm, FolderItemVerbs **ppid);
//==================================================================
// Folder items need a way back to the folder object so define folder
// object in header file...
class CFolderItem;
class CFolderItems;
class CFolder : public Folder3,
public IPersistFolder2,
public CObjectSafety,
public IShellService,
protected CImpIDispatch,
protected CObjectWithSite
{
friend class CFolderItem;
friend class CFolderItems;
friend class CShellFolderView;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IDispatch
STDMETHODIMP GetTypeInfoCount(UINT * pctinfo)
{ return CImpIDispatch::GetTypeInfoCount(pctinfo); }
STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo)
{ return CImpIDispatch::GetTypeInfo(itinfo, lcid, pptinfo); }
STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID * rgdispid)
{ return CImpIDispatch::GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid); }
STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pdispparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, UINT * puArgErr)
{ return CImpIDispatch::Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); }
// Folder
STDMETHODIMP get_Application(IDispatch **ppid);
STDMETHODIMP get_Parent(IDispatch **ppid);
STDMETHODIMP get_ParentFolder(Folder **ppdf);
STDMETHODIMP get_Title(BSTR * pbs);
STDMETHODIMP Items(FolderItems **ppid);
STDMETHODIMP ParseName(BSTR bName, FolderItem **ppid);
STDMETHODIMP NewFolder(BSTR bName, VARIANT vOptions);
STDMETHODIMP MoveHere(VARIANT vItem, VARIANT vOptions);
STDMETHODIMP CopyHere(VARIANT vItem, VARIANT vOptions);
STDMETHODIMP GetDetailsOf(VARIANT vItem, int iColumn, BSTR * pbs);
// Folder2
STDMETHODIMP get_Self(FolderItem **ppfi);
STDMETHODIMP get_OfflineStatus(LONG *pul);
STDMETHODIMP Synchronize(void);
STDMETHODIMP get_HaveToShowWebViewBarricade(VARIANT_BOOL *pbHaveToShowWebViewBarricade);
STDMETHODIMP DismissedWebViewBarricade();
// Folder3
STDMETHODIMP get_ShowWebViewBarricade(VARIANT_BOOL *pbShowWebViewBarricade);
STDMETHODIMP put_ShowWebViewBarricade(VARIANT_BOOL bShowWebViewBarricade);
// IPersist
STDMETHODIMP GetClassID(CLSID *pClassID);
// IPersistFolder
STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
// IPersistFolder2
STDMETHODIMP GetCurFolder(LPITEMIDLIST *ppidl);
// CObjectWithSite overriding
STDMETHODIMP SetSite(IUnknown *punkSite);
// IShellService
STDMETHODIMP SetOwner(IUnknown* punkOwner);
CFolder(HWND hwnd);
HRESULT Init(LPCITEMIDLIST pidl, IShellFolder *psf);
HRESULT InvokeVerbHelper(VARIANT vVerb, VARIANT vArgs, LPCITEMIDLIST *ppidl, int cItems, DWORD dwSafetyOptions);
HRESULT GetShellFolderView(IShellFolderView **ppsfv);
private:
LONG _cRef;
IShellFolder *_psf;
IShellFolder2 *_psf2;
IShellDetails *_psd;
LPITEMIDLIST _pidl;
IDispatch *_pidApp; // cache app object
int _fmt;
HWND _hwnd;
IUnknown *_punkOwner; // shell objects above this, defview
~CFolder();
// Helper functions, not exported by interface
STDMETHODIMP _ParentFolder(Folder **ppdf);
HRESULT _MoveOrCopy(BOOL bMove, VARIANT vItem, VARIANT vOptions);
IShellDetails *_GetShellDetails(void);
LPCITEMIDLIST _FolderItemIDList(const VARIANT *pv);
HRESULT _Application(IDispatch **ppid);
BOOL _GetBarricadeValueName(LPTSTR pszValueName, UINT cch);
HRESULT _SecurityCheck();
};
class CFolderItemVerbs;
class CFolderItem : public FolderItem2,
public IPersistFolder2,
public CObjectSafety,
public IParentAndItem,
protected CImpIDispatch
{
friend class CFolderItemVerbs;
public:
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// IDispatch
STDMETHODIMP GetTypeInfoCount(UINT * pctinfo)
{ return CImpIDispatch::GetTypeInfoCount(pctinfo); }
STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo)
{ return CImpIDispatch::GetTypeInfo(itinfo, lcid, pptinfo); }
STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID * rgdispid)
{ return CImpIDispatch::GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid); }
STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pdispparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, UINT * puArgErr)
{ return CImpIDispatch::Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); }
// FolderItem
STDMETHODIMP get_Application(IDispatch **ppid);
STDMETHODIMP get_Parent(IDispatch **ppid);
STDMETHODIMP get_Name(BSTR *pbs);
STDMETHODIMP put_Name(BSTR bs);
STDMETHODIMP get_Path(BSTR *bs);
STDMETHODIMP get_GetLink(IDispatch **ppid);
STDMETHODIMP get_GetFolder(IDispatch **ppid);
STDMETHODIMP get_IsLink(VARIANT_BOOL * pb);
STDMETHODIMP get_IsFolder(VARIANT_BOOL * pb);
STDMETHODIMP get_IsFileSystem(VARIANT_BOOL * pb);
STDMETHODIMP get_IsBrowsable(VARIANT_BOOL * pb);
STDMETHODIMP get_ModifyDate(DATE *pdt);
STDMETHODIMP put_ModifyDate(DATE dt);
STDMETHODIMP get_Size(LONG *pdt);
STDMETHODIMP get_Type(BSTR *pbs);
STDMETHODIMP Verbs(FolderItemVerbs **ppfic);
STDMETHODIMP InvokeVerb(VARIANT vVerb);
// FolderItem2
STDMETHODIMP InvokeVerbEx(VARIANT vVerb, VARIANT vArgs);
STDMETHODIMP ExtendedProperty(BSTR bstrPropName, VARIANT *pvRet);
// IPersist
STDMETHODIMP GetClassID(CLSID *pClassID);
// IPersistFolder
STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
// IPersistFolder2
STDMETHODIMP GetCurFolder(LPITEMIDLIST *ppidl);
// IParentAndItem
STDMETHODIMP SetParentAndItem(LPCITEMIDLIST pidlParent, IShellFolder *psf, LPCITEMIDLIST pidl);
STDMETHODIMP GetParentAndItem(LPITEMIDLIST *ppidlParent, IShellFolder **ppsf, LPITEMIDLIST *ppidl);
// publics, non interface methods
CFolderItem();
HRESULT Init(CFolder *psdf, LPCITEMIDLIST pidl);
static LPCITEMIDLIST _GetIDListFromVariant(const VARIANT *pv);
private:
HRESULT _CheckAttribute(ULONG ulAttr, VARIANT_BOOL *pb);
HRESULT _GetUIObjectOf(REFIID riid, void **ppvOut);
HRESULT _ItemName(UINT dwFlags, BSTR *pbs);
HRESULT _SecurityCheck();
~CFolderItem();
LONG _cRef;
CFolder *_psdf; // The folder we came from...
LPITEMIDLIST _pidl;
};
#define CMD_ID_FIRST 1
#define CMD_ID_LAST 0x7fff
#endif // __cplusplus
#endif // __SHDISP_H__