没有lnk覆盖箭头的lnk文件的SHGetFileInfo

SHGetFileInfo for lnk file without lnk overlay arrow

我正在尝试从 .lnk 文件中获取图标,而不显示 .lnk 覆盖。 documentation 有关于标志 SHGFI_ADDOVERLAYS 的信息,可以将其设置为添加覆盖,但我希望删除覆盖。

我已阅读 this question 以及其中的链接,但我仍然无法在 c# 中使用它。

这是我试过的代码:

SHFILEINFO shFileInfo = new SHFILEINFO();

SHGetFileInfo(
    pathToLnk,
    0,
    ref shFileInfo,
    (uint)Marshal.SizeOf(shFileInfo),
    SHGFI_ICON & ~SHGFI_LINKOVERLAY);

还有flags的一些其他配置。

在此先感谢您的帮助。

解决方法如下:

[DllImport("Comctl32.dll")]
public static extern IntPtr ImageList_GetIcon(IntPtr himl, int i, uint flags);


SHFILEINFO fileInfo = new SHFILEINFO();
        IntPtr list = SHGetFileInfo(
            pathToLnk,
            FileAttributes,
            ref fileInfo,
            (uint)Marshal.SizeOf(fileInfo),
            SHGFI_SYSICONINDEX);
        var iconHandle = ImageList_GetIcon(list, fileInfo.iIcon.ToInt32(), FileFlags);
        Icon icn = Icon.FromHandle(iconHandle);