您的位置:首页 > 其它

修改EXE文件图标及资源的方法

2008-07-22 08:12 399 查看
#include <windows.h>

BOOL CALLBACK DeleteExistingIcons(
HMODULE hModule,
LPCTSTR lpszType,
LPTSTR lpszName,
LONG lParam);

BOOL CALLBACK UpdateIcons(
HMODULE hModule,
LPCTSTR lpszType,
LPTSTR lpszName,
LONG lParam);

void IconExchange(LPSTR lpSrcExe , LPSTR lpDestExe, LPSTR lpOutExe );



void main(int argc, char *argv[])
{

IconExchange(argv[1] , argv[2] , argv[3]);

}

BOOL CALLBACK DeleteExistingIcons(
HMODULE hModule,
LPCTSTR lpszType,
LPTSTR lpszName,
LONG lParam)
{
HANDLE hUpdate = (HANDLE)lParam;

UpdateResource(hUpdate,lpszType,lpszName,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NULL,0);
return 1;
}

BOOL CALLBACK UpdateIcons(
HMODULE hModule,
LPCTSTR lpszType,
LPTSTR lpszName,
LONG lParam)
{
HANDLE hUpdate = (HANDLE)lParam;
HRSRC hRes = FindResource(hModule,lpszName,lpszType);
HGLOBAL hResLoaded = LoadResource(hModule, hRes);
void* pData = LockResource(hResLoaded);
int nSizeOfIconRes = SizeofResource(hModule,hRes);


UpdateResource(hUpdate,lpszType,lpszName,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),pData,nSizeOfIconRes);

UnlockResource(hResLoaded);
FreeResource(hResLoaded);

return TRUE;

}

void IconExchange(LPSTR lpSrcExe , LPSTR lpDestExe ,LPSTR lpOutExe)
{
CopyFile(lpDestExe , lpOutExe , FALSE);

HANDLE hUpdate = BeginUpdateResource(lpOutExe,FALSE);

HMODULE hOldExe = LoadLibraryEx(lpDestExe ,NULL,LOAD_LIBRARY_AS_DATAFILE);

EnumResourceNames(hOldExe,RT_ICON,DeleteExistingIcons,(long)hUpdate);

EnumResourceNames(hOldExe,RT_GROUP_ICON,DeleteExistingIcons,(long)hUpdate);

FreeLibrary(hOldExe);

HMODULE hIconSrcExe = LoadLibraryEx(lpSrcExe ,NULL,LOAD_LIBRARY_AS_DATAFILE);

EnumResourceNames(hIconSrcExe,RT_ICON,UpdateIcons,(long)hUpdate);

EnumResourceNames(hIconSrcExe,RT_GROUP_ICON,UpdateIcons,(long)hUpdate);

FreeLibrary(hIconSrcExe);

EndUpdateResource(hUpdate,FALSE);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: