通过编程注册Windows程序与mailto协议

我如何做到这样mailto:链接将注册我的程序?

那么我将如何在我的程序中处理这个事件呢?

我通过Google的快速searchfind的大多数解决scheme都是如何手动完成的,但是如果用户点击某个button,例如“设置为默认电子邮件客户端”,我需要为我的程序的用户自动执行此操作。

编辑 :删除对Delphi的引用,因为答案是独立于你的语言。

@ Dillie-O:你的回答让我朝着正确的方向发展(我应该预料到它只是一个注册表变更),我得到了这个工作。 但是我要把这个标记为答案,因为我将在工作中发现一些额外的信息。

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

最后,答案如下:

  • 要将某个程序与计算机上的所有用户的mailto协议相关联,请将HKEY_CLASSES_ROOT \ mailto \ shell \ open \命令更改为:
    你的程序的可执行文件 ”“%1”
  • 要将程序与当前用户的mailto协议相关联 ,请将HKEY_CURRENT_USER \ Software \ Classes \ mailto \ shell \ open \命令更改为默认值:
    你的程序的可执行文件 ”“%1”

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

 <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

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

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

值名称:( (Default)

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

数值数据: Mail program command-line

我不熟悉Delphi 7 ,但是我确定有一些注册表编辑库可以用来修改这个值。

有些地方列出的不仅仅是这个 ,其他的只是这个键,所以你可能需要测试一下才能找到合适的一个。

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

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