Протокол URL для mspaint передает неверные параметры - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать протокол URL для открытия файла в ms paint.

Я настроил ключи реестра и добавил эту кнопку на свою страницу:

<a href="mspaint:C:\Users\Bassie\Pictures\hqdefault.jpg">Open in Paint</a>

Но когда я нажимаю на ссылку, эта ошибка появляется во всплывающем окне рисования:

---------------------------
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\""

Кто-нибудь знает, почему это не работает?

1 Ответ

0 голосов
/ 22 марта 2020

До сих пор не уверен, почему он передает такой параметр, но в итоге я написал свой собственный обработчик протокола:

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, кажется, никогда не работает, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...