没有lnk重叠箭头的lnk文件的SHGetFileInfo

时间:2017-04-21 15:01:08

标签: c# winapi icons lnk

我正在尝试从.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);

以及旗帜的其他一些配置。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决方案如下:

[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);