有没有办法在C#中以编程方式查找快捷方式目标的当前位置?

时间:2017-05-15 12:52:56

标签: c# windows shortcuts

Windows快捷方式使用“分布式链接跟踪”服务获取在单击链接时已移动或重命名的快捷方式目标的当前位置。有没有办法以编程方式获取此位置(在C#中)?

2 个答案:

答案 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);