在Windows 8中以编程方式设置mailto:协议处理程序

Windows 8之前,添加mailto:协议处理程序的方法非常简单(如此处所述,以编程方式向mailto协议注册Windows程序 )

从Windows 8开始,旧方法不再适用。 看来,Win8强制执行以下项: HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\URLAssociations\‌​MAILTO\UserChoice

它也显示所选应用程序的ProgID被哈希,不能伪造,至less不是我可以告诉。

有没有人有这方面的工作方法,或者可以指向一个工具类/代码,将大纲如何完成这个程序?

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

编辑

我已经从其他讨论中被要求指定一个用例,所以我认为这对于这个问题是有帮助的。 请考虑这个截图http://img.zgserver.com/windows/prefs-account.png和允许用户指定邮件处理的checkbox。 在这个用例中,没有人强迫用户,用户是在控制和决定。 虽然Windows 8商店应用程序(metro / modern)有一个可用的应用程序清单条目,可以自动执行上述缺失的stream程,但是对于桌面应用程序来说似乎没有任何东西可以存在。

Solutions Collecting From Web of "在Windows 8中以编程方式设置mailto:协议处理程序"

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

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

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

我写了一篇关于协议激活的文章。 这可能对你有意思: http : //blog.jerrynixon.com/2012/10/walkthrough-using-windows-8-custom.html

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

这个问题的本质似乎是不能接管任何协议的默认客户端(在Windows 8之后)。 用户必须选择。 然而,如果你想打破操作系统约定,你可以挂钩调用创建选择默认对话框,这需要研究,努力,只是一个临时的混乱,需要“打破”操作系统,或者你可以发送一个双点击对话框为用户选择,假设你的程序已经提升了权限,以便它可以发送点击到管理窗口。 这可能是最简单的方法,用户永远不会知道发生了什么,只是一个快速的闪光。 真的,虽然注册自己作为一个协议处理程序后,我不认为任何程序应该超越删除默认的协议处理程序注册表项,从而迫使用户重新选择。

在Windows 8中,不能让应用程序直接接管文件关联。有关如何在Windows应用商店和桌面应用程序中处理此问题的指导: http : //msdn.microsoft.com/zh-cn/library/窗口/应用/ hh700321.aspx

这是如何手动设置mailto协议,只需在Windows 8,8.1,2012,2012 R2

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

然后点击你的网页浏览器中的任何mailto:链接,说IE,最后在程序列表中选择哪个不可用。

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