C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 44 - Извлечение ресурсов из модуля EnumResourceTypes() / Win 32 API / Win32 API

Шаг 44 - Извлечение ресурсов из модуля EnumResourceTypes()

Как известно, в программах хранятся их ресурсы. Как извлечь ресурсы из файла EXE или DLL программным путем ??? Очень просто. В WIN32 API предусмотрены специальные функции по этому поводу. Давайте посмотрим EnumResourceTypes(), которая позволяет узнать все типы ресурсов, которые есть в модуле:

BOOL EnumResourceTypes
(  
	HMODULE hModule,		// указатель на модуль
	ENUMRESTYPEPROC 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);

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;
	return true;
}

В чем смысл этой функции ??? Идея в том, что Windows сама будет искать типы ресурсов, и, как только найдет очередной тип, сразу вызовет эту функцию. Так как эта функция будет вызываться Windows тип вызова у нее WINAPI. Это очень удобно, так как нас не интересует внутренняя организация ресурсов. Пусть об этом думает Windows, нам типы подавай.


| |
Автор Каев Артем.
[AD]