exe文件图标更改。图标取自 SHELL32.dll

Posted

技术标签:

【中文标题】exe文件图标更改。图标取自 SHELL32.dll【英文标题】:Exe file icon change. Icon taken from SHELL32.dll 【发布时间】:2011-02-28 16:58:17 【问题描述】:

我需要使用我的程序更改一些 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 被复制到另一个)

感谢您的回答, 埋葬

【问题讨论】:

Using UpdateResource in C#?的可能重复 您最好使用工具来执行此操作,而不是尝试对其进行编程。例如,IcoFX 会让这变得微不足道。 【参考方案1】:

在这种情况下,您不能使用 HICON,HICON 是具有特定大小和颜色深度的单个图像,但“真正的”图标资源通常是图像的集合(16x16、32x32 等)

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

【讨论】:

以上是关于exe文件图标更改。图标取自 SHELL32.dll的主要内容,如果未能解决你的问题,请参考以下文章

win10如何完全更改一个exe运行文件的图标样式?

如何替换应用程序(EXE)图标?

如何更改任意exe图标?

怎样更改已生成的exe文件的ico图标

如何更改exe文件的图标

C语言中,如何更改.EXE文件的图标