Windows10 タスクバー DESKBAND(デスクバンド)の管理・削除

提供:yonewiki
2023年5月5日 (金) 19:59時点におけるYo-net (トーク | 投稿記録)による版 (→‎デスクバンド一覧取得API)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

Windows10に戻る。

概要

 DESKBAND(デスクバンド)とは、タスクバーのクイック起動の一種として追加できるガジェット領域です。例えば、バッテリーを管理するアプリを追加すると以下のような大きなアイコンをタスクバーに追加することが出来ます。このときの領域を正式にはDESKBAND(デスクバンド)という呼称がつけられています。


デスクバンドのイメージ


 正直、知っている人は少ないと思う。これが割かし新しい技術でありながら、しょぼい仕組みになっていて、消せない無効領域を作り出したりすることがあります。ToolBarの表示・非表示を切り替えたりすると追加したアプリが管理できない状態に変化させたりして領域を壊したりもします。消せなくなったDESKBANDを消す方法をここでは、追及したいと思います。できればレジストリの仕組みまで究明できたらなと思います。


デスクバンド一覧取得API

 パソコンに導入されているDESKBANDの一覧を取得するAPIの使い方は以下の通りです。

    HRESULT   hr;
    DWORD     i, dwCount;
    DWORD     dwBandId;
    IPersist* pPersist;
    IBandSite* pBandSite;
    LPOLESTR  lpszClsid;
    CLSID     clsid;
    CLSID     clsidTarget = { 0x112143a6, 0x62c1, 0x4478, {0x9e, 0x8f, 0x87, 0x26, 0x99, 0x25, 0x5e, 0x2e} };

    CoInitialize(NULL);

    hr = CoCreateInstance(CLSID_TrayBandSiteService, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pBandSite));
    //DESKBAND COM インターフェイス初期化 IBandSite型ポインタのpBandSite準備
    if (FAILED(hr)) {
        CoUninitialize();
        return 0;
        //CLSID_TrayBandSiteServiceのDeskbandCOMインターフェイス初期化失敗なので0を返却、強制終了。
    }
    dwCount = pBandSite->EnumBands(-1, &dwBandId);
    //pBandSiteのメンバ関数EnumBandsで第1引数に-1を設定して総数を取得する。
    //dwCountにはDESKBANDの総数をDWORD値で取得。
    for (i = 0; i < dwCount; i++) {
        //DWORD値を持つiを0から総数までカウントアップ
        pBandSite->EnumBands(i, &dwBandId);
        //i番目のDESKBANDのIDをdwBandIdに設定。
        pBandSite->GetBandObject(dwBandId, IID_PPV_ARGS(&pPersist));
        //IPersist型COMインタフェイスに0~総数番までのDESKBANDオブジェクトを順次格納
        pPersist->GetClassID(&clsid);
        //GUIDをclsid型配列に取得
        pPersist->Release();

       if (IsEqualCLSID(clsid, clsidTarget)) {//clsidTargetに一致するDeskbandをリムーブする場合
            StringFromCLSID(clsid, &lpszClsid);
            MessageBoxW(NULL, lpszClsid, L"OK", MB_OK);
            pBandSite->RemoveBand(dwBandId);//一時的な削除。登録自体は各アプリdllがregsvr32で登録して、バックグランウンド動作するようにやっている。
            CoTaskMemFree(lpszClsid);
        }
    }
    pBandSite->Release();
    CoUninitialize();


 上記のAPIを使うことでDeskbandを一覧を取得できます。for文の中でブレークポイントを設定して、clsidに格納される値をレジストリエディタで検索して調べてください。追いかけるとまぁまぁわかってくると思います。Windows10ではタスクバーが下側にあるときにタスクバーを右クリックして表示されるニュースと関心事項のためのDeskbandとPeopleという機能のためのDeskbandが2つ登録されています。


  • C:\Windows\System32\OneCoreUAPCommonProxyStub.dll
  • %SystemRoot%\system32\peopleband.dll


 っていうものが登録されています。自分はタスクバーを上にやっているんですけど、この場合はニュースと関心事項を有効にしていると設定も変えられない謎の領域というか空白というかスペースがかなり広い領域で損失となります。正直、このせいでDeskbandという仕組みを調べるきっかけになりました。タスクバーを下に移動させて、右クリックして表示されるメニューからニュースと関心事項を非表示にするだけでした。タスクバーが上に表示されているときは、非表示に変更するためのメニューが表示されません。何かの不具合で壊れたDeskbandが登録されているというわけではなかったです。

  Windows10に戻る。