Windows10 タスクバー DESKBAND(デスクバンド)の管理・削除 新しいページはコチラ
提供: yonewiki
(→概要) |
(→概要) |
||
8行: | 8行: | ||
正直、知っている人は少ないと思う。これが割かし新しい技術でありながら、しょぼい仕組みになっていて、消せない無効領域を作り出したりすることがあります。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; | ||
+ | //COMインターフェイス初期化失敗なので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(); | ||
+ | } | ||
+ | </syntaxhighlight2> |