将参数传递给自定义URI

将参数传递给自定义URI

问题描述:

我有一个自定义的URI是这样的:将参数传递给自定义URI

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Demo] 
@="URL:Demo Protocol" 
"URL Protocol"="" 

[HKEY_CLASSES_ROOT\Demo\DefaultIcon] 
@="\"D:\\demo.bat\"" 

[HKEY_CLASSES_ROOT\Demo\shell] 

[HKEY_CLASSES_ROOT\Demo\shell\open] 

[HKEY_CLASSES_ROOT\Demo\shell\open\command] 
@="\"D:\\demo.bat\" \"%1\" \"%2\" \"%3\" \"%4\"" 

对于从命令提示符下运行此,我用这个命令:

D:\demo.bat -ping -ip 172.18.102.65

但运行如果我使用自定义URI作为Demo:,那么它会要求我传递参数。如果我从浏览器运行它,我不知道如何将参数传递给自定义URI。

如何从浏览器运行此自定义uri时传递参数?请指教。

当使用自定义URL时,整个 URL作为单个参数传递到已注册的应用程序/脚本。您的应用/脚本需要解析URL以提取所需内容。例如:

D:\demo.bat "demo:ping?ip=172.18.102.65" 

D:\demo.bat "demo:ping=172.18.102.65" 

D:\demo.bat "demo:ping%20172.18.102.65" 

更新:

[HKEY_CLASSES_ROOT\Demo\shell\open\command] 
@="\"D:\\demo.bat\" \"%1\"" 

可以,只要它是一个有效的网址,并用demo:开始,例如格式化网址,任何你想要的方式,但是请注意,这只适用于Internet Explorer(和Windows资源管理器,以及Windows Shell)。您需要其他浏览器的另一个解决方案。例如,Firefox拥有自己的协议处理机制:

Web-based protocol handlers

Adding a New Protocol to Mozilla

Writing a Firefox Protocol Handler

+0

谢谢你的信息但不幸的是它不工作。当我在浏览器中运行这个URL'demo:ping?ip = 172.18.102.65'时,它不起作用。即使我在命令提示符下运行:'D:\ demo.bat“演示:ping?ip = 172.18.102.65”',它不起作用。请咨询 – user182944 2014-10-17 15:04:32

+1

定义“不起作用”。你使用的是什么浏览器? demo.bat实际收到什么参数?您是否尝试过其他网址格式?创建注册表值后,您是否重新启动机器? – 2014-10-17 15:44:47

+0

demo.bat接收三个参数:'-ping','-ip'和'172.18.102.65'。我试图让它在FIREfox浏览器中工作,但它不起作用。我尝试用'%20'编码'space',但徒劳无益。我多次重新启动系统,但没用。请让我知道如何使它在FIrefox中工作。 – user182944 2014-10-18 15:15:13

这并不是说我要重新打开这样一个老问题,但我一直在寻找一个更好的答案,这整个上午都没有运气。 OP很幸运,因为他有一个可修改的批处理文件。但是,我想将URI添加到现有程序(putty)而无需安装其他文件。

当我看到它们时,有两个问题,第一个是完整的URI,包括作为一个参数传递的协议。第二个是不能传递多个参数。

对于协议前缀的第一个解决方案,可以通过执行一些字符串操作来解决。这样,在注册表中的指令值的样子:

cmd /V:ON /C "SET r=%1 & start D:\demo.bat !r:Demo:=!" 
  • /V:ON允许用于R!更换将延迟执行。
  • /C打开和关闭命令窗口。
  • 集合R =%1保存URI,它由当时的SET运行已经 被实际URI字符串替换
  • 开始启动程序或批处理文件在这种情况下

的现在第二个解决方案,我们可以操纵字符串是做另一个替换,这虽然我肯定有一个更好的办法,你可以只链中的内容替换在一起,就像这样:

cmd /V:ON /C "SET r=%1 & SET s=!r:Demo:=! & start D:\demo.bat !s:_= !" 

这最后除了代替下划线(_)与空格(),并通过使它们成为空格使它们成为用于调用demo.bat的单独参数。 因此,运行:

D:\demo.bat -ping -ip 172.18.102.65 

你的URI是:

Demo:-ping_-ip_172.18.102.65 

注: 我会建议使用小写的协议,但与OP的榜样去为一致性

+0

这是一个很好的答案。将参数传递给您无法控制的应用程序是一种有趣的情况,也可能是常见的情况。 – Farax 2017-12-06 03:14:49