2013-12-18 4 views
1

Background: Я использую расширение пространства имен, чтобы обеспечить виртуальный просмотр файлов и папок на сервере. Я начал с образца исследовательского образца Microsoft SDK. Я изменил логику перечисления и изменил пункты меню в соответствии с моими требованиями.Какова точка входа в расширение пространства имен для операции удаления?

Проблема: В функции IShellFolder::GetAttributesOf() я маркировать деталь с флагами SFGAO_CANDELETE|SFGAO_CANRENAME. Он вызывает IShellFolder::SetNameOf() при попытке переименования. Но когда я пытаюсь выполнить операцию удаления (нажав клавишу delete), я не вижу никаких интерфейсов, доступных в IShellFolder, который, как представляется, вызывается для обработки delete.

Примечание: я могу добавить свой собственный пункт меню в контекстном меню, чтобы справиться с этим, но это не будет вызываться, если удаление инициируется с помощью клавиатуры, и пользователь не будет видеть стандартный диалог «Are вы уверены, что хотите удалить это? ».

Просьба сообщить мне, как обрабатывать удаление в расширении пространства имен.

+0

Это было сделано, прежде чем, конечно, удалите операцию расширения пространства имен google. Первый удар выглядит как способ двигаться в правильном направлении. –

ответ

1

Я думаю, что фактическое манипулирование данными в папке осуществляется через его интерфейс IStorage.

У этого метода есть DestroyElement.

+0

Я думаю, что IStorage не принадлежит интерфейсам Shell. Проводник не вызывает запрос QueryInterface для запроса IID_IStorage. –

+0

А, возможно, меня смутили почтовые папки, которые его реализуют. – Medinoc

+0

@MadhusudanNarayan Wait, может ли проводник попытаться выполнить QueryInterface IStorage, если флаги расширения (те, что из IShellFolder.GetAttributesOf) не содержат 'SFGAO_STORAGE'? Кроме того, согласно http://blogs.msdn.com/b/oldnewthing/archive/2011/09/01/10204404.aspx, возможно, он может быть вызван через 'IContextMenu :: InvokeCommand()'. – Medinoc