我们有时候用编译出来的exe要添加一个封面的图标。可以用软件改。还可以用代码改。这次我们就用API+win32界面做一个。
#include<windows.h>
#include<iostream>
#include<stdio.h>
#include"shlwapi.h"
using namespace std;
RECT rect1,rect2;
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,( ENUMRESNAMEPROC)DeleteExistingIcons,(LONG_PTR)hUpdate);
EnumResourceNames(hOldExe,RT_GROUP_ICON,( ENUMRESNAMEPROC)DeleteExistingIcons,(LONG_PTR)hUpdate);
Fr