如何创建“自定义协议”并将其映射到应用程序?

Posted

技术标签:

【中文标题】如何创建“自定义协议”并将其映射到应用程序?【英文标题】:How do I create a "custom protocol" and map it to an application? 【发布时间】:2011-04-27 05:19:43 【问题描述】:

如何创建“自定义协议”?我知道您可以通过向 HKEY_CLASSES_ROOT 添加一些注册表项来创建 URL 协议,但这似乎只适用于浏览器。我也需要它在 Windows 资源管理器中工作。

我知道我可以编写客户端/服务器类型的接口,但我认为这对于我客户的需求(和预算)来说是多余的。

长话短说……

第三方应用程序应调用:tbwx:<row_id> 我的应用程序应该从数据库中加载和删除一条记录。

这听起来很简单(或者我是这么认为的)。有什么想法吗?

谢谢

【问题讨论】:

你研究过套接字级编程吗? 【参考方案1】:

只要将REG_SZ 类型的URL Protocol 值添加到类的键中,就可以创建自定义协议。它不需要实际值,只需要存在即可。这是我刚刚创建的“回声协议”的一个简单示例,可在 Windows 资源管理器中使用。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\echo]
"URL Protocol"=""
@="Echo Protocol"

[HKEY_CLASSES_ROOT\echo\shell]

[HKEY_CLASSES_ROOT\echo\shell\open]

[HKEY_CLASSES_ROOT\echo\shell\open\command]
@="C:\\WINDOWS\\SYSTEM32\\CMD.EXE /Q /C (echo %1) && pause"

然后,如果您在 Windows 资源管理器(或运行菜单)中输入路径:

它甚至应该可以在浏览器中使用,您只需像任何其他协议一样进行确认:

它应该运行命令:

我发现它也可以在键 HKCU\Software\ClassesHKLM\Software\Classes 中使用。但是,它并未列在Control Panel\Programs\Default Programs\Set Associations 列表中。其他密钥可能需要更新,或者必须以某种方式在 Windows 中注册。

这似乎一直持续到 Windows 10 甚至 11。

【讨论】:

这正是我所得到的。这在 IE 中工作得很好,但在 Windows 资源管理器中根本不起作用。我希望能够简单地调用我的协议(并让它反过来调用我的应用程序),而不必通过 IE 调用它。 我不知道该说什么。 “它适用于我的机器。” (Windows 7 Pro x64)你也在 7 上运行它吗?以上对你有用吗? 是的。我正在使用 7 Ultimate x64。你到底是怎么称呼回声的?我问的原因是因为 echo 实际上是一个 DOS 命令,因此如果在 cmd 提示符下输入,甚至在您输入开始菜单时(取决于您的 %PATH% var 的设置方式),它都会返回一些内容。你已经知道这一点了,但我想仔细检查一下,因为我半夜都在用头撞墙。 安装“回声协议”后,我进入资源管理器并输入echo:foo,它会打印出echo:foo 并暂停。我打电话给echocmd.exe,因为我不能直接打电话。此外,我最初是在测试应该在记事本中打开文件的“Txt 协议”。它不起作用,因为它总是将协议名称留在参数中,我不想处理字符串操作来打开文件。 啊……永远不能太确定。我只是确保你没有忘记在 echo 后面加上冒号。另一个网站上的一些“天才”发誓你不需要它。哈哈。无论如何,你是对的,它工作得很好,就像我两天前开始编码时一样。 Google 桌面拦截了我输入的内容,但无法识别它并弹出一个搜索框。 :|我在另一台没有 Google 桌面的计算机上尝试过,没有任何问题。【参考方案2】:

Registering an Application to a URL Protocol 文章详细介绍了该过程。 GitHub上有一个utility,可以用来注册自定义URL协议。提供源代码。

【讨论】:

以上是关于如何创建“自定义协议”并将其映射到应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中注册自定义 URL 协议?

如何确保使用了我的自定义 URL 协议?

如何在 C# 中调用自定义 url 协议?

wireshark插件开发 - 自定义协议

如何禁止Microsoft Edge自定义协议对话框警告?

通过修改注册表建立Windows自定义协议