在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程,但是对于桌面应用程序来说似乎没有任何东西可以存在。
您可以将您的应用程序设置为通过自定义协议(如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现在出现在控制面板\所有控制面板项目\默认程序中。 没有其他的选择,从那里添加/删除协议。