Нужно програмно изменить иконку exe файла,на иконку которая находиться в ресурсах приложения которое будет изменять. Написал такой код,но почемуто стандартная икона не меняеться на нужную мне. В чем может быть проблема? Code: 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; }
Но он то в ресурсы пишеться,просто пишеться не так как нада.В ресурсах файла есть "Иконка",так вот заместь того чтобы переписать ее ,создаеться еще одна "Иконка"
а ты тут не пробовал читать? http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx#_win32_Updating_Resources
*WALL* молодец... только не в том порядке... ты даже на загружаешь файл куда хочешь внести изменения... хотя вроде правильно... единственное чтобы изменить ресурс ты должен знать точный его индификтор (номер) в файле ip.exe
учись читать 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 )))
Вообще ты не имеешь право менять ресурсы у себяже потому что это вызовет сбой. Зато ты можеш сделать копию своейже проги и у неё менять ресурс. А вообще чтобы забрать ресурс из чужой проги/dll нельзя юзать LoadLibrary (т.е. можно но это неправильно и хавает больше ресурсов) Для таких целей юзается LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE. Потому как гласит MS
Вы вобще читали мой первый пост? Я не пытаюсь менять ресурсы у себя,я хочю изменить ресурс(иконку)у другого приложения!