質問者
タスクバーのアイコンを動的に変更

質問
-
お世話になります。
タスクバーのアイコンを動的に変更したいです。
環境:Windows 11+Win32 API(MFC不使用)
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
HICON hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hIcon);
DestroyIcon(hIcon);
hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON4));
SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hIcon);
DestroyIcon(hIcon);以上のコードで、アプリケーションの左上のアイコンは変わるのですが、
タスクバーのアイコンが変わりません。
タスクバーのアイコンを動的に変更することは不可能なのでしょうか?
なお、hIconがNULLでないことは確認しています。
よろしくお願いします。
すべての返信
-
「ウィンドウのアイコン」と「アプリのアイコン」は別ですので、反応しないはずです。
また、タスクバーのアイコンはピン止めで固定できることもあるので、プロセスやウィンドウの状態によってアイコンを変えるとユーザーの混乱を招く(ピン止めしているアプリのアイコンが変化するなど)ので、避けるべきだと考えられます。
ただし、処理中を示したり、アイコンを重ねたりということはできます。
https://learn.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist3-setoverlayicon
https://learn.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist3-setprogressstate -
Win11にて試しましたがタスクバーのアイコンも変更され、再現しませんでした。
Q&Aにて、WM_SETICON does not update taskbar icon in windows 11という質問があり、アイコンファイルに含まれるアイコンのサイズ、ICON_SMALL/ICON_BIG、スクリーンのDPIの組み合わせで再現するというような情報はあります。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
ICON_SMALLとICON_BIGを両方とも指定しまうと再現するっぽい。
ICON_SMALLのときはICON_BIGの指定を、あるいは逆を解除すれば発生しなくなりました。
if (flag) { SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, NULL); SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, (LPARAM)hIcon); } else { SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_SMALL, NULL); SendMessage(hWnd, WM_SETICON, (WPARAM)ICON_BIG, (LPARAM)hIcon); }
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 Saki-MSFTModerator 2022年10月27日 1:01
-
KrKrKrKさん、こんにちは。フォーラムオペレーターのSakiです。
MSDNフォーラムにてご投稿くださいましてありがとうございます。
ご質問いただいた件について、その後いかがでしょうか。
皆様から寄せられた投稿はお役に立ちましたか。
参考になった投稿には【回答としてマーク】をお願い致します。
設定いただくことで、
他のユーザーもお役に立つ回答を見つけやすくなります。
お手数をおかけしますが、ご協力の程どうかよろしくお願いいたします。MSDN/ TechNet Community Support Saki ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。