BLOG main image

분류 전체보기 (321)
free (36)
영화 (85)
드라마 (21)
게임 (28)
만화/책 (34)
개발 (46)
IT (68)
연예 (3)
Visitors up to today!
Today hit, Yesterday hit
TETRIS
rss
2010. 11. 9. 16:17
ico 파일이나 exe 파일의 리소스를 읽어서 exe의 아이콘을 변경하는 코드
#pragma pack(push, 2)
typedef struct { WORD Reserved1; WORD ResourceType; WORD ImageCount; BYTE Width; BYTE Height; BYTE Colors; BYTE Reserved2; WORD Planes; WORD BitsPerPixel; DWORD ImageSize; WORD ResourceID; } GROUPICON; #pragma pack(pop) void ChangeIconFromIco(LPCTSTR source, LPCTSTR target) { HANDLE hTarget = BeginUpdateResource(target, FALSE); if (hTarget == NULL) { printf("BeginUpdateResource fail\n"); return; } char *buffer; DWORD dwBytesToRead; DWORD dwBytesRead; HANDLE hFile; hFile = CreateFile(source, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (hFile == INVALID_HANDLE_VALUE) { printf("INVALID_HANDLE_VALUE\n"); return; } dwBytesToRead = GetFileSize(hFile, 0); buffer = (char *)malloc(dwBytesToRead); ReadFile(hFile, buffer, dwBytesToRead, &dwBytesRead, 0); CloseHandle(hFile); if (UpdateResource( hTarget, RT_ICON, MAKEINTRESOURCE(1), MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), (buffer+22), dwBytesToRead-22 ) == FALSE) { printf("UpdateResource(RT_ICON) fail\n"); } GROUPICON grData; grData.Reserved1 = 0; grData.ResourceType = 1; grData.ImageCount = 1; grData.Width = 32; grData.Height = 32; grData.Colors = 0; grData.Reserved2 = 0; grData.Planes = 2; grData.BitsPerPixel = 32; grData.ImageSize = dwBytesToRead - 22; grData.ResourceID = 1; UpdateResource( hTarget, RT_GROUP_ICON, _T("MAINICON"), MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), &grData, sizeof(GROUPICON) ); delete buffer; if (EndUpdateResource(hTarget, FALSE) == FALSE) { printf("EndUpdateResource fail\n"); } } void ChangeIconFromExe(LPCTSTR source, LPCTSTR target) { HRSRC hRes; HANDLE hUpdateRes; char *lpResLock; HRSRC hResLoad; BOOL result; HMODULE hSourceExe, hTargetExe; int iLoop; hSourceExe = LoadLibrary(source); if (hSourceExe == NULL) return; for (iLoop = 1;;iLoop++) { TCHAR str[100] = {0,}; _stprintf_s(str, 100, _T("#%d"), iLoop); hRes = FindResource(hSourceExe, str, RT_ICON); if (hRes == NULL) continue ; else if (iLoop == 10) return; else break; } hResLoad = (HRSRC)LoadResource(hSourceExe, hRes); if (hResLoad == NULL) return ; lpResLock = (char*)LockResource(hResLoad); if (lpResLock == NULL) return ; hTargetExe = LoadLibrary(target); if (hTargetExe == NULL) return; for (iLoop = 1;;iLoop++) { TCHAR str[100] = {0,}; _stprintf_s(str, 100, _T("#%d"), iLoop); if (FindResource(hTargetExe, str, RT_ICON) == NULL) continue ; else if (iLoop == 10) break; else break; } FreeLibrary(hTargetExe); hUpdateRes = BeginUpdateResource(target, FALSE); if (hUpdateRes == NULL) return ; result = UpdateResource(hUpdateRes, RT_ICON, MAKEINTRESOURCE(1), MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), lpResLock, SizeofResource(hSourceExe, hRes)); if (result == FALSE) return; if (!EndUpdateResource(hUpdateRes, FALSE)) return; }