为了找出默认的电子邮件客户端是什么,我一遍又一遍地找到了相同的信息:查看HKLM\Software\Clients\Mail
中的默认字符串。(例如,请参阅此related question)
然而,这似乎并不适用于所有的操作系统和/或情况:我有两台运行Win7 64位的机器,让我们称它们为A和B。A安装了Outlook2010 64位和Thunderbird 3 32位。B安装了Outlook 2007 32位和Thunderbird 3 32位。A和B都将Thunderbird设置为其默认邮件客户端。
然而,注册表的状态并不像我预期的那样:
在机器A上,HKLM\Software\Clients\Mail
和HKLM\Software\Wow6432Node\Clients\Mail
都有一个空字符串作为默认字符串值。在B上,这两个键都包含Microsoft Outlook
作为缺省字符串值,这显然是错误的。进一步的调查显示,在两台机器上似乎都将正确的值写入了HKCU\Software\Clients\Mail
。
我希望我的应用程序能够正确地处理所有情况。这有点道理,Win7现在似乎为每个用户持有一个单独的默认邮件客户端,但它似乎相当不一致。当查看指向HKLM\Software\Clients\Mail
的大量信息时,似乎很明显,以前版本的Windows以不同的方式处理此问题,并且总是写入该位置。那么这种情况是什么时候改变的呢?机器B上的错误值有什么意义吗?如果不是,为什么一开始就写在那里呢?在同一台计算机上混合使用64位和32位电子邮件客户端会有什么改变吗?
如果有人愿意分享解释这个主题的可靠信息或文档,我将不胜感激!也许有一个Win32 API函数可以返回正确的值?
发布于 2010-10-15 16:05:22
这篇MSDN文章对你有帮助吗?
How to Register an Internet Browser or E-mail Client With the Windows Start Menu
对于控制台用户,在HKEY_CURRENT_USER子树中进行的
注册比在HKEY_LOCAL_MACHINE中进行的相应注册具有更高的优先级。对于系统上的新用户,将使用存储在HKEY_LOCAL_MACHINE中的设置。
对于Windows XP,有一篇特别的文章:How to modify the default Web browser and e-mail client programmatically in Windows XP和How to implement a per-user default mail client in Windows XP?
很抱歉,无法使用Win32接口帮助您。
发布于 2017-11-08 18:23:46
对于Windows10,这似乎是不同的-请参阅此处的讨论:https://superuser.com/q/1045349/176339
引用papo答案中的相关段落来回答您的问题:
mailto协议的
注册表项在HKLM\SOFTWARE\Classes\mailto下,与其他类一样,它们可以被HKCU\SOFTWARE\Classes\mailto下的CURRENT_USER项覆盖,但在最近的Windows版本中有更改,现在注册表中有更多的位置将进一步覆盖类中的外壳关联。此外,对于mailto,它们是强制的,因此使mailto的类值变得无用。紧随其后的是Key: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覆盖时才会使用它
干得好微软:)这些键下的值具有相同的格式,一个带有ProgId值名称的键UserChoice指向来自类的外壳关联键。但是您几乎可以忘记编辑这些值,因为还有Hash值。这是一种防止这种注册表编辑的保护。用户必须至少单击自己一次,才能在标准的Windows打开对话框弹出窗口中选择一个应用程序,如果他还选中了Always选项,则会生成哈希值,并且会记住该选择并将其写入上面列表中的最后两个键。另一种选择是使用上图所示的设置。它是对恶意应用程序、病毒和糟糕的编程应用程序的一种保护。
要解决默认邮件发送关联的问题,您可以从所有这些位置( LOCAL_MACHINE除外)下删除邮件发送密钥。Windows将在下次使用mailto协议时重新创建它们。
https://stackoverflow.com/questions/3940358
复制相似问题