2010-01-12 101 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]); 
     } 
    } 
} 

}