【问题标题】:Setting mailto: protocol handler programmatically in Windows 8在 Windows 8 中以编程方式设置 mailto:协议处理程序
【发布时间】:2012-12-23 16:34:42
【问题描述】:

在 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 和允许用户指定邮件处理的复选框。在这个用例中,没有人强迫用户,用户可以控制并做出决定。虽然 Windows 8 商店应用程序(metro/modern)有一个可用的应用程序清单条目,可以自动执行上述缺失的过程,但桌面应用程序似乎并不存在。

【问题讨论】:

  • 您是否尝试在以传统方式设置注册表项后删除“UserChoice”注册表项?
  • 是的。之后单击mailto链接时,只会导致“您要如何打开此链接”飞入。

标签: windows windows-8 desktop-application mailto


【解决方案1】:

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

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

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

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

【讨论】:

  • 这是一本很好的读物,我相信它会对发生在这篇文章中的 Windows 8 现代/地铁开发人员有所帮助。但是,它不涉及桌面应用程序。我更新了 OP 以反映桌面应用程序用例。
  • 糟糕,我看到 windows-8 并假设为 WinRT。对不起。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    然后在您的网络浏览器中点击任何mailto: 链接,比如IE 最后有一个程序列表供您选择,以前没有。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 引用那篇文章:“我们建议您链接到在控制面板中设置默认程序。”如果该页面费心解决如何“链接到”该控制面板小程序,这对于桌面应用程序将是一个有用的参考。尽管如此,与之前的每个 Windows 版本一样,必须存在一种解决方法。就所提出的问题而言,这不能作为答案,而是有用的信息。
      • 该参考中缺少的其他信息:确切如何注册您的桌面应用程序,以便引用的控制面板对话框识别您的桌面应用程序。
      • 有关如何显示 UI 以允许用户设置默认值的信息,请参阅:msdn.microsoft.com/en-us/library/windows/desktop/…
      • 谢谢皮特。更进一步,这是一个围绕该 API davesbox.com/archive/2008/12/03/… 的 C# 包装器
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2023-03-09
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多