mirror of
https://github.com/reactos/reactos.git
synced 2025-06-01 07:28:19 +00:00
[SHELL32]
- Add stubs for the shell dispatch object, CShell, and its relatives. Patch by Mark Jansen. [SHELL32_WINETEST] - We no longer need to skip test_ParseName and test_Verbs thanks to Mark's work. CORE-6892 ROSTESTS-209 svn path=/trunk/; revision=71116
This commit is contained in:
parent
0664f98833
commit
78a727d095
15 changed files with 1393 additions and 7 deletions
186
reactos/dll/win32/shell32/CFolder.cpp
Normal file
186
reactos/dll/win32/shell32/CFolder.cpp
Normal file
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* Folder implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
||||
CFolder::CFolder()
|
||||
{
|
||||
}
|
||||
|
||||
CFolder::~CFolder()
|
||||
{
|
||||
}
|
||||
|
||||
void CFolder::Init(LPITEMIDLIST idlist)
|
||||
{
|
||||
m_idlist.Attach(idlist);
|
||||
}
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** Folder methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_Title(BSTR *pbs)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pbs);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_ParentFolder(Folder **ppsf)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::Items(FolderItems **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::ParseName(BSTR bName, FolderItem **ppid)
|
||||
{
|
||||
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid);
|
||||
|
||||
CComPtr<IShellFolder> psfDesktop;
|
||||
|
||||
HRESULT hr = SHGetDesktopFolder(&psfDesktop);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
CComPtr<IShellFolder> psfCurrent;
|
||||
hr = psfDesktop->BindToObject(m_idlist, NULL, IID_PPV_ARG(IShellFolder, &psfCurrent));
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
CComHeapPtr<ITEMIDLIST_RELATIVE> relativePidl;
|
||||
hr = psfCurrent->ParseDisplayName(NULL, NULL, bName, NULL, &relativePidl, NULL);
|
||||
if (!SUCCEEDED(hr))
|
||||
return S_FALSE;
|
||||
|
||||
CFolderItem* item = new CComObject<CFolderItem>();
|
||||
item->AddRef();
|
||||
item->Init(ILCombine(m_idlist, relativePidl));
|
||||
*ppid = item;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::NewFolder(BSTR bName, VARIANT vOptions)
|
||||
{
|
||||
TRACE("(%p, %s, %s)\n", this, wine_dbgstr_w(bName), wine_dbgstr_variant(&vOptions));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::MoveHere(VARIANT vItem, VARIANT vOptions)
|
||||
{
|
||||
TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem), wine_dbgstr_variant(&vOptions));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::CopyHere(VARIANT vItem, VARIANT vOptions)
|
||||
{
|
||||
TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem), wine_dbgstr_variant(&vOptions));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::GetDetailsOf(VARIANT vItem, int iColumn, BSTR *pbs)
|
||||
{
|
||||
TRACE("(%p, %s, %i, %p)\n", this, wine_dbgstr_variant(&vItem), iColumn, pbs);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** Folder2 methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_Self(FolderItem **ppfi)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppfi);
|
||||
if (!ppfi)
|
||||
return E_POINTER;
|
||||
CFolderItem* item = new CComObject<CFolderItem>();
|
||||
item->AddRef();
|
||||
item->Init(ILClone(m_idlist));
|
||||
*ppfi = item;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_OfflineStatus(LONG *pul)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pul);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::Synchronize()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::get_HaveToShowWebViewBarricade(VARIANT_BOOL *pbHaveToShowWebViewBarricade)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pbHaveToShowWebViewBarricade);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolder::DismissedWebViewBarricade()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
77
reactos/dll/win32/shell32/CFolder.h
Normal file
77
reactos/dll/win32/shell32/CFolder.h
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Folder implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef _FOLDER_H_
|
||||
#define _FOLDER_H_
|
||||
|
||||
|
||||
class CFolder:
|
||||
public CComCoClass<CFolder>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public Folder2
|
||||
{
|
||||
private:
|
||||
CComHeapPtr<ITEMIDLIST> m_idlist;
|
||||
|
||||
public:
|
||||
CFolder();
|
||||
~CFolder();
|
||||
|
||||
void Init(LPITEMIDLIST idlist);
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
|
||||
// *** Folder methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Title(BSTR *pbs);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_ParentFolder(Folder **ppsf);
|
||||
virtual HRESULT STDMETHODCALLTYPE Items(FolderItems **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE ParseName(BSTR bName, FolderItem **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE NewFolder(BSTR bName, VARIANT vOptions);
|
||||
virtual HRESULT STDMETHODCALLTYPE MoveHere(VARIANT vItem, VARIANT vOptions);
|
||||
virtual HRESULT STDMETHODCALLTYPE CopyHere(VARIANT vItem, VARIANT vOptions);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(VARIANT vItem, int iColumn, BSTR *pbs);
|
||||
|
||||
// *** Folder2 methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Self(FolderItem **ppfi);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_OfflineStatus(LONG *pul);
|
||||
virtual HRESULT STDMETHODCALLTYPE Synchronize();
|
||||
virtual HRESULT STDMETHODCALLTYPE get_HaveToShowWebViewBarricade(VARIANT_BOOL *pbHaveToShowWebViewBarricade);
|
||||
virtual HRESULT STDMETHODCALLTYPE DismissedWebViewBarricade();
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFolder)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_Folder2, Folder2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_Folder, Folder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
END_COM_MAP()
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
181
reactos/dll/win32/shell32/CFolderItemVerbs.cpp
Normal file
181
reactos/dll/win32/shell32/CFolderItemVerbs.cpp
Normal file
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
* FolderItemVerb(s) implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
||||
CFolderItemVerb::CFolderItemVerb()
|
||||
{
|
||||
}
|
||||
|
||||
CFolderItemVerb::~CFolderItemVerb()
|
||||
{
|
||||
}
|
||||
|
||||
//void CFolderItemVerb::Init(LPITEMIDLIST idlist)
|
||||
//{
|
||||
// m_idlist.Attach(idlist);
|
||||
//}
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// *** FolderItemVerb methods ***
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::get_Name(BSTR *pbs)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pbs);
|
||||
if (!pbs)
|
||||
return E_POINTER;
|
||||
// Terminating item:
|
||||
*pbs = SysAllocString(L"");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerb::DoIt()
|
||||
{
|
||||
TRACE("(%p, %p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CFolderItemVerbs::CFolderItemVerbs()
|
||||
{
|
||||
}
|
||||
|
||||
CFolderItemVerbs::~CFolderItemVerbs()
|
||||
{
|
||||
}
|
||||
|
||||
//void CFolderItemVerbs::Init(LPITEMIDLIST idlist)
|
||||
//{
|
||||
// m_idlist.Attach(idlist);
|
||||
//}
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// *** FolderItemVerbs methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Count(LONG *plCount)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, plCount);
|
||||
if (!plCount)
|
||||
return E_POINTER;
|
||||
*plCount = 0;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::Item(VARIANT index, FolderItemVerb **ppid)
|
||||
{
|
||||
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_variant(&index), ppid);
|
||||
if (!ppid)
|
||||
return E_POINTER;
|
||||
|
||||
/* FIXME! */
|
||||
CFolderItemVerb* verb = new CComObject<CFolderItemVerb>();
|
||||
verb->AddRef();
|
||||
*ppid = verb;
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItemVerbs::_NewEnum(IUnknown **ppunk)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppunk);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
97
reactos/dll/win32/shell32/CFolderItemVerbs.h
Normal file
97
reactos/dll/win32/shell32/CFolderItemVerbs.h
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* FolderItemVerb(s) implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef _FOLDERITEMVERBS_H_
|
||||
#define _FOLDERITEMVERBS_H_
|
||||
|
||||
class CFolderItemVerb:
|
||||
public CComCoClass<CFolderItemVerb>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public FolderItemVerb
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
CFolderItemVerb();
|
||||
~CFolderItemVerb();
|
||||
|
||||
//void Init(LPITEMIDLIST idlist);
|
||||
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
// *** FolderItemVerb methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Name(BSTR *pbs);
|
||||
virtual HRESULT STDMETHODCALLTYPE DoIt();
|
||||
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFolderItemVerb)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFolderItemVerb)
|
||||
COM_INTERFACE_ENTRY_IID(IID_FolderItemVerb, FolderItemVerb)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
|
||||
class CFolderItemVerbs:
|
||||
public CComCoClass<CFolderItemVerbs>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public FolderItemVerbs
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
CFolderItemVerbs();
|
||||
~CFolderItemVerbs();
|
||||
|
||||
//void Init(LPITEMIDLIST idlist);
|
||||
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
// *** FolderItemVerbs methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Count(LONG *plCount);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE Item(VARIANT index, FolderItemVerb **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE _NewEnum(IUnknown **ppunk);
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFolderItemVerbs)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFolderItemVerbs)
|
||||
COM_INTERFACE_ENTRY_IID(IID_FolderItemVerbs, FolderItemVerbs)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
#endif
|
250
reactos/dll/win32/shell32/CFolderItems.cpp
Normal file
250
reactos/dll/win32/shell32/CFolderItems.cpp
Normal file
|
@ -0,0 +1,250 @@
|
|||
/*
|
||||
* FolderItem(s) implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
||||
CFolderItem::CFolderItem()
|
||||
{
|
||||
}
|
||||
|
||||
CFolderItem::~CFolderItem()
|
||||
{
|
||||
}
|
||||
|
||||
void CFolderItem::Init(LPITEMIDLIST idlist)
|
||||
{
|
||||
m_idlist.Attach(idlist);
|
||||
}
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// *** FolderItem methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Name(BSTR *pbs)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pbs);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::put_Name(BSTR bs)
|
||||
{
|
||||
TRACE("(%p, %s)\n", this, wine_dbgstr_w(bs));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Path(BSTR *pbs)
|
||||
{
|
||||
CComPtr<IShellFolder> psfDesktop;
|
||||
|
||||
HRESULT hr = SHGetDesktopFolder(&psfDesktop);
|
||||
if (!SUCCEEDED(hr))
|
||||
return hr;
|
||||
|
||||
STRRET strret;
|
||||
hr = psfDesktop->GetDisplayNameOf(m_idlist, SHGDN_FORPARSING, &strret);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
return StrRetToBSTR(&strret, NULL, pbs);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_GetLink(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_GetFolder(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_IsLink(VARIANT_BOOL *pb)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pb);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_IsFolder(VARIANT_BOOL *pb)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pb);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_IsFileSystem(VARIANT_BOOL *pb)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pb);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_IsBrowsable(VARIANT_BOOL *pb)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pb);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_ModifyDate(DATE *pdt)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pdt);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::put_ModifyDate(DATE dt)
|
||||
{
|
||||
TRACE("(%p, %f)\n", this, dt);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Size(LONG *pul)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pul);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::get_Type(BSTR *pbs)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pbs);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::Verbs(FolderItemVerbs **ppfic)
|
||||
{
|
||||
if(!ppfic)
|
||||
return E_POINTER;
|
||||
CFolderItemVerbs* verbs = new CComObject<CFolderItemVerbs>();
|
||||
verbs->AddRef();
|
||||
*ppfic = verbs;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItem::InvokeVerb(VARIANT vVerb)
|
||||
{
|
||||
TRACE("(%p, %s)\n", this, wine_dbgstr_variant(&vVerb));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CFolderItems::CFolderItems()
|
||||
{
|
||||
}
|
||||
|
||||
CFolderItems::~CFolderItems()
|
||||
{
|
||||
}
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// *** FolderItems methods ***
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::get_Count(long *plCount)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, plCount);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT index, FolderItem **ppid)
|
||||
{
|
||||
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_variant(&index), ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CFolderItems::_NewEnum(IUnknown **ppunk)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppunk);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
108
reactos/dll/win32/shell32/CFolderItems.h
Normal file
108
reactos/dll/win32/shell32/CFolderItems.h
Normal file
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* FolderItem(s) implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef _FOLDERITEM_H_
|
||||
#define _FOLDERITEM_H_
|
||||
|
||||
|
||||
class CFolderItem:
|
||||
public CComCoClass<CFolderItem>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public FolderItem
|
||||
{
|
||||
private:
|
||||
CComHeapPtr<ITEMIDLIST> m_idlist;
|
||||
|
||||
public:
|
||||
CFolderItem();
|
||||
~CFolderItem();
|
||||
|
||||
void Init(LPITEMIDLIST idlist);
|
||||
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
// *** FolderItem methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Name(BSTR *pbs);
|
||||
virtual HRESULT STDMETHODCALLTYPE put_Name(BSTR bs);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Path(BSTR *pbs);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_GetLink(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_GetFolder(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_IsLink(VARIANT_BOOL *pb);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_IsFolder(VARIANT_BOOL *pb);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_IsFileSystem(VARIANT_BOOL *pb);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_IsBrowsable(VARIANT_BOOL *pb);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_ModifyDate(DATE *pdt);
|
||||
virtual HRESULT STDMETHODCALLTYPE put_ModifyDate(DATE dt);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Size(LONG *pul);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Type(BSTR *pbs);
|
||||
virtual HRESULT STDMETHODCALLTYPE Verbs(FolderItemVerbs **ppfic);
|
||||
virtual HRESULT STDMETHODCALLTYPE InvokeVerb(VARIANT vVerb);
|
||||
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFolderItem)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFolderItem)
|
||||
COM_INTERFACE_ENTRY_IID(IID_FolderItem, FolderItem)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
class CFolderItems:
|
||||
public CComCoClass<CFolderItems>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public FolderItems
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
CFolderItems();
|
||||
~CFolderItems();
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
// *** FolderItems methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Count(long *plCount);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE Item(VARIANT index, FolderItem **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE _NewEnum(IUnknown **ppunk);
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFolderItems)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFolderItems)
|
||||
COM_INTERFACE_ENTRY_IID(IID_FolderItems, FolderItems)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
#endif
|
|
@ -58,6 +58,10 @@ list(APPEND SOURCE
|
|||
CDefaultContextMenu.cpp
|
||||
COpenWithMenu.cpp
|
||||
CNewMenu.cpp
|
||||
CShell.cpp
|
||||
CFolder.cpp
|
||||
CFolderItems.cpp
|
||||
CFolderItemVerbs.cpp
|
||||
precomp.h)
|
||||
|
||||
add_library(shell32 SHARED
|
||||
|
@ -83,7 +87,7 @@ add_library(shell32 SHARED
|
|||
|
||||
set_module_type(shell32 win32dll UNICODE)
|
||||
target_link_libraries(shell32 shellmenu shelldesktop atlnew wine uuid recyclebin)
|
||||
add_delay_importlibs(shell32 uxtheme ole32 userenv version fmifs shdocvw comctl32 browseui shlwapi comdlg32)
|
||||
add_delay_importlibs(shell32 uxtheme ole32 oleaut32 userenv version fmifs shdocvw comctl32 browseui shlwapi comdlg32)
|
||||
add_importlibs(shell32 advapi32 gdi32 user32 powrprof devmgr winspool winmm mpr msvcrt kernel32 ntdll)
|
||||
add_pch(shell32 precomp.h SOURCE)
|
||||
add_cd_file(TARGET shell32 DESTINATION reactos/system32 FOR all)
|
||||
|
|
344
reactos/dll/win32/shell32/CShell.cpp
Normal file
344
reactos/dll/win32/shell32/CShell.cpp
Normal file
|
@ -0,0 +1,344 @@
|
|||
/*
|
||||
* IShellDispatch implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
||||
CShell::CShell()
|
||||
{
|
||||
}
|
||||
|
||||
CShell::~CShell()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// *** IDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetTypeInfoCount(UINT *pctinfo)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
TRACE("(%p, %lu, %lu, %p)\n", this, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %lu, %lu, %p)\n", this, wine_dbgstr_guid(&riid), rgszNames, cNames, lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
TRACE("(%p, %lu, %s, %lu, %lu, %p, %p, %p, %p)\n", this, dispIdMember, wine_dbgstr_guid(&riid), lcid, (DWORD)wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IShellDispatch methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::get_Application(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::get_Parent(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT VariantToIdlist(VARIANT* var, LPITEMIDLIST* idlist)
|
||||
{
|
||||
HRESULT hr = S_FALSE;
|
||||
if(V_VT(var) == VT_I4)
|
||||
{
|
||||
hr = SHGetSpecialFolderLocation(NULL, V_I4(var), idlist);
|
||||
}
|
||||
else if(V_VT(var) == VT_BSTR)
|
||||
{
|
||||
hr = SHILCreateFromPathW(V_BSTR(var), idlist, NULL);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::NameSpace(VARIANT vDir, Folder **ppsdf)
|
||||
{
|
||||
TRACE("(%p, %s, %p)\n", this, debugstr_variant(&vDir), ppsdf);
|
||||
if (!ppsdf)
|
||||
return E_POINTER;
|
||||
*ppsdf = NULL;
|
||||
LPITEMIDLIST idlist = NULL;
|
||||
HRESULT hr = VariantToIdlist(&vDir, &idlist);
|
||||
if (!SUCCEEDED(hr) || !idlist)
|
||||
return S_FALSE;
|
||||
CFolder* fld = new CComObject<CFolder>();
|
||||
fld->Init(idlist);
|
||||
*ppsdf = fld;
|
||||
fld->AddRef();
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::BrowseForFolder(LONG Hwnd, BSTR Title, LONG Options, VARIANT RootFolder, Folder **ppsdf)
|
||||
{
|
||||
TRACE("(%p, %lu, %ls, %lu, %s, %p)\n", this, Hwnd, Title, Options, debugstr_variant(&RootFolder), ppsdf);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Windows(IDispatch **ppid)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, ppid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Open(VARIANT vDir)
|
||||
{
|
||||
TRACE("(%p, %s)\n", this, debugstr_variant(&vDir));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Explore(VARIANT vDir)
|
||||
{
|
||||
TRACE("(%p, %s)\n", this, debugstr_variant(&vDir));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::MinimizeAll()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::UndoMinimizeALL()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::FileRun()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::CascadeWindows()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::TileVertically()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::TileHorizontally()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ShutdownWindows()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Suspend()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::EjectPC()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::SetTime()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::TrayProperties()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::Help()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::FindFiles()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::FindComputer()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::RefreshMenu()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ControlPanelItem(BSTR szDir)
|
||||
{
|
||||
TRACE("(%p, %ls)\n", this, szDir);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IShellDispatch2 methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::IsRestricted(BSTR group, BSTR restriction, LONG *value)
|
||||
{
|
||||
TRACE("(%p, %ls, %ls, %p)\n", this, group, restriction, value);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ShellExecute(BSTR file, VARIANT args, VARIANT dir, VARIANT op, VARIANT show)
|
||||
{
|
||||
TRACE("(%p, %ls, %s, %s, %s, %s)\n", this, file, debugstr_variant(&args), debugstr_variant(&dir), debugstr_variant(&op), debugstr_variant(&show));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::FindPrinter(BSTR name, BSTR location, BSTR model)
|
||||
{
|
||||
TRACE("(%p, %ls, %ls, %ls)\n", this, name, location, model);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetSystemInformation(BSTR name, VARIANT *ret)
|
||||
{
|
||||
TRACE("(%p, %ls, %p)\n", this, name, ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ServiceStart(BSTR service, VARIANT persistent, VARIANT *ret)
|
||||
{
|
||||
TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ServiceStop(BSTR service, VARIANT persistent, VARIANT *ret)
|
||||
{
|
||||
TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::IsServiceRunning(BSTR service, VARIANT *running)
|
||||
{
|
||||
TRACE("(%p, %ls, %p)\n", this, service, running);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::CanStartStopService(BSTR service, VARIANT *ret)
|
||||
{
|
||||
TRACE("(%p, %ls, %p)\n", this, service, ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ShowBrowserBar(BSTR clsid, VARIANT show, VARIANT *ret)
|
||||
{
|
||||
TRACE("(%p, %ls, %s, %p)\n", this, clsid, wine_dbgstr_variant(&show), ret);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IShellDispatch3 methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::AddToRecent(VARIANT file, BSTR category)
|
||||
{
|
||||
TRACE("(%p, %s, %ls)\n", this, wine_dbgstr_variant(&file), category);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IShellDispatch4 methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::WindowsSecurity()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ToggleDesktop()
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::ExplorerPolicy(BSTR policy, VARIANT *value)
|
||||
{
|
||||
TRACE("(%p, %ls, %p)\n", this, policy, value);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetSetting(LONG setting, VARIANT_BOOL *result)
|
||||
{
|
||||
TRACE("(%p, %lu, %p)\n", this, setting, result);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IObjectSafety methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetInterfaceSafetyOptions(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
|
||||
{
|
||||
TRACE("(%p, %s, %p, %p)\n", this, wine_dbgstr_guid(&riid), pdwSupportedOptions, pdwEnabledOptions);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::SetInterfaceSafetyOptions(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
|
||||
{
|
||||
TRACE("(%p, %s, %lu, %lu)\n", this, wine_dbgstr_guid(&riid), dwOptionSetMask, dwEnabledOptions);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
||||
// *** IObjectWithSite methods ***
|
||||
HRESULT STDMETHODCALLTYPE CShell::SetSite(IUnknown *pUnkSite)
|
||||
{
|
||||
TRACE("(%p, %p)\n", this, pUnkSite);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CShell::GetSite(REFIID riid, PVOID *ppvSite)
|
||||
{
|
||||
TRACE("(%p, %s, %p)\n", this, wine_dbgstr_guid(&riid), ppvSite);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
115
reactos/dll/win32/shell32/CShell.h
Normal file
115
reactos/dll/win32/shell32/CShell.h
Normal file
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* IShellDispatch implementation
|
||||
*
|
||||
* Copyright 2015 Mark Jansen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef _SHELL_H_
|
||||
#define _SHELL_H_
|
||||
|
||||
#undef ShellExecute
|
||||
|
||||
class CShell:
|
||||
public CComCoClass<CShell, &CLSID_Shell>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IShellDispatch4,
|
||||
public IObjectSafety,
|
||||
public IObjectWithSite
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
CShell();
|
||||
~CShell();
|
||||
|
||||
// *** IDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
|
||||
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
|
||||
|
||||
// *** IShellDispatch methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE NameSpace(VARIANT vDir, Folder **ppsdf);
|
||||
virtual HRESULT STDMETHODCALLTYPE BrowseForFolder(LONG Hwnd, BSTR Title, LONG Options, VARIANT RootFolder, Folder **ppsdf);
|
||||
virtual HRESULT STDMETHODCALLTYPE Windows(IDispatch **ppid);
|
||||
virtual HRESULT STDMETHODCALLTYPE Open(VARIANT vDir);
|
||||
virtual HRESULT STDMETHODCALLTYPE Explore(VARIANT vDir);
|
||||
virtual HRESULT STDMETHODCALLTYPE MinimizeAll();
|
||||
virtual HRESULT STDMETHODCALLTYPE UndoMinimizeALL();
|
||||
virtual HRESULT STDMETHODCALLTYPE FileRun();
|
||||
virtual HRESULT STDMETHODCALLTYPE CascadeWindows();
|
||||
virtual HRESULT STDMETHODCALLTYPE TileVertically();
|
||||
virtual HRESULT STDMETHODCALLTYPE TileHorizontally();
|
||||
virtual HRESULT STDMETHODCALLTYPE ShutdownWindows();
|
||||
virtual HRESULT STDMETHODCALLTYPE Suspend();
|
||||
virtual HRESULT STDMETHODCALLTYPE EjectPC();
|
||||
virtual HRESULT STDMETHODCALLTYPE SetTime();
|
||||
virtual HRESULT STDMETHODCALLTYPE TrayProperties();
|
||||
virtual HRESULT STDMETHODCALLTYPE Help();
|
||||
virtual HRESULT STDMETHODCALLTYPE FindFiles();
|
||||
virtual HRESULT STDMETHODCALLTYPE FindComputer();
|
||||
virtual HRESULT STDMETHODCALLTYPE RefreshMenu();
|
||||
virtual HRESULT STDMETHODCALLTYPE ControlPanelItem(BSTR szDir);
|
||||
|
||||
// *** IShellDispatch2 methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE IsRestricted(BSTR group, BSTR restriction, LONG *value);
|
||||
virtual HRESULT STDMETHODCALLTYPE ShellExecute(BSTR file, VARIANT args, VARIANT dir, VARIANT op, VARIANT show);
|
||||
virtual HRESULT STDMETHODCALLTYPE FindPrinter(BSTR name, BSTR location, BSTR model);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetSystemInformation(BSTR name, VARIANT *ret);
|
||||
virtual HRESULT STDMETHODCALLTYPE ServiceStart(BSTR service, VARIANT persistent, VARIANT *ret);
|
||||
virtual HRESULT STDMETHODCALLTYPE ServiceStop(BSTR service, VARIANT persistent, VARIANT *ret);
|
||||
virtual HRESULT STDMETHODCALLTYPE IsServiceRunning(BSTR service, VARIANT *running);
|
||||
virtual HRESULT STDMETHODCALLTYPE CanStartStopService(BSTR service, VARIANT *ret);
|
||||
virtual HRESULT STDMETHODCALLTYPE ShowBrowserBar(BSTR clsid, VARIANT show, VARIANT *ret);
|
||||
|
||||
// *** IShellDispatch3 methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE AddToRecent(VARIANT file, BSTR category);
|
||||
|
||||
// *** IShellDispatch4 methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE WindowsSecurity();
|
||||
virtual HRESULT STDMETHODCALLTYPE ToggleDesktop();
|
||||
virtual HRESULT STDMETHODCALLTYPE ExplorerPolicy(BSTR policy, VARIANT *value);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetSetting(LONG setting, VARIANT_BOOL *result);
|
||||
|
||||
// *** IObjectSafety methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE GetInterfaceSafetyOptions(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions);
|
||||
virtual HRESULT STDMETHODCALLTYPE SetInterfaceSafetyOptions(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);
|
||||
|
||||
// *** IObjectWithSite methods ***
|
||||
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
|
||||
virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, PVOID *ppvSite);
|
||||
|
||||
|
||||
DECLARE_REGISTRY_RESOURCEID(IDR_SHELL)
|
||||
DECLARE_NOT_AGGREGATABLE(CShell)
|
||||
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CShell)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellDispatch4, IShellDispatch4)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellDispatch3, IShellDispatch3)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellDispatch2, IShellDispatch2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellDispatch, IShellDispatch)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
#endif /* _SHELL_H_ */
|
|
@ -30,6 +30,7 @@
|
|||
#include <atlwin.h>
|
||||
#include <powrprof.h>
|
||||
#include <winnetwk.h>
|
||||
#include <objsafe.h>
|
||||
|
||||
#include <comctl32_undoc.h>
|
||||
#include <shlguid_undoc.h>
|
||||
|
@ -49,6 +50,10 @@
|
|||
#include "shfldr.h"
|
||||
#include "CShellItem.h"
|
||||
#include "CShellLink.h"
|
||||
#include "CFolderItemVerbs.h"
|
||||
#include "CFolderItems.h"
|
||||
#include "CFolder.h"
|
||||
#include "CShell.h"
|
||||
#include "CDropTargetHelper.h"
|
||||
#include "folders/CFSFolder.h"
|
||||
#include "folders/CDrivesFolder.h"
|
||||
|
|
13
reactos/dll/win32/shell32/res/rgs/shell.rgs
Normal file
13
reactos/dll/win32/shell32/res/rgs/shell.rgs
Normal file
|
@ -0,0 +1,13 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove CLSID
|
||||
{
|
||||
ForceRemove {13709620-C279-11CE-A49E-444553540000} = s 'Shell Automation Service'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%'
|
||||
{
|
||||
val ThreadingModel = s 'Apartment'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -26,3 +26,4 @@ IDR_DRVDEFEXT REGISTRY "res/rgs/shelldrvdefext.rgs"
|
|||
IDR_EXEDROPHANDLER REGISTRY "res/rgs/exedrophandler.rgs"
|
||||
IDR_MERGEDFOLDER REGISTRY "res/rgs/mergedfolder.rgs"
|
||||
IDR_REBARBANDSITE REGISTRY "res/rgs/rebarbandsite.rgs"
|
||||
IDR_SHELL REGISTRY "res/rgs/shell.rgs"
|
||||
|
|
|
@ -196,6 +196,7 @@ BEGIN_OBJECT_MAP(ObjectMap)
|
|||
OBJECT_ENTRY(CLSID_ShellDesktop, CDesktopFolder)
|
||||
OBJECT_ENTRY(CLSID_ShellItem, CShellItem)
|
||||
OBJECT_ENTRY(CLSID_ShellLink, CShellLink)
|
||||
OBJECT_ENTRY(CLSID_Shell, CShell)
|
||||
OBJECT_ENTRY(CLSID_DragDropHelper, CDropTargetHelper)
|
||||
OBJECT_ENTRY(CLSID_ControlPanel, CControlPanelFolder)
|
||||
OBJECT_ENTRY(CLSID_MyDocuments, CMyDocsFolder)
|
||||
|
|
|
@ -649,3 +649,4 @@
|
|||
#define IDR_QUERYASSOCIATIONS 152
|
||||
#define IDR_MERGEDFOLDER 153
|
||||
#define IDR_REBARBANDSITE 154
|
||||
#define IDR_SHELL 155
|
||||
|
|
|
@ -880,16 +880,19 @@ START_TEST(shelldispatch)
|
|||
init_function_pointers();
|
||||
test_namespace();
|
||||
test_service();
|
||||
|
||||
#ifdef __REACTOS__
|
||||
if (!winetest_interactive)
|
||||
skip("ROSTESTS-209: Skipping test_ShellFolderViewDual(), test_ShellWindows(), test_ParseName() and test_Verbs().\n");
|
||||
skip("ROSTESTS-209: Skipping test_ShellFolderViewDual() and test_ShellWindows().\n");
|
||||
else
|
||||
{
|
||||
test_ShellFolderViewDual();
|
||||
test_ShellWindows();
|
||||
test_ParseName();
|
||||
test_Verbs();
|
||||
#endif
|
||||
test_ShellFolderViewDual();
|
||||
test_ShellWindows();
|
||||
#ifdef __REACTOS__
|
||||
}
|
||||
#endif
|
||||
test_ParseName();
|
||||
test_Verbs();
|
||||
|
||||
test_ShellExecute();
|
||||
|
||||
|
|
Loading…
Reference in a new issue