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

Liron Yahdav 34 windows mailto

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

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

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

编辑:

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

Liron Yahdav.. 18

@ 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.例如,给定链接:

<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


Dillie-O.. 13

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

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

价值名称: (Default)

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

价值数据:Mail program command-line.

我不熟悉Delphi 7,但我确信在那里有一些注册表编辑库可以用来修改这个值.

有些地方列出的不仅仅是这个,有些地方只是这个键,所以你可能需要稍微测试才能找到合适的键.


Michael Stum.. 5

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

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