我正在尝试从.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);
以及旗帜的其他一些配置。
提前感谢您的帮助。
答案 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);