修改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);
}
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);
}
相关文章推荐
- vs2008修改执行文件(.exe)的图标的方法
- vs2008+Qt4.8.1环境下修改exe文件图标的方法
- VC++编程实现修改EXE文件图标
- 修改InstallShield打包生成的安装文件的图标和版本信息的方法
- 关于CI框架通过修改.htaccess文件的办法解决无法加载资源文件的方法
- 用UpdateResource修改EXE文件图标(已修正)
- 分别用VB、Delphi、VC++、ASM四种语言写的一个用UpdateResource修改EXE文件图标的多源码示例
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 使用ICON动态修改exe文件图标
- MFC 生成 exe文件的图标更改方法
- [转]将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 用UpdateResource修改EXE文件图标的多源码(已修正) 注:转帖请包函作者信息.(作者:菜新)
- DLL文件基本原理及修改方法和通过改DLL来美化系统图标
- windows应用程序(C#)生成的EXE文件图标修改
- MFC中exe图标修改的方法
- QT设置标题栏左侧的ico图标和生成后的EXE文件图标的更换方法
- VC++编程实现修改EXE文件图标
- MFC 生成 exe文件的图标更改方法
- MFC 生成 exe文件的图标更改方法(转)