Windows快捷方式使用“分布式链接跟踪”服务获取在单击链接时已移动或重命名的快捷方式目标的当前位置。有没有办法以编程方式获取此位置(在C#中)?
答案 0 :(得分:1)
是。您可以使用this blog article by Jani Järvinen中的代码:
class Program
{
[STAThread]
static void Main(string[] args)
{
const string shortcut = @"C:\test.lnk"; // Shortcut file name here
string pathOnly = System.IO.Path.GetDirectoryName(shortcut);
string filenameOnly = System.IO.Path.GetFileName(shortcut);
Shell32.Shell shell = new Shell32.Shell();
Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
Console.WriteLine(link.Path);
}
Console.ReadKey();
}
}
答案 1 :(得分:0)
Devil_coder / Cody Gray提供的代码的一小部分可以满足我的需求。添加link.Resolve,如下所示,使用https://msdn.microsoft.com/en-us/library/windows/desktop/bb773996(v=vs.85).aspx中定义的标志 使link.Path返回当前链接目标。
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
link.Resolve(5);
Console.WriteLine(link.Path);