如果exe在Program Files中,则在运行时更改任务栏图标

时间:2014-12-09 11:25:48

标签: windows winapi windows-7 icons taskbar

我的.exe有一个硬编码图标,但在运行时它可以从文件中加载另一个图标。它通过执行以下操作激活从文件加载的图标:

Application->Icon->LoadFromFile(filename);

在C ++ Builder中,归结为以下对Delphi中Windows API的调用:

SendMessage(Handle, WM_SETICON, ICON_BIG, LPARAM(GetIconHandle));
SetClassLong(Handle, GCL_HICON, LPARAM(GetIconHandle));

如果我从C:\或任何用户目录启动我的可执行文件,则以下图标都会正确更新:

  • 主窗口标题栏上的角图标
  • Alt-Tab屏幕中的图标
  • 任务栏上的图标

但是,如果我启动已复制到文件夹C:\ Program Files \ MyApp中的完全相同的可执行文件,那么前两个正确更新。但是,任务栏上的图标不会更新。任务栏仍显示硬编码图标。

对于从C:\Program Files下启动的程序的任务栏图标,是否有某种特殊保护?或者这里发生了什么?

我有cleared the icon cache并没有任何区别。我还尝试使用SendMessage添加额外的ICON_SMALL,但这也没有任何区别。

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题。我的解决方案是创建一个虚拟程序,它纯粹执行我的主可执行文件的spawnlp(然后退出)。我可以将虚拟程序固定到任务栏或startmenu而没有问题,现在我的主程序的任务栏图标在运行时会改变我的意愿。