【发布时间】:2012-02-07 08:34:35
【问题描述】:
这似乎是一个常见问题,但在进行了一些搜索后,我并没有真正找到答案。这里有一篇文章:
http://www.codeproject.com/KB/shell/shellextguide1.aspx
但它适用于非常旧的 Visual Studio 版本。我使用的是 VS 2008,所以说明和界面似乎与我看到的不符。
我想使用 C++ 创建一个简单的 shell 扩展,为扩展名为 .GZ 的文件创建上下文菜单。右键单击这些文件时,我应该能够单击上下文菜单项并在代码中进行回调以对该文件执行某种操作。
其他上下文菜单项会执行一些操作,例如生成无模式对话框以在执行某些操作之前接受用户输入。
据我所见,ATL 用于此目的,但我从未使用过 ATL,因此所有对象类型和接口都让我感到非常困惑。如果我有合适的教程或文档可供阅读,那就不会那么糟糕了。
谁能帮帮我?是不是有某种未满 10 年的教程?
【问题讨论】:
-
这其实是一件特别难做的事情。当用户右键单击打印机时,我开发了一个上下文菜单项。尽管我的代码只有 40 行左右,但生成的代码大约有 1,000 行。我希望我能更有帮助,但我不能分享我拥有的任何代码。作为提示,您的 shell 扩展必须驻留在 DLL 中,并且它必须有自己的 GUID,并且 DLL 需要使用 regsvr32 注册。您想要实现BOTH IContextMenu 和IShellExtInit COM 接口。有一种方法可以让 VS 为您生成大部分内容,但我不记得如何了。
-
IContextMenu doc,还有IShellExtInit doc。
-
@dreamlax 我在 ATL 项目中使用了项目向导,但是当我创建一个新类时,它也会为它创建一个接口——我不想要一个接口,但它看起来并不容易删除该功能。另外我不确定为什么需要生成代码。
-
我不记得具体的ATL实现细节了;我已经很久没有使用 ATL 或 C++ 了。 :) 不过,我记得所涉及的头痛。您可能会发现 this link 很有帮助;它专门用于 VS 2010 C++,并演示了上下文菜单扩展。这是ATL example for VS 2008 C++
-
10 年前的教程很好。那段时间什么都没有改变。无论如何,您甚至不需要外壳扩展。您可以将项目添加到生成可执行文件的上下文菜单中,并将文件名作为参数传递。您只需使用注册表设置即可。轻松上手的最简单方法。
标签: c++ atl windows-shell shell-extensions