将不同的任务栏图标设置为标题栏(C#)中显示的图标?

我有应用程序图标的深色和浅色版本; 黑暗版本最适用于灰色表面,例如Windows XP任务栏,其中灯光版本最适合作为标题栏中的图标。

有没有办法可以将任务栏中的图标设置为与C#中我的表单中使用的图标不同的图标(P / Invoke很好)?

将WM_SETICON消息发送到具有ICON_SMALL和ICON_BIG参数的不同图标句柄的表单:

[DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); private const uint WM_SETICON = 0x80u; private const int ICON_SMALL = 0; private const int ICON_BIG = 1; public MyForm() { InitializeComponent(); SendMessage(this.Handle, WM_SETICON, ICON_SMALL, Properties.Resources.IconSmall.Handle); SendMessage(this.Handle, WM_SETICON, ICON_BIG, Properties.Resources.IconBig.Handle); } 

我知道这是一个古老的问题,但是当我尝试实现相同的目标时,我遇到了它,而且是的,你至少可以在Windows 7/8上做到这一点。

事实certificate,ICO文件不仅包含一个图像,它包含9种不同分辨率的9种不同图像:

  • 16×16
  • 24×24
  • 32×32
  • 48×48
  • 64×64
  • 最高72×72
  • 80×80
  • 96×96
  • 128×128

在Windows 7和8上,任务栏上使用64×64图像,图表上使用16×16图像,该图标位于表单的左上角。

您可以使用像Greenfish Icon Editor Pro这样的工具(我不适用于它们或任何东西,这不是插件!)将这些作为两个单独的图像,然后将这个*.ico文件正常添加到Windows Visual Studio中的表单/ WPF表单。

最终结果如下所示:

WPF

正如您所看到的,我的WPF应用程序有两个单独的图标,一个在任务栏中,另一个在窗体上。