2013-12-18 4 views
1

배경 : 서버의 파일 및 폴더에 대한 가상보기를 제공하기 위해 네임 스페이스 확장을 구현 중입니다. Microsoft SDK 샘플 explorerdataprovider로 시작했습니다. 열거 로직을 수정하고 요구 사항에 맞게 메뉴 항목을 변경했습니다.삭제 작업을위한 네임 스페이스 확장의 진입 점은 무엇입니까?

문제 : IShellFolder::GetAttributesOf() 기능에 , 나는 플래그 SFGAO_CANDELETE|SFGAO_CANRENAME로 항목을 표시합니다. 이름 바꾸기를 시도하면 IShellFolder::SetNameOf()이 호출됩니다. 그러나 delete 키를 눌러 삭제 작업을 시도하면 삭제 처리를 위해 호출 된 것으로 보이는 IShellFolder에는 사용할 수있는 인터페이스가 없습니다.

참고 : 내가이 처리하는 상황에 맞는 메뉴에서 내 자신의 메뉴 항목을 추가 할 수 있지만 삭제는 키보드를 사용하여 시작되는 경우가 호출되지 않으며, 사용자가 있습니까 "의 표준 대화 상자가 표시되지 않습니다 이걸 정말로 지우시겠습니까? ".

네임 스페이스 확장에서 삭제를 처리하는 방법을 알려주십시오.

+0

이것은 물론 이전에 Google의 "셸 네임 스페이스 확장 삭제 작업"을 수행했습니다. 첫 번째 공격은 올바른 방향으로 나아갈 수있는 방법과 같습니다. –

답변

1

실제로 폴더의 데이터를 조작하는 것은 해당 IStorage 인터페이스를 통해 이루어집니다.

DestroyElement이라는 방법이 있습니다.

+0

IStorage가 Shell 인터페이스에 속하지 않는다고 생각합니다. Explorer는 IID_IStorage를 묻는 QueryInterface를 호출하지 않습니다. –

+0

아, 나는 그것을 구현하는 zip 폴더에 혼란 스러울 수 있습니다. – Medinoc

+0

@MadhusudanNarayan 확장 기능의 플래그 (IShellFolder.GetAttributesOf의 플래그)에 'SFGAO_STORAGE'가 포함되어 있지 않으면 탐색기에서 QueryInterface IStorage를 시도해 보시겠습니까? 또한 http://blogs.msdn.com/b/oldnewthing/archive/2011/09/01/10204404.aspx에 따라 'IContextMenu :: InvokeCommand()'를 통해 호출 할 수 있습니다. – Medinoc