天天看點

修改軟體的ico圖檔方法

VC++[MFC]

// 第一個參數是将要替換圖示的exe檔案路徑,第二個參數是替換的ico檔案路徑

void ReplaceExeIco(LPCTSTR lpszApp, LPCTSTR lpszIco)

{

 try

 {

  CFile file;

  file.Open(lpszIco, CFile::modeRead);

  LONG lOffset = 0;

  DWORD dwSize = 0;

  DWORD dwBytes = 0;

  CONST BYTE bGroupIcoSize = 0x18;

  BYTE* lpGroupIco = new BYTE[bGroupIcoSize];

  memset(lpGroupIco, 0, bGroupIcoSize);

  file.Read(lpGroupIco, 0x06);

  file.Read(lpGroupIco+0x08, 0x0C);

  memcpy(&dwSize, lpGroupIco+0x10, sizeof(DWORD));

  file.Read(&lOffset, sizeof(lOffset));

  BYTE* lpRes = new BYTE[dwSize];

  memset(lpRes, 0, dwSize);

  file.Seek(lOffset, CFile::begin);

  file.Read(lpRes, dwSize);

HANDLE hApp = BeginUpdateResource(lpszApp, NULL);

  UpdateResource(hApp, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, lpGroupIco, bGroupIcoSize);

  UpdateResource(hApp, RT_ICON, MAKEINTRESOURCE(1), 0, lpRes, dwSize);

  EndUpdateResource(hApp, FALSE);

  delete[] lpRes;

  delete[] lpGroupIco;

  file.Close();

 }

 catch (...)

}

//調用方法很簡單,例如下面這樣就可以了

ReplaceExeIco(_T("F:\\11.exe"), _T("F:\\11.ico"));