简体   繁体   English

从Windows上下文菜单接收参数

[英]Receiving arguments from Windows Context menu

I have done this before but for the life of me can't remember how to do this... 我以前做过这件事但是因为我的生活不记得怎么做了......

In my explorer context menu I added a new entry (go to regedit...go to HKEY_CLASSES_ROOT...bla bla bla)... Now when I click on my option I want to pass in the file path, file name, those kind of things to my application...and then use it there? 在我的资源管理器上下文菜单中,我添加了一个新条目(转到regedit ...转到HKEY_CLASSES_ROOT ... bla bla bla)...现在,当我点击我的选项时,我想传入文件路径,文件名,那些我的应用程序的东西......然后在那里使用它?

The default value of the .ext\\shell\\open\\command key should contain the path to your .exe with the "%1" argument. .ext \\ shell \\ open \\ command键的默认值应包含带有“%1”参数的.exe的路径。 Explorer substitutes that with the full path to the file. 资源管理器将其替换为文件的完整路径。 Which you can read in your .exe through the Main() method argument or Environment.GetCommandLineArgs(). 您可以通过Main()方法参数或Environment.GetCommandLineArgs()在.exe中读取。

您应该从上下文菜单中打开一个窗口,然后将数据传递到您的应用程序。

Try this projects links: How to fetch the value on the click of Context Menu Item and pass the same as a parameter to the executable , .NET Shell Extensions - Shell Context Menus 试试这个项目链接: 如何在单击Context Menu Item时获取值并将其作为参数传递给可执行文件 .NET Shell Extensions - Shell Context Menus

or this one this url: codeproject.com/Articles/3111/C-NET-Command-Line-Arguments-Parser 或者这个这个网址:codeproject.com/Articles/3111/C-NET-Command-Line-Arguments-Parser


code exemple: 代码示例:

    // 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]);
        }
    }
}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM