c++ - exe文件图标变化。取自 SHELL32.dll 的图标

标签 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 被复制到另一个)

谢谢你的回答, 埋葬

最佳答案

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

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

关于c++ - exe文件图标变化。取自 SHELL32.dll 的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144999/

相关文章:

c++ - tinyxml 无法正确解析 const char*

c++ - 从扬声器录制并通过按键结束录制过程,而不是等待指定的时间

创建 IWebBrowser2 控件

c# - 通过使用 "run with highest privileges"的计划任务启动时无法读取存储的凭据

c++ - 在 LPSTR (UNICODE) C++ 中递增元素时出错

c++ 宏扩展时未在此范围内声明变量

c++ - 在 OpenCV 中绘制矩形

c++ - 使用 C++/CLI 包装 native C++ 模板化类

windows - list 中 "highestAvailable"和 "requireAdministrator"在海拔方面的区别?

c++ - Valgrind 错误 : in use at exit: 72, 704 字节 C++ 初始化列表异常与 char*