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