Можно ли получить список ресурсов исполняемого файла?

Теперь следует рассмотреть случай, когда мы не знаем ни тип, ни идентификатор ресурса. Для этого нужно получить список типов и идентификаторов ресурсов в них, с чем вы и сможете в результате работать.

Данная программа перечисляет все типы ресурсов, а потом, используя полученный тип, перечисляет все идентификаторы для исполняемого файла. Работает по такому же принципу – исполняемый файл находится в той же директории.
// Хидеры программы
#include <windows.h>
#include <iostream.h>

// К этой ф-ции будет переходить управление при получении нового
// идентификатора из списка.
BOOL EnumNamesFunc(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName, LONG lParam)
{
// Следует проверять идентификатор, т.к. он можен представлять 
// собой, как число, так и строку
if((ULONG)lpName & 0xFFFF0000)
{
// Если это строка, то и выводим её как строку
cout << lpName;
}else{
// Иначе выводим как число
cout << (USHORT)lpName;
}
cout << endl;
return TRUE;
}

// К этой ф-ции переходит управление при получении нового типа ресурсов
BOOL EnumTypesFunc(HMODULE hModule,LPTSTR lpType,LONG lParam)

// Проверка как и в прошлой ф-ции
if ((ULONG)lpType & 0xFFFF0000)
{
cout << "Type: " << lpType << endl;
}else{
cout << "Type: " << (USHORT)lpType << endl;
}
// Перечисляем идентификаторы по получению нового типа ресурсов
EnumResourceNames(hModule, lpType, (ENUMRESNAMEPROC)EnumNamesFunc,0); 
return TRUE;
}

int main()
{
// Загружаем исполняемый файл
HMODULE hModule = LoadLibrary("simple.dll"); 
// Проверка на валидность
if (hModule == NULL) return 0;

// Перечисляем типы ресурсов
EnumResourceTypes(hModule,(ENUMRESTYPEPROC)EnumTypesFunc,0);

// Освобождаем исполняемый файл
FreeLibrary(hModule); 
return 0;
}
 
« Предыдущая статья   Следующая статья »