【问题标题】:Change icon of group in taskbar (Win7)更改任务栏中组的图标(Win7)
【发布时间】:2014-08-08 00:47:50
【问题描述】:

使用LoadImage我更改了一个组中所有窗口的图标。但是组图标不会改变。如何将相应的组获取到窗口并设置其图标?

【问题讨论】:

标签: winapi windows-7 taskbar


【解决方案1】:

组图标来自 EXE 文件本身(在多个 EXE 参与同一组的情况下,我想任务栏有一些算法来决定从哪个 EXE 中提取图标)。没有官方 API 可以更改群组图标。你必须manipulate the Taskbar directly,这不是不可能的,但也不是微不足道的。

更新:我刚刚遇到以下答案,也许它会对您有所帮助:

https://stackoverflow.com/a/219128/65863

更新:显然,上述链接中的注册表值仅适用于应用固定到任务栏的情况。

【讨论】:

  • 据我所知,该算法相当简单:它只选择第一个。
  • 那个站点是为 WinXP 准备的,试过了,但是当我在 Win7 上运行相同的代码时,我得到了处理返回。 @CodyGray 你能把我链接到算法吗,因为我已经用LoadImage 设置了所有图标但它没有使用第一组的图标:(
  • @Noitidart:Cody 的意思是它使用组中第一个 EXE 文件的图标,而不是组中的第一个窗口。同样,组图标来自 EXE 文件的资源,在 EXE 运行时您无法更改。
  • Ohhhh dang,所以没有办法让它使用第一个窗口的图标? :( 你在上面的注册表编辑很好,如果它被固定它就可以工作,但如果它没有固定它就不起作用。你到w-shadow.com/blog/2006/10/01/manipulating-taskbar-buttons 的链接仅适用于 WinXP 正确吗?Win7 有什么吗?
  • 显然不是。任务栏的内部实现在 Win7 中有所改变,不再使用标准的工具栏,按钮现在改为自定义绘制的图片。
【解决方案2】:

您的问题是:该图标确实采用了第一个 WINDOW 的图标,而不是 exe。但是,设置图标后,您必须右键单击任务栏中的图标,然后将其固定,然后将其取消固定。在取消固定任务栏图标时,现在采用第一个 Windows 图标。

我不知道如何以编程方式做到这一点,也许@RemyLebeau 知道。也许setClassLongPtr?不确定。

现在当它被固定时,你想让它使用相同的图标,所以像@RemyLebeau 建议的那样设置注册表值。

我也不知道怎么解释,但是在取消固定后,如果你打开跳转列表,图标就会恢复到exe的图标。这可以通过固定图标的注册表设置来解决,我不确定。

哇,Win7 的任务栏真是太棒了。

编辑:我尝试设置我的注册表值,但图标不起作用。它可能与以下内容有关:我为TaskbarGroupIcon 找到的注册表项都有一个以逗号和数字结尾的数据值(例如:%SystemRoot%\System32\imageres.dll,-4 中的,-4)

【讨论】:

  • "以逗号和数字结尾的值" - 如果您不想使用文件的默认图标资源,这就是您在文件中引用特定图标资源的方式。
  • 我明白了。我的路径以及主题作者图像是一个.ico 文件,所以不需要数字。
  • .ico 文件中可以有多个图标,在这种情况下,数字是索引。对于可执行文件,数字是资源 ID。
  • 谢谢,我确认固定/取消固定初始未固定更改的图标确实会使任务栏采用该图标。我会调查那个功能。 @RemyLebeau 索引是否以 0 开头?因为我也使用了没有逗号的 .ico 所以也许这就是为什么什么都没有显示吧?我们可以使用 .png 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
相关资源
最近更新 更多