首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mspaint的URL协议传递了错误的参数

mspaint的URL协议传递了错误的参数
EN

Stack Overflow用户
提问于 2020-03-20 19:02:13
回答 1查看 128关注 0票数 0

我正在尝试创建一个URL协议打开一个文件在微软的画图。

我设置了注册表项,并将此按钮添加到我的页面:

代码语言:javascript
运行
复制
<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>

但当我单击该链接时,此错误出现在paint的弹出窗口中:

代码语言:javascript
运行
复制
---------------------------
Paint
---------------------------
C:\Program Files\Mozilla Firefox\mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg contains an invalid path.

我知道cli应该可以工作,因为手动输入命令提示符可以按预期打开文件。

代码语言:javascript
运行
复制
$ mspaint C:\..my\..path

我的注册表如下所示:

代码语言:javascript
运行
复制
[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\""

有人知道为什么这个不起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-22 23:36:07

我仍然不确定为什么它会像这样传递参数,但我最终只是编写了自己的协议处理程序:

代码语言:javascript
运行
复制
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);
        }
    }
}

并将这些项添加到注册表中。

代码语言:javascript
运行
复制
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键似乎从来都不起作用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60772880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档