exe文件图标更改。从SHELL32.dll拍摄的图标

时间:2011-02-28 16:58:17

标签: c++ winapi

我需要使用我的程序更改一些exe文件图标。 我在MSDN和网站上找到了一些信息和示例代码,但我仍然在同一个地方。

我需要从SHELL32.dll中提取图标

uInt = ExtractIconEx("%SystemRoot%\\system32\\SHELL32.dll" , -63008, &hIcon, NULL, 1);

然后更新一些exe文件资源。但在这里我的问题开始了。 我不知道如何使用ExtractIconEx()函数返回的HICON作为UpdateResource()函数的参数。

这是功能代码:

void ChangeFileIcon(char * file)
{
    HICON hIcon;
    UINT uInt;
    HANDLE hFile;
    LPVOID lpResLock;

    uInt = ExtractIconEx("%SystemRoot%\\system32\\SHELL32.dll" , -63008, &hIcon, NULL, 1);
    printf("%d", uInt);

    lpResLock = LockResource(hIcon); 
    if (lpResLock == NULL){
        printf("LockResource fail ;s\n");
        return ;
    }

    hFile = BeginUpdateResource(file, false);

    if(hFile == NULL){
        printf("hFile == NULL - error %d\n", GetLastError());
        return;
    }

    UpdateResource(hFile, 
        RT_ICON, 
        MAKEINTRESOURCE(1), 
        MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
        lpResLock(?),
        SizeofResource(????, ????)););

    EndUpdateResource(hFile, FALSE);
}

来自MSDN的例子,但它根本没有帮助我: http://msdn.microsoft.com/en-us/library/ms648008%28v=vs.85%29.aspx#_win32_Updating_Resources (在此示例资源中,一个exe被复制到另一个)

感谢您的回答, 埋

1 个答案:

答案 0 :(得分:2)

在这种情况下你不能使用HICON,HICON是特定尺寸和颜色深度的单个图像,但“真实”图标资源通常是图像集合(16x16,32x32等)

不要使用ExtractIconEx,切换到LoadLibraryEx(并使用其中一个加载作为数据文件标志),然后使用FindResource [Ex]查找图标资源。