我想捕获打开 (http) URL 的系统调用。我不关心浏览器内部正在做什么。而是关心浏览器或其他程序(特别是安装程序)尝试打开哪些 URL。
我可以建立一个“graburl.bat”文件:
@echo off
echo Param is: "%1"
pause
作为默认 HTTP 处理程序,方法是在注册表中设置c:\graburl.bat" %1
(或"c:\graburl.bat" "%1"
)(多个位置/方法都可以使用,但目前,我使用的是“HKEY_CLASSES_ROOT\http\shell\open\command”)。但是,我似乎无法捕获包含与号 (&) 的完整 URL。
例如,使用上面的测试设置,运行
start "https://www.google.com/search?client=opera&q=escape+ampersand"
打开一个窗口,其中包含:
Param is: ""http://www.google.com/search?client=opera
'q' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
我没有办法转义(使用 ^)或编码调用的 URL,所以我不确定我能做什么。有没有办法动态修改参数?
显然,浏览器可以处理复杂的 URL,因为它们的 http 处理调用只是"browser.exe" %1
。我也尝试过使用,"c:\windows\system32\cmd.exe" /k echo %1
但也失败了。
有什么建议吗?我更喜欢“原生”方式,但小型第三方(最好是 OSS)程序也可以。最终,我想将它们放入日志中,而不仅仅是将它们回显到屏幕上,因此,接受字符串参数并将其推送到文件的 cmdline .exe 会很棒。
谢谢。