首页 > 解决方案 > 如何以编程方式设置应用程序 EXE 文件的图标?

问题描述

如何以编程方式将默认应用程序图标更改为自定义图标,即不使用资源文件(只是在 EXE 文件旁边放一个图标)。

我只知道一种使用资源文件的方法,但我想知道一种以编程方式执行此操作的方法(代码和外部图标)。

另外,我尝试了以下代码:

HANDLE hIcon = LoadImage(0, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
HWND hwnd = GetConsoleWindow();
if (hIcon) {
    //Change both icons to the same icon handle.
    SendMessage(hwnd, WM_SETICON, ICON_SMALL,(LPARAM) hIcon);
    SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon);

    //This will ensure that the application icon gets changed too.
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, (LPARAM)hIcon);
}

但是该代码只是更改了窗口左角的图标,而不是应用程序 EXE 文件。

如何以编程方式设置应用程序 EXE 文件的图标?

标签: c++winapi

解决方案


EXE 无法在运行时以可编程的方式更改其自己的图标(正如您所发现的,它只能更改其 UI 窗口中显示的图标)。EXE 的图标必须静态存储在 EXE 的资源中,也就是操作系统查找图标的地方。并且在EXE运行时不能改变EXE的资源。

但是,您可以创建 EXE 的快捷方式,然后更改快捷方式的图标。


推荐阅读