默认电子邮件客户端在registry中如何以及在哪里设置?

为了找出默认的电子邮件客户端是什么,我一遍又一遍地find相同的信息:查看HKLM\Software\Clients\Mail中的默认string。 (例如见这个相关的问题 )

但是,对于所有操作系统和/或情况,似乎并非如此:我有两台运行Win7 64位的计算机,我们称之为A和B. A安装了Outlook 2010 64位和Thunderbird 3 32位。 B安装了Outlook 2007 32位和Thunderbird 3 32位。 A和B都将Thunderbird设置为默认邮件客户端。

但是,registry的状态并不如我预期的那样:

在机器A上, HKLM\Software\Clients\MailHKLM\Software\Wow6432Node\Clients\Mail都有一个空string作为默认string值。 在B上,这两个键都包含Microsoft Outlook作为默认string值,这显然是错误的。 进一步的调查显示,两台机器上的HKCU\Software\Clients\Mail都有正确的值。

我希望我的应用程序能够正确处理所有情况。 Win7现在看起来像是为每个用户保存一个单独的默认邮件客户端,但看起来相当不一致。 查看指向HKLM\Software\Clients\Mail的大量信息时,似乎很明显,以前版本的Windows处理这种情况的方式不同,并始终写入该位置。 那么这个变化是什么时候? 机器B上有错误的值有什么意义? 如果没有,为什么它首先写在那里? 同一台计算机上的64位和32位电子邮件客户端的组合是否改变了?

如果有人会分享可靠的信息或文件来解释这个话题,我将非常感激! 也许有一个Win32 API函数返回正确的值?

Solutions Collecting From Web of "默认电子邮件客户端在registry中如何以及在哪里设置?"

这个MSDN文章有帮助吗?

如何使用Windows“开始”菜单注册Internet浏览器或电子邮件客户端

在HKEY_CURRENT_USER子树中进行的注册对于控制台用户具有比在HKEY_LOCAL_MACHINE中进行的相应注册更高的优先级。 对于系统上的新用户,使用存储在HKEY_LOCAL_MACHINE中的设置。

对于Windows XP有一篇特别的文章: 如何在Windows XP中 以 编程方式修改默认的Web浏览器和电子邮件客户端以及如何 在Windows XP 中实现按用户的默认邮件客户端?

对不起,用Win32 API不能帮你。

对于Windows 10,这似乎是不同的 – 请参阅这里的讨论: https : //superuser.com/q/1045349/176339

从papo的回答引用你的问题的相关段落:

mailto协议的注册表项位于HKLM \ SOFTWARE \ Classes \ mailto下 ,与其他类一样,它们可以被HKCU \ SOFTWARE \ Classes \ mailto下的CURRENT_USER条目覆盖。但是,最近的Windows版本发生了变化,在注册表中有更多的地方会进一步覆盖来自类的shell关联。 而且,在mailto的情况下它们是强制性的,所以使得mail的Classes值无效。 接下来重要的是: [HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ mailto]这又被覆盖: [HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ Roaming \ OpenWith \ UrlAssociations \ mailto]哪只有在不被以下情况覆盖的情况下才能使用: [HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ Shell \ Associations \ UrlAssociations \ mailto]

GOOD JOB Microsoft :)这些键下的值具有相同的格式,一个Key UserChoice,其中一个ProgId valuename指向来自类的shell关联键。 但是你几乎可以忘记编辑这些值,因为还有哈希值。 这是对这种注册表编辑的保护。 用户必须至少点击一次,才能在标准的Windows Open With对话框中选择一个应用程序,如果他同时选中了Always选项,则会生成Hash值并将选项记住并写入上面列表中的最后两个Keys。 另一个选择是使用上图中所示的设置。 这是一个防范恶意应用程序,病毒和恶意程序的应用程序。

要排除默认的mailto关联问题,您可以从LOCAL_MACHINE以外的所有这些位置删除mailto Keys。 Windows将在下一次使用mailto协议时重新创建它们。