c++ - 将项目添加到 Internet Explorer 的右键单击上下文菜单

标签 c++ internet-explorer dll resources registry

我正在尝试将新条目添加到 Internet Explorer 的右键单击上下文菜单中。我知道这可以通过创建一个包含 JavaScript 的 HTML 文件,然后从注册表中的某个位置链接到它来实现。我还了解到您还可以将 HTML 添加到资源文件并将其编译为 DLL(请参阅 Microsoft 知识库文章:Adding Entries to the Standard Context Menu)。这是我开始遇到问题的地方。

这里是关于我到目前为止所做的一些背景知识。

  • 我在文件 C:\test.htm 中有以下 JavaScript:
<script type="text/javascript">
    alert('Hello, world!');
</script>
  • 我在注册表中的以下位置添加了一个新的 REG_SZ'c:\test.htm':
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt

如果我现在重新启动 IE,我的新菜单项将出现在上下文菜单中。如果我选择我的新菜单项,我的消息框警报会按预期出现。到目前为止,一切都很好。但是,如果它在 DLL 中,我似乎无法访问该脚本。以下是我采取的步骤:

  1. 在 VS 2005 中在 c:\IETest 中创建了一个名为 'IETest' 的新 Visual C++ 类库项目
  2. 将我的 C:\test.htm 文件导入到默认的 app.rc 资源文件中。我已将 ID 更改为 TEST
  3. 在 Debug模式下编译 DLL
  4. 更改注册表项以读取
res://C:\IETest\debug\IETest.dll/TEST

如果我现在重新启动 IE 并重试,当我右键单击并选择新的上下文菜单条目时,消息框不会出现。我也尝试过 DLL 的发布版本,但没有任何运气,还尝试用逗号替换最后一个正斜杠并将路径单反斜杠更改为双斜杠。

我只能假设我在创建我的 DLL 时做错了什么。谁能指出我正确的方向?有什么方法可以检查已编译的 DLL 以检查资源和关联的 ID?

谢谢。

最佳答案

您是否尝试过将 ID 设为 TEST.html?我的猜测是 IE 不知道如何处理该文件,因为它没有列出扩展名,但这完全是基于某些 MS .dll 识别它们的方式这一事实的猜测(即 res://c:\windows\system32\shdoclc.dll/navcancl.htm)

我唯一能想到的另一件事是确保您的资源是 23 类型。

ResourceHacker 可以随意查看资源文件:http://angusj.com/resourcehacker/

关于c++ - 将项目添加到 Internet Explorer 的右键单击上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786566/

相关文章:

javascript - 即内存释放

c# - Coldfusion 在实例化 .Net 引用时缺少错误信息

dll - DIRCA_CHECKFX 返回值 3 - VS 2013 部署项目

html - 为什么四个按钮在 IE 中没有排成一行?

css - IE Quirks 模式下的 Z-index 问题

将 GhostPDL 编译为 DLL

C++ 宏 - 大写字符串

c++ - boost线程库的型号是什么

java - 以下程序的时间复杂度

c++ - 在 google-api-cpp-client 中构建专门的服务 API