Получение аргументов из контекстного меню Windows

Я делал это раньше, но для жизни я не могу вспомнить, как это сделать...

В моем контекстном меню проводника я добавил новую запись (перейдите в regedit... перейдите в HKEY_CLASSES_ROOT... бла-бла-бла)... Теперь, когда я нажимаю на свой вариант, я хочу передать путь к файлу, имя файла, те что-то вроде моего приложения... а затем использовать его там?


person Jean    schedule 12.01.2010    source источник


Ответы (3)


Значение по умолчанию ключа .ext\shell\open\command должно содержать путь к вашему .exe с аргументом "%1". Проводник заменяет его полным путем к файлу. Который вы можете прочитать в своем .exe через аргумент метода Main() или Environment.GetCommandLineArgs().

person Hans Passant    schedule 12.01.2010
comment
что делать, если приложение уже запущено, и вы хотите добавить некоторые выбранные файлы в существующий список? - person mattshu; 09.10.2018

Попробуйте ссылки на эти проекты: the-click-of-context-menu-item-and-pass-the-same-as-a-parameter-to-the?forum=csharpgeneral" rel="nofollow noreferrer">Как получить значение по щелчку Пункт контекстного меню и передать его в качестве параметра исполняемому файлу , Расширения оболочки .NET — контекстные меню оболочки

или этот этот URL: codeproject.com/Articles/3111/C-NET-Command-Line-Arguments-Parser


пример кода:

    // Variables
    private StringDictionary Parameters;

    // Constructor
    public Arguments(string[] Args)
    {
        Parameters = new StringDictionary();
        Regex Spliter = new Regex(@"^-{1,2}|^/|=|:",
            RegexOptions.IgnoreCase|RegexOptions.Compiled);

        Regex Remover = new Regex(@"^['""]?(.*?)['""]?$",
            RegexOptions.IgnoreCase|RegexOptions.Compiled);

        string Parameter = null;
        string[] Parts;

        // Valid parameters forms:
        // {-,/,--}param{ ,=,:}((",')value(",'))
        // Examples: 
        // -param1 value1 --param2 /param3:"Test-:-work" 
        //   /param4=happy -param5 '--=nice=--'
        foreach(string Txt in Args)
        {
            // Look for new parameters (-,/ or --) and a
            // possible enclosed value (=,:)
            Parts = Spliter.Split(Txt,3);

            switch(Parts.Length){
            // Found a value (for the last parameter 
            // found (space separator))
            case 1:
                if(Parameter != null)
                {
                    if(!Parameters.ContainsKey(Parameter)) 
                    {
                        Parts[0] = 
                            Remover.Replace(Parts[0], "$1");

                        Parameters.Add(Parameter, Parts[0]);
                    }
                    Parameter=null;
                }
                // else Error: no parameter waiting for a value (skipped)
                break;

            // Found just a parameter
            case 2:
                // The last parameter is still waiting. 
                // With no value, set it to true.
                if(Parameter!=null)
                {
                    if(!Parameters.ContainsKey(Parameter)) 
                        Parameters.Add(Parameter, "true");
                }
                Parameter=Parts[1];
                break;

            // Parameter with enclosed value
            case 3:
                // The last parameter is still waiting. 
                // With no value, set it to true.
                if(Parameter != null)
                {
                    if(!Parameters.ContainsKey(Parameter)) 
                        Parameters.Add(Parameter, "true");
                }

                Parameter = Parts[1];

                // Remove possible enclosing characters (",')
                if(!Parameters.ContainsKey(Parameter))
                {
                    Parts[2] = Remover.Replace(Parts[2], "$1");
                    Parameters.Add(Parameter, Parts[2]);
                }

                Parameter=null;
                break;
            }
        }
        // In case a parameter is still waiting
        if(Parameter != null)
        {
            if(!Parameters.ContainsKey(Parameter)) 
                Parameters.Add(Parameter, "true");
        }
    }

    // Retrieve a parameter value if it exists 
    // (overriding C# indexer property)
    public string this [string Param]
    {
        get
        {
            return(Parameters[Param]);
        }
    }
}

}

person Elikar Kanane Mugangane    schedule 11.05.2017

Вы должны открыть окно из контекстного меню и получить там свои данные для передачи в ваше приложение.

person Tony The Lion    schedule 12.01.2010