首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在任务管理器中更改应用程序图标

如何在任务管理器中更改应用程序图标
EN

Stack Overflow用户
提问于 2013-10-29 10:18:01
回答 3查看 3.7K关注 0票数 2

我有一些windows应用程序可以使用win函数更改他的图标。

代码语言:javascript
运行
复制
SendMessage(hwnd, WM_SETICON, ICON_BIG, icon_handle);
SendMessage(hwnd, WM_SETICON, ICON_SMALL, icon_handle);

Shell_NotifyIcon(...);

它在任务栏和托盘(任务栏通知区域)中更改图标,但在任务管理器中的图标仍然是未更改的。如何在任务管理器中更改图标?有可能吗?

EN

回答 3

Stack Overflow用户

发布于 2013-10-29 10:45:25

来自这就是答案

更改所有图标(包括应用程序)非常重要,无论是小图标还是大图标:

代码语言:javascript
运行
复制
//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);

编辑

根据这就是答案,图标需要是由图标编辑器创建的.ICO文件;这篇文章还提到需要将消息发送到应用程序的最上面的窗口。

我可以切换任务栏、alt-选项卡和任务管理器中的图标。

( a)使用Visual资源编辑器创建图标

( b)用类似于HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));的代码加载图标

( c)将WM_SETICON, ICON_SMALL发送到最上面的窗口--我使用的是MFC应用程序,所以我将消息发送到主框架窗口(AfxGetApp()->m_pMainWnd)。

注意:塞特康中提到的评论

系统不会复制图标。在销毁窗口之前不要销毁图标。

票数 2
EN

Stack Overflow用户

发布于 2016-02-01 16:13:02

这是一个普通的Windows错误。任务管理器和资源管理器很长一段时间都会记住与文件相关的图标。如果您的图标在exe中的ID最低,则它应该显示为任务管理器(根节点)中的应用程序图标。但如果你最近改变了它,它可能不起作用。窗口本身的图标是一个完全不同的东西-如果它没有显示,您的代码是错误的。

票数 1
EN

Stack Overflow用户

发布于 2018-08-18 07:10:38

代码语言:javascript
运行
复制
BOOL sendWndIconToTaskbar(HWND hWnd,HICON hIcon) 
{ 
    BOOL ret = TRUE; 
    ASSERT(hWnd); 
    if(!::IsWindow(hWnd)) 
        return FALSE; 
    CWnd* pWnd; 
    pWnd = pWnd->FromHandle(hWnd); 
    ASSERT(pWnd); 
    if(!pWnd) 
        return FALSE; 
    if(pWnd->GetParent())
    {
        if(::SetWindowLong(hWnd,GWL_HWNDPARENT,NULL) == 0) 
            return FALSE; 
    }


    if(!(pWnd->ModifyStyle(NULL,WS_OVERLAPPEDWINDOW))) 
        ret = FALSE; 
    pWnd->SetIcon(hIcon,TRUE); 
    pWnd->SetIcon(hIcon,FALSE); 

    return ret; 
} 

HICON hIconSm = (HICON)LoadImage(NULL, "default.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
sendWndIconToTaskbar(pOcxDlg->m_hWnd,hIconSm);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19655327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档