2010-01-12 64 views
2

接收参数我以前,但对我的生活不记得如何做到这一点做到了这一点......从Windows右键菜单

在我的右键菜单我添加了一个新条目(进入注册表编辑器。 ..go to HKEY_CLASSES_ROOT ... bla bla bla)...现在,当我点击我的选项时,我想将文件路径,文件名,这些东西传递给我的应用程序...然后在那里使用它?

回答

0

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

2

.ext \ shell \ open \ command键的默认值应该包含带有“%1”参数的.exe的路径。 Explorer将其替换为文件的完整路径。您可以通过Main()方法参数或Environment.GetCommandLineArgs()在.exe中读取它。

0

试试这个项目链接: 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

或这一个这个网址: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]); 
     } 
    } 
} 

}