Utils/IconUtils.cs
(开头部分) 4KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
namespace XStart.Utils {
class IconUtils {
/// <summary>
/// 获取exe文件中的图标
/// </summary>
/// <param name="exePath"></param>
/// <returns></returns>
public static List<System.Drawing.Image> GetIconImage(string exePath) {
List<System.Drawing.Image> imageList = new List<System.Drawing.Image>();
//第一步:获取程序中的图标数
int iconCount = DllUtils.ExtractIconEx(exePath, -1, null, null, 0);
//第二步:创建存放大/小图标的空间
var largeIcons = new IntPtr[iconCount];
var smallIcons = new IntPtr[iconCount];
//第三步:抽取所有的大小图标保存到largeIcons和smallIcons中
DllUtils.ExtractIconEx(exePath, 0, largeIcons, smallIcons, iconCount);
//第四步:显示抽取的图标(推荐使用imageList和listview搭配显示)
for (int i = 0; i < iconCount; i++) {
IntPtr intPtr = largeIcons[i];
if (intPtr != IntPtr.Zero) {
var icon = Icon.FromHandle(largeIcons[i]);
imageList.Add(icon.ToBitmap());
icon.Dispose();
// 销毁图标
DllUtils.DestroyIcon(largeIcons[i]);
// 向控件发送关闭指令
DllUtils.SendMessage(largeIcons[i], WinApi.WM_CLOSE, 0, 0);
}
}
return imageList;
}
/// <summary>
/// 获取文件类型或目录的关联图标
/// </summary>
/// <param name="fileName">文件类型的扩展名或文件的绝对路径</param>
/// <param name="type">类型 file/dir</param>
/// <param name="isLargeIcon">是否返回大图标</param>
/// <returns>获取到的图标</returns>
public static Icon GetIcon(string fileName, bool isLargeIcon) {
DllUtils.SHFILEINFO shfi = new DllUtils.SHFILEINFO();
uint fileInfo;
if (isLargeIcon) {
if (File.Exists(fileName)) {
fileInfo = (uint)WinApi.FileInfoFlags.SHGFI_ICON | (uint)WinApi.FileInfoFlags.SHGFI_USEFILEATTRIBUTES | (uint)WinApi.FileInfoFlags.SHGFI_LARGEICON;
} else {
fileInfo = (uint)WinApi.FileInfoFlags.SHGFI_ICON | (uint)WinApi.FileInfoFlags.SHGFI_LARGEICON;
}
} else {
后面还有 31 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
