Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中是否有方法通过编程找到快捷目标的当前位置?_C#_Windows_Shortcuts - Fatal编程技术网

在C#中是否有方法通过编程找到快捷目标的当前位置?

在C#中是否有方法通过编程找到快捷目标的当前位置?,c#,windows,shortcuts,C#,Windows,Shortcuts,Windows快捷方式使用分布式链接跟踪服务获取快捷方式目标的当前位置,该目标在单击链接时已移动或重命名。是否有任何方法可以通过编程方式(在C#)获取此位置?是。您可以从以下位置使用代码: 对。您可以从以下位置使用代码: 对Devil_coder/Cody Gray提供的代码进行一个小的添加就可以满足我的需要。添加link.Resolve,如下所示,带有中定义的标志 使link.Path返回当前链接目标 Shell32.ShellLinkObject link=(Shell32.ShellLin

Windows快捷方式使用分布式链接跟踪服务获取快捷方式目标的当前位置,该目标在单击链接时已移动或重命名。是否有任何方法可以通过编程方式(在C#)获取此位置?

是。您可以从以下位置使用代码:


对。您可以从以下位置使用代码:


对Devil_coder/Cody Gray提供的代码进行一个小的添加就可以满足我的需要。添加link.Resolve,如下所示,带有中定义的标志 使link.Path返回当前链接目标

Shell32.ShellLinkObject link=(Shell32.ShellLinkObject)folderItem.GetLink;
链接。解决(5);

Console.WriteLine(link.Path)

对Devil_coder/Cody Gray提供的代码进行了一个小的添加,就可以满足我的需要。添加link.Resolve,如下所示,带有中定义的标志 使link.Path返回当前链接目标

Shell32.ShellLinkObject link=(Shell32.ShellLinkObject)folderItem.GetLink;
链接。解决(5);

Console.WriteLine(link.Path)

您的意思是获取启动EXE的位置吗?当您说“在C#”时,是否意味着p/Invoke不可接受?该位置是快捷方式目标的位置-不涉及.EXE。我相信.lnk文件存储了一个唯一的文件标识符,该标识符随后用作链接跟踪服务的参数,如果目标位置发生了更改,链接跟踪服务将更新目标位置,我认为该位置也存储在.lnk文件中。我很乐意使用任何方法获取位置,包括P/Invoke(如果需要的话)。你是说获取启动EXE的位置吗?当你说“在C#”时,这是否意味着P/Invoke不可接受?该位置是快捷方式目标的位置-不涉及.EXE。我相信.lnk文件存储了一个唯一的文件标识符,该标识符随后用作链接跟踪服务的参数,如果目标位置发生了更改,链接跟踪服务将更新目标位置,我认为该位置也存储在.lnk文件中。我很乐意使用任何方法来获取位置,包括P/Invoke(如果需要的话)。很遗憾,这段非常优雅的代码只获取.lnk文件中当前存储的链接目标。如果目标被移动或重命名,返回的路径不会改变。不幸的是,这段非常优雅的代码只获取.lnk文件中当前存储的链接目标。如果移动或重命名目标,则返回的路径不会更改。使用标志值(5=4(更新路径)+1(不显示对话框),选择不删除不存在目标的路径。使用标志值4,将显示说明快捷方式目标已被移动或删除的对话框,并询问是否应删除快捷方式。此对话框不正确,因为将处理移动的目标。使用标志值(5=4(更新路径)+1(不显示对话框),选择不删除不存在目标的路径。使用标志值4,将显示说明快捷方式目标已移动或已删除的对话框,并询问是否应删除快捷方式。此对话框不正确,因为将处理移动的目标。
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();

    }
}