|
Шаг 45 - Извлечение имен ресурсов EnumResourceNames().
Типы ресурсов мы получили, но для доступа к самим ресурсам нам нужно получить их имена. Вот для этого и существует функция EnumResourceNames():
BOOL EnumResourceNames
(
HMODULE hModule, // модуль
LPCTSTR lpszType, // тип ресурса
ENUMRESNAMEPROC lpEnumFunc, // вызываемая функция
LONG_PTR lParam // параметры определенные программистом
);
Ну и применим к нашей программе:
// ResTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
BOOL WINAPI EnumTypesFunc(HMODULE hModule,LPTSTR lpType, LONG lParam);
BOOL WINAPI EnumNamesFunc(HMODULE hModule, LPCTSTR lpType,LPTSTR lpName,LONG lParam);
void main()
{
HMODULE hMod=NULL;
hMod = LoadLibrary("notepad.exe");
if (hMod != NULL)
{
EnumResourceTypes(hMod,(ENUMRESTYPEPROC)EnumTypesFunc,0);
FreeLibrary(hMod);
}
else cout << "Not Load Module";
}
BOOL WINAPI EnumTypesFunc(HMODULE hModule,LPTSTR lpType, LONG lParam)
{
char buffer[100];
if ((ULONG)lpType & 0xFFFF0000)
{
sprintf(buffer, "%s\n", lpType);
}
else
{
sprintf(buffer, "%u\n", (USHORT)lpType);
}
cout << "Type " << buffer << endl;
EnumResourceNames(hModule,lpType,(ENUMRESNAMEPROC)EnumNamesFunc,0);
return true;
}
BOOL WINAPI EnumNamesFunc(HMODULE hModule, LPCTSTR lpType,LPTSTR lpName,LONG lParam)
{
char buffer[100];
if ((ULONG)lpName & 0xFFFF0000)
{
sprintf(buffer,"%s\n", lpName);
}
else
{
sprintf(buffer, "%u\n",(USHORT)lpName);
}
cout << "Name Res " << buffer << endl;
return true;
}
Пример результата ее работы:
........
Type 9
Name Res1
Name Res2
Type 14
Name Res1
Name Res2
Type 16
Name Res1
Кстати к ресурсам можно обращаться как по именам, так и по идентификаторам. Вот теперь мы получили имена ресурсов и их типы. Можно извлекать их из модуля. По этому поводу есть функции, например, LoadImage(), LoadIcon(), LoadMenu(), LoadCursor() ну и так далее.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|