Ресурс — это двоичные данные, которые можно добавить в исполняемый файл приложения на основе Windows. Ресурс может быть стандартным или определенным. Данные в стандартном ресурсе описывают значок, курсор, меню, диалоговое окно, растровое изображение, расширенный метафайл, шрифт, таблицу ускорителя, запись таблицы сообщений, запись строки таблицы или сведения о версии. Определяемый приложением ресурс, также называемый настраиваемым ресурсом, содержит все данные, необходимые конкретному приложению.
в этом разделе
Общие сведения о ресурсах | Общие сведения о ресурсах. |
Курсоры | Рассматриваются курсоры, которые мигают линии, блоки или растровые изображения в клиентской области окна. |
Курсоры | Обсуждает курсоры, которые представляют собой небольшие рисунки, расположение которых на экране контролируется указателем устройства, например мышью, пером или трекболом. |
Значки | Обсуждаются значки, которые представляют собой растровые изображения в сочетании с маской для создания прозрачных областей на рисунке. |
Сочетания клавиш | Рассматриваются сочетания клавиш, которые являются нажатиями клавиш, которые предоставляют доступ к командам для приложения. |
Меню | Обсуждает меню. |
Строки | Описывает строковые функции. |
Сведения о версии | Обсуждает ресурс сведений о версии. |
Компилятор ресурсов | Описывает компилятор ресурсов, Rc.exe и файлы определения ресурсов. |
Справочник по индексированию ресурсов пакетов (PRI) | Набор API-интерфейсов для работы с индексатором ресурсов. Индексатор ресурсов используется для создания файлов индекса ресурсов пакета (PRI) для приложения UWP. |
Анализ использования ресурсов приложениями в ОС Windows
Дополнительные сведения о создании ресурсов сообщений см. в разделе Компилятор сообщений.
Источник: learn.microsoft.com
Ресурсы в приложениях Windows
Характерной особенностью исполняемых модулей и динамических библиотек Windows является наличие в них так называемых ресурсов. Иконки, курсоры, диалоговые окна, меню, графические образы и текстовые таблицы, а так же информация о версии файла являются неотъемлемой частью большинства приложений с графическим интерфейсом для Windows. Как известно, исполняемый модуль состоит из заголовка файла PE-формата (Portable Executable) и нескольких секций, одна из которых является секцией ресурсов.
В системных библиотеках Windows API имеется набор функций для работы с ресурсами. Вначале я расскажу в этой статье о функциях поиска ресурсов в модулях Windows, а потом о функциях загрузки данных из ресурсов.
Если имя и тип ресурса в указанном модуле заранее известны, то этот ресурс можно найти с помощью функции FindResource или FindResourceEx. Если содержимое ресурсной части модуля заранее неизвестно, то можно получить список имеющихся в модуле ресурсов с помощью функций EnumResourceTypes и EnumResourceNames.
Диспетчер ресурсов файлового сервера в Windows Server 2019 (File Server Resource Manager)
Ресурсы приложения могут быть локализованы под разные национальные языки. Для перечисления имеющихся в ресурсах локализаций применяется функция EnumResourceLanguages.
Для отдельных типов ресурсов предусмотрены специальные функции загрузки.
- LoadString – загрузка текстовой строки,
- LoadBitmap – загрузка растрового изображения,
- LoadCursor – загрузка графического образа курсора мыши,
- LoadIcon – загрузка образа пиктограммы (иконки),
- LoadMenu – загрузка ресурса меню,
- LoadAccelerators – загрузка таблицы «быстрых клавиш»,
- LoadResource – загрузка прочих ресурсов.
Существует много программ, которые позволяют просматривать ресурсы в бинарных модулях и даже редактировать их. Редактор ресурсов, имеющийся в составе Visual C++, способен редактировать ресурсы как в исходных файлах проекта, так и внутри бинарных модулей. При этом можно экспортировать ресурсы из бинарного модуля в отдельные файлы на диск.
Я предлагаю познакомиться с небольшой программой моей собственной разработки, которая позволяет извлекать ресурсы из модулей Windows-приложений и динамических библиотек. Выглядит она так:
Эта программа извлекает ресурсы из бинарного модуля и сохраняет их на диске в виде отдельных файлов.
С помощью кнопки «Файл» программа через стандартный диалог Windows для выбора файлов загружает указанный бинарный модуль, чтобы получить список его ресурсов.
В списке ресурсов модуля указывается тип каждого ресурса, идентификатор ресурса и размер его данных.
При нажатии кнопки «Экспорт» создаётся отдельный каталог на диске, в который записываются файлы с данными соответствующих ресурсов.
Кроме этого программа позволяет посмотреть список имеющихся в модуле иконок. Это делается с помощью кнопки «Иконки» и стандартного диалога Windows для выбора значка.
Так же можно узнать информацию о текущей версии файла. Кнопка «Версия» вызывает окно диалога с данными о текущей версии модуля.
Загрузить приложение: GrabRes.zip [ZIP;60Кб]
Источник: codenet.ru
Тема: Ресурсы приложения и их использование
С помощью ресурсов в Windows-приложениях определяются различные визуальные элементы пользовательского интерфейса: надписи, пиктограммы, курсоры, меню, диалоговые окна, растровые изображения и другие типы ресурсов. Информация о ресурсах, используемых приложением, хранится в специальном файле ресурсов.
Файлы ресурсов (rc-файлы) являются текстовыми файлами (их можно создать как специальным редактором ресурсов, так и текстовым редактором) и компилируются компилятором ресурсов. Полученный в результате двоичный файл (res-файл) компонуется с остальными частями приложения, образуя исполняемый exe-файл, содержащий программный код и информацию о ресурсах.
Ресурсы также могут включаться в отдельную динамически связываемую библиотеку DLL. В этом случае при изменении файла ресурсов не требуется перекомпилировать всё приложение, а нужно только заменить DLL.
Структура файла ресурсов
Файл ресурсов представляет собой набор директив препроцессора и операторов описания ресурсов:
…. // другие директивы прпроцессора
оператор описания ресурса1
оператор описания ресурсаN
Операторы описания ресурсов могут быть двух видов: однострочные и многострочные.
Однострочные операторы определяют следующие типы ресурсов: пиктограммы (ICON), курсоры (CURSOR), растровые изображения (BITMAP), шрифты (FONT), язык ресурсов (LANGUGE).
Однострочный оператор имеет следующий вид:
Идентификатор Тип_ресурса [Характеристика_загрузки] «Имя_файла_ресурса»
Идентификатор ресурса может быть текстовой строкой или числовым значением.
Для ресурсов типа BITMAP, CURSOR, FONT и ICON также может указываться характеристика загрузки DISCARDABLE, указывающая, что ресурс может быть удален из памяти, если он больше не требуется, например:
MyBitmap BITMAP DISCARDABLE “mybitmap.bmp”
Многострочные операторы определяют следующие типы ресурсов: таблицы строк (STRINGTABLE), меню (MENU), таблицы акселераторов (ACCELERATORS), диалоговые окна (DIALOG), пользовательские данные (RCDATA) и ресурсы информации о версии.
Форма записи многострочного оператора следующая:
Идентификатор Тип_ресурса [Необязательные_параметры]
Состав необязательных параметров и инструкций, а также обязательных инструкций зависит от типа ресурса и будет рассмотрен позже.
Определение и использование различных типов ресурсов
Пиктограмма — это графическое изображение небольшого размера, состоящее из отдельных пикселов (32×32). Пиктограммы обычно используют для обозначения свернутого окна приложения, они отображаются в левом верхнем углу заголовка окна. С помощью редактора изображений можно нарисовать свои пиктограммы и использовать их в приложениях.
Пиктограммы хранятся в файлах с расширением имени.ico. В одном файле обычно находится несколько вариантов пиктограмм. Когда Windows рисует пиктограмму, она выбирает из файла наиболее подходящую для текущего режима работы видеоадаптера.
Для включения пиктограммы в файл описания ресурсов используется оператор ICON, например:
MyIcon ICON «iconfile.ico»
В приложении для получения дескриптора пиктограммы используется функция LoadIcon:
HICON LoadIcon(HINSTANCE hInst, LPCTSTR lpszIcon);
· hInst — дескриптор экземпляра приложения.
· lpszIcon — идентификатор пиктограммы из описания ресурсов, заданный в виде указателя на строку.
Если первый параметр функции LoadIcon установлен в NULL, то это означает, что данная пиктограмма яляется преодопределенной (с префиксом IDI_):
//загрузка предопределенной пиктограммы
Способы загрузки пиктограмм, определенных в ресурсах приложения
1. Идентификатор ресурса пиктограммы в описании задан именем:
Описание ресурса: MyIcon ICON «iconfile.ico»
Текст программы: HICON hIcon=LoadIcon(hInst,”MyIcon”);
2. В качестве идентификатора ресурса используется число (16-разрядное беззнаковое WORD):
Описание ресурса: 125 ICON «iconfile.ico»
HICON hIcon=LoadIcon(hInst, MAKEINTRESOURCE(125));
Макрос MAKEINTRESOURCE определен в заголовочных файлах Windows, он преобразует число в указатель, но со старшими разрядами, установленными в нуль.
Чтобы окно hWnd имело требуемую пиктограмму необходимо дескриптор, возвращаемый функцией LoadIcon, присвоить полю пиктограммы структуры класса окна:
Если в процессе работы приложения необходимо заменить пиктограмму, то следует воспользоваться вызовом:
где Icon_ID – идентификатор требуемой пиктограммы.
1. После того, как приложение загрузило пиктограмму, ее можно также нарисовать в любом месте экрана функцией DrawIcon.
2. Если загруженная с помощью функции LoadIcon пиктограмма приложению больше не нужна, то можно освободить занимаемую ею память, вызвав функцию DestroyIcon.
Приложение может использовать не только стандартные курсоры, но и альтернативные, хранящиеся в ресурсах приложения.
Инструкции для описания курсора в файле ресурсов и для получения его дескриптора в программе имеют вид, аналогичный для пиктограмм. Отличие состоит в том, что здесь используется функция LoadCursor:
Описание ресурса: MyCursor CURSOR «cursfile.cur»
Дескриптор курсора мыши, полученный при вызове функции LoadCursor, можно использовать для задания поля курсора структуры класса при регистрации класса окна. При этом курсор мыши, когда он оказывается в рабочей области окна, превращается в пользовательский курсор:
Изменить курсор для окна можно в любое другое время, переопределив значение, содержащееся в структуре класса окна:
где Cursor_ID – имя требуемого курсора.
Windows содержит несколько встроенных курсоров. Их идентификаторы описаны в файле windows.h и начинаются с префикса IDC_. Для загрузки встроенных курсоров также используется функция LoadCursor, но в качестве первого параметра ей передается NULL:
1. Для того чтобы выключить изображение курсора или вновь его включить, используют функцию ShowCursor.
2. Если курсор, загруженный с помощью функции LoadCursor, приложению больше не нужен, то можно освободить занимаемую им память, вызвав функцию DestroyCursor.
Графические изображения широко используются для оформления внешнего вида окон приложения. В ресурсы приложения такие изображения включают в виде битового образа (ресурс типа BITMAP). Изображения создаются с помощью графических редакторов и записываются в файл с расширением имени.bmp.
Битовый образ включается в файл описания ресурсов в том же формате, что пиктограмма или курсор:
MyBmp BITMAP «bmpfile.bmp»
Для загрузки ресурса используется функция LoadBitmap. Ее возвращаемым значение является дескриптор битового образа:
Битовые образы используются в следующих случаях:
1. Создание кистей. Кисти являются шаблонами пикселей, которые Windows использует для закрашивания изображаемых на экране областей.
Для создания кисти из изображения используется функция CreatePatternBrush, в качестве параметра которой задается дескриптор битового образа hBitmap. Эта функция возвращает дескриптор кисти, который можно использовать при регистрации окна:
При раскрашивании этой кистью области экрана, битовый образ повторяется по горизонтали и вертикали через каждые восемь пикселей.
Перед завершением работы приложения созданная кисть должна быть уничтожена функцией DeleteObject.
2. Рисование на экране картинок. Битовые образы можно просто рисовать в рабочей области окна; можно использовать их в кнопках, определяемых пользователем; применять при работе с меню.
Особенностью битовых образов является то, что в отличие от остальных ресурсов они являются объектами GDI. Поэтому для их вывода используются контексты устройств и специальные функции.
Пример вывода битового изображения в рабочую область окна. Выводится оно, начиная от точки с координатами (100, 100) с фактическими размерами:
HDC hDC=GetDC(hWnd); // Получение контекста у-ва
// Создание контекста, совместимого с контекстом окна
// Выбор объекта в контекст устройства
HBITMAP hOldBitmap= (HBITMAP)SelectObject(BitmapDC,hBitmap);
// Получение размеров изображения
// Вывод битового образа в окно
// Восстановление прежнего объекта
// Удаление созданного контекста
ReleaseDC(hWnd,hDC); // Освобождение контекста у-ва
Использование в качестве ресурсов символьных строк предназначено главным образом для облегчения перевода (локализации) приложения на другие языки.
Такой ресурс задается в виде таблицы строк с помощью ключевого слова STRINGTABLE, за которым следуют несколько определений строк, заключенных между ключевыми словами BEGIN-END:
id1 “содержимое строки 1”
id2 “содержимое строки 2”
// определения остальных строк
Идентификаторы строк id1, id2. которые предшествуют каждой строке, должны быть или числами, или идентификаторами макроопределений, которые задаются в заголовочном файле. В описании ресурсов может быть только одна таблица строк. Максимальный размер каждой строки – 255 символов.
Приложения ссылаются на эти строки по символьным идентификаторам.
// Определение идентификаторов строк в заголов. файле
# define IDS_HELLO 1
# define IDS_BYE 2
// Описание таблицы строк в файле ресурсов
IDS_BYE “Good bye”
Для загрузки строки из файла ресурсов вначале следует скопировать ее в буфер в сегменте данных приложения с помощью функции LoadString, а затем этот буфер можно использовать как обычную строку:
LoadString(hInst, id, szBuffer, iMaxLength);
MessageBox(hWnd, szBuffer,”Text from stringtable”,MB_OK);
Параметр id — это идентификатор строки в файле описания ресурсов, например IDS_BYE; iMaxLength – максимальное число передаваемых в szBuffer символов.
Источник: poisk-ru.ru