如何获取快捷文件夹的目录目标?我到处搜索,只能找到快捷方式文件的目标。获取快捷文件夹的目标
回答
我想你会需要使用COM,并添加到“微软壳牌控制和自动化”的引用,如this blog post描述:
下面是使用提供的代码有一个例子:
namespace Shortcut
{
using System;
using System.Diagnostics;
using System.IO;
using Shell32;
class Program
{
public static string GetShortcutTargetFile(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell shell = new Shell();
Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return string.Empty;
}
static void Main(string[] args)
{
const string path = @"C:\link to foobar.lnk";
Console.WriteLine(GetShortcutTargetFile(path));
}
}
}
谢谢!现在我只需要找出如何寻找一个shortcuf文件夹programmaticaly :) – 2012-02-24 12:11:04
我工作在Windows 7 64位,并且它找不到安装在'C:\ Program Files \ Oracle \ VirtualBoxOSX'上的VirtualBox快捷方式。它一直将目标返回到'C:\ Program Files文件(x86)\ Oracle \ VirtualBoxOSX \ VirtualBox.exe'。对此行为的任何解释? – swdev 2014-03-11 01:08:44
在此方法中使用Shell32只允许在单线程应用程序中使用。你必须在主入口点包含[STAThread]。使用此代码您将在单元测试中遇到异常,因为单元测试不允许STAThread。请参阅[答案](http://stackoverflow.com/questions/14543340/calling-shell32-dll-from-net-windows-service)。也有解决方案在单元测试中运行此代码,请参阅http://haacked.com/archive/2014/11/20/xunit-and-sta/ – yancyn 2016-08-19 05:50:44
所有文件快捷方式都有一个.lnk文件扩展名,您可以检查。例如,使用字符串,你可以使用string.EndsWith(“。lnk”)作为过滤器。
所有URL快捷方式都有.url文件扩展名,因此如果需要,您还需要考虑这些扩展名。
OP询问如何获取目标目录的快捷方式,而不是如何检查它是否是一条捷径。 – 2017-01-25 02:47:33
如果你不想使用依赖关系,你可以使用https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/ 但是lnk格式没有记录,所以只有在你理解了风险的情况下才可以。
,如果你想找到一个具有快捷方式在桌面上,我用一个简单的方法你的应用程序的路径,如下所示:
Process.GetCurrentProcess().MainModule.FileName.Substring(0, Process.GetCurrentProcess().MainModule.FileName.LastIndexOf("\\")
此代码返回运行,不管是谁要求文件的任何exe文件路径
一个更简单的方式来获得,我用的是链接路径:
private static string LnkToFile(string fileLink)
{
string link = File.ReadAllText(fileLink);
int i1 = link.IndexOf("DATA\0");
if (i1 < 0)
return null;
i1 += 5;
int i2 = link.IndexOf("\0", i1);
if (i2 < 0)
return link.Substring(i1);
else
return link.Substring(i1, i2 - i1);
}
但它当然会破的,如果LNK文件格式的变化。
在它需要这样做,首先添加COM参考Windows 10“微软壳牌控制和自动化”
// new way for windows 10
string targetname;
string pathOnly = System.IO.Path.GetDirectoryName(LnkFileName);
string filenameOnly = System.IO.Path.GetFileName(LnkFileName);
Shell shell = new Shell();
Shell32.Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null) {
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
targetname = link.Target.Path; // <-- main difference
if (targetname.StartsWith("{")) { // it is prefixed with {54A35DE2-guid-for-program-files-x86-QZ32BP4}
int endguid = targetname.IndexOf("}");
if (endguid > 0) {
targetname = "C:\\program files (x86)" + targetname.Substring(endguid + 1);
}
}
- 1. 启动文件夹的快捷方式
- 2. 如何从系统快捷方式获取快捷shell图标?
- 3. Powershell取代快捷方式目标
- 4. TortoiseSVN文件夹 - 快捷方式
- 5. 快捷文件夹作为目录在PHP
- 6. VIM NERDTree快捷方式打开标准Rails文件夹
- 7. 在codeigniter中的文件上传快捷方式文件夹
- 8. flex:创建另一个文件/文件夹的快捷方式
- 9. 我如何获得目标文件在我的硬盘上的快捷方式?
- 10. extensionscript:获取项目的文件夹
- 11. 获取的当前项目文件夹
- 12. 通过快捷方式文件夹从基础文件夹加载文件?
- 13. 获取目录中的所有文件夹和子文件夹
- 14. 部署项目:文件系统:添加快捷方式到文件夹
- 15. 在快速启动文件夹中创建快捷方式
- 16. 快速获取文件夹的文件数
- 17. 如何使用快捷方式获取更新的jnlp文件?
- 18. 获取从JSON文件中的数据,快捷
- 19. 找不到快捷方式的目标
- 20. 适应目标的快捷方式
- 21. 如何获取UserName/My Pictures文件夹的目标路径?
- 22. xamarin.android中的Xam.Plugin.Media事先获取目标文件夹
- 23. 如何在Windows RT metro应用程序中读取快捷方式文件(并获取其目标)?
- 24. 在远程桌面上创建快捷方式,但快捷方式是用“文件”而不是“文件夹”作为“目标类型”创建的
- 25. 从目标文件获取源文件
- 26. 德尔福 - 获取文件夹图标
- 27. 获取文件夹图标路径
- 28. 获取文件夹
- 29. 获取文件夹
- 30. 获取文档目录的文件夹中的文件在iPhone
这并不涉及到所有的WPF,我删除了标签 – 2012-02-23 13:41:12
这是解决方案我更喜欢:[如何从文件快捷方式获取路径名?](http://stackoverflow.com/a/13079688/3757210) – ilcorvo 2017-02-23 13:20:55