2013-01-09 55 views
3

协议处理程序的Windows 8之前,加入mailto:协议处理程序的方法是简单(这里Register Windows program with the mailto protocol programmatically概述)设置的mailto:在Windows 8

随着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)有一个可用的应用程序清单条目,可以自动执行上述缺失的流程,但桌面应用程序似乎并不存在。

+0

您是否尝试使用传统方式设置注册表项后删除“UserChoice”注册表项? – selbie

+0

是的。只有当后来点击mailto链接时,才会导致“如何打开此链接”。 – shellscape

回答

0

你不能让你的应用程序直接拿过来的文件关联在了Windows 8的有关于如何处理这两个Windows应用商店和桌面应用程序在这里的准则:http://msdn.microsoft.com/en-us/library/windows/apps/hh700321.aspx

+0

引用该文章:“我们建议您链接到控制面板中的设置默认程序。”这对于桌面应用程序来说是一个有用的参考资料,如果页面精确地说明了如何处理“链接到”控制面板小应用程序。即使如此,就像以前的每个Windows版本一样,必须有一种解决方法。为了提出问题的目的,这不符合答案的要求,而是有用的信息。 – shellscape

+1

该参考文献中缺少其他信息:确切地说,如何让您的桌面应用程序注册,以便引用的控制面板对话框可识别您的桌面应用程序。 – shellscape

+1

有关如何显示UI以允许用户设置默认值的信息,请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/cc144160(v=vs.85)。 aspx#first_run_and_defaults – Pete

5

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

但是,如果用户已经有一个处理该协议的应用程序,那么它们将被提示支持该协议的应用程序列表并提供选择默认选项的选项。您无法强制用户进行特定的选择。另外,如果用户点击协议(如myprotocol :),并且他们没有安装处理该协议的应用程序,则它们将被发送到商店(app),该商店会自动搜索支持该协议的所有应用程序。用户然后安装任何他们想要的。您不能强制用户进行特定的选择(如果有的话)。

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

+0

这是一个很好的阅读, m确保它对于本文发生的Windows 8现代/地铁开发人员会有所帮助。但是,它不涉及桌面应用程序。我已更新OP以反映桌面应用程序用例。 – shellscape

+0

糟糕,我看到[标签:Windows-8]并假设WinRT。抱歉。 –

1

所以,我做了桌面火狐我的默认的mailto处理程序今天在Windows 8中通过添加字符串值“电子邮件地址”到HKCU \软件\客户\ StartMenuInternet \ FIREFOX.EXE \功能\ URLAssociations并将“mailto”的值设置为等于ProgID或“FirefoxURL”。然后,我删除了HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ URLAssociations \ MAILTO \ UserChoice中的密钥,以允许我再次选择默认客户端,并且此时Firefox可供我选择。

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

0

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

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

然后单击Web浏览器中的任何mailto:链接,说IE 最后在程序列表中为你选择哪个是以前没有的。

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