以编程方式使用mailto协议注册Windows程序

时间:2008-08-01 22:08:14

标签: windows mailto

如何制作mailto:链接将在我的程序中注册?

我如何在程序中处理该事件?

我通过快速Google搜索找到的大多数解决方案都是如何手动执行此操作,但如果他们点击按钮,我需要自动为我的程序用户执行此操作,例如“设置为默认电子邮件客户端”。 / p>

编辑:

删除了对Delphi的引用,因为答案与您的语言无关。

3 个答案:

答案 0 :(得分:18)

@ Dillie-O:你的答案让我朝着正确的方向前进(我应该期待它只是一个注册表更改)并且我得到了这个工作。但我打算将此标记为答案,因为我将在处理此问题时提供一些我发现的其他信息。

这个问题的解决方案与您正在使用的编程语言无关,只要有一些方法可以修改Windows注册表设置。

最后,这是答案:

  • 要将程序与计算机上所有用户的mailto协议关联,请将HKEY_CLASSES_ROOT \ mailto \ shell \ open \命令默认值更改为:
    您的程序的可执行文件”“%1”
  • associate a program with the mailto protocol for the current user,请将HKEY_CURRENT_USER \ Software \ Classes \ mailto \ shell \ open \命令默认值更改为:
    您的程序的可执行文件”“%1”

%1将替换为整个mailto URL。例如,给定链接:

<a href="mailto:user@example.com">Email me</a>

以下将执行:
您的程序的可执行文件”“mailto:user@example.com”

更新(通过shellscape评论):
从Windows 8开始,此方法不再按预期工作。 Win8强制执行以下项:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associati ons \ URLAssociations \ MAILTO \ UserChoice,其中所选应用程序的ProgID经过哈希处理且无法伪造。这是皇家PITA

答案 1 :(得分:12)

从我所看到的,有一些注册表项设置默认邮件客户端。其中一个是:

系统密钥:[HKEY_CLASSES_ROOT\mailto\shell\open\command]

值名称:(Default)

数据类型:REG_SZ(字符串值)

价值数据:Mail program command-line

我不熟悉Delphi 7,但我确信在那里有一些注册表编辑库可用于修改此值。

有些地方列出的内容超过了这个密钥,其他地方只有这个密钥,所以你可能需要稍微测试才能找到合适的密钥。

答案 2 :(得分:4)

以下是以编程方式更改默认邮件客户端的官方Microsoft解决方案。它是Visual Basic,但我希望这个概念很清楚:

http://support.microsoft.com/kb/299853