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

时间:2010-10-29 04:07:29

标签: c# winforms icons

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

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

2 个答案:

答案 0 :(得分:15)

将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);
}

答案 1 :(得分:6)

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

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

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

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

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

最终结果如下所示:

WPF

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