【发布时间】:2014-04-15 03:52:36
【问题描述】:
我正在开发一个应用程序,因为我需要显示“新建”上下文菜单的子菜单。即,当我们在桌面上右键单击时,我们会得到新的上下文菜单项,单击新建时,我们会得到“文件夹”、“快捷方式”、“文本文档”等。
我的问题是-
- 是否有任何 API 可以获取列表到新的子菜单?
- 还有没有API可以获取“Send To”的子菜单?
【问题讨论】:
标签: windows winapi visual-c++
我正在开发一个应用程序,因为我需要显示“新建”上下文菜单的子菜单。即,当我们在桌面上右键单击时,我们会得到新的上下文菜单项,单击新建时,我们会得到“文件夹”、“快捷方式”、“文本文档”等。
我的问题是-
【问题讨论】:
标签: windows winapi visual-c++
New 和 Send To 菜单项是实现IContextMenu(2,3) 接口的简单外壳扩展。 New shell 扩展的 CLSID 是 {D969A300-E7FF-11d0-A93B-00A0C90F2719},Send To shell 扩展的 CLSID 是 {7BA4C740-9E81-11CF-99D3-00AA004AE837}。所以需要为IContextMenu接口实现host。
创建一个 COM 对象
查询IContextMenu和IShellExtInit
致电IShellExtInit.Initialize()
创建临时菜单
致电IContextMenu.QueryContextMenu()
在临时菜单中,您将拥有所有可用的命令。
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
【讨论】: