【发布时间】:2019-05-05 18:23:49
【问题描述】:
在我的代码中,我希望我的用户能够从他们计算机上的任何位置选择一个图标。该图标可以是独立的.ico,也可以是.exe 或.dll 中的图标——例如,不仅是.exe/dll 的默认显示图标,还包括其中包含的任何其他图标。
在理想情况下,我希望能够使用这个原生 Windows 图标选择器对话框:
但我不知道如何使用它 - 可以吗?
这个对话框对我来说是理想的,因为它似乎只允许用户浏览图标或.exes 和.dlls 作为标准。
如果我的用户只能使用独立的 .ico 文件,那么我将采取在 Windows Visa+ 的 Microsoft.WindowsAPICodePack-Shell nuget 包和旧系统的 System.Windows.Forms.FolderBrowserDialog 中找到的 CommonOpenFileDialog 类的路线 - 某事像这样:
private string SelectWinXPIcon()
{
using (WinForms.OpenFileDialog ofd = new WinForms.OpenFileDialog()
{
Filter = "Icon files (*.ico)|*.ico",
})
{
WinForms.DialogResult result = ofd.ShowDialog();
switch (result)
{
case WinForms.DialogResult.OK:
case WinForms.DialogResult.Yes:
return ofd.FileName;
default:
return null;
}
}
}
private string SelectWinVistaIcon()
{
using (CommonOpenFileDialog dialog = new CommonOpenFileDialog
{
DefaultDirectory = @"C:\",
AllowNonFileSystemItems = false,
EnsurePathExists = true,
Multiselect = false,
NavigateToShortcut = true
})
{
dialog.Filters.Add(new CommonFileDialogFilter("Icon Files (*.ico)", ".ico"));
CommonFileDialogResult result = dialog.ShowDialog();
switch (result)
{
case CommonFileDialogResult.Ok:
return dialog.FileName;
default:
return null;
}
}
}
但据我所知,这条路线不允许我的用户从.exe/dll 中选择图标?
如果无法使用图标选择器对话框,是否有另一种方法可以从.exe/dlls 中提取图标,这也允许选择独立的.ico 文件?
【问题讨论】: