Windows10 タスクバー DESKBAND(デスクバンド)の管理・削除 新しいページはコチラ
提供: yonewiki
(→概要) |
|||
1行: | 1行: | ||
+ | [[Windows10]]に戻る。 | ||
== '''概要''' == | == '''概要''' == | ||
DESKBAND(デスクバンド)とは、タスクバーのクイック起動の一種として追加できるガジェット領域です。例えば、バッテリーを管理するアプリを追加すると以下のような大きなアイコンをタスクバーに追加することが出来ます。このときの領域を正式にはDESKBAND(デスクバンド)という呼称がつけられています。 | DESKBAND(デスクバンド)とは、タスクバーのクイック起動の一種として追加できるガジェット領域です。例えば、バッテリーを管理するアプリを追加すると以下のような大きなアイコンをタスクバーに追加することが出来ます。このときの領域を正式にはDESKBAND(デスクバンド)という呼称がつけられています。 | ||
4行: | 5行: | ||
[[ファイル:Windows10 Deskband Outline.png|400px|thumb|none|デスクバンドのイメージ]] | [[ファイル:Windows10 Deskband Outline.png|400px|thumb|none|デスクバンドのイメージ]] | ||
+ | |||
正直、知っている人は少ないと思う。これが割かし新しい技術でありながら、しょぼい仕組みになっていて、消せない無効領域を作り出したりすることがあります。ToolBarの表示・非表示を切り替えたりすると追加したアプリが管理できない状態に変化させたりして領域を壊したりもします。消せなくなったDESKBANDを消す方法をここでは、追及したいと思います。できればレジストリの仕組みまで究明できたらなと思います。 | 正直、知っている人は少ないと思う。これが割かし新しい技術でありながら、しょぼい仕組みになっていて、消せない無効領域を作り出したりすることがあります。ToolBarの表示・非表示を切り替えたりすると追加したアプリが管理できない状態に変化させたりして領域を壊したりもします。消せなくなったDESKBANDを消す方法をここでは、追及したいと思います。できればレジストリの仕組みまで究明できたらなと思います。 | ||
+ | |||
+ | |||
+ | == '''デスクバンド一覧取得API''' == | ||
+ | パソコンに導入されているDESKBANDの一覧を取得するAPIの使い方は以下の通りです。 | ||
+ | |||
+ | <syntaxhighlight2 lang="cpp"> | ||
+ | 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(); | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | |||
+ | 上記のAPIを使うことでDeskbandを一覧を取得できます。for文の中でブレークポイントを設定して、clsidに格納される値をレジストリエディタで検索して調べてください。追いかけるとまぁまぁわかってくると思います。Windows10ではタスクバーが下側にあるときにタスクバーを右クリックして表示されるニュースと関心事項のためのDeskbandとPeopleという機能のためのDeskbandが2つ登録されています。 | ||
+ | |||
+ | |||
+ | *C:\Windows\System32\OneCoreUAPCommonProxyStub.dll | ||
+ | *%SystemRoot%\system32\peopleband.dll | ||
+ | |||
+ | |||
+ | |||
+ | っていうものが登録されています。自分はタスクバーを上にやっているんですけど、この場合はニュースと関心事項を有効にしていると設定も変えられない謎の領域というか空白というかスペースがかなり広い領域で損失となります。正直、このせいでDeskbandという仕組みを調べるきっかけになりました。タスクバーを下に移動させて、右クリックして表示されるメニューからニュースと関心事項を非表示にするだけでした。何かの不具合で壊れたDeskbandが登録されているというわけではなかったです。 | ||
+ | |||
+ | |||
+ | [[Windows10]]に戻る。 |