Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение ресурсов программ

11K
08 августа 2005 года
majorwest
8 / / 08.08.2005
дано: некая прога pro.exe
в ней есть ресурс: /Bitmap/1002/123
надо: программно поменять этот битмап в ресурсе на битмап из файла

програмлю на c++Builder

заранее спасибо =)
406
08 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by majorwest
дано: некая прога pro.exe
в ней есть ресурс: /Bitmap/1002/123
надо: программно поменять этот битмап в ресурсе на битмап из файла

програмлю на c++Builder

заранее спасибо =)



пример из MSDN:

HRSRC hResLoad; // handle to loaded resource
HANDLE hExe; // handle to existing .EXE file
HRSRC hRes; // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes; // update resource handle
char *lpResLock; // pointer to resource data
BOOL result;
// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary("hand.exe");
if (hExe == NULL)
{
ErrorHandler("Could not load exe.");
}

// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL)
{
ErrorHandler("Could not locate dialog box.");
}

// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
ErrorHandler("Could not load dialog box.");
}

// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
ErrorHandler("Could not lock dialog box.");
}

// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler("Could not open file for writing.");
}

// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_DIALOG, // change dialog box resource
"AboutBox", // dialog box name
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
SizeofResource(hExe, hRes)); // size of resource info.
if (result == FALSE)
{
ErrorHandler("Could not add resource.");
}

// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
ErrorHandler("Could not write changes to file.");
}

// Clean up.
if (!FreeLibrary(hExe))
{
ErrorHandler("Could not free executable.");
}

11K
08 августа 2005 года
majorwest
8 / / 08.08.2005
Этот код я тоже видел в msdn.
Проблема в том, что там описано, как загрузить ресурс из ресурса.
А у меня проблема в том, что есть на винте *.bmp, который надо запихнуть в ресурс.
Т.е. надо bmp , как я понял, сначала преобразовать в файл ресурса...
406
08 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by majorwest
Этот код я тоже видел в msdn.
Проблема в том, что там описано, как загрузить ресурс из ресурса.
А у меня проблема в том, что есть на винте *.bmp, который надо запихнуть в ресурс.
Т.е. надо bmp , как я понял, сначала преобразовать в файл ресурса...



Не надо ничего преобразовывать. просто тогда действуеш уже отсюда:


вместо LockResource ты вызываеш ReadFile"..
HANDLE hf=CreateFile("your.bmp"...
DWORD len=GetFileSize(hf,0);
ReadFile(hf,lpResLock,len,...

//теперь lpResLock содержит буффер с нужной картинкой


и дальше как ниже:



// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler("Could not open file for writing.");
}

// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_DIALOG, // change dialog box resource
"AboutBox", // dialog box name
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
len; // size of resource info.
if (result == FALSE)
{
ErrorHandler("Could not add resource.");
}

// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
ErrorHandler("Could not write changes to file.");
}

// Clean up.
if (!FreeLibrary(hExe))
{
ErrorHandler("Could not free executable.");
}

11K
08 августа 2005 года
majorwest
8 / / 08.08.2005
Большое спасибо =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог