【问题标题】:How to Get ShellNew sub menu items如何获取 ShellNew 子菜单项
【发布时间】:2014-04-15 03:52:36
【问题描述】:

我正在开发一个应用程序,因为我需要显示“新建”上下文菜单的子菜单。即,当我们在桌面上右键单击时,我们会得到新的上下文菜单项,单击新建时,我们会得到“文件夹”、“快捷方式”、“文本文档”等。

我的问题是-

  1. 是否有任何 API 可以获取列表到新的子菜单?
  2. 还有没有API可以获取“Send To”的子菜单?

【问题讨论】:

    标签: windows winapi visual-c++


    【解决方案1】:

    NewSend To 菜单项是实现IContextMenu(2,3) 接口的简单外壳扩展。 New shell 扩展的 CLSID 是 {D969A300-E7FF-11d0-A93B-00A0C90F2719}Send To shell 扩展的 CLSID 是 {7BA4C740-9E81-11CF-99D3-00AA004AE837}。所以需要为IContextMenu接口实现host。

    1. 创建一个 COM 对象

    2. 查询IContextMenuIShellExtInit

    3. 致电IShellExtInit.Initialize()

    4. 创建临时菜单

    5. 致电IContextMenu.QueryContextMenu()

    在临时菜单中,您将拥有所有可用的命令。

    1. 运行命令调用IContextMenu.InvokeCommand()

    您可以在Old New Thing 博客中找到很多详细信息:

    How to host an IContextMenu, part 1 - Initial foray

    How to host an IContextMenu, part 2 - Displaying the context menu

    How to host an IContextMenu, part 3 - Invocation location

    How to host an IContextMenu, part 4 - Key context

    How to host an IContextMenu, part 5 - Handling menu messages

    How to host an IContextMenu, part 6 - Displaying menu help

    How to host an IContextMenu, part 7 - Invoking the default verb

    How to host an IContextMenu, part 8 - Optimizing for the default command

    How to host an IContextMenu, part 9 - Adding custom commands

    How to host an IContextMenu, part 10 - Composite extensions - groundwork

    How to host an IContextMenu, part 11 - Composite extensions - composition

    【讨论】:

    • 它对我有用,感谢您的解决方案。关于更多问题,一旦我单击任何选项(文本、文件夹、快捷方式)。它创建文件,但不会处于编辑模式,即单击测试文件时,它会创建“New Text document.txt”。用户必须明确需要重命名项目。
    • “新”外壳扩展正在等待从 Windows 资源管理器中调用它,并且它与资源管理器有更多的集成。 Explorer 通过 shell 扩展的 IObjectWithSite 接口提供了很多 IShellView 等接口。它允许外壳扩展调用用户友好的重命名功能。
    • 嗨,新的工作正常,但是当我创建发送到时,然后在上下文菜单上发送到。但是单击发送以显示空列表。除了 New 之外,我还需要发送任何更改吗?
    • 使用哪些参数调用 IShellExtInit.Initialize?
    • ShellExtInit->Initialize(NULL, _pdtobj, NULL);我初始化了 IdataObject
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2015-09-24
    相关资源
    最近更新 更多