Я пытаюсь подключить перечисление функций в Ishellfolder.
Я делаю это, потому что я хочу отобразить пользовательские несуществующие файлы в проводнике.
Мне удалось подключить FindNextFile и FindFirstFile, но, к сожалению, эта функция не всегда вызывается проводником в соответствии с этим вопросом Какие API-интерфейсы используются explorer.exe в Windows 7 для просмотра файлов?
Теперь я пытаюсь подключить IShellFolder :: EnumObjects, поэтому я подключаю
MyCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv)
И внутри этой функции у меня есть следующий код:
if (IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder)) ||
IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder2)) ||
IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellDesktop) ||
IsEqualCLSID(rclsid, (REFGUID) IID_IShellFolder) )
{
PDEBUG(L"IID_IShellFolder.2");
IShellFolderCast *shellFolder = (IShellFolderCast *) *ppv;
orig_EnumObjects = (type_EnumObjects) GetInterfaceMethod(shellFolder->lpVtbl, 4);
if (!Mhook_SetHook((void **) &orig_EnumObjects, MyEnumObjects))
{
PDEBUG(L". CoCreateInstance. Failed to set EnumObjects!");
}else
{
PDEBUG(L". CoCreateInstance. success to set EnumObjects!");
}
}
но это никогда не идет внутрь, если
кто-нибудь знает почему?
Ниже изложено, как Windows API перечисляет файлы в каталоге. Посмотрите Вот.
[РЕДАКТИРОВАТЬ] Пропустил смысл вашего вопроса в моей первой записи. Вы хотите знать, как перехватить событие при обращении к iShellFolder? Вы, наверное, уже Посмотрел здесь?. В нем есть пример кода и обсуждаются темы, которые, на мой взгляд, могут быть полезны.Просто измените на
if (IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellFSFolder) )
и теперь это работает