Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Извлечь основную иконку EXE-файла

Delphi , Графика и Игры , ICO

Извлечь основную иконку EXE-файла

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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". Вот разбивка шагов, которые выполняет код:

  1. Создается объект TIcon, который будет использоваться для хранения извлеченной иконки.
  2. Вызывается функция SHGetFileInfo с следующими параметрами:
    • PChar('Filename.exe'): Это указывает на путь и имя EXE-файла, из которого нужно извлечь иконку.
    • 0: Это параметр атрибутов, который установлен в 0 (значение "никаких конкретных атрибутов не запрашивается").
    • FileInfo: Это указатель на структуру SHFILEINFO, которая будет содержать извлеченную информацию о файле.
    • SizeOf(FileInfo): Это указывает на размер структуры FileInfo в байтах.
    • SHGFI_ICON: Это флаг, который запрашивает только иконку, связанную с файлом.
  3. Свойство Icon.Handle устанавливается в член hIcon структуры FileInfo, который содержит.handle извлеченной иконки.
  4. Вызывается функция DestroyIcon, чтобы освободить память, выделенную для оригинальной иконки (хранящейся в FileInfo.hIcon). Это необходимо потому, что функция SHGetFileInfo только возвращает копию handle иконки, а не саму иконку.
  5. Метод Icon.SaveToFile используется для сохранения извлеченной иконки в новом файле ICO с именем "IconFromExe.ico".
  6. Наконец, свойство 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ICO ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:15:45/0.0055468082427979/1