URL ms paint 协议传递了错误的参数
URL Protocol for mspaint passes wrong paramaters
我正在尝试创建一个 URL 用于在 ms paint 中打开文件的协议。
我设置了注册表项,并将此按钮添加到我的页面:
<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>
但是当我点击 link 时,这个错误出现在 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\""
有谁知道为什么这不起作用?
仍然不确定为什么它会那样传递参数,但我最终只是编写了自己的协议处理程序:
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
键似乎从来没有用过
我正在尝试创建一个 URL 用于在 ms paint 中打开文件的协议。
我设置了注册表项,并将此按钮添加到我的页面:
<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>
但是当我点击 link 时,这个错误出现在 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\""
有谁知道为什么这不起作用?
仍然不确定为什么它会那样传递参数,但我最终只是编写了自己的协议处理程序:
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
键似乎从来没有用过