如何创建一个可在Windows 10中处理URL:callto和URL:tel协议的WPF应用程序?

5

我的任务是创建一个WPF应用程序,当用户在浏览器(Chrome、IE)中点击callto: 和 tel: 链接时,打开它们的默认应用程序是我创建的 Windows 10 WPF 应用程序,并处理它们。

我已经尝试通过编写脚本和手动输入我的发布 .exe 的路径来更改注册表,但它们都没有起作用。每当我点击 callto: 或 tel: 链接时,打开的默认程序仍然是像 Skype 这样的网络电话应用程序。

我已将 [HKEY_CLASSES_ROOT\tel\shell\open\command]Computer\HKEY_CLASSES_ROOT\callto\shell\open\command 更改为 "C:\App\bin\Release\app.publish\App.exe" -c "call\%1" (这是我的程序的 .exe 文件),但问题依然存在。

我希望能被浏览器提示打开应用程序。

1个回答

4
您是否阅读过此页面,该页面解释了如何注册为快捷方式的消费者。
要注册应用程序以处理特定的URI方案,请向HKEY_CLASSES_ROOT添加一个新键,以及适当的子键和值。根键必须与正在添加的URI方案匹配。例如,要添加“alert:”方案,请将警报键添加到HKEY_CLASSES_ROOT中,如下所示:
HKEY_CLASSES_ROOT
    alert
        URL Protocol = ""

在这个新密钥下,URL协议字符串值指示此密钥声明一个自定义可插拔协议处理程序。没有此密钥,处理程序应用程序将不会启动。该值应为空字符串。 还应添加DefaultIcon和shell的密钥。DefaultIcon密钥的Default字符串值必须是用于此新URI方案的图标文件名。该字符串采用“path,iconindex”格式,长度最大为MAX_PATH。在shell密钥下的第一个键的名称应为操作动词,例如open。在此键下,command键或DDEEXEC键指示如何调用处理程序。command和DDEEXEC键下的值描述了如何启动处理新协议的应用程序。 最后,默认字符串值应包含新URI方案的显示名称。以下示例显示了如何注册应用程序alert.exe来处理alert scheme。
HKEY_CLASSES_ROOT
 alert
    (Default) = "URL:Alert Protocol"
      URL Protocol = ""
    DefaultIcon
      (Default) = "alert.exe,1"
    shell
      open
         command
            (Default) = "C:\Program Files\Alert\alert.exe" "%1"

当用户单击包含自定义URI方案的链接时,Windows Internet Explorer会启动为该URI方案注册的可插入协议处理程序。如果在注册表中指定的打开命令包含%1参数,则Internet Explorer将URI传递给注册的可插入协议处理程序应用程序。

请原谅我如果我说错了,但那个链接不是用来注册自定义协议的吗?我并不想要注册自定义协议,因为它们已经存在(如 tel、callto)。我已经按照帖子中提供的更改了 shell 命令,但效果并不如预期。 - bendev88
你的程序传递的第一个参数将类似于 tel:12345678。https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85)?redirectedfrom=MSDN#launching-the-handler - Neil
非常感谢,我已经完成了一部分,现在可以启动应用程序并解析tel:链接。不幸的是,我仍然需要更多才能满足我的要求。我需要能够在当前应用程序中打开链接并解析它们(例如通过在Web浏览器中单击)。 - bendev88
你是在任何应用程序中尝试这样做,还是只是在网络浏览器中? - Neil
我已经创建了一个自定义的WPF应用程序来使用这些链接,我点击的链接将在Web浏览器中打开。 - bendev88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接