Как извлечь иконку из EXE-файла, не распаковывая его
Найти в интернете оригинальную иконку приложения обычно не составляет труда, но есть и исключения. Предположим, что вы работаете над каким-то проектом и вам понадобилось высококачественное ICO -изображение ярлыка приложения, которого, как назло, в сети не нашлось. Исполняемый файл программы — это, по сути, архив, который можно распаковать утилитой-экстрактором, но есть менее затратный и одновременно более удобный способ.
Скачайте и установите утилиту IconViewer. Это небольшое приложение не имеет собственного основного окна, но и консольным оно также не является. Вместо этого IconViewer интегрируется в окно свойств исполняемых exe -файлов, добавляя дополнительную вкладку «Icons»,
содержащую все необходимые опции для просмотра и извлечения иконок, а именно:
- Список доступных размеров иконки с возможностью предпросмотра.
- Копирование файла иконки в буфер обмена.
- Скачивание файла иконки на жесткий диск.
Форматов сохранения предлагается три — ICO , PNG и BMP , то есть утилита может работать еще и как конвертер.
Рассчитывать на получение очень больших иконок не стоит, как правило, разработчики ограничиваются максимальным размером 256х256 px, а может оказаться и так, что в файле будет только одна иконка маленького размера, и тут уже ничего не поделать.
Как вытащить иконку из exe файла
выдернуть иконки из ЕХЕ файла
$ sudo aptitude install icoutils # Если делали отображене иконок по приведённому мануалу — уже установлено
$ man wrestool # Извлекает не только иконки, но и другие ресурсы из Win — бинарников
Простой пример «извлечения» иконки
$ wrestool -x -t14 -o /куда/класть/иконку /файл/с/иконкой.exe # 14 — ID типа иконок
Конвертировать иконку в png можно с помощью icotool из того же пакета
$ icotool -x -o /куда/класть/png /файл/с/иконкой.ico
- убрать заголовок окна
- Настройка notify-osd
- Pidgin + X-Status
- Ускорение загрузки системы
- проблема с мышью wine
- полноценное представление об аппаратной части компьютера
- выдернуть иконки из ЕХЕ файла
- Сохранение просмотренного он-лайн видео
- Создаем свой дистрибутив на базе Ubuntu
- Весь LinuxFormat одним ударом
- Наиболее часто используемые команды в Linux
- Очень полезные команды Linux
- создание собственного репозитария на основе кеша apt
- Добавление ключа
- Руководство по работе с wget
- способы сборки пакетов
- Скрипты
- Убираем меню и строку состояния Virtual Box
- После просыпания не спрашивать пароль
- Remastersys команды
- восстановление флешки, форматирование флешки
- установить короткий пароль
- полное удаление панели Gnome Ubuntu 11.04
- чтобы убрать всю тень в compiz
- Вот это вылечит все виндовые крякозябры кодировки
- Быстрая переустановка программ в Ubuntu
- Просмотр ТВ каналов Ростелекома на Ubuntu
- эскизы видео файлов
- Добавить запуск стороннего приложения в Dash
- Как временно изменить текст заголовка произвольного окна
- долгая загрузка kde
- dpkg не работает
- пересобрать deb-пакет
- Ускорение запуска всех приложений KDE
- Устанавливаем VirtualBox 4.1
- Включение ускорения в VLC
- Как отключить всплывающие уведомления о системных ошибках в Ubuntu 12.04
- Настройка ВКонтакте и Одноклассников в Pidgin
- Отправка по ctrl + enter в pidgin
- соединить два видеофайла в терминале
- Редактирование локализации
- скринкаст
- как создать ISO
- hdmi
- Поиск файлов
- Как настроить в Linux воспроизведение через интерфейс HDMI
- samba
- Linux воспроизведение через интерфейс HDMI
- как DVD рипнуть Avidemux в AVI
- Как сделать загрузочную флешку
- Форматирование флешки
- очистка
- ArtMoney для Ubuntu или просто — взлом игр в Linux
- pol
- x сервер переключение раскладки
- pidgin
- Flash Player в opera
Как вытащить иконку из exe файла
function ExtractIconExA(lpszFile: PAnsiChar ;
nIconIndex: Integer ;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall ;
external ‘shell32.dll’ name ‘ExtractIconExA’ ;
function ExtractIconExW(lpszFile: PWideChar ;
nIconIndex: Integer ;
phiconLarge: PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall ;
external ‘shell32.dll’ name ‘ExtractIconExW’ ;
function ExtractIconEx(lpszFile: PAnsiChar ;
nIconIndex: Integer ;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall ;
external ‘shell32.dll’ name ‘ExtractIconExA’ ;
procedure TForm1.Button1Click(Sender: TObject );
var
NumIcons : integer ;
pTheLargeIcons : phIconArray;
pTheSmallIcons : phIconArray;
LargeIconWidth : integer ;
SmallIconWidth : integer ;
SmallIconHeight : integer ;
i : integer ;
TheIcon : TIcon;
TheBitmap : TBitmap;
begin
NumIcons :=
ExtractIconEx( ‘C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe’ ,
— 1 ,
nil ,
nil ,
0 );
if NumIcons > 0 then begin
LargeIconWidth := GetSystemMetrics( SM_CXICON );
SmallIconWidth := GetSystemMetrics( SM_CXSMICON );
SmallIconHeight := GetSystemMetrics( SM_CYSMICON );
GetMem (pTheLargeIcons, NumIcons * sizeof (hIcon));
GetMem (pTheSmallIcons, NumIcons * sizeof (hIcon));
FillChar (pTheLargeIcons^, NumIcons * sizeof (hIcon), #0 );
FillChar (pTheSmallIcons^, NumIcons * sizeof (hIcon), #0 );
ExtractIconEx( ‘C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe’ ,
0 ,
pTheLargeIcons,
pTheSmallIcons,
numIcons);
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
for i := 0 to (NumIcons — 1 ) do begin
DrawIcon(Form1.Canvas.Handle,
i * LargeIconWidth,
0 ,
pTheLargeIcons^[i]);
TheIcon := TIcon. Create;
TheBitmap := TBitmap.Create;
TheIcon.Handle := pTheSmallIcons^[i];
TheBitmap.Width := TheIcon.Width;
TheBitmap.Height := TheIcon.Height;
TheBitmap.Canvas.Draw( 0 , 0 , TheIcon);
TheIcon.Free;
Form1.Canvas.StretchDraw( Rect (i * SmallIconWidth,
100 ,
(i + 1 ) * SmallIconWidth,
100 + SmallIconHeight),
TheBitmap);
TheBitmap.Free;
end ;
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
FreeMem (pTheLargeIcons, NumIcons * sizeof (hIcon));
FreeMem (pTheSmallIcons, NumIcons * sizeof (hIcon));
end ;
end ;
DestroyIcon(FileInfo.hIcon);
// Save the Icon to a file:
icon.SaveToFile( ‘IconFromExe.ico’ );
// Set the Icon as Application Icon (temporary)
Application.Icon := icon;
Процесс получения иконок из .EXE, .DLL или .ICO файлов полностью идентичен. Различие только в том, что в .ICO файле может храниться только одна иконка, а в .EXE и .DLL несколько. Для получения иконок из файлов, в модуле ShellAPI, есть функция:
delphi |
function ExtractIcon(Inst: THandle ; FileName: PChar ; IconIndex: Word ): HIcon; |
Inst
указатель на приложение вызвавшее функцию,
FileName
имя файла из которого необходимо получить иконку,
IconIndex
номер необходимой иконки.
Если функция возвращает значение не равное нулю, то в файле есть следующая иконка.
В данном примере в компонент Image1 выводится иконка запущенного файла.
delphi |
uses ShellAPI; . procedure TForm1.FormCreate(Sender: TObject ); var A: array [ 0 .. 78 ] of Char ; begin StrPCopy (A, ParamStr ( 0 )); Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0 ); |
Если вы хотите создать некий браузер по иконкам, то можете воспользоваться компонентами с закладки Win3.1. Вынесите на форму компонент TFileListBox; затем TDirectoryListBox, в свойстве FileList укажите на список файлов [TFileListBox]; после этого возьмите компонент класса TDriveComboBox, указав в его свойстве DirList на список каталогов [TDirectoryListBox], ну, и, наконец, ставьте TFilterComboBox, который позволит в списке файлов отображать только те файлы, которые соответствуют маске, указанной в свойстве Filter. Здесь в качестве значения укажите следующее: ico|*.ico|dll|*.dll|exe|*.exe|all|*.ico; *.dll; *.exe ..а в свойстве FileList задайте список файлов [TFileListBox]. В обработчике OnClick компонента TFileListBox напишите такой код:
delphi |
var A: array [ 0 .. 78 ] of Char ; begin StrPCopy (A, FileListBox1.FileName); Image1.Picture.Icon.Handle := ExtractIcon(HInstance, A, 0 ); |
@Drkb::02346
http://delphiworld.narod.ru/
DelphiWorld 6.0
|
|
|