mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:42:56 +00:00
[NTOBJSHEX]
* Make the shell view default to details mode. * Some cleanups. svn path=/trunk/; revision=66603
This commit is contained in:
parent
b0c6956a17
commit
9c9b3171f8
5 changed files with 89 additions and 129 deletions
|
@ -50,13 +50,13 @@ class CMergedFolder :
|
||||||
public IShellFolder2,
|
public IShellFolder2,
|
||||||
public IPersistFolder2,
|
public IPersistFolder2,
|
||||||
public IAugmentedShellFolder3 // -- undocumented
|
public IAugmentedShellFolder3 // -- undocumented
|
||||||
//public IShellService, // -- undocumented
|
//public IShellService, // DEPRECATED IE4 interface: https://msdn.microsoft.com/en-us/library/windows/desktop/bb774870%28v=vs.85%29.aspx
|
||||||
//public ITranslateShellChangeNotify,// -- undocumented
|
//public ITranslateShellChangeNotify,// -- undocumented
|
||||||
//public IStorage,
|
//public IStorage,
|
||||||
//public IPersistPropertyBag,
|
//public IPersistPropertyBag,
|
||||||
//public IShellIconOverlay, // -- undocumented
|
//public IShellIconOverlay, // -- undocumented
|
||||||
//public ICompositeFolder, // -- undocumented
|
//public ICompositeFolder, // -- undocumented
|
||||||
//public IItemNameLimits, // -- undocumented
|
//public IItemNameLimits, // https://msdn.microsoft.com/en-us/library/windows/desktop/bb761776%28v=vs.85%29.aspx
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
CComPtr<IShellFolder> m_UserLocal;
|
CComPtr<IShellFolder> m_UserLocal;
|
||||||
|
|
|
@ -41,6 +41,12 @@ class CNtObjectFolderContextMenu :
|
||||||
PCITEMID_CHILD m_pcidlChild;
|
PCITEMID_CHILD m_pcidlChild;
|
||||||
UINT m_idFirst;
|
UINT m_idFirst;
|
||||||
|
|
||||||
|
enum ItemOffsets
|
||||||
|
{
|
||||||
|
ITEM_Open = 0,
|
||||||
|
ITEM_OpenNewWindow
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CNtObjectFolderContextMenu() :
|
CNtObjectFolderContextMenu() :
|
||||||
m_pcidlFolder(NULL),
|
m_pcidlFolder(NULL),
|
||||||
|
@ -70,24 +76,24 @@ public:
|
||||||
// IContextMenu
|
// IContextMenu
|
||||||
virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||||
{
|
{
|
||||||
|
MENUITEMINFOW mii;
|
||||||
|
|
||||||
m_idFirst = idCmdFirst;
|
m_idFirst = idCmdFirst;
|
||||||
|
|
||||||
const NtPidlEntry * entry = (NtPidlEntry *) m_pcidlChild;
|
const NtPidlEntry * entry = (NtPidlEntry *) m_pcidlChild;
|
||||||
|
|
||||||
|
static WCHAR open [] = L"Open";
|
||||||
|
static WCHAR opennewwindow [] = L"Open in new window";
|
||||||
|
|
||||||
if ((entry->objectType == DIRECTORY_OBJECT) ||
|
if ((entry->objectType == DIRECTORY_OBJECT) ||
|
||||||
(entry->objectType == SYMBOLICLINK_OBJECT) ||
|
(entry->objectType == SYMBOLICLINK_OBJECT) ||
|
||||||
(entry->objectType == KEY_OBJECT))
|
(entry->objectType == KEY_OBJECT))
|
||||||
{
|
{
|
||||||
MENUITEMINFOW mii;
|
|
||||||
|
|
||||||
WCHAR open [] = L"Open";
|
|
||||||
WCHAR opennewwindow [] = L"Open in new window";
|
|
||||||
|
|
||||||
ZeroMemory(&mii, sizeof(mii));
|
ZeroMemory(&mii, sizeof(mii));
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
||||||
mii.fType = MFT_STRING;
|
mii.fType = MFT_STRING;
|
||||||
mii.wID = idCmdFirst++;
|
mii.wID = (idCmdFirst = m_idFirst + ITEM_Open);
|
||||||
mii.dwTypeData = open;
|
mii.dwTypeData = open;
|
||||||
mii.cch = _countof(open);
|
mii.cch = _countof(open);
|
||||||
mii.fState = MFS_ENABLED | MFS_DEFAULT;
|
mii.fState = MFS_ENABLED | MFS_DEFAULT;
|
||||||
|
@ -100,7 +106,7 @@ public:
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
||||||
mii.fType = MFT_STRING;
|
mii.fType = MFT_STRING;
|
||||||
mii.wID = idCmdFirst++;
|
mii.wID = (idCmdFirst = m_idFirst + ITEM_OpenNewWindow);
|
||||||
mii.dwTypeData = opennewwindow;
|
mii.dwTypeData = opennewwindow;
|
||||||
mii.cch = _countof(opennewwindow);
|
mii.cch = _countof(opennewwindow);
|
||||||
mii.fState = MFS_ENABLED;
|
mii.fState = MFS_ENABLED;
|
||||||
|
@ -113,11 +119,11 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
|
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
|
||||||
{
|
|
||||||
if (LOWORD(lpici->lpVerb) == m_idFirst || !lpici->lpVerb)
|
|
||||||
{
|
{
|
||||||
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
||||||
|
|
||||||
|
if (LOWORD(lpici->lpVerb) == (m_idFirst + ITEM_Open) || !lpici->lpVerb)
|
||||||
|
{
|
||||||
SHELLEXECUTEINFO sei = { 0 };
|
SHELLEXECUTEINFO sei = { 0 };
|
||||||
sei.cbSize = sizeof(sei);
|
sei.cbSize = sizeof(sei);
|
||||||
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
||||||
|
@ -132,10 +138,8 @@ public:
|
||||||
|
|
||||||
return bRes ? S_OK : HRESULT_FROM_WIN32(GetLastError());
|
return bRes ? S_OK : HRESULT_FROM_WIN32(GetLastError());
|
||||||
}
|
}
|
||||||
else if (LOWORD(lpici->lpVerb) == (m_idFirst + 1))
|
else if (LOWORD(lpici->lpVerb) == (m_idFirst + ITEM_OpenNewWindow))
|
||||||
{
|
{
|
||||||
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
|
||||||
|
|
||||||
SHELLEXECUTEINFO sei = { 0 };
|
SHELLEXECUTEINFO sei = { 0 };
|
||||||
sei.cbSize = sizeof(sei);
|
sei.cbSize = sizeof(sei);
|
||||||
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
||||||
|
@ -806,7 +810,7 @@ HRESULT STDMETHODCALLTYPE CNtObjectFolder::CreateViewObject(
|
||||||
sfv.cbSize = sizeof(sfv);
|
sfv.cbSize = sizeof(sfv);
|
||||||
sfv.pshf = this;
|
sfv.pshf = this;
|
||||||
sfv.psvOuter = NULL;
|
sfv.psvOuter = NULL;
|
||||||
sfv.psfvcb = NULL;
|
sfv.psfvcb = this;
|
||||||
|
|
||||||
return SHCreateShellFolderView(&sfv, (IShellView**) ppvOut);
|
return SHCreateShellFolderView(&sfv, (IShellView**) ppvOut);
|
||||||
}
|
}
|
||||||
|
@ -954,26 +958,6 @@ HRESULT STDMETHODCALLTYPE CNtObjectFolder::Initialize(LPCITEMIDLIST pidl)
|
||||||
|
|
||||||
PCWSTR ntPath = L"\\";
|
PCWSTR ntPath = L"\\";
|
||||||
|
|
||||||
#if 0
|
|
||||||
WCHAR debugTemp[MAX_PATH];
|
|
||||||
GetFullName(m_shellPidl, SHGDN_FORPARSING, debugTemp, _countof(debugTemp));
|
|
||||||
DbgPrint("INITIALIZE CRegistryFolder PIDL PATH: %S (ntPath: %S)\n", debugTemp, ntPath);
|
|
||||||
|
|
||||||
if (ntPath[wcslen(ntPath)-1] == L'\\' && debugTemp[wcslen(debugTemp) - 1] != L'\\')
|
|
||||||
wcscat(debugTemp, L"\\");
|
|
||||||
|
|
||||||
PCWSTR guidTemp = L"::{845B0FB2-66E0-416B-8F91-314E23F7C12D}";
|
|
||||||
|
|
||||||
PCWSTR findTemp = StrStrW(debugTemp, guidTemp);
|
|
||||||
PCWSTR nextTemp = findTemp + wcslen(guidTemp);
|
|
||||||
|
|
||||||
if (wcscmp(nextTemp, ntPath))
|
|
||||||
{
|
|
||||||
DbgPrint("WHAT THE F, the NT PATH DOES NOT MATCH\n");
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!m_PidlManager)
|
if (!m_PidlManager)
|
||||||
{
|
{
|
||||||
m_PidlManager = new CNtObjectPidlManager();
|
m_PidlManager = new CNtObjectPidlManager();
|
||||||
|
@ -989,27 +973,6 @@ HRESULT STDMETHODCALLTYPE CNtObjectFolder::Initialize(LPCITEMIDLIST pidl, PCWSTR
|
||||||
{
|
{
|
||||||
TRACE("INITIALIZE %p CNtObjectFolder with ntPath %S\n", this, ntPath);
|
TRACE("INITIALIZE %p CNtObjectFolder with ntPath %S\n", this, ntPath);
|
||||||
|
|
||||||
#if 0
|
|
||||||
m_shellPidl = ILClone(pidl);
|
|
||||||
WCHAR debugTemp[MAX_PATH];
|
|
||||||
GetFullName(m_shellPidl, SHGDN_FORPARSING, debugTemp, _countof(debugTemp));
|
|
||||||
DbgPrint("INITIALIZE CNtObjectFolder PIDL PATH: %S (ntPath: %S)\n", debugTemp, ntPath);
|
|
||||||
|
|
||||||
if (ntPath[wcslen(ntPath) - 1] == L'\\' && debugTemp[wcslen(debugTemp) - 1] != L'\\')
|
|
||||||
wcscat(debugTemp, L"\\");
|
|
||||||
|
|
||||||
PCWSTR guidTemp = L"::{845B0FB2-66E0-416B-8F91-314E23F7C12D}";
|
|
||||||
|
|
||||||
PCWSTR findTemp = StrStrW(debugTemp, guidTemp);
|
|
||||||
PCWSTR nextTemp = findTemp + wcslen(guidTemp);
|
|
||||||
|
|
||||||
if (wcscmp(nextTemp, ntPath))
|
|
||||||
{
|
|
||||||
DbgPrint("WHAT THE F, the NT PATH DOES NOT MATCH\n");
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!m_PidlManager)
|
if (!m_PidlManager)
|
||||||
m_PidlManager = new CNtObjectPidlManager();
|
m_PidlManager = new CNtObjectPidlManager();
|
||||||
|
|
||||||
|
@ -1296,3 +1259,17 @@ HRESULT STDMETHODCALLTYPE CNtObjectFolder::MapColumnToSCID(
|
||||||
}
|
}
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CNtObjectFolder::MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case SFVM_DEFVIEWMODE:
|
||||||
|
{
|
||||||
|
FOLDERVIEWMODE* pViewMode = (FOLDERVIEWMODE*) lParam;
|
||||||
|
*pViewMode = FVM_DETAILS;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
|
@ -15,7 +15,8 @@ class CNtObjectFolder :
|
||||||
public CComCoClass<CNtObjectFolder, &CLSID_NtObjectFolder>,
|
public CComCoClass<CNtObjectFolder, &CLSID_NtObjectFolder>,
|
||||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||||
public IShellFolder2,
|
public IShellFolder2,
|
||||||
public IPersistFolder2
|
public IPersistFolder2,
|
||||||
|
public IShellFolderViewCB
|
||||||
{
|
{
|
||||||
CNtObjectPidlManager * m_PidlManager;
|
CNtObjectPidlManager * m_PidlManager;
|
||||||
|
|
||||||
|
@ -130,6 +131,9 @@ public:
|
||||||
// IPersistFolder2
|
// IPersistFolder2
|
||||||
virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
|
virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
|
||||||
|
|
||||||
|
// IShellFolderViewCB
|
||||||
|
virtual HRESULT STDMETHODCALLTYPE MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
// Internal
|
// Internal
|
||||||
HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl, PCWSTR ntPath);
|
HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl, PCWSTR ntPath);
|
||||||
|
|
||||||
|
@ -143,6 +147,7 @@ public:
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
|
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
|
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
|
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
|
||||||
|
COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
|
||||||
END_COM_MAP()
|
END_COM_MAP()
|
||||||
|
|
||||||
};
|
};
|
|
@ -40,6 +40,12 @@ class CRegistryFolderContextMenu :
|
||||||
PCITEMID_CHILD m_pcidlChild;
|
PCITEMID_CHILD m_pcidlChild;
|
||||||
UINT m_idFirst;
|
UINT m_idFirst;
|
||||||
|
|
||||||
|
enum ItemOffsets
|
||||||
|
{
|
||||||
|
ITEM_Open = 0,
|
||||||
|
ITEM_OpenNewWindow
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CRegistryFolderContextMenu() :
|
CRegistryFolderContextMenu() :
|
||||||
m_pcidlFolder(NULL),
|
m_pcidlFolder(NULL),
|
||||||
|
@ -69,22 +75,22 @@ public:
|
||||||
// IContextMenu
|
// IContextMenu
|
||||||
virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
virtual HRESULT WINAPI QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||||
{
|
{
|
||||||
|
MENUITEMINFOW mii;
|
||||||
|
|
||||||
m_idFirst = idCmdFirst;
|
m_idFirst = idCmdFirst;
|
||||||
|
|
||||||
const RegPidlEntry * entry = (RegPidlEntry *) m_pcidlChild;
|
const RegPidlEntry * entry = (RegPidlEntry *) m_pcidlChild;
|
||||||
|
|
||||||
|
static WCHAR open [] = L"Open";
|
||||||
|
static WCHAR opennewwindow [] = L"Open in new window";
|
||||||
|
|
||||||
if (entry->entryType == REG_ENTRY_KEY)
|
if (entry->entryType == REG_ENTRY_KEY)
|
||||||
{
|
{
|
||||||
MENUITEMINFOW mii;
|
|
||||||
|
|
||||||
WCHAR open [] = L"Open";
|
|
||||||
WCHAR opennewwindow [] = L"Open in new window";
|
|
||||||
|
|
||||||
ZeroMemory(&mii, sizeof(mii));
|
ZeroMemory(&mii, sizeof(mii));
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
||||||
mii.fType = MFT_STRING;
|
mii.fType = MFT_STRING;
|
||||||
mii.wID = idCmdFirst++;
|
mii.wID = (idCmdFirst = m_idFirst + ITEM_Open);
|
||||||
mii.dwTypeData = open;
|
mii.dwTypeData = open;
|
||||||
mii.cch = _countof(open);
|
mii.cch = _countof(open);
|
||||||
mii.fState = MFS_ENABLED | MFS_DEFAULT;
|
mii.fState = MFS_ENABLED | MFS_DEFAULT;
|
||||||
|
@ -97,7 +103,7 @@ public:
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
|
||||||
mii.fType = MFT_STRING;
|
mii.fType = MFT_STRING;
|
||||||
mii.wID = idCmdFirst++;
|
mii.wID = (idCmdFirst = m_idFirst + ITEM_OpenNewWindow);
|
||||||
mii.dwTypeData = opennewwindow;
|
mii.dwTypeData = opennewwindow;
|
||||||
mii.cch = _countof(opennewwindow);
|
mii.cch = _countof(opennewwindow);
|
||||||
mii.fState = MFS_ENABLED;
|
mii.fState = MFS_ENABLED;
|
||||||
|
@ -110,11 +116,11 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
|
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
|
||||||
{
|
|
||||||
if (LOWORD(lpici->lpVerb) == m_idFirst || !lpici->lpVerb)
|
|
||||||
{
|
{
|
||||||
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
||||||
|
|
||||||
|
if (LOWORD(lpici->lpVerb) == (m_idFirst + ITEM_Open) || !lpici->lpVerb)
|
||||||
|
{
|
||||||
SHELLEXECUTEINFO sei = { 0 };
|
SHELLEXECUTEINFO sei = { 0 };
|
||||||
sei.cbSize = sizeof(sei);
|
sei.cbSize = sizeof(sei);
|
||||||
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
||||||
|
@ -129,10 +135,8 @@ public:
|
||||||
|
|
||||||
return bRes ? S_OK : HRESULT_FROM_WIN32(GetLastError());
|
return bRes ? S_OK : HRESULT_FROM_WIN32(GetLastError());
|
||||||
}
|
}
|
||||||
else if (LOWORD(lpici->lpVerb) == (m_idFirst + 1))
|
else if (LOWORD(lpici->lpVerb) == (m_idFirst + ITEM_OpenNewWindow))
|
||||||
{
|
{
|
||||||
LPITEMIDLIST fullPidl = ILCombine(m_pcidlFolder, m_pcidlChild);
|
|
||||||
|
|
||||||
SHELLEXECUTEINFO sei = { 0 };
|
SHELLEXECUTEINFO sei = { 0 };
|
||||||
sei.cbSize = sizeof(sei);
|
sei.cbSize = sizeof(sei);
|
||||||
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
|
||||||
|
@ -755,11 +759,6 @@ HRESULT STDMETHODCALLTYPE CRegistryFolder::BindToObject(
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (!(info->objectInformation.GrantedAccess & (STANDARD_RIGHTS_READ | FILE_LIST_DIRECTORY)))
|
|
||||||
return E_ACCESSDENIED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
WCHAR path[MAX_PATH];
|
WCHAR path[MAX_PATH];
|
||||||
|
|
||||||
StringCbCopyW(path, _countof(path), m_NtPath);
|
StringCbCopyW(path, _countof(path), m_NtPath);
|
||||||
|
@ -819,7 +818,7 @@ HRESULT STDMETHODCALLTYPE CRegistryFolder::CreateViewObject(
|
||||||
sfv.cbSize = sizeof(sfv);
|
sfv.cbSize = sizeof(sfv);
|
||||||
sfv.pshf = this;
|
sfv.pshf = this;
|
||||||
sfv.psvOuter = NULL;
|
sfv.psvOuter = NULL;
|
||||||
sfv.psfvcb = NULL;
|
sfv.psfvcb = this;
|
||||||
|
|
||||||
return SHCreateShellFolderView(&sfv, (IShellView**) ppvOut);
|
return SHCreateShellFolderView(&sfv, (IShellView**) ppvOut);
|
||||||
}
|
}
|
||||||
|
@ -967,26 +966,6 @@ HRESULT STDMETHODCALLTYPE CRegistryFolder::Initialize(LPCITEMIDLIST pidl)
|
||||||
|
|
||||||
PCWSTR ntPath = L"\\REGISTRY";
|
PCWSTR ntPath = L"\\REGISTRY";
|
||||||
|
|
||||||
#if 0
|
|
||||||
WCHAR debugTemp[MAX_PATH];
|
|
||||||
GetFullName(m_shellPidl, SHGDN_FORPARSING, debugTemp, _countof(debugTemp));
|
|
||||||
DbgPrint("INITIALIZE CRegistryFolder PIDL PATH: %S (ntPath: %S)\n", debugTemp, ntPath);
|
|
||||||
|
|
||||||
if (ntPath[wcslen(ntPath) - 1] == L'\\' && debugTemp[wcslen(debugTemp) - 1] != L'\\')
|
|
||||||
wcscat(debugTemp, L"\\");
|
|
||||||
|
|
||||||
PCWSTR guidTemp = L"::{845B0FB2-66E0-416B-8F91-314E23F7C12D}";
|
|
||||||
|
|
||||||
PCWSTR findTemp = StrStrW(debugTemp, guidTemp);
|
|
||||||
PCWSTR nextTemp = findTemp + wcslen(guidTemp);
|
|
||||||
|
|
||||||
if (wcscmp(nextTemp, ntPath))
|
|
||||||
{
|
|
||||||
DbgPrint("WHAT THE F, the NT PATH DOES NOT MATCH\n");
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!m_PidlManager)
|
if (!m_PidlManager)
|
||||||
{
|
{
|
||||||
m_PidlManager = new CRegistryPidlManager();
|
m_PidlManager = new CRegistryPidlManager();
|
||||||
|
@ -1002,26 +981,6 @@ HRESULT STDMETHODCALLTYPE CRegistryFolder::Initialize(LPCITEMIDLIST pidl, PCWSTR
|
||||||
{
|
{
|
||||||
m_shellPidl = ILClone(pidl);
|
m_shellPidl = ILClone(pidl);
|
||||||
|
|
||||||
#if 0
|
|
||||||
WCHAR debugTemp[MAX_PATH];
|
|
||||||
GetFullName(m_shellPidl, SHGDN_FORPARSING, debugTemp, _countof(debugTemp));
|
|
||||||
DbgPrint("INITIALIZE CRegistryFolder PIDL PATH: %S (ntPath: %S)\n", debugTemp, ntPath);
|
|
||||||
|
|
||||||
if (ntPath[wcslen(ntPath) - 1] == L'\\' && debugTemp[wcslen(debugTemp) - 1] != L'\\')
|
|
||||||
wcscat(debugTemp, L"\\");
|
|
||||||
|
|
||||||
PCWSTR guidTemp = L"::{845B0FB2-66E0-416B-8F91-314E23F7C12D}";
|
|
||||||
|
|
||||||
PCWSTR findTemp = StrStrW(debugTemp, guidTemp);
|
|
||||||
PCWSTR nextTemp = findTemp + wcslen(guidTemp);
|
|
||||||
|
|
||||||
if (wcscmp(nextTemp, ntPath))
|
|
||||||
{
|
|
||||||
DbgPrint("WHAT THE F, the NT PATH DOES NOT MATCH\n");
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!m_PidlManager)
|
if (!m_PidlManager)
|
||||||
m_PidlManager = new CRegistryPidlManager();
|
m_PidlManager = new CRegistryPidlManager();
|
||||||
|
|
||||||
|
@ -1246,3 +1205,17 @@ HRESULT STDMETHODCALLTYPE CRegistryFolder::MapColumnToSCID(
|
||||||
}
|
}
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CRegistryFolder::MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case SFVM_DEFVIEWMODE:
|
||||||
|
{
|
||||||
|
FOLDERVIEWMODE* pViewMode = (FOLDERVIEWMODE*) lParam;
|
||||||
|
*pViewMode = FVM_DETAILS;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
|
@ -16,7 +16,8 @@ class CRegistryFolder :
|
||||||
public CComCoClass<CRegistryFolder, &CLSID_RegistryFolder>,
|
public CComCoClass<CRegistryFolder, &CLSID_RegistryFolder>,
|
||||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||||
public IShellFolder2,
|
public IShellFolder2,
|
||||||
public IPersistFolder2
|
public IPersistFolder2,
|
||||||
|
public IShellFolderViewCB
|
||||||
{
|
{
|
||||||
CRegistryPidlManager * m_PidlManager;
|
CRegistryPidlManager * m_PidlManager;
|
||||||
|
|
||||||
|
@ -131,6 +132,9 @@ public:
|
||||||
// IPersistFolder2
|
// IPersistFolder2
|
||||||
virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
|
virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
|
||||||
|
|
||||||
|
// IShellFolderViewCB
|
||||||
|
virtual HRESULT STDMETHODCALLTYPE MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
// Internal
|
// Internal
|
||||||
HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl, PCWSTR ntPath);
|
HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl, PCWSTR ntPath);
|
||||||
|
|
||||||
|
@ -144,6 +148,7 @@ public:
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
|
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
|
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
|
||||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
|
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
|
||||||
|
COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
|
||||||
END_COM_MAP()
|
END_COM_MAP()
|
||||||
|
|
||||||
};
|
};
|
Loading…
Add table
Add a link
Reference in a new issue