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 算力,解读结果公开显示在下面。

还没有人解读过这个文件。