3

在 Windows 8 之前,添加mailto:协议处理程序的方法很简单(如此处所述,以编程方式使用 mailto 协议注册 Windows 程序

从 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

4 回答 4

5

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

但是,如果用户已经有一个处理该协议的应用程序,那么将提示他们支持该协议的应用程序列表以及选择默认协议的选项。您不能强制用户做出特定选择。

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

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

于 2013-01-11T06:08:05.283 回答
1

因此,我通过将字符串值“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 之后)。用户必须选择。但是,如果您想打破操作系统约定,您可以挂接调用以创建选择默认对话框,这需要研究、努力,并且只是暂时的杂物,并且需要“打破”操作系统,或者您可以发送双重单击对话框为用户选择,假设您的程序具有提升的权限,以便它可以将点击发送到管理窗口。这可能是最简单的方法,用户永远不会知道发生了什么,只需快速闪一下。确实,在将自己注册为协议处理程序之后,我认为任何程序都不应删除默认的协议处理程序注册表项,从而迫使用户重新选择。

于 2013-05-03T16:01:35.260 回答
1

这是在 Windows 8、8.1、2012、2012R2 中手动简单地设置 mailto 协议的方法

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

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

MAILTO 现在也出现在 Control Panel\All Control Panel Items\Default Programs 中。没有其他选项可以从那里添加/删除协议。

于 2016-11-29T11:04:48.423 回答
0

在 Windows 8 中,您不能再让您的应用程序直接接管文件关联。这里有关于如何处理 Windows 应用商店和桌面应用程序的指南:http: //msdn.microsoft.com/en-us/library/窗口/应用程序/hh700321.aspx

于 2013-01-09T20:15:30.440 回答