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

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

Register Windows program with the mailto protocol programmatically

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

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

我从Google的快速搜索中找到的大多数解决方案都是手动执行此操作,但是如果我的程序用户单击"设置为默认电子邮件客户端"之类的按钮,则需要为他们自动执行此操作。铅>
编辑:

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


@ Dillie-O:您的回答使我朝了正确的方向(我应该期望这只是注册表更改),而我的工作正常。但是我将其标记为答案,因为我将放置一些在处理此问题时发现的其他信息。

只要有某种方法可以修改Windows注册表设置,此问题的解决方案实际上并不取决于您使用的编程语言。

最后,这是答案:

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

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

1
Email me

将执行以下操作:
"您的程序的可执行文件" " 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不熟悉,但是我确定那里有一些注册表编辑库可用于修改此值。

有些地方列出的内容比此键还多,其他地方只是此键,因此您可能需要进行一些测试才能找到合适的位置。


推荐阅读