none
タスクバーのアイコンを動的に変更 RRS feed

  • 質問

  • お世話になります。

    タスクバーのアイコンを動的に変更したいです。

    環境: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でないことは確認しています。

    よろしくお願いします。

    2022年10月23日 6:21

すべての返信

  • 「ウィンドウのアイコン」と「アプリのアイコン」は別ですので、反応しないはずです。

    また、タスクバーのアイコンはピン止めで固定できることもあるので、プロセスやウィンドウの状態によってアイコンを変えるとユーザーの混乱を招く(ピン止めしているアプリのアイコンが変化するなど)ので、避けるべきだと考えられます。

    ただし、処理中を示したり、アイコンを重ねたりということはできます。
    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

    2022年10月23日 11:23
    モデレータ
  • Win11にて試しましたがタスクバーのアイコンも変更され、再現しませんでした。

    Q&Aにて、WM_SETICON does not update taskbar icon in windows 11という質問があり、アイコンファイルに含まれるアイコンのサイズ、ICON_SMALL/ICON_BIG、スクリーンのDPIの組み合わせで再現するというような情報はあります。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2022年10月24日 3:43
  • 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!)

    2022年10月25日 3:29
  • KrKrKrKさん、こんにちは。フォーラムオペレーターのSakiです。
    MSDNフォーラムにてご投稿くださいましてありがとうございます。

    ご質問いただいた件について、その後いかがでしょうか。
    皆様から寄せられた投稿はお役に立ちましたか。

    参考になった投稿には【回答としてマーク】をお願い致します。

    設定いただくことで、
    他のユーザーもお役に立つ回答を見つけやすくなります。

    お手数をおかけしますが、ご協力の程どうかよろしくお願いいたします。

    MSDN/ TechNet Community Support Saki ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。

    2022年10月25日 7:01
    モデレータ