procedure TForm1.Button1Click(Sender: TObject);
var
Icon: TIcon;
FileInfo: SHFILEINFO;
begin
Icon := TIcon.Create;
try// Get the Icon
SHGetFileInfo(PChar('Filename.exe'), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
icon.Handle := FileInfo.hIcon;
DestroyIcon(FileInfo.hIcon);
// Save the Icon to a file:
icon.SaveToFile('IconFromExe.ico');
// Set the Icon as Application Icon (temporary)
Application.Icon := icon;
finally
Icon.Free;
end;
end;
Here is the translation of the text into Russian:
Программный код на Delphi, который извлекает основной иконку EXE-файла и сохраняет ее в новом файле ICO с именем "IconFromExe.ico". Вот разбивка шагов, которые выполняет код:
Создается объект TIcon, который будет использоваться для хранения извлеченной иконки.
Вызывается функция SHGetFileInfo с следующими параметрами:
PChar('Filename.exe'): Это указывает на путь и имя EXE-файла, из которого нужно извлечь иконку.
0: Это параметр атрибутов, который установлен в 0 (значение "никаких конкретных атрибутов не запрашивается").
FileInfo: Это указатель на структуру SHFILEINFO, которая будет содержать извлеченную информацию о файле.
SizeOf(FileInfo): Это указывает на размер структуры FileInfo в байтах.
SHGFI_ICON: Это флаг, который запрашивает только иконку, связанную с файлом.
Свойство Icon.Handle устанавливается в член hIcon структуры FileInfo, который содержит.handle извлеченной иконки.
Вызывается функция DestroyIcon, чтобы освободить память, выделенную для оригинальной иконки (хранящейся в FileInfo.hIcon). Это необходимо потому, что функция SHGetFileInfo только возвращает копию handle иконки, а не саму иконку.
Метод Icon.SaveToFile используется для сохранения извлеченной иконки в новом файле ICO с именем "IconFromExe.ico".
Наконец, свойство Application.Icon устанавливается в извлеченную иконку (временно). Это устанавливает иконку приложения Delphi.
Код также включает блок try-finally, чтобы обеспечить правильное освобождение объекта TIcon, если возникает исключение.
Альтернативным решением может быть использование функции ExtractIconEx из Windows API, которая позволяет извлекать иконки из файлов и ресурсов. Вот пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
IconHandle: HICON;
Info: TIconInfo;
begin
// Извлечь handle иконки для EXE-файла
IconHandle := ExtractIconEx(PChar('Filename.exe'), 0, nil, nil, 1);
// Создать новый объект TIcon и установить свойство Handle
Icon := TIcon.Create;
try
Icon.Handle := IconHandle;
// Сохранить иконку в файл:
Icon.SaveToFile('IconFromExe.ico');
finally
Icon.Free;
end;
// Установить иконку как иконку приложения (временно)
Application.Icon := Icon;
end;
Обратите внимание, что ExtractIconEx возвращает массив handle-ов иконок, но в этом случае мы интересуемся только первой иконкой (индекс 0), поэтому мы передаем nil для других параметров.
В статье описывается процедура, позволяющая извлечь основную иконку из EXE-файла с помощью динамически связываемого компонента TIcon в Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.