65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.90/5 (6投票s)

2001年1月8日

viewsIcon

140307

downloadIcon

1757

本文介绍如何创建一个上下文菜单 Shell 扩展。 “复制到”和“移动到”将被添加到文件/文件夹上下文菜单中。

Sample Image - ContMenuExt.gif

引言

在 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 的人。 这将包括诸如 DllGetClassObjectIClassFactoryDllMain之类的困难词语……

我的关注点是告诉您关于 IContextMenu,而不仅仅是它的一部分,而是 IntializeInvokeCommand

首先 Initialize,它具有以下原型

IContextMenu::Initialize (LPCITEMIDLIST pidlFolder, 
        LPDATAOBJECT lpdobj, HKEY hKeyProgID);

我们关注的是 LPDATAOBJECT。 我们可以通过此数据对象指针检索正在选择的文件/文件夹列表。 这包括用于剪贴板格式的 FORMATETC 和用于存储介质的 STGMEDIUM。 您可以在 MSDN 上详细研究这两个结构。 我们将正在选择的文件/文件夹放入一个类成员 m_pszSource 中。

Invoke 命令中,我们执行其余操作,是的,复制或移动。 SHBrowseForFolder() 帮助我们选择目标,这将是一个 PIDL。 我们必须将其转换为字符串,以便将其作为目标路径传递给 SHFileOperation

就是这样。

我没有包含有关创建 Shell 扩展的任何详细信息,因为您可以在 MSDN 上阅读更多相关信息。 对于剪贴板格式和数据对象搜索,请尝试在 MSDN 上搜索“处理 Shell 数据传输方案”。

© . All rights reserved.