Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заменить ресурс? [D7]


Dot ©   (2004-10-08 23:12:00) 

Мастера! Есть фпйл 1.ехе в нем содержится картинка/иконка/итд в виде ресурса.
У меня есть 1.bmp допустим или что нить еще.
Как мне программно заменить картинку в фале на 1.bmp ?????
файл не мой и не я его создавал .


Fay   (2004-10-12 03:11:00) [1]


> А MSDN - это всегда успеешь.

MSDN - рано не бывает 8)


cerber1   (2004-10-12 00:13:00) [2]

Есть два вариента решения твоей "проблемы":
1 через формат РЕ файлов
2 Через функции АПИ:
BeginUpdateResource...
UpdateResource...

но если ты не знаешь точного неазвания ресурса в проге, то тебе надо его найти, выдрать и заменить, а это уже больше функций АПИ:
EnumResourceName
enumResourceType... и.т.д

2 Fay
ResHacker поддерживает режим замены через скрипт, а это проще чем размалеввывать толпу callback-функций и потом рыться в их содержимом. А MSDN - это всегда успеешь.


Nick Denry   (2004-10-12 00:00:00) [3]

Сам проверять не буду - есть другие дела

Работает.


Fay   (2004-10-11 22:03:00) [4]

Сам проверять не буду - есть другие дела.
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.");
}


Fay   (2004-10-11 22:02:00) [5]

Вы что, издеваетесь? MSDN у нас для кого?
Только не надо говорить, "там на англицком" - янки на Си не балакают.


Anti   (2004-10-11 21:52:00) [6]

Мастера а что поправде нет ниче? ато тоже ищу как бы?


Dot   (2004-10-09 23:22:00) [7]

Нет что значит воспользуйся РеСХАкером, это не ответ, если не знаешь то не отвечай пожалуйста.


Okcid   (2004-10-09 17:28:00) [8]


> cerber1 ©   (09.10.04 13:45) [1]

ResHack конечно хорошо, но хелп(во всяком случае в моей версии) там на англицком...


cerber1   (2004-10-09 13:45:00) [9]

Bспользуй Resource Hacker и не мучайся. А если програмно, то в хелпе к Resource Hacker описано как это делать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо