支持显示图标

This commit is contained in:
zsyg
2025-07-09 11:35:08 +08:00
committed by GitHub
parent 6955655e64
commit 41b056c074

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using System.Drawing; using System.Drawing;
using System.Security; using System.Security;
using System.IO;
using AppStore.Tools.IconExtractor;
namespace AppStore namespace AppStore
{ {
@@ -40,12 +42,14 @@ namespace AppStore
dataGridView.BackgroundColor = SystemColors.Window; dataGridView.BackgroundColor = SystemColors.Window;
dataGridView.BorderStyle = BorderStyle.Fixed3D; dataGridView.BorderStyle = BorderStyle.Fixed3D;
// 添加列 // 添加图标
var iconColumn = new DataGridViewImageColumn(); var iconColumn = new DataGridViewImageColumn
iconColumn.HeaderText = "图标"; {
iconColumn.Name = "Icon"; HeaderText = "图标",
iconColumn.ImageLayout = DataGridViewImageCellLayout.Zoom; Name = "Icon",
iconColumn.FillWeight = 10; ImageLayout = DataGridViewImageCellLayout.Zoom,
FillWeight = 10
};
var nameColumn = new DataGridViewTextBoxColumn(); var nameColumn = new DataGridViewTextBoxColumn();
nameColumn.HeaderText = "名称"; nameColumn.HeaderText = "名称";
@@ -112,6 +116,8 @@ namespace AppStore
LoadStartupItems(); LoadStartupItems();
} }
private void LoadStartupItems() private void LoadStartupItems()
{ {
dataGridView.Rows.Clear(); dataGridView.Rows.Clear();
@@ -134,32 +140,55 @@ namespace AppStore
Image? iconImage = null; Image? iconImage = null;
try try
{ {
if (!string.IsNullOrEmpty(item.Value) && System.IO.File.Exists(item.Value)) Logger.Log($"正在处理自启动项: {item.Key} = {item.Value}");
if (!string.IsNullOrEmpty(item.Value))
{ {
using (Icon icon = Icon.ExtractAssociatedIcon(item.Value)) // 详细路径调试信息
Logger.Log($"正在检查文件路径: {item.Value}");
Logger.Log($"当前工作目录: {Environment.CurrentDirectory}");
Logger.Log($"完整路径: {Path.GetFullPath(item.Value)}");
// 清理路径,移除参数
string cleanPath = PathHelper.CleanExecutablePath(item.Value);
var fullPath = Path.GetFullPath(cleanPath);
if (System.IO.File.Exists(fullPath))
{ {
iconImage = icon?.ToBitmap() ?? SystemIcons.Application.ToBitmap(); Logger.Log($"文件存在,尝试提取图标: {fullPath}");
try
{
var icon = IconExtractor.ExtractIconFromFile(cleanPath);
// 转换为Bitmap并保持高DPI显示质量
iconImage = new Bitmap(icon.ToBitmap(),
new Size(32, 32));
Logger.Log($"成功提取并转换图标: {item.Value} ({icon.Width}x{icon.Height})");
}
catch (Exception ex)
{
Logger.LogError($"图标提取失败: {item.Value}", ex);
iconImage = SystemIcons.Application.ToBitmap();
} }
} }
else else
{ {
// 使用默认图标 Logger.LogWarning($"文件不存在: {item.Value}");
iconImage = SystemIcons.Application?.ToBitmap() ?? SystemIcons.WinLogo.ToBitmap(); iconImage = SystemIcons.Application.ToBitmap();
}
}
else
{
Logger.LogWarning("自启动项路径为空");
iconImage = SystemIcons.WinLogo.ToBitmap();
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogWarning($"无法加载程序图标: {item.Value}", ex); Logger.LogError($"加载程序图标失败: {item.Value}", ex);
// 确保在任何情况下都有有效的图标
iconImage = SystemIcons.Warning?.ToBitmap()
?? SystemIcons.Error?.ToBitmap()
?? SystemIcons.Application?.ToBitmap()
?? SystemIcons.WinLogo?.ToBitmap()
?? SystemIcons.Shield?.ToBitmap()
?? new Bitmap(16, 16);
if (iconImage == null)
{
iconImage = new Bitmap(16, 16); iconImage = new Bitmap(16, 16);
using (Graphics g = Graphics.FromImage(iconImage))
{
g.Clear(Color.Red);
} }
} }