处理撤消名称空间扩展中的删除操作

时间:2014-02-19 17:21:08

标签: winapi shell-extensions

我正在尝试在命名空间扩展中处理Ctrl + Z(撤消删除)上下文菜单操作,但我找不到方法来执行此操作。

我在文档中看到需要实现FM_UNDELETE_PROC,但没有关于如何注册此回调的详细信息。 还尝试设置Shell挂钩,但没有相关消息到达那里。

有什么想法? 此外,如何注册删除操作,以便资源管理器允许进行撤消。 现在看来我是从其他地方这样做的。

谢谢, 大卫

1 个答案:

答案 0 :(得分:1)

Windows具有每个进程(在Vista之前)或全局文件操作堆栈。如果使用SHFileOperation或IFileOperation接口等API函数,则可以传递FOF_ALLOWUNDO标志。但是,如果源文件参数不包含完全限定的路径和文件名,则会忽略此标志。这意味着如果您想使用系统文件操作堆栈,您的shell扩展对象必须具有SFGAO_FILESYSTEM属性,并且当使用SHGDN_FORPARSING参数调用IShellFolder.GetDisplayNameOf时,您必须返回有效的文件路径和名称。此外,还需要实现ITransferSource和ITransferDestination接口。因此,如果对象不具有SFGAO_FILESYSTEM属性,则必须使用自己的操作堆栈实现。

在文件夹的后台上下文菜单中撤消删除命令,或在编辑菜单中是系统命令,它与您的shell扩展名没有任何关系。而且你不应该手动处理Ctrl + Z.