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

我该如何做到这一点 mailto:链接将被注册到我的程序中?

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

我通过Google的快速搜索发现的大多数解决方案都是如何手动完成的,但如果用户点击某个按钮(例如“设为默认电子邮件客户端”),我需要为我的程序用户自动执行此操作。

Edit: Removed reference to Delphi, because the answer is independent of your language.

0
额外 编辑
意见: 2

3 答案

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

System Key: [HKEY_CLASSES_ROOT\mailto\shell\open\command]

Value Name: (Default)

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

值数据:邮件程序命令行

我并不熟悉 Delphi 7 ,但我确定在那里有一些注册表编辑库,您可以使用它来修改此值。

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

0
额外

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

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

0
额外
在您的链接中:“这与用于从系统中的任何位置启动任意URL的默认Web浏览器或电子邮件客户端是分开的。”这也是我想知道的另一件事,但不是这个问题的答案。
额外 作者 Liron Yahdav,

@Dillie-O: Your answer put me in the right direction (I should have expected it to just be a registry change) and I got this working. But I'm going to mark this as the answer because I'm going to put some additional information that I found while working on this.

只要有一些方法可以修改Windows注册表设置,那么对于这个问题的解决方案确实无关紧要使用什么编程语言。

最后,这是答案:

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

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

Email me

以下将被执行:
您的程序的可执行文件”“mailto:[email protected]

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

0
额外
是的,我现在可以将其标记为答案。
额外 作者 Liron Yahdav,
你有没有检查过你现在是否可以把它标记为答案?我不知道最低声誉要求。
额外 作者 tzot,
从Windows 8开始,此方法不再按预期工作。 Win8强制执行以下项:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associati‌ ons \ URLAssociations \‌ MAILTO \ UserChoice所选应用程序的ProgID被散列且无法伪造。这是一个皇家PITA
额外 作者 shellscape,