我正在制作启动器以打开计算机上的所有应用程序。但我不知道如何读取打开文件的参数是一个快捷方式。我尝试过使用:
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
}
}
}
答案 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的任何部分显式包装的。您需要编写代码才能自己使用它。 我无法想象在这种情况下你为什么需要。
如果您需要从快捷方式文件中读取参数,那么您就必须这样做。
OpenFileDialog.DereferenceLinks
属性设置为false
,以便返回快捷方式文件。OpenFileDialog.Filter
属性设置为Shortcut files (*.lnk)|*.lnk
,以确保用户只能 在对话框中选择快捷方式文件。IShellLink
对象。GetPath
方法获取包含快捷方式文件的路径和文件名的字符串,并使用GetArguments
方法获取包含与之关联的命令行参数的字符串快捷方式文件。您可以编写包装器代码以使用.NET自己的IShellLink
COM接口,search online来查找已经编写的(不保证其质量),或者添加一个引用ShellLinkObject
类,该类专为脚本编写,但仍为usable from .NET。