在运行时如何设置Windows任务栏图标?

3

通常情况下,应用程序任务栏按钮所属的图标与EXE文件中包含并显示的程序图标相同。现在,在我的应用程序中,我想动态更改此图标,意味着读取了一个配置,其中指定了一个(PNG)图像。现在,应用程序加载此图像,并将其设置为新的任务栏图标。

但是:如何完成最后一步?我如何在运行时设置任务栏中的图标(而不是托盘中的图标)?

谢谢!


请访问https://msdn.microsoft.com/zh-cn/magazine/dd942846.aspx - Mark Ransom
@MarkRansom:任务栏API不允许您更改任务栏按钮的图标。只有拥有该按钮的窗口可以指定自己的图标。 - Remy Lebeau
1个回答

5

向您的窗口发送WM_SETICON消息,在wParam中传递大小(ICON_BIGICON_SMALL),并在lParam中传递新图标的句柄。

SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);

你需要使用 SendMessage() 替换 PostMessage()。而且你并不需要对 wParam 参数进行类型转换,只需要对 lParam 进行转换。SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); - Remy Lebeau
1
@Remy:相应地更新了答案。感谢你的帮助。 - Ken White
好的,这对我不起作用。图标的格式有特殊要求吗?我尝试了32x32、64x64和128x128像素,都是256种颜色。 - Elmi
它对我来说一直很好用,已经使用了多年。你尝试过使用实际的图标文件而不是 .PNG 吗?我在我的答案中链接了消息的文档。我无法解释为什么它对你不起作用,因为我看不到你的代码或你正在尝试加载的图像。 - Ken White
Ken White:看起来这是由于EXE包含具有不同分辨率(16x16、32x32、48x48、128x128等)的图标所致。因此,当我设置自定义图标时,Windows似乎决定使用原始图标中的另一个图标 - 但其大小不同。 - Elmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接