2014-02-19 40 views
0

我試圖在我的名稱空間擴展中處理Ctrl + Z(撤消刪除)上下文菜單操作,但我無法找到一種方法來執行此操作。處理撤消刪除名稱空間擴展中的操作

我在文檔中看到需要實現FM_UNDELETE_PROC,但沒有關於如何註冊此回調的詳細信息。 也試圖設置一個Shell掛鉤,但沒有相關的消息到達那裏。

有什麼想法? 另外,如何註冊一個刪除操作,以便資源管理器允許撤消操作。 現在看來,如果我從另一個位置執行此操作。

謝謝, 大衛

+1

如何在IShellFolder.CreateViewObject中創建IContextMenu?你使用自己的實現還是系統默認? –

+0

你隱藏了很多細節,包括代碼。 @Denis Anisimov非常好的評論。 :) – user2120666

回答

1

Windows有每個進程(Windows Vista之前的)或全局文件操作堆棧。如果使用SHFileOperation或IFileOperation接口等API函數,則可以傳遞FOF_ALLOWUNDO標誌,但如果源文件參數不包含標準路徑和文件名,則忽略此標誌。這意味着如果你想使用系統文件操作棧,你的shell擴展對象必須具有SFGAO_FILESYSTEM屬性,並且你必須在使用SHGDN_FORPARSING參數調用IShellFolder.GetDisplayNameOf時返回有效的文件路徑和名稱。還有必要實施ITransferSource和ITransferDestination接口。因此,如果對象沒有SFGAO_FILESYSTEM屬性,則必須使用您自己的操作堆棧實現。

撤消在文件夾的後臺上下文菜單中或在編輯菜單中的刪除命令是系統命令,它與你的shell擴展沒有任何關係。你不應該手動處理Ctrl + Z。

+0

感謝您的迴應,丹尼斯。 我在研究中發現了ITransferSource和ITransferDestination,但我發現這些只支持Vista,所以在XP上無法實現這種行爲,對吧? David – user3181894

+0

對不起,我沒有在XP上測試你需要的功能。我會稍後再做,並寫下結果。 –

+0

XP解決方案(未經測試,只是理論):如果您的項目具有SFGAO_FILESYSTEM屬性,則它們與真實文件相關聯。所以只需使用帶有真實文件和FOF_ALLOWUNDO標誌的SHFileOperation。用戶刪除文件外殼後會將記錄添加到撤消堆棧,撤消刪除操作將可用。您必須使用SHChangeNotifyRegister監控文件的文件夾。當用戶運行撤消從回收站刪除外殼恢復文件,你可以趕上恢復事件。 –