如何以编程方式测试路径/文件是否是快捷方式?

2023-11-24

我需要测试文件是否是快捷方式。我仍在尝试弄清楚如何设置内容,但我可能只有它的路径,我可能只有文件的实际内容(作为字节[]),或者我可能两者都有。

一些复杂的情况包括它可能位于 zip 文件中(在这种情况下,路径将是内部路径)


可以使用 SHELL32.DLL 中的 COM 对象来操作快捷方式。

在 Visual Studio 项目中,添加对 COM 库“Microsoft Shell Controls And Automation”的引用,然后使用以下命令:

/// <summary>
/// Returns whether the given path/file is a link
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static bool IsLink(string shortcutFilename)
{
    string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
    string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);

    Shell32.Shell shell = new Shell32.ShellClass();
    Shell32.Folder folder = shell.NameSpace(pathOnly);
    Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
    if (folderItem != null)
    {
        return folderItem.IsLink;
    }
    return false; // not found
}

您可以通过以下方式获取链接的实际目标:

    /// <summary>
    /// If path/file is a link returns the full pathname of the target,
    /// Else return the original pathnameo "" if the file/path can't be found
    /// </summary>
    /// <param name="shortcutFilename"></param>
    /// <returns></returns>
    public static string GetShortcutTarget(string shortcutFilename)
    {
        string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
        string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);

        Shell32.Shell shell = new Shell32.ShellClass();
        Shell32.Folder folder = shell.NameSpace(pathOnly);
        Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
        if (folderItem != null)
        {
            if (folderItem.IsLink)
            {
                Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
                return link.Path;
            }
            return shortcutFilename;
        }
        return "";  // not found
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式测试路径/文件是否是快捷方式? 的相关文章

随机推荐

  • 隐藏表格滚动条

    经过一些研究 我发现我必须设置表格的 tbody display block overflow auto 启用 html 表格上的滚动 是否有可能隐藏每个现代浏览器 Chrome Safari Firefox 上的通用滚动条 我尝试了一些解
  • python请求http响应500(可以在浏览器中访问站点)

    我试图找出我在这里做错了什么 但我总是迷失方向 在 python 2 7 中 我运行以下代码 gt gt gt import requests gt gt gt req requests request GET https www zoma
  • Wix(VS 安装程序)- 缺少编辑器工具栏

    我的电脑上安装了 Wix 3 10 扩展至 Visual Studio 2015 我创建了一个基于 Wix 的安装项目 可以运行 在安装项目中 通常会有一些图标 安装工具 文件系统 注册表 UI 服装操作 但它们目前缺失 您可以在任何 Wi
  • 如何从 Firefox 插件执行 Windows 命令?

    如何使用 Firefox 插件执行 Windows 命令并显示其输出 例如 ping www stackoverfow com 我只是想通过执行打包在一起的二进制文件 或 可执行文件或运行 Windows 命令来探索更多 Firefox 插
  • Delphi、MDI 与多文档界面的选​​项卡

    我正在开发一个多文档应用程序 目前它使用 MDI 这对我 作为开发人员 以及我相信的用户来说都非常方便 然而有一个 反对 我还没有找到解决办法quickly load many到目前为止 子窗口 每次创建窗口并最大化以填充父窗口区域时 都会
  • 安装 Angular CLI 时收到错误警告

    我是这个平台的新手 我安装了Node js但是当我尝试运行命令时npm install g angular cli我收到这个错误 npm WARN deprecated email protected Legacy versions of
  • git checkout 会更新所有文件吗?

    新问题 我想确保我理解这一点 When I git checkout
  • 夏令时和时区最佳实践[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我希望使这个问题及其答案成为处理夏令时的权威指南 特别是处理实际的转换 如果您有什么要补充的 请做 许多系统都依赖于保持准确的时间 问题在于夏令时导致的时间变化 将时钟向前或向后
  • SQL 更新会在更新运行期间影响其子查询吗?

    我只是编写一个复杂的更新查询 它看起来或多或少像这样 update table join select y min x as MinX from table group by y as t1 using y set x x MinX 这意味
  • 关于 ID 和 Class 的 CSS 最佳实践?

    我一直在阅读有关 CSS 的 SitePoint 书籍 这些示例让我印象深刻的是使用 ID 作为 CSS 选择器 我做过一些 CSS 设计 我总是发现使用 Class 作为选择器更容易 更通用 也许它是一个 Net 的东西 因为我们并不总是
  • asp.net 邮件添加 ReplyTo

    我如何添加与发件人不同的电子邮件ReplayTo场地 似乎MailMessage ReplyTo已被弃用 所以我正在尝试使用ReplyToList反而 但它告诉我 Property or indexer System Net Mail Ma
  • java.security.InvalidAlgorithmParameterException:Linux 上的 trustAnchors 参数必须非空,或者为什么默认信任库为空 [重复]

    这个问题在这里已经有答案了 当你用谷歌搜索这个异常时 java security InvalidAlgorithmParameterException the trustAnchors parameter must be non empty
  • 在 Chrome 中将 iframe 与本地文件结合使用

    我很难弄清楚如何从外部页面访问 iframe 中加载的页面 两个页面都是本地文件 我使用的是 Chrome 我有一个外页和许多内页 外部页面应始终显示内部页面的页面标题 这在我的应用程序中有意义 但在这个精简示例中可能不那么有意义 这在 A
  • JavaScript 中的 Object.prototype

    我有一些定义函数的 JavaScript 代码getElementsByAttribute如下 Object prototype getElementsByAttribute function attr var children this
  • PayPal IPN 示例:已完成、已撤消、Canceled_Reversed 和退款

    我在正在开发的网络应用程序上处理 PayPal IPN 消息时遇到了麻烦 我向 PayPal 商家技术支持询问了有关处理的信息Reversed Canceled Reversed and RefundedIPN 消息 下面的代码是我从他们的
  • 如何将一行扩展到多行结果集?

    我有一个表 我试图根据第二列值将每一行分解为一行或多行 像这样 table id pcs ABC 3 DEF 1 GHJ 4 query result id pcs num ABC 1 ABC 2 ABC 3 DEF 1 GHJ 1 GHJ
  • 在 UNIX /usr/bin/script 中继承别名

    UNIX usr bin script 命令将创建 shell 会话的运行脚本 有关详细信息 请参阅 man script 然而 当inside一个脚本实例 它似乎忘记了父 shell 的环境变量 别名等 以下示例演示了如何在 script
  • 如何使用 groovy 创建和配置新的 Jenkins 作业?

    有很多 Groovy 脚本的示例 http scriptlerweb appspot com catalog list 但是我没有发现创造新就业机会的例子 网上有一个很好的例子来说明如何做到这一点吗 Create 来自 SCM 的管道脚本
  • 带有模拟的 Angular 2 TestBed

    我正在尝试测试使用其他服务的组件 我想通过为服务提供模拟来隔离组件 在 RC5 之前我可以简单地使用addproviders现在已弃用 并将在下一个 RC 中删除 相反 我必须使用TestBed 当我出于某种原因提供模拟角度时 请继续寻找模
  • 如何以编程方式测试路径/文件是否是快捷方式?

    我需要测试文件是否是快捷方式 我仍在尝试弄清楚如何设置内容 但我可能只有它的路径 我可能只有文件的实际内容 作为字节 或者我可能两者都有 一些复杂的情况包括它可能位于 zip 文件中 在这种情况下 路径将是内部路径 可以使用 SHELL32