Понятие ресурсов программ Windows

Ресурс — это двоичные данные, которые можно добавить в исполняемый файл приложения на основе 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 – загрузка прочих ресурсов.
Читайте также:
Какая лучшая антивирусная программа для Windows 7

Существует много программ, которые позволяют просматривать ресурсы в бинарных модулях и даже редактировать их. Редактор ресурсов, имеющийся в составе 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) и ресурсы информации о версии.

Форма записи многострочного оператора следующая:

Идентификатор Тип_ресурса [Необязательные_параметры]

Состав необязательных параметров и инструкций, а также обязательных инструкций зависит от типа ресурса и будет рассмотрен позже.

Читайте также:
Программа для обновления ПК до Windows 10

Определение и использование различных типов ресурсов

Пиктограмма — это графическое изображение небольшого размера, состоящее из отдельных пикселов (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.

Читайте также:
Программа просмотра изображений Windows 10 как Windows 7

Графические изображения широко используются для оформления внешнего вида окон приложения. В ресурсы приложения такие изображения включают в виде битового образа (ресурс типа 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru