Ресурсы в приложениях Windows
Дата: 12 мая 2009 года
Характерной особенностью исполняемых модулей и динамических библиотек Windows является наличие в них так называемых ресурсов. Иконки, курсоры, диалоговые окна, меню, графические образы и текстовые таблицы, а так же информация о версии файла являются неотъемлемой частью большинства приложений с графическим интерфейсом для Windows. Как известно, исполняемый модуль состоит из заголовка файла PE-формата (Portable Executable) и нескольких секций, одна из которых является секцией ресурсов.
В системных библиотеках Windows API имеется набор функций для работы с ресурсами. Вначале я расскажу в этой статье о функциях поиска ресурсов в модулях Windows, а потом о функциях загрузки данных из ресурсов.
Если имя и тип ресурса в указанном модуле заранее известны, то этот ресурс можно найти с помощью функции FindResource или FindResourceEx. Если содержимое ресурсной части модуля заранее неизвестно, то можно получить список имеющихся в модуле ресурсов с помощью функций EnumResourceTypes и EnumResourceNames.
Ресурсы приложения могут быть локализованы под разные национальные языки. Для перечисления имеющихся в ресурсах локализаций применяется функция EnumResourceLanguages.
Для отдельных типов ресурсов предусмотрены специальные функции загрузки.
- LoadString – загрузка текстовой строки,
- LoadBitmap – загрузка растрового изображения,
- LoadCursor – загрузка графического образа курсора мыши,
- LoadIcon – загрузка образа пиктограммы (иконки),
- LoadMenu – загрузка ресурса меню,
- LoadAccelerators – загрузка таблицы «быстрых клавиш»,
- LoadResource – загрузка прочих ресурсов.
Существует много программ, которые позволяют просматривать ресурсы в бинарных модулях и даже редактировать их. Редактор ресурсов, имеющийся в составе Visual C++, способен редактировать ресурсы как в исходных файлах проекта, так и внутри бинарных модулей. При этом можно экспортировать ресурсы из бинарного модуля в отдельные файлы на диск.
Я предлагаю познакомиться с небольшой программой моей собственной разработки, которая позволяет извлекать ресурсы из модулей Windows-приложений и динамических библиотек. Выглядит она так:
Эта программа извлекает ресурсы из бинарного модуля и сохраняет их на диске в виде отдельных файлов.
С помощью кнопки «Файл» программа через стандартный диалог Windows для выбора файлов загружает указанный бинарный модуль, чтобы получить список его ресурсов.
В списке ресурсов модуля указывается тип каждого ресурса, идентификатор ресурса и размер его данных.
При нажатии кнопки «Экспорт» создаётся отдельный каталог на диске, в который записываются файлы с данными соответствующих ресурсов.
Кроме этого программа позволяет посмотреть список имеющихся в модуле иконок. Это делается с помощью кнопки "Иконки" и стандартного диалога Windows для выбора значка.
Так же можно узнать информацию о текущей версии файла. Кнопка "Версия" вызывает окно диалога с данными о текущей версии модуля.
Загрузить приложение: GrabRes.zip [ZIP;60Кб]