我的.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:\或任何用户目录启动我的可执行文件,则以下图标都会正确更新:
但是,如果我启动已复制到文件夹C:\ Program Files \ MyApp中的完全相同的可执行文件,那么前两个正确更新。但是,任务栏上的图标不会更新。任务栏仍显示硬编码图标。
对于从C:\Program Files
下启动的程序的任务栏图标,是否有某种特殊保护?或者这里发生了什么?
我有cleared the icon cache并没有任何区别。我还尝试使用SendMessage
添加额外的ICON_SMALL
,但这也没有任何区别。
答案 0 :(得分:1)
我遇到了完全相同的问题。我的解决方案是创建一个虚拟程序,它纯粹执行我的主可执行文件的spawnlp(然后退出)。我可以将虚拟程序固定到任务栏或startmenu而没有问题,现在我的主程序的任务栏图标在运行时会改变我的意愿。