通过快捷方式启动程序时,WM_SETICON无法正常工作

时间:2016-03-31 00:31:08

标签: c++ windows icons shortcut sendmessage

我正在使用WM_SETICON来更改应用程序的图标。当程序在VisualStudio调试器中运行或通过命令行运行时,此方法有效,但在Windows 7上通过桌面快捷方式启动时使用错误的任务栏图标。右键单击以将程序固定到任务栏,然后取消固定它会使图标正确显示

HICON icon = (HICON) LoadImage(NULL, iconStr, IMAGE_ICON, 32, 32,   LR_LOADFROMFILE| LR_SHARED);
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)icon);
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)icon);
SendMessage(hwnd, WM_SETICON, ICON_SMALL2, (LPARAM)icon);

似乎有关通过快捷方式启动的事情导致程序使用陈旧的缓存图标并忽略WM_SETICON。程序标题栏旁边的小图标也正确更新,只有任务栏上的图标有问题。

我确实需要以编程方式设置图标,因为它会根据命令行进行更改。有谁知道如何使这项工作?感谢。

1 个答案:

答案 0 :(得分:1)

我确实找到了解决方法。由于快捷方式引用的exe不能更改它的图标,因此它可以启动具有不同文件名的exe,然后可以使用WM_SETICON更改任务栏图标。

快捷方式(1-n)每个都有自己的图标,并指向IgnoresWMSetIcon.exe。 在启动时IgnoresWMSetIcon.exe启动CanChangeIcon.exe然后关闭。然后CanChangeIcon.exe能够正常运行。

如果有人知道,仍然有兴趣解释为什么会这样。