“复制到”和“移动到”在 Shell 上下文菜单中。






3.90/5 (6投票s)
2001年1月8日

140307

1757
本文介绍如何创建一个上下文菜单 Shell 扩展。 “复制到”和“移动到”将被添加到文件/文件夹上下文菜单中。
引言
在 Win2K 中,您可以在 Windows 资源管理器中看到两个新的工具栏按钮:“复制到”和“移动到”。 然而,微软尚未意识到将这两个条目包含在文件/文件夹上下文菜单中。 我希望在上下文菜单中看到这些条目,因为每次复制或移动文件/文件夹时,我必须更改文件夹或必须按下 Win2K 中的那些新的工具栏按钮。
以下示例将在上下文菜单中创建这两个条目。
我假设您熟悉创建 Shell 扩展、COM、剪贴板操作和 Shell API。 (Esposito Dino 的书对于任何初学者 Shell 程序员来说都非常有用)。
按照创建 Shell 扩展所需的全部步骤操作。
以下注册表项将告诉 Shell 您正在扩展文件/文件夹上下文菜单。 这些是
#define SZ_DIRCONTEXTMENUEXT _T("Directory\\shellex\\ContextMenuHandlers\\Mumtaz") #define SZ_FILECONTEXTMENUEXT _T("*\\shellex\\ContextMenuHandlers\\Mumtaz") #define SZ_FOLDERCONTEXTMENUEXT _T("Folder\\shellex\\ContextMenuHandlers\\Mumtaz")
不要对文本 Mumtaz
感到困惑;那是我的名字。
当用户查看文件/文件夹的上下文菜单时,Shell 开始寻找任何扩展 Shell 的人。 这将包括诸如 DllGetClassObject
、IClassFactory
、DllMain
之类的困难词语……
我的关注点是告诉您关于 IContextMenu
,而不仅仅是它的一部分,而是 Intialize
和 InvokeCommand
。
首先 Initialize
,它具有以下原型
IContextMenu::Initialize (LPCITEMIDLIST pidlFolder, LPDATAOBJECT lpdobj, HKEY hKeyProgID);
我们关注的是 LPDATAOBJECT
。 我们可以通过此数据对象指针检索正在选择的文件/文件夹列表。 这包括用于剪贴板格式的 FORMATETC
和用于存储介质的 STGMEDIUM
。 您可以在 MSDN 上详细研究这两个结构。 我们将正在选择的文件/文件夹放入一个类成员 m_pszSource
中。
在 Invoke
命令中,我们执行其余操作,是的,复制或移动。 SHBrowseForFolder()
帮助我们选择目标,这将是一个 PIDL。 我们必须将其转换为字符串,以便将其作为目标路径传递给 SHFileOperation
。
就是这样。
我没有包含有关创建 Shell 扩展的任何详细信息,因为您可以在 MSDN 上阅读更多相关信息。 对于剪贴板格式和数据对象搜索,请尝试在 MSDN 上搜索“处理 Shell 数据传输方案”。