Можно ли получить список ресурсов исполняемого файла?
|
Теперь следует рассмотреть случай, когда мы не знаем ни тип, ни идентификатор ресурса. Для этого нужно получить список типов и идентификаторов ресурсов в них, с чем вы и сможете в результате работать.
Данная программа перечисляет все типы ресурсов, а потом, используя полученный тип, перечисляет все идентификаторы для исполняемого файла. Работает по такому же принципу – исполняемый файл находится в той же директории. // Хидеры программы #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; }
| |