我已在注册表的帮助下将我的应用程序添加到Windows的右键菜单中
“C://myapp.exe”%1“
我可以使用以下代码在MessageBox
中获取所选文件的路径。
static void Main(string[] args)
{
foreach (string path in args)
{
MessageBox.Show(path);
}
}
如果我想打开一个文件,这是可以的,但如果我选择多个文件,它会运行我的应用程序的多个实例。我只需要单个实例中所有选定文件的路径。谁能让我知道如何做到这一点?
答案 0 :(得分:1)
非编程解决方法,同时复制所有路径如下(在Windows 7上测试):
按预期复制所有路径!
答案 1 :(得分:1)
我尝试过,应用程序正在为每个选定的文件运行一个新实例。我甚至试图添加"%2" "%3"等注册表命令,也没用。
如果确实需要为所有文件运行单个实例,也许您可以使用从WindowsFormsApplicationBase派生的类来设置应用程序,设置IsSingleInstance属性并覆盖OnStartupNextInstance(没有链接到这导致我的声誉不允许超过2个链接)
答案 2 :(得分:0)
首先,我想告诉您关于您的方法的最重要的事情是,使用您使用注册表进行的右键快捷方式获取多个文件路径是绝对不可能的。但是有一些解决方法可以解决这个问题。可能有用的方法;
我刚才解释的方法涉及到很多代码,可以在启动过程中获取所有文件路径,但第二种方法很容易适合这种情况,但它有点困难,需要的东西比你的可执行文件更多。
我想这可以帮助您实现您的需求。如果还有什么,请告诉我。
答案 3 :(得分:0)
虽然它要复杂得多,但我知道Shell扩展处理程序可以解决这个问题 How to Write Windows Shell Extension with .NET Languages
我为Windows窗体应用程序编写了其中一个,当用户右键单击特定文件类型时,该应用程序会打开。它也适用于多个文件。
祝你好运!答案 4 :(得分:0)
您的应用程序很可能没有自己运行多个实例,因为您告诉foreach循环显示每个路径的消息框,因此您只需获取多个消息框。您需要操纵一个字符串以包含所有路径,然后将它们插入到消息框中以显示。
这
static void Main(string[] args)
{
foreach (string path in args)
{
MessageBox.Show(path);
}
}
要
static void Main(string[] args)
{
string paths = "";
foreach (string path in args)
{
paths += path + Environment.NewLine;
}
MessageBox.Show(path);
}