我正在尝试创建一个URL协议打开一个文件在微软的画图。
我设置了注册表项,并将此按钮添加到我的页面:
<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>
但当我单击该链接时,此错误出现在paint的弹出窗口中:
---------------------------
Paint
---------------------------
C:\Program Files\Mozilla Firefox\mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg contains an invalid path.
我知道cli应该可以工作,因为手动输入命令提示符可以按预期打开文件。
$ mspaint C:\..my\..path
我的注册表如下所示:
[HKEY_CLASSES_ROOT\mspaint]
"URL Protocol"=""
@="URL: mspaint Protocol"
"DefaultIcon"="C:\\WINDOWS\\system32\\mspaint.exe, 1"
[HKEY_CLASSES_ROOT\mspaint\shell]
[HKEY_CLASSES_ROOT\mspaint\shell\open]
[HKEY_CLASSES_ROOT\mspaint\shell\open\command]
@="\"C:\\WINDOWS\\system32\\mspaint.exe\" \"%1\""
有人知道为什么这个不起作用吗?
发布于 2020-03-22 15:36:07
我仍然不确定为什么它会像这样传递参数,但我最终只是编写了自己的协议处理程序:
namespace ProtocolHandler
{
class Program
{
const string NOARGSMESSAGE = "No args received";
const string MESSAGEBOXCAPTION = "Paint Protocol Handler";
const string APPLICATIONPATH = "mspaint";
const string URLPROTOCOL = "mspaint:";
const string ERRORMESSAGE = "An error occured when trying to open the file";
static void Main(string[] args)
{
try
{
if (args.Length < 1)
{
MessageBox.Show(NOARGSMESSAGE, MESSAGEBOXCAPTION);
}
else
{
var filePath = GetFilePath(args);
Process.Start(APPLICATIONPATH, filePath);
}
}
catch (Exception e)
{
MessageBox.Show(MESSAGEBOXCAPTION, $"{ERRORMESSAGE} \n {e.Message}", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private static string GetFilePath(string[] args)
{
return args[0].Replace(URLPROTOCOL, string.Empty);
}
}
}
并将这些项添加到注册表中。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\mspaint]
@="Url:Paint Protocol Handler"
"URL Protocol"=""
"UseOriginalUrlEncoding"=dword:00000001
[HKEY_CLASSES_ROOT\mspaint\DefaultIcon]
@="C:\\Path\\To\\Paint Protocol Handler.exe,0"
[HKEY_CLASSES_ROOT\mspaint\shell]
[HKEY_CLASSES_ROOT\mspaint\shell\open]
[HKEY_CLASSES_ROOT\mspaint\shell\open\command]
@="C:\\Path\\To\\Paint Protocol Handler.exe %1"
不过,DefaultIcon
键似乎从来都不起作用
https://stackoverflow.com/questions/60772880
复制相似问题