В своем коде я бы хотел, чтобы мой пользователь мог выбрать значок в любом месте на своем компьютере. Значок может быть автономным .ico
или значком из .exe
или .dll
, как, например, не только отображаемый по умолчанию значок .exe/dll
, но также любой другой значок, содержащийся в нем.
В идеальном мире я бы хотел использовать диалоговое окно выбора значков Windows:
Но я не знаю, как его использовать - возможно ли это?
Этот диалог был бы идеален для меня, потому что, кажется, он позволяет пользователям просматривать либо значки, либо .exe
s и .dll
s в качестве стандарта.
Если бы мои пользователи могли использовать только автономные .ico
файлы, я бы выбрал класс CommonOpenFileDialog
, находящийся в пакете Microsoft.WindowsAPICodePack-Shell
nuget для Windows Visa + и System.Windows.Forms.FolderBrowserDialog
для старых систем - что-то как это:
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/dll
с, который также позволил бы выбирать автономные .ico
файлы для выбора?