src/Carnac.Logic/IconUtilities.cs
(开头部分) 1KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace Carnac.Logic
{
internal static class IconUtilities
{
[DllImport("gdi32.dll", SetLastError = true)]
private static extern bool DeleteObject(IntPtr hObject);
private static readonly Dictionary<string, ImageSource> icons = new Dictionary<string, ImageSource>();
private static Icon GetProcessIcon(string processFileName)
{
Icon icon = Icon.ExtractAssociatedIcon(processFileName);
return icon;
}
private static ImageSource IconToImageSource(Icon icon)
{
Bitmap bitmap = icon.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();
ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
if (!DeleteObject(hBitmap))
{
throw new Win32Exception();
}
return wpfBitmap;
}
public static ImageSource GetProcessIconAsImageSource(string processFileName)
{
if (icons.ContainsKey(processFileName))
{
return icons[processFileName];
}
else
{
Icon icon = GetProcessIcon(processFileName);
ImageSource image = IconToImageSource(icon);
icons.Add(processFileName, image);
return image;
}
}
}
后面还有 1 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。