在Windows 8中以编程方式设置mailto:protocol handler

时间:2013-01-09 15:16:53

标签: windows windows-8 desktop-application mailto

在Windows 8之前,添加mailto:协议处理程序的方法很简单(如Register Windows program with the mailto protocol programmatically所述)

从Windows 8开始,旧方法不再有效。 Win8似乎强制执行以下密钥:HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\URLAssociations\‌​MAILTO\UserChoice

所选应用的ProgID似乎也是经过哈希处理的,不能伪造,至少我不知道。

有没有人有这方面的工作方法,或者可以指向一个实用程序类/代码,它将概述如何以编程方式完成此操作?

对于代码,任何语言都可以。

修改

我从其他讨论中被要求指定用例,所以我认为在这个问题的上下文中它会有所帮助。请考虑此屏幕截图https://github.com/shellscape/Gmail-Notifier-Plus/raw/master/Promotional/prefs-account.png以及允许用户指定mailto处理的复选框。在这个用例中,没有人强迫用户,用户可以控制并做出决定。虽然Windows 8商店应用程序(metro / modern)有一个可用的应用程序清单条目,可以自动执行上述丢失的过程,但桌面应用程序似乎没有任何内容。

4 个答案:

答案 0 :(得分:5)

您可以将应用程序设置为由自定义协议(如mailto :)激活。当用户安装您的应用程序时,如果没有其他应用程序支持该协议,则不会提示他们,并且您将自动分配给该协议。

但是,如果用户已经拥有处理该协议的应用程序,则会提示他们提供支持该协议的应用程序列表,并选择默认选项。您无法强制用户进行特定选择。

此外,如果用户点击协议(如myprotocol :)并且他们没有安装处理该协议的应用程序,那么他们将被发送到商店(app),该商店会自动搜索支持该协议的所有应用程序。然后用户安装他们想要的任何东西。您无法强制用户进行特定选择(如果有的话)。

我写了一篇关于协议激活的文章。你可能会感兴趣:http://blog.jerrynixon.com/2012/10/walkthrough-using-windows-8-custom.html

答案 1 :(得分:1)

因此,我通过将字符串值“mailto”添加到HKCU \ Software \ Clients \ StartMenuInternet \ FIREFOX.EXE \ Capabilities \ URLAssociations并设置“mailto”的值,使Windows Firefox成为Windows 8中的默认mailto处理程序。等于ProgID或“FirefoxURL”。然后我删除了HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ URLAssociations \ MAILTO \ UserChoice中的键,以允许我再次选择默认客户端,这次Firefox可供我选择。

这个问题的本质似乎是不能再接管任何协议的默认客户端(发布Windows 8)。用户必须选择。但是,如果你想打破操作系统惯例你可以挂钩调用来创建选择默认对话框,这将需要研究,努力,并且只是一个临时的kludge并且需要“打破”操作系统,或者你可以发送一个双单击该对话框为用户选择,假设您的程序具有提升的权限,以便它可以向管理员窗口发送单击。这可能是最简单的方法,用户永远不会知道发生了什么,只是一个快速的闪光。实际上,在将自己注册为协议处理程序之后,我认为任何程序都不应该超出删除默认协议处理程序注册表项,从而迫使用户重新选择。

答案 2 :(得分:0)

您不能让您的应用程序在Windows 8中直接接管文件关联。有关如何在Windows Store和桌面应用程序中处理此问题的指导原则:http://msdn.microsoft.com/en-us/library/windows/apps/hh700321.aspx

答案 3 :(得分:0)

这是在Windows 8,8.1,2012,2012R2

中手动设置mailto协议的方法

添加新的注册表分支HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\mailto\UserChoice

然后点击网络浏览器中的任意mailto:链接,例如IE 最后在程序列表中供您选择以前不可用的程序。

MAILTO现在也出现在控制面板\所有控制面板项目\默认程序中。没有其他选项可以从那里添加/删除协议。