【问题标题】:How to change the icon in taskbar using windows api如何使用windows api更改任务栏中的图标
【发布时间】:2013-08-31 20:29:22
【问题描述】:

我正在编写一个小型 Windows 应用程序。

我想使用 nsis 脚本创建安装程序。

我知道如何使用更改默认应用程序图标、开始菜单图标和桌面快捷方式图标

应用程序图标:!define MUI_ICON "${INSTALL_ICON}"

开始菜单快捷方式:CreateShortCut "$SMPROGRAMS\$StartMenuFolder\shorcutName.lnk" "$INSTDIR\executableName.exe" "" "$INSTDIR\${INSTALL_ICON}" 0

桌面快捷方式:CreateShortCut "$DESKTOP\shorcutName.lnk" "$INSTDIR\executableName.exe" "" "$INSTDIR\${INSTALL_ICON}" 0

但我还想更改显示在应用程序窗口左上角的图标。 并且任务管理器中显示的图标和任务栏上显示的图标。我认为应该使用winapi来完成。

任何帮助将不胜感激。

提前致谢

【问题讨论】:

    标签: c++ winapi icons


    【解决方案1】:

    更改所有图标很重要,包括应用程序,无论大小:

    //Change both icons to the same icon handle.
    SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon);
    
    //This will ensure that the application icon gets changed too.
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon);
    

    【讨论】:

    • 嗨@Phoenix,GetWindow GW_OWNER 总是返回给我NULL (0x0)。你是什​​么意思改变应用程序图标?执行第一部分会更改任务栏和窗口中的图标。如果它固定,它不会更改任务栏图标。所以我只是想知道您所说的“应用程序图标”是什么意思。谢谢!
    • @Noitidart 我相信 Alt+Tab 中使用的图标。可能还有另一个图标需要考虑,或者它甚至不起作用?
    • 感谢@Phoenix 我无法让GW_OWNER 给我成功,所以它对我没有任何帮助。为了让它在任务栏中进行更改,如果它被固定,它将不适用于WM_SETICON,在这种情况下,我必须在固定目录中使用 IShellLink/IPersistFile 更新图标(可能在隐式中):@ 987654321@。如果它没有固定,我必须使用SHGetPropertyStoreForWindow 设置图标,以防他稍后将其固定,我做了WM_SETICONs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多