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

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

Работа с ресурсами [D7, Win95/98, WinME, NT4, Win2k, WinXP]


apic ©   (2006-08-17 14:17:00) 

Глубоко-уважаемые Мастера!!! Как то давно я уже задавал ятот вопрос но мне на него ни кто не ответил, может быть на этот раз найдется спец в этом деле... Вообщем мне нужно заменить иконку в исполняемом файле. Нигде не могу найти ответ на этот вопрос. Ну как-то же делают это такие программы как Exescop и ей подобные!!!!!!!!!!!!!!!!


apic   (2006-08-17 17:46:00) [1]

var
hExe,hUpdateRes : tHandle;
hRes,hResLoad : hrSrc;
lpResLock : pointer;
begin
hExe := LoadLibrary(pansichar(application.exename));
hRes := FindResource(hExe, 'todolist', 'text');
hResLoad := LoadResource(hExe, hRes);
lpResLock := LockResource(hResLoad);

hUpdateRes := BeginUpdateResource('todo.exe', FALSE);
UpdateResource(hUpdateRes, 'text', 'todolist',  LANG_NEUTRAL,
   lpResLock, SizeofResource(hExe, hRes));
EndUpdateResource(hUpdateRes, FALSE);

FreeLibrary(hExe);

Что такое 'todolist', 'text'. Как я понимаю это имена ресурсов, а как мне их узнать, если я заменяю иконку в случайном экзешнике???????????????


ANTPro   (2006-08-17 17:34:00) [2]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1155733452&n=5


Ketmar   (2006-08-17 17:11:00) [3]

> [9] apic ©   (17.08.06 16:53)
это значит "я видел сей компилятор и остался очень доволен его качеством, а также впечатлён стандартными библиотеками". видишь, как длинно получилось? %-)


apic   (2006-08-17 17:11: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.");  
}


apic   (2006-08-17 16:53:00) [5]

Я не понял тебя, что таке "зачот. %-)". Ну я просто в васике пока не петрю...


Ketmar   (2006-08-17 16:48:00) [6]

> [7] apic ©   (17.08.06 16:43)
FreeBASIC? зачот. %-)


apic   (2006-08-17 16:43:00) [7]

Перекинте кто-нибудь на Делфи:
H = BeginUpdateResource(exepath, False)
Dim B() As Byte
ReDim B(0 To FileLen(icopath) - 1)
Open icopath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_ICON, 30001, 0, B(22), UBound(B) - 21)
Erase B
ReDim B(0 To FileLen(headerpath) - 1)
Open headerpath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_GROUP_ICON, 1, 0, B(0), 20)
Call EndUpdateResource(H, False)


Ketmar   (2006-08-17 16:34:00) [8]

> [4] apic ©   (17.08.06 16:17)
а лень мне писать. подожди, может у кого-то есть. %-)


apic   (2006-08-17 16:20:00) [9]

Мне нужно что то типа function ChangeExeIcon(fIcon{иконка которую будем вставлять}, fExe{экзешник в котором будем заменять}:string):boolean;


apic   (2006-08-17 16:17:00) [10]

Умоляю, товарищь сержант, скинте исходничик... Хоть с примерно...  Я один находил, но после выполнения функции иконка у экзешника вообще исчезала (становилась как у консольной проги), но сам экзешник запускался, к сожалению на данный момент сам исходник уже наврядли найду...


Ketmar   (2006-08-17 14:53:00) [11]

> [2] apic ©   (17.08.06 14:41)
рядовой, прекратите истерику! %-)

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

на что могу подкинуть хинт -- это на то, что информация об иконке и сам битмап иконки хранятся отдельно. это полезно учитывать. но если тебе заменять 2один к одному" (т.е. только вид) -- то это не так уж и важно.


apic   (2006-08-17 14:41:00) [12]

Знаю, что UpdateResource()., ТОЛЬКО КАК ИМ НАХРЕН ПОЛЬЗОВАТЬСЯ!!! ТАМ ЕЩЕ ХЕРОВА ТУЧА ВСЯКИХ ФУНКЦИЙ ПРИМЕНЯЕТСЯ! И все равно не хрена не работает!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Ketmar   (2006-08-17 14:31:00) [13]

> [0] apic ©   (17.08.06 14:17)
совсем-совсем нигде? и в гугле искал? и в рамблере? и в яндексе? и все партизанят?

UpdateResource().


Наверх

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