SHOpenFolderAndSelectItems для программы замены проводника
У меня есть инструмент проводника / менеджера файлов (xplorer2), который может заменить проводник Windows для открытия папок. Однако я не могу перехватить операцию "открыть папку и выбрать элемент", выполняемую API SHOpenFolderAndSelectItems.
Я нашел старую ветку какого-то другого программиста файлового менеджера, которая подразумевала, что правильный способ - зарегистрировать "похожий на проводник" инструмент в качестве окна оболочки, а затем ответить на некоторые запросы, чтобы предоставить интерфейсы и сервисы, такие как IWebBrowserApp, которые позволят элементу (s) быть выбранным
Я успешно зарегистрировал свое окно верхнего уровня с окнами оболочки
CComPtr<IShellWindows> pShellWindows;
HRESULT hr = pShellWindows.CoCreateInstance(CLSID_ShellWindows);
hr = pShellWindows->Register(static_cast<IDispatch*>(this),
(SHANDLE_PTR)hwTop, /*SWC_3RDPARTY*/SWC_EXPLORER, &m_dwCookie);
ATLASSERT(SUCCEEDED(hr));
окно действительно появляется, если перечислено среди окон оболочки. Однако, когда он запускается в результате SHOpenFolderAndSelectItems (он объявлен как замена проводника в HKEY_CLASSES_ROOT\Directory\shell), нет никаких попыток QueryInterface или каких-либо других действий в зарегистрированном IDispatch. Я безуспешно попробовал флаги регистрации SWC_3RDPARTY и SWC_EXPLORER
есть идеи что я делаю не так?