C#通过上下文菜单传递参数

时间:2011-11-08 22:29:24

标签: c# menu arguments

所以我创建了一个在PC上创建注册表项的程序,它添加了一个将文件推送到设备的选项。 (程序本身会将文件推送到您的Android SD卡。)

一旦我弄清楚这个问题,一切都运作良好,或者至少应该运作良好。当我右键单击一个项目并选择我的命令(用我的程序打开)时,我的程序就会打开,但是没有参数传递。

一个月前,我设计了一个程序,当用户双击(只需双击,而不是右键单击上下文菜单)文件时打开该程序,它打开了特定的程序,从那里我就能抓住参数。

为什么我不能从上下文菜单中找到?

谢谢,抱歉冗长的帖子。

这是我的代码的一部分:

private void Form1_Load(object sender, EventArgs e)
    {
        string c = textBox3.Text;

          string[] args = System.Environment.GetCommandLineArgs();

          try
          {

              string location = args[1];
              MessageBox.Show(location);
              //For testing purposes only

              Properties.Settings.Default.thinglocation = location;
              Properties.Settings.Default.Save();
              Process();
          }

          catch
          {

          }

这是注册表代码。 BTw字符串c是“C:\ File push.exe”我程序的位置。

 string MenuName = "*\\shell\\NewMenuOption";
                string Command = "*\\shell\\NewMenuOption\\command";

                RegistryKey regmenu = null;
                RegistryKey regcmd = null;
                try
                {
                    regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
                    if (regmenu != null)
                        regmenu.SetValue("", "Push to Android");
                    regcmd = Registry.ClassesRoot.CreateSubKey(Command);
                    if (regcmd != null)
                        regcmd.SetValue("", c +"%1");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.ToString());
                }
                finally
                {
                    if (regmenu != null)
                        regmenu.Close();
                    if (regcmd != null)
                        regcmd.Close();

2 个答案:

答案 0 :(得分:3)

我假设您已创建了一个注册表项,该项创建了用于启动程序的上下文菜单项。可能性是您需要在要启动的exe名称后面添加'%1'。在上下文菜单中,注册表项%1表示所选文件,因此添加此文件应启动程序并将所选文件的名称作为单个参数。

之前双击工作的原因是windows会启动双击文件的默认程序,双击文件作为参数。

答案 1 :(得分:0)

您是否尝试查找发件人或EventArgs参数?我认为他们可能会在那里。这只是一个猜测。如果它只是双击那么为什么会有任何参数?也许我只是误解了这一点。无论如何,也许这有帮助。如果不是,也许你可以澄清一下参数应该来自哪里。

Erik