12

可能重复:
获取快捷方式文件夹的目标

比如在C:\TEMP\我有一个快捷方式叫做test.dll快捷方式会导致文件名test.dll

我想从快捷方式只获取它自己的文件的路径名。所以,我在另一个递归函数中调用这个函数,并且每次从我的硬盘的另一个目录中放入这个函数。

例如,第一个目录C:\TEMP就在C:\TEMP那里,我想只获取文件路径的快捷方式文件。在C:\TEMP测试中,我现在有 3 个文件:

hpwins23.dat
hpwmdl23.dat
hpwmdl23.dat - Shortcut( C:\TEMP\hpwmdl23.dat)

所以,我想得到的是快捷方式的路径名,在这种情况下是 C:\TEMP

我尝试使用此功能:

public 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);
            if (folder == null)
            {
            }
            else
            {
                FolderItem folderItem = folder.ParseName(filenameOnly);
                if (folderItem != null)
                {
                    Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
                    return link.Path;
                }
            }
            return string.Empty;
        }

但是当我使用该函数并进入快捷方式时,我在线上遇到异常错误:

Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink //The exception is: NotImplementedException: The method or operation is not implemented

我应该怎么做才能解决它?

这是完整的异常错误消息:

System.NotImplementedException被捕获
消息=方法或操作未实现。
来源= GatherLinks
StackTrace :
at Shell32.FolderItem.get_GetLink()
at GatherLinks.Form1.GetShortcutTargetFile(String shortcutFilename)in
D:\C-Sharp\GatherLinks\GatherLinks\GatherLinks\Form1.cs: line 904
atGatherLinks.Form1.offlinecrawling

4

1 回答 1

38

要获取快捷方式的目标(.lnk文件扩展名),您首先需要拥有以下COM对象:Windows Script Host Object Model

然后,您可以使用WshShell(或WshShellClass)和IWshShortcut接口来获取快捷方式的目标

例子

            string linkPathName = @"D:\Picrofo Autobot.lnk"; // Change this to the shortcut path

            if (System.IO.File.Exists(linkPathName))
            {
             // WshShellClass shell = new WshShellClass();
                WshShell shell = new WshShell(); //Create a new WshShell Interface
                IWshShortcut link = (IWshShortcut)shell.CreateShortcut(linkPathName); //Link the interface to our shortcut

                MessageBox.Show(link.TargetPath); //Show the target in a MessageBox using IWshShortcut
            } 

谢谢,
我希望你觉得这有帮助:)


您可以尝试以下步骤添加Windows Script Host Object Model到您的项目中

  • 解决方案资源管理器下,右键单击您的项目名称并选择添加引用
  • 从弹出窗口中选择选项卡COM
  • Component Name下,选择Windows Script Host Object Model
  • 点击确定
于 2012-10-26T01:40:32.777 回答