ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Изменение иконки exe файла. |

17.06.2010, 00:24
|
|
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме: 28500
Репутация:
0
|
|
Изменение иконки exe файла.
Нужно програмно изменить иконку exe файла,на иконку которая находиться в ресурсах приложения которое будет изменять.
Написал такой код,но почемуто стандартная икона не меняеться на нужную мне.
В чем может быть проблема?
Код:
int main(int argc, char* argv[])
{
HRSRC find=FindResourceA(0,"ICO","RT_ICON");
if(find)
{
HGLOBAL glob=LoadResource(0,find);
if(glob)
{
LPVOID lock=LockResource(glob);
if(lock)
{
HANDLE update=BeginUpdateResource("ip.exe",false);
if(update)
{
BOOL up=UpdateResource(update,"Иконка","MAINICON",NULL,lock,SizeofResource(0,find));
EndUpdateResourceA(update,false);
}
}
}
}
return 0;
}
|
|
|

17.06.2010, 00:39
|
|
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
Провел на форуме: 3718311
Репутация:
1118
|
|
Чтобы изменить ресурсы, нужно открыть файл на запись а он у тебя запущен.
|
|
|

17.06.2010, 00:41
|
|
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме: 28500
Репутация:
0
|
|
Но он то в ресурсы пишеться,просто пишеться не так как нада.В ресурсах файла есть "Иконка",так вот заместь того чтобы переписать ее ,создаеться еще одна "Иконка"
|
|
|

17.06.2010, 00:49
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
а ты тут не пробовал читать?
http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx#_win32_Updating_Resources
|
|
|

17.06.2010, 00:52
|
|
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме: 28500
Репутация:
0
|
|
Те же самые функции я использую в совем коде.
|
|
|

17.06.2010, 00:59
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
*WALL* молодец... только не в том порядке... ты даже на загружаешь файл куда хочешь внести изменения...
хотя вроде правильно... единственное чтобы изменить ресурс ты должен знать точный его индификтор (номер) в файле ip.exe
Последний раз редактировалось Gar|k; 17.06.2010 в 01:03..
|
|
|

17.06.2010, 01:59
|
|
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме: 28500
Репутация:
0
|
|
единственное чтобы изменить ресурс ты должен знать точный его индификтор (номер) в файле ip.exe
А какой функцией его можна узнать?
|
|
|

17.06.2010, 02:28
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
редактором ресурсов руками
|
|
|

17.06.2010, 02:46
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
учись читать MSDN
http://msdn.microsoft.com/en-us/library/ms648005(v=VS.85).aspx - перечисление ресурсов
я думаю тебе пойдет вот эта функция EnumResourceNames c типом RC_ICON
1 делаешь
HMODULE hExe = LoadLibrary(TEXT("ip.exe"));
if (hExe == NULL) return -1;
2 EnumResourceNames почитай тут кароче
http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx#_win32_Creating_a_Resource_ List
там все примеры
в общем получив имя ресурса или его id в случае если IS_INTRESOURCE
ты уже можешь вызвать UpdateResource
// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource(TEXT("foot.exe"), FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler(TEXT("Could not open file for writing."));
return;
}
// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_DIALOG, // change dialog box resource
MAKEINTRESOURCE(IDD_FOOT_ABOUTBOX), // dialog box id
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
SizeofResource(hExe, hRes)); // size of resource info
где MAKEINTRESOURCE(IDD_FOOT_ABOUTBOX) это как раз имя найденого ресурса lpName которое в функции EnumNamesFunc
------------
кароче мне лень запускать VS )))
|
|
|

17.06.2010, 12:44
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Вообще ты не имеешь право менять ресурсы у себяже потому что это вызовет сбой. Зато ты можеш сделать копию своейже проги и у неё менять ресурс.
А вообще чтобы забрать ресурс из чужой проги/dll нельзя юзать LoadLibrary (т.е. можно но это неправильно и хавает больше ресурсов) Для таких целей юзается LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE. Потому как гласит MS
LOAD_LIBRARY_AS_DATAFILE
0x00000002 If this value is used, the system maps the file into the calling process's virtual address space as if it were a data file. Nothing is done to execute or prepare to execute the mapped file. Therefore, you cannot call functions like GetModuleHandle or GetProcAddress with this DLL. Also, this value causes writes to read-only memory to raise an access violation. Use this flag when you want to load a DLL only to extract messages or resources from it.
Windows Me/98/95: You can use the resulting module handle only with resource management functions such as EnumResourceLanguages, EnumResourceNames, EnumResourceTypes, FindResource, FindResourceEx, LoadResource, and SizeofResource. You cannot use this handle with specialized resource management functions such as LoadBitmap, LoadCursor, LoadIcon, LoadImage, and LoadMenu.
Последний раз редактировалось slesh; 17.06.2010 в 12:47..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|