2016-03-31 8 views
0

Ich verwende WM_SETICON, um das Symbol einer Anwendung zu ändern. Dies funktioniert, wenn das Programm in Visual Studio-Debugger oder über die Befehlszeile ausgeführt wird, aber das falsche Taskleistensymbol beim Starten über eine Desktopverknüpfung unter Windows 7 verwendet. Durch Klicken mit der rechten Maustaste, um das Programm in der Taskleiste anzuheften und es zu lösen, wird das Symbol ordnungsgemäß angezeigt .WM_SETICON funktioniert nicht, wenn Programm über Verknüpfung gestartet

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

Es scheint, als ob etwas über eine Verknüpfung zu starten Sie das Programm verursacht einen schalen cached Symbol verwendet wird und WM_SETICON ignorieren. Auch das kleine Symbol neben der Titelleiste des Programms wird ordnungsgemäß aktualisiert. Es gibt nur Probleme mit dem Symbol in der Taskleiste.

Ich muss das Symbol wirklich programmatisch setzen, da es sich je nach Kommandozeile ändert. Kennt jemand eine Möglichkeit, dies zum Funktionieren zu bringen? Vielen Dank.

Antwort

0

Ich habe einen Workaround gefunden. Da die exe, auf die die Verknüpfungen verweisen, ihr Symbol nicht ändern kann, kann sie eine exe mit einem anderen Dateinamen starten, die dann Taskleistensymbole mit WM_SETICON ändern kann.

Verknüpfungen (1-n) haben jeweils ihr eigenes Symbol und zeigen auf IgnoresWMSetIcon.exe. Beim Start startet IgnoresWMSetIcon.exe CanChangeIcon.exe und schließt dann. CanChangeIcon.exe kann dann normal funktionieren.

Immer noch interessiert an einer Erklärung, warum dies der Fall ist, wenn jemand weiß.