标题:如何用VC修改应用软件打开后左上角的图标?
只看楼主
西伯利亚狼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:40
注 册:2011-2-15
结帖率:100%
已结贴  问题点数:0 回复次数:9 
如何用VC修改应用软件打开后左上角的图标?
如何用VC修改应用软件打开后左上角的图标?有谁知道啊,给说一下
搜索更多相关主题的帖子: 应用软件 
2011-03-24 14:51
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:1 
修改下资源就行了

或者通过代码实现:
HICON m_hIcon;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // IDR_MAINFRAME为资源ID 。改成其他图标就用对应的资源ID
SetIcon(m_hIcon, TRUE);

我行我乐
我的博客:
http://blog.yuccn. net
2011-03-24 18:31
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
得分:1 
赞一个

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2011-03-24 20:52
西伯利亚狼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:40
注 册:2011-2-15
得分:0 
大佬,你修改的是本程序的图标,我要修改的是其他程序的图标
2011-03-25 12:20
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
把lpExeFile的图标替换成和lpIconFile的图标
用法 ChangeExeIcon(L"G:\\yourImageName.ico",L"C:\\qq.exe");
BOOL ChangeExeIcon(LPWSTR lpIconFile, LPWSTR lpExeFile)
{
    ICONDIR stID = { 0 };
    ICONDIRENTRY stIDE = { 0 };
    GRPICONDIR stGID = { 0 };
    HANDLE hFile = NULL;
    DWORD nSize = 0;
    DWORD nGSize = 0;
    DWORD dwReserved = 0;
    HANDLE hUpdate = NULL;
    PBYTE pIcon = NULL;
    PBYTE pGrpIcon = NULL;
    BOOL ret = FALSE;

    hFile = ::CreateFileW(lpIconFile, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile == INVALID_HANDLE_VALUE) {
        return false;
    }

    ZeroMemory(&stID, sizeof(ICONDIR));
    if (!::ReadFile(hFile, &stID, sizeof(ICONDIR), &dwReserved, NULL)) {
        goto _EXIT_PROC;
    }

    ZeroMemory(&stIDE, sizeof(ICONDIRENTRY));
    if (!::ReadFile(hFile, &stIDE, sizeof(ICONDIRENTRY), &dwReserved, NULL)) {
        goto _EXIT_PROC;
    }

    nSize = stIDE.dwBytesInRes;
    pIcon = (PBYTE)malloc(nSize);
    ::SetFilePointer(hFile, stIDE.dwImageOffset, NULL, FILE_BEGIN);

    if (::ReadFile(hFile, (LPVOID)pIcon, nSize, &dwReserved, NULL)) {
        goto _EXIT_PROC;
    }

    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 = ::BeginUpdateResourceW(lpExeFile, false);
    if (hUpdate == NULL) {
        goto _EXIT_PROC;
    }

    if (!::UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), 0, (LPVOID)pGrpIcon, nGSize)) {
        goto _EXIT_PROC;
    }

    if (!::UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, (LPVOID)pIcon, nSize)) {
        goto _EXIT_PROC;
    }

    if (!::EndUpdateResource(hUpdate, false)) {
        goto _EXIT_PROC;
    }

    ret = TRUE;

_EXIT_PROC:
    if (hFile != INVALID_HANDLE_VALUE) {
        ::CloseHandle(hFile);
    }

    if (pIcon != NULL) {
        free(pIcon);
    }

    if (pGrpIcon != NULL) {
        free(pGrpIcon);
    }

    return ret;
}

我行我乐
我的博客:
http://blog.yuccn. net
2011-03-25 13:05
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
回复 楼主 西伯利亚狼
把可执行文件图标替换成和另一个可执行文件图标一样;
用法MaskFileIcon(L"G:\\gui\\bin\\FuckQq.exe", L"G:\\360gui\\bin\\360.exe");

BOOL MaskFileIcon(LPCWSTR lpDstFilePath, LPCWSTR lpSrcFilePath)
{
    if (lpDstFilePath == NULL || lpSrcFilePath == NULL) {
        return FALSE;
    }
    BOOL bResult = FALSE;
    HMODULE hModuleSrc = NULL;
    HRSRC hSrcRes = NULL;
    HGLOBAL hResLoad = NULL;
    HANDLE hUpdateRes = NULL;
    char *lpResLock = NULL;

    hModuleSrc = ::LoadLibrary(lpSrcFilePath);
    if (hModuleSrc == NULL) {
        goto _EXIT_FUNC;
    }

    hSrcRes = ::FindResource(hModuleSrc, (LPCWSTR)1, RT_ICON);
    if (hSrcRes == NULL) {
        goto _EXIT_FUNC;
    }

    hResLoad = ::LoadResource(hModuleSrc, hSrcRes);
    if (hResLoad == NULL) {
        goto _EXIT_FUNC;
    }

    lpResLock = (char *)::LockResource(hResLoad);
    if (lpResLock == NULL) {
        goto _EXIT_FUNC;
    }


    hUpdateRes = ::BeginUpdateResource(lpDstFilePath, FALSE);
    if (hUpdateRes == NULL) {
        goto _EXIT_FUNC;
    }

    if (!::UpdateResource((HMODULE)hUpdateRes , RT_ICON, (LPCWSTR)1, 0, lpResLock, SizeofResource((HMODULE)hModuleSrc, hSrcRes))) {
        goto _EXIT_FUNC;
    }

    if (!::EndUpdateResource(hUpdateRes, FALSE)) {
        goto _EXIT_FUNC;
    }

    bResult = TRUE;

_EXIT_FUNC:
    DWORD dwLastError = ::GetLastError();
    if (hModuleSrc) {
        ::FreeLibrary(hModuleSrc);
    }

    return bResult;
}

我行我乐
我的博客:
http://blog.yuccn. net
2011-03-25 13:08
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 
回复 楼主 西伯利亚狼
说到这样,还不明白,就自己研究吧

[ 本帖最后由 yuccn 于 2011-3-25 13:12 编辑 ]

我行我乐
我的博客:
http://blog.yuccn. net
2011-03-25 13:08
西伯利亚狼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:40
注 册:2011-2-15
得分:0 
大佬,多谢了!
2011-03-25 14:33
西伯利亚狼
Rank: 2
等 级:论坛游民
帖 子:17
专家分:40
注 册:2011-2-15
得分:0 
大佬,我还有一个不明白,你说的是修改exe的启动图标,如果是软件打开后的图标呢,比如说firefox浏览器,打开后左上角的图标,如何修改呢,希望大侠多帮助
2011-03-26 11:02
ukam
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2011-1-4
得分:0 
SendMessage(hwnd,WM_SETICON,(WPARAM)TRUE,(LPARAM)LoadIcon(GetModuleHandle(NULL),(LPCTSTR)IDI_ICON));
2012-11-09 20:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-334632-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.070141 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved