正文

如何修改exe文件图标2009-02-10 13:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/40794.html

分享到:

转了一个“如何修改exe文件图标”的方法。只有一个函数,非常方便。#include 《stdio.h》#include 《windows.h》#include 《tchar.h》struct ICONDIRENTRY{    BYTE bWidth;    BYTE bHeight;    BYTE bColorCount;    BYTE bReserved;    WORD wPlanes;    WORD wBitCount;    DWORD dwBytesInRes;    DWORD dwImageOffset;};struct ICONDIR{    WORD idReserved;    WORD idType;    WORD idCount;    //ICONDIRENTRY idEntries;};struct GRPICONDIRENTRY{    BYTE bWidth;    BYTE bHeight;    BYTE bColorCount;    BYTE bReserved;    WORD wPlanes;    WORD wBitCount;    DWORD dwBytesInRes;    WORD nID;};struct GRPICONDIR{    WORD idReserved;    WORD idType;    WORD idCount;    GRPICONDIRENTRY idEntries;};////////////////////////////////////////////////函数说明:修改EXE图标////参    数:IconFile 图标文件//              ExeFile 被修改的EXE文件////返回值: 成功为True,否则False/////////////////////////////////////////////bool ChangeExeIcon(LPCSTR IconFile, LPCSTR ExeFile);////////////////////////////////////////////////函数说明:修改EXE图标////参    数:IconFile 图标文件//              ExeFile 被修改的EXE文件////返回值: 成功为True,否则False/////////////////////////////////////////////bool ChangeExeIcon(LPCSTR IconFile, LPCSTR ExeFile){    ICONDIR stID;    ICONDIRENTRY stIDE;    GRPICONDIR stGID;    HANDLE hFile;    DWORD nSize, nGSize, dwReserved;    HANDLE hUpdate;    PBYTE pIcon, pGrpIcon;    BOOL ret;    hFile = CreateFile(IconFile, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);    if (hFile == INVALID_HANDLE_VALUE)    {       return false;    }    ZeroMemory(&stID, sizeof(ICONDIR));    ret = ReadFile(hFile, &stID, sizeof(ICONDIR), &dwReserved, NULL);    ZeroMemory(&stIDE, sizeof(ICONDIRENTRY));    ret = ReadFile(hFile, &stIDE, sizeof(ICONDIRENTRY), &dwReserved, NULL);    nSize = stIDE.dwBytesInRes;    pIcon = (PBYTE)malloc(nSize);    SetFilePointer(hFile, stIDE.dwImageOffset, NULL, FILE_BEGIN);    ret = ReadFile(hFile, (LPVOID)pIcon, nSize, &dwReserved, NULL);    if (!ret)    {       CloseHandle(hFile);       return false;    }    ZeroMemory(&stGID, sizeof(GRPICONDIR));    stGID.idCount = stID.idCount;    stGID.idReserved = 0;    stGID.idType = 1;    CopyMemory(&stGID.idEntries, &stIDE, 12);    stGID.idEntries.nID = 0;    nGSize = sizeof(GRPICONDIR);    pGrpIcon = (PBYTE)malloc(nGSize);    CopyMemory(pGrpIcon, &stGID, nGSize);    hUpdate = BeginUpdateResource(ExeFile, false);    ret = UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, (LPVOID)pGrpIcon, nGSize);    ret = UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, (LPVOID)pIcon, nSize);    EndUpdateResource(hUpdate, false);    if (!ret)    {       CloseHandle(hFile);       return false;    }    CloseHandle(hFile);    return true;}

阅读(19946) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册