2010-01-12 33 views
2

Je l'ai fait avant, mais pour la vie de moi ne me souviens pas comment faire ...arguments Réception à partir du menu Windows Contexte

Dans mon menu contextuel de l'explorateur, j'ai ajouté une nouvelle entrée (aller à regedit. ..go à HKEY_CLASSES_ROOT ... bla bla bla) ... Maintenant, quand je clique sur mon option je veux passer dans le chemin du fichier, nom du fichier, ce genre de choses à mon application ... et ensuite l'utiliser là?

Répondre

0

Vous devez ouvrir une fenêtre à partir du menu contextuel et y transférer vos données pour les transmettre à votre application.

2

La valeur par défaut de la clé .ext \ shell \ open \ commande doit contenir le chemin d'accès à votre fichier .exe avec l'argument "% 1". Explorer remplace cela par le chemin complet du fichier. Que vous pouvez lire dans votre fichier .exe via l'argument de la méthode Main() ou Environment.GetCommandLineArgs().

0

Essayez ce Projets Liens: 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

ou celui-ci cette url: 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]); 
     } 
    } 
} 

}