我有一些windows应用程序可以使用win函数更改他的图标。
SendMessage(hwnd, WM_SETICON, ICON_BIG, icon_handle);
SendMessage(hwnd, WM_SETICON, ICON_SMALL, icon_handle);
Shell_NotifyIcon(...);
它在任务栏和托盘(任务栏通知区域)中更改图标,但在任务管理器中的图标仍然是未更改的。如何在任务管理器中更改图标?有可能吗?
发布于 2013-10-29 10:45:25
来自这就是答案
更改所有图标(包括应用程序)非常重要,无论是小图标还是大图标:
//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
)。
注意:塞特康中提到的评论
系统不会复制图标。在销毁窗口之前不要销毁图标。
发布于 2016-02-01 16:13:02
这是一个普通的Windows错误。任务管理器和资源管理器很长一段时间都会记住与文件相关的图标。如果您的图标在exe中的ID最低,则它应该显示为任务管理器(根节点)中的应用程序图标。但如果你最近改变了它,它可能不起作用。窗口本身的图标是一个完全不同的东西-如果它没有显示,您的代码是错误的。
发布于 2018-08-18 07:10:38
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);
https://stackoverflow.com/questions/19655327
复制相似问题