ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Изменение иконки exe файла.
  #1  
Старый 17.06.2010, 00:24
ShkiperLol
Познающий
Регистрация: 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;
}
 

  #2  
Старый 17.06.2010, 00:39
POS_troi
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
Провел на форуме:
3718311

Репутация: 1118


Отправить сообщение для POS_troi с помощью ICQ
По умолчанию

Чтобы изменить ресурсы, нужно открыть файл на запись а он у тебя запущен.
 

  #3  
Старый 17.06.2010, 00:41
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Но он то в ресурсы пишеться,просто пишеться не так как нада.В ресурсах файла есть "Иконка",так вот заместь того чтобы переписать ее ,создаеться еще одна "Иконка"
 

  #4  
Старый 17.06.2010, 00:49
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

а ты тут не пробовал читать?

http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx#_win32_Updating_Resources
 

  #5  
Старый 17.06.2010, 00:52
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Те же самые функции я использую в совем коде.
 

  #6  
Старый 17.06.2010, 00:59
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

*WALL* молодец... только не в том порядке... ты даже на загружаешь файл куда хочешь внести изменения...

хотя вроде правильно... единственное чтобы изменить ресурс ты должен знать точный его индификтор (номер) в файле ip.exe

Последний раз редактировалось Gar|k; 17.06.2010 в 01:03..
 

  #7  
Старый 17.06.2010, 01:59
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Цитата:
единственное чтобы изменить ресурс ты должен знать точный его индификтор (номер) в файле ip.exe
А какой функцией его можна узнать?
 

  #8  
Старый 17.06.2010, 02:28
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

редактором ресурсов руками
 

  #9  
Старый 17.06.2010, 02:46
Gar|k
Постоянный
Регистрация: 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 )))
 

  #10  
Старый 17.06.2010, 12:44
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Вообще ты не имеешь право менять ресурсы у себяже потому что это вызовет сбой. Зато ты можеш сделать копию своейже проги и у неё менять ресурс.

А вообще чтобы забрать ресурс из чужой проги/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)
 


Быстрый переход




ANTICHAT.XYZ