Крюк ishellfolder enumobjects

Я пытаюсь подключить перечисление функций в 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!");
}
}

но это никогда не идет внутрь, если
кто-нибудь знает почему?

1

Решение

Ниже изложено, как Windows API перечисляет файлы в каталоге. Посмотрите Вот.

[РЕДАКТИРОВАТЬ] Пропустил смысл вашего вопроса в моей первой записи. Вы хотите знать, как перехватить событие при обращении к iShellFolder? Вы, наверное, уже Посмотрел здесь?. В нем есть пример кода и обсуждаются темы, которые, на мой взгляд, могут быть полезны.

0

Другие решения

Просто измените на

if (IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellFSFolder) )

и теперь это работает

0

По вопросам рекламы [email protected]