c# - 从超链接启动应用程序

标签 c# .net

我想知道是否有一种方法(在 Windows 上)通过单击超链接启动预安装的应用程序。举一个基本的例子:

用户在他们的机器上安装了一个名为 SuperPing 的应用程序。如果他们在浏览器中单击具有以下 URL 的链接,它将启动该应用程序。

SPing://8.8.4.4

这会导致以下情况发生:

"C:\SuperPing.exe" /ip 8.8.4.4

所以我的问题实际上是,创建此 Hook 的方式是什么,以根据 URL 使事情发生。这与 iPhone 在正确连接到链接时可以启动特定应用程序的方式非常相似。

最佳答案

您可以在安装应用程序时注册自定义 URL 处理程序。参见 MSDN获取更多信息。

以下是该页面的相关摘录:


要注册应用程序来处理特定的 URI 方案,请将新键以及适当的子键和值添加到 HKEY_CLASSES_ROOT。根 key 必须与添加的 URI 方案相匹配。例如,要添加一个alert: 方案,将alert 键添加到HKEY_CLASSES_ROOT,如下所示:

HKEY_CLASSES_ROOT
   alert
      URL Protocol = ""

在此新键下,URL Protocol 字符串值表示此键声明了自定义可插入协议(protocol)处理程序。没有这个 key ,处理程序应用程序将不会启动。该值应为空字符串。

还应为 DefaultIconshell 添加键。 DefaultIcon 键的 Default 字符串值必须是用作此新 URI 方案图标的文件名。该字符串采用 path, iconindex 的形式,最大长度为 MAX_PATHshell 键下第一个键的名称应该是一个 Action 动词,例如open。在此键下,command 键或 DDEEXEC 键指示应如何调用处理程序。 commandDDEEXEC 键下的值描述了如何启动处理新协议(protocol)的应用程序。

最后,Default 字符串值应包含新 URI 方案的显示名称。以下示例显示如何注册一个应用程序,在本例中为 alert.exe,以处理警报方案。

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 方案注册的可插入协议(protocol)处理程序。如果在注册表中指定的指定 open 命令包含 %1 参数,Internet Explorer 会将 URI 传递给已注册的可插入协议(protocol)处理程序应用程序。


因此,在您的情况下,您需要添加此 key :

HKEY_CLASSES_ROOT
   SPing
      (Default) = "URL:SPing Protocol"
      URL Protocol = ""
      DefaultIcon
         (Default) = "SuperPing.exe,1"
      shell
         open
            command
               (Default) = "C:\SuperPing.exe" /url "%1"

然后您将修改您的应用程序以采用“/url”命令行参数,该参数将填充用于启动您的应用程序的完整 URL(因此它不会自动拆分 URL 之后的部分)。

语法由您决定,但它会像 SPing:8.8.4.4 一样简单(不需要 ://)。

关于c# - 从超链接启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782934/

相关文章:

c# - 播放器移动的具体而简单的代码无法按预期工作(XNA)

C# 单元测试 - 生成模拟 DataContexts/LINQ -> SQL 类

.net - 在 winform 应用程序中模拟 ajax 加载器

.net - 如何有效地打开表达式结果?

c# - 使用 FluentFTP 连接到 FTPS(FTP over SSL)

c# - 找不到具有名称/ key 的资源

c# - 检索 XML 文件中的深层嵌套值

c# - 如何将文本附加到文本框的行?

c# - 来自 SqlDataReader 的转换问题

c# - Directory.GetFiles 使用 SearchPattern 返回意外结果