如何使用OpenFileDialog读取所有数据快捷方式?

时间:2013-07-09 10:07:51

标签: c# wpf openfiledialog

我正在制作启动器以打开计算机上的所有应用程序。但我不知道如何读取打开文件的参数是一个快捷方式。我尝试过使用:

openFileDialog.DereferenceLinks = false; //and true

任何人都可以帮助我吗?我的代码在这里:

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog od = new OpenFileDialog();
    od.DereferenceLinks = false;
    od.Multiselect = false;
    od.SupportMultiDottedExtensions = true;

    if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        if (System.IO.Path.GetExtension(od.FileName).ToLower().Equals(".lnk"))
        {
            MessageBox.Show(//xxxxxxx how to sho the parameter?); for example output c:\\.....\hl.exe -a -b -c -d -e 29332
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我无法理解这里的问题。你说你已经发现了FileDialog.DereferenceLinks属性,它完全符合你的要求。

当它设置为true时,对话框将取消引用所有快捷方式,返回它们指向的项目的路径,而不是快捷方式文件本身的路径。只有当它设置为false时,才能从对话框中返回带有.lnk扩展名的文件。

因此,您刚刚添加到问题中的代码是错误的(或至少使您的事情变得比他们需要的更难)。看起来应该更像这样:

OpenFileDialog od = new OpenFileDialog();
od.DereferenceLinks = true;  // set this to true if you want the actual file
od.Multiselect = false;
od.SupportMultiDottedExtensions = true;

if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    // You will never get a path to a shortcut file (*.lnk) here.
    Debug.Assert(!String.Equals(System.IO.Path.GetExtension(od.FileName),
                                ".lnk",
                                StringComparison.OrdinalIgnoreCase));

    // ... do something with the file
}

否则,解除引用快捷方式文件需要相当多的努力。您可以使用IShellLink COM接口执行此操作,我不认为它是由.NET BCL的任何部分显式包装的。您需要编写代码才能自己使用它。 我无法想象在这种情况下你为什么需要。

如果您需要从快捷方式文件中读取参数,那么您就必须这样做。

  1. OpenFileDialog.DereferenceLinks属性设置为false,以便返回快捷方式文件。
  2. 您可能还希望将OpenFileDialog.Filter属性设置为Shortcut files (*.lnk)|*.lnk,以确保用户只能 在对话框中选择快捷方式文件。
  3. 用户选择快捷方式文件后,为该文件创建IShellLink对象。
  4. 如果成功,请使用GetPath方法获取包含快捷方式文件的路径和文件名的字符串,并使用GetArguments方法获取包含与之关联的命令行参数的字符串快捷方式文件。
  5. 最后,将参数字符串附加到路径字符串的末尾。
  6. 您可以编写包装器代码以使用.NET自己的IShellLink COM接口,search online来查找已经编写的(不保证其质量),或者添加一个引用ShellLinkObject类,该类专为脚本编写,但仍为usable from .NET