Win32 API 日本語リファレンス
ホームUI.Shell › ITaskbarList3

ITaskbarList3

COM
IIDea1afb91-9e28-4b86-90e9-9e9f8a5eefaf継承元ITaskbarList2自前メソッド開始 vtbl9

公式ドキュメント

ITaskbarList2 を拡張し、Windows 7 で追加された、統合された起動とタスクバーボタンの切り替え機能をサポートするメソッドを公開します。

解説(Remarks)

このインターフェイスは、継承元である ITaskbarList および ITaskbarList2 インターフェイスのメソッドも提供します。

実装するタイミング

このインターフェイスの実装は、CLSID_TaskbarList として Windows に用意されています。このインターフェイスがサードパーティによって実装されることはありません。

使用するタイミング

このインターフェイスのメソッドは、次の目的で使用します。
  • 通知などのオーバーレイをタスクバーアイコンに適用する場合。
  • 項目のコピーやインストールなど、操作の進行状況を表示する場合。
  • サムネイルにツールバーを追加する場合。
  • アプリケーションがウィンドウを表示すると、そのタスクバーボタンはシステムによって作成されます。ボタンが配置されると、タスクバーはそのウィンドウに TaskbarButtonCreated メッセージを送信します。アプリケーションは RegisterWindowMessage(L"TaskbarButtonCreated") を呼び出し、そのメッセージを wndproc で処理する必要があります。いずれかの ITaskbarList3 メソッドを呼び出す前に、アプリケーションはこのメッセージを受信していなければなりません。
    アプリケーションが自身をプログラムからタスクバーにピン留めすることはできません。その機能は厳密にユーザーのために予約されています。

    メソッド 12

    vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

    vtbl 9 HRESULT SetProgressValue(HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal)

    タスクバーボタンにホストされる進行状況バーを表示または更新し、操作全体のうち完了した具体的な割合を示します。

    hwndHWNDin進行状況インジケーターとして使用される、関連付けられたタスクバーボタンを持つウィンドウのハンドル。
    ullCompletedULONGLONGinメソッドが呼び出された時点で操作のうち完了した割合を示す、アプリケーション定義の値。
    ullTotalULONGLONGin操作が完了したときに ullCompleted が取る値を指定する、アプリケーション定義の値。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    確定的進行状況バーのライフサイクル

    アプリケーションはまず SetProgressValue を呼び出して確定的進行状況バーの表示を開始し、その後、進行状況の変化に応じて必要なだけ再度呼び出してバーを更新します。進行が完了したら、アプリケーションは SetProgressStateTBPF_NOPROGRESS フラグ付きで呼び出して進行状況バーを消去する必要があります。

    タスクバーボタンがグループの進行状況インジケーターを選択する方法

    タスクバーボタンが進行状況インジケーターを表示できるのは、一度に 1 つのウィンドウについてのみです。タスクバーボタンがグループを表しており、そのグループ内の複数のウィンドウが進行状況情報をブロードキャストしている場合、タスクバーボタンは次の状態の優先順位に基づいて表示する進行状況を選択します。
    優先順位 状態
    1 TBPF_ERROR
    2 TBPF_PAUSED
    3 TBPF_NORMAL
    4 TBPF_INDETERMINATE

    SetProgressState がそのウィンドウにブロック状態 (TBPF_ERROR または TBPF_PAUSED) を設定していない限り、SetProgressValue の呼び出しは、明示的に設定されていなくても TBPF_NORMAL 状態を想定します。SetProgressValue の呼び出しは TBPF_INDETERMINATE 状態を上書きしてクリアします。

    2 つのウィンドウが確定的な進行状況をブロードキャストしていて優先順位が衝突する場合は、進行が最も少ないウィンドウが使用されます。

    この優先順位に基づき、この確定的 (具体的な割合を示す) 進行状況インジケーターは次の場合に表示されます。

    グループ内のいずれかのウィンドウが TBPF_ERROR または TBPF_PAUSED を設定している場合は、その状態がボタン表示に使用されます。ただし、グループ内の他のブロックされていないウィンドウに対して SetProgressValue を呼び出し、それらの進行状況をバックグラウンドで更新することは引き続き可能です。

    次の例は、操作の実行中に ITaskbarList3 を使用して進行状況を表示する方法を示しています。

    HRESULT CMyApp::ShowProgressInTaskbar(HWND hwnd, __in ITaskbarList3 *pTL)
    {
        // Set the progress state of the button to indeterminate while you calculate
        // the number of operations to be performed.
        HRESULT hr = pTL->SetProgressState(hwnd, TBPF_INDETERMINATE);
    
        // Calculate the number of operations to perform.
        int cTotalOperations = _CalculateNumberOfOperationsToPerform();
    
        for (int i=0; i < cTotalOperations && SUCCEEDED(hr); i++)
        {
            // Update the progress. This call to SetProgressValue cancels the
            // indeterminate state and puts the button into normal progress mode.
            pTL->SetProgressValue(hwnd, i, cTotalOperations);
           
            // Do whatever operation your application needs to perform.
            hr = _PerformOperation(i);
        }
    
        // Tell the button that progress no longer needs to be displayed.
        pTL->SetProgressState(hwnd, TBPF_NOPROGRESS);
        
        return hr;
    }
    
    vtbl 10 HRESULT SetProgressState(HWND hwnd, TBPFLAG tbpFlags)

    タスクバーボタンに表示される進行状況インジケーターの種類と状態を設定します。

    hwndHWNDin操作の進行状況を表示するウィンドウのハンドル。このウィンドウに関連付けられたタスクバーボタンに進行状況バーが表示されます。
    tbpFlagsTBPFLAGin

    進行状況ボタンの現在の状態を制御するフラグ。次のフラグのうち 1 つだけを指定します。すべての状態は互いに排他的です。

    TBPF_NOPROGRESS (0x00000000)

    進行状況の表示を停止し、ボタンを通常の状態に戻します。操作が完了またはキャンセルされたときに、このフラグを指定してこのメソッドを呼び出し、進行状況バーを消去します。

    TBPF_INDETERMINATE (0x00000001)

    進行状況インジケーターはサイズが大きくなるのではなく、タスクバーボタンの長さに沿って繰り返し循環します。これは、進行のうちどの程度が完了したかを指定せずに、活動が行われていることを示します。進行は行われていますが、操作にどれだけの時間がかかるかの予測はありません。

    TBPF_NORMAL (0x00000002)

    進行状況インジケーターは、操作の推定完了量に比例して、左から右へサイズが大きくなります。これは確定的な進行状況インジケーターであり、操作の所要時間について予測が行われています。

    TBPF_ERROR (0x00000004)

    進行状況をブロードキャストしているいずれかのウィンドウでエラーが発生したことを示すため、進行状況インジケーターが赤くなります。これは確定的な状態です。進行状況インジケーターが不確定状態の場合は、実際の進行を示さない一般的な割合を赤の確定的表示に切り替えます。

    TBPF_PAUSED (0x00000008)

    いずれかのウィンドウで現在進行が停止しているが、ユーザーが再開できることを示すため、進行状況インジケーターが黄色くなります。エラー状態は存在せず、進行の継続を妨げるものは何もありません。これは確定的な状態です。進行状況インジケーターが不確定状態の場合は、実際の進行を示さない一般的な割合を黄色の確定的表示に切り替えます。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    アクセシビリティの必要性が損なわれないことを保証するため、進行状況バーの情報はハイコントラストの配色では表示されません。

    既存の プログレスバー コントロールに慣れた開発者にとって、タスクバーボタンの進行状況インジケーターは、概念的にも視覚的にも同様の体験に感じられるはずです。ここでは、タスクバーボタン自体が進行状況バーになります。タスクバーボタンの進行状況インジケーターは、関連付けられたウィンドウ内のより詳細な進行状況バーを反映したものであるべきです。これにより、ユーザーは、割合の数値や残り時間など、タスクバーボタンには表示できない詳細を確認できます。また、タスクバーボタンはグループ内の 1 つのウィンドウの進行状況しか表示できないため、ユーザーは個々のウィンドウの進行状況を確認できます。さらに、ハイコントラストの配色などタスクバーボタンでは表示できない場合にも、ユーザーに進行状況情報を提供します。

    タスクバーボタンの進行状況バーは、Web ページの読み込みやドキュメントの印刷といった通常は周辺的な操作での使用を意図したものではないことに注意してください。その種の進行状況は、引き続きウィンドウの ステータスバー に表示すべきです。

    進行状況インジケーターは、タスクバーボタンのアイコンまたはテキストと背景の間に表示されます。アクティブなタスクバーボタンと非アクティブなボタンの両方で進行状況が表示される場合、それぞれの進行状況バーの陰影付けは、アクティブなボタンがユーザーに明確に分かるように調整されます。また、進行状況の表示にボタンが使用されている場合でも、サムネイルの表示などのボタン機能は通常どおり動作し続けます。

    エラーまたは一時停止状態を終了するときは、元の状態を続行する場合は TBPF_NORMAL または TBPF_INDETERMINATE フラグを、操作がキャンセルされた場合は TBPF_NOPROGRESS フラグを指定して、このメソッドを再度呼び出します。

    タスクバーボタンがグループの進行状況インジケーターを選択する方法

    タスクバーボタンが進行状況インジケーターを表示できるのは、一度に 1 つのウィンドウについてのみです。これには、タスクバーボタンがグループを表しており、そのグループ内の複数のウィンドウが進行状況情報をブロードキャストしている状況も含まれます。その場合、タスクバーボタンは状態の優先順位に基づいて表示する進行状況を選択します。状態の優先順位は次の表のとおりで、優先順位 1 が最も高くなります。
    優先順位 状態
    1 TBPF_ERROR
    2 TBPF_PAUSED
    3 TBPF_NORMAL
    4 TBPF_INDETERMINATE

    ウィンドウの状態を変更すると、グループ内の他のウィンドウとの相対的な優先順位が変わり、その結果、タスクバーボタンの進行状況インジケーターにどのウィンドウが使用されるかが変わる場合があります。

    確定的な進行状況をブロードキャストしている 2 つのウィンドウ間で優先順位が衝突する場合は、進行が最も少ないウィンドウが使用されます。

    この優先順位に基づき、不確定な進行状況インジケーターは次の場合にのみタスクバーボタンに表示できます。

    確定的な進行状況インジケーターは次の場合に表示できます。

    SetProgressValue の呼び出しは、現在不確定モード (TBPF_INDETERMINATE) にある進行状況インジケーターを通常 (確定的) 表示に切り替え、TBPF_INDETERMINATE フラグをクリアすることに注意してください。

    vtbl 11 HRESULT RegisterTab(HWND hwndTab, HWND hwndMDI)

    アプリケーションのタスクバーグループのフライアウトに表示するための新しいタブまたはドキュメントのサムネイルが提供されたことをタスクバーに通知します。

    hwndTabHWNDinタブまたはドキュメントのウィンドウのハンドル。この値は必須であり、NULL にすることはできません。
    hwndMDIHWNDinアプリケーションのメインウィンドウのハンドル。この値は、新しいサムネイルをどのアプリケーションのプレビューグループにアタッチするかをタスクバーに伝えます。この値は必須であり、NULL にすることはできません。

    戻り値

    Type: HRESULT

    成功した場合は S_OK を、それ以外の場合はエラー値を返します。いずれかのパラメーターが NULL の場合、このメソッドはエラーを返します。

    解説(Remarks)

    タブのサムネイルを登録するだけでは、それが表示されることはありません。グループにどこへ表示するかを指示するために、ITaskbarList3::SetTabOrder も呼び出す必要があります。

    vtbl 12 HRESULT UnregisterTab(HWND hwndTab)

    アプリケーションでタブまたはドキュメントが閉じられたときに、そのサムネイルをアプリケーションのプレビューグループから削除します。

    hwndTabHWNDinサムネイルを削除するタブウィンドウのハンドル。これは、ITaskbarList3::RegisterTab を通じてサムネイルをグループの一部として登録したときと同じ値です。この値は必須であり、NULL にすることはできません。

    戻り値

    Type: HRESULT

    成功した場合は S_OK を、それ以外の場合はエラー値を返します。hwndTabNULL の場合、このメソッドはエラーを返します。

    解説(Remarks)

    hwndTabDestroyWindow を通じて解放するのは、呼び出し側アプリケーションの責任です。UnregisterTab はハンドルが解放される前に呼び出す必要があります。

    vtbl 13 HRESULT SetTabOrder(HWND hwndTab, HWND hwndInsertBefore)

    タブ付きドキュメントインターフェイス (TDI) またはマルチドキュメントインターフェイス (MDI) アプリケーションのグループフライアウトに新しいサムネイルを挿入するか、既存のサムネイルをアプリケーションのグループ内の新しい位置に移動します。

    hwndTabHWNDin配置するサムネイルを持つタブウィンドウのハンドル。この値は必須で、ITaskbarList3::RegisterTab を通じてあらかじめ登録されている必要があり、NULL にすることはできません。
    hwndInsertBeforeHWNDinhwndTab をその左側に挿入する対象となるタブウィンドウのハンドル。このハンドルは ITaskbarList3::RegisterTab を通じてあらかじめ登録されている必要があります。この値が NULL の場合、新しいサムネイルはリストの末尾に追加されます。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    サムネイルをグループに表示するには、このメソッドを呼び出す必要があります。ITaskbarList3::RegisterTab を呼び出した後に呼び出してください。

    vtbl 14 HRESULT SetTabActive(HWND hwndTab, HWND hwndMDI, DWORD dwReserved)

    タブまたはドキュメントのウィンドウがアクティブウィンドウになったことをタスクバーに通知します。

    hwndTabHWNDinアクティブなタブウィンドウのハンドル。このハンドルは ITaskbarList3::RegisterTab を通じてあらかじめ登録されている必要があります。アクティブなタブがない場合、この値は NULL にできます。
    hwndMDIHWNDinアプリケーションのメインウィンドウのハンドル。この値は、そのサムネイルがどのグループのメンバーであるかをタスクバーに伝えます。この値は必須であり、NULL にすることはできません。
    dwReservedDWORDin予約済み。0 を設定します。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    vtbl 15 HRESULT ThumbBarAddButtons(HWND hwnd, DWORD cButtons, THUMBBUTTON* pButton)

    指定された一連のボタンを含むサムネイルツールバーを、タスクバーボタンのフライアウト内にあるウィンドウのサムネイル画像に追加します。

    hwndHWNDinツールバーを受け取るサムネイル表示を持つウィンドウのハンドル。このハンドルは呼び出し側プロセスに属している必要があります。
    cButtonsDWORDinpButton が指す配列で定義されているボタンの数。許可されるボタンの最大数は 7 です。
    pButtonTHUMBBUTTON*inTHUMBBUTTON 構造体の配列へのポインター。各 THUMBBUTTON は、ツールバーに追加する個々のボタンを定義します。ボタンは後から追加や削除ができないため、これが定義される全セットである必要があります。また、ボタンは並べ替えることもできないため、配列内での順序 (左から右へ表示される順序) がそのまま恒久的な順序になります。

    戻り値

    Type: HRESULT

    成功した場合は S_OK を、それ以外の場合は次を含むエラー値を返します。

    戻りコード 説明
    E_INVALIDARG hwnd パラメーターが、プロセスに属するハンドルを指定していないか、タスクバーボタンに関連付けられたウィンドウを指定していません。この値は、pButton が 1 未満または 7 を超える場合にも返されます。

    解説(Remarks)

    このメソッドを使用すると、アプリケーションは、ウィンドウのタスクバーサムネイルプレビューに埋め込まれたアクティブなツールバーコントロール用のボタンを定義できます。これにより、ユーザーがウィンドウを復元またはアクティブ化することなく、ウィンドウの主要なコマンドにアクセスできます。たとえば、Windows Media Player は、再生、一時停止、ミュート、停止といった標準的なメディア操作コントロールを提供する場合があります。

    サムネイルで使用されるツールバーは、本質的には標準の ツールバー コントロールです。ボタンは最大 7 個で、中央揃え、透明で、サムネイルの一部を覆うのではなくその下の領域に表示されます。各ボタンの ID、画像、ツールチップ、状態は THUMBBUTTON 構造体で定義され、その後タスクバーに渡されます。その後、アプリケーションは現在の状態に応じて必要に応じて、ITaskbarList3::ThumbBarUpdateButtons を呼び出すことで、サムネイルツールバーのボタンを表示、変更、または非表示にできます。

    サムネイルツールバー内のボタンがクリックされると、そのサムネイルに関連付けられたウィンドウに WM_COMMAND メッセージが送信され、その wParam パラメーターの HIWORDTHBN_CLICKED に、LOWORD がボタン ID に設定されます。

    ツールバーがサムネイルに追加された後は、ボタンは ITaskbarList3::ThumbBarUpdateButtons を通じてのみ変更できます。個々のボタンを追加または削除することはできませんが、必要に応じて ThumbBarUpdateButtons を通じて表示および非表示にできます。ツールバー自体は、ウィンドウ自体を再作成しない限り削除できません。

    サムネイルを表示する領域は限られており、さらに表示するサムネイルの数も絶えず変化するため、アプリケーションに特定のツールバーサイズが保証されるわけではありません。表示領域が不足している場合、ツールバーのボタンは必要に応じて右から左へ切り詰められます。したがって、アプリケーションはボタンに関連付けられたコマンドに優先順位を付け、最も優先度の高いものが左側になり、切り詰められる可能性が最も低くなるようにする必要があります。

    サムネイルツールバーは、サムネイルが表示されているときにのみ表示されます。たとえば、タスクバーボタンが、サムネイルを表示する余地よりも多くの開いているウィンドウを含むグループを表している場合、UI はサムネイルではなくレガシーメニューに切り替わります。

    アクセシビリティ

    サムバーのボタン画像におけるアクセシビリティについては、ThumbBarSetImageList の「解説」セクションを参照してください。

    次の例は、ThumbBarAddButtons を使用して、拡張タスクバー上のサムネイルに 2 つのボタンを含むツールバーを追加する方法を示しています。

    HRESULT AddThumbBarButtons(HWND hwnd, HIMAGELIST himl, HIMAGELIST himlHot)
    {
        // Define an array of two buttons. These buttons provide images through an 
        // image list and also provide tooltips.
        DWORD dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
        
        THUMBBUTTON thbButtons[2];
        thbButtons[0].dwMask = dwMask;
        thbButtons[0].iId = 0;
        thbButtons[0].iBitmap = 0;
        thbButtons[0].pszTip = TEXT("Button 1");
        thbButtons[0].dwFlags = THBF_DISMISSONCLICK;
    
        dwMask = THB_BITMAP | THB_TOOLTIP;
        thbButtons[1].dwMask = dwMask;
        thbButtons[1].iId = 1;
        thbButtons[1].iBitmap = 1;
        thbButtons[1].pszTip = TEXT("Button 2");
        
        // Create an instance of ITaskbarList3
        ITaskBarList3 *ptbl;
        HRESULT hr = CoCreateInstance(CLSID_TaskbarList, 
                                      NULL, 
                                      CLSCTX_INPROC_SERVER, 
                                      IID_PPV_ARGS(&ptbl);
    
        if (SUCCEEDED(hr))
        {
            // Declare the image list that contains the button images.
            hr = ptbl->ThumbBarSetImageList(hwnd, himl);
    
            if (SUCCEEDED(hr))
            {
                // Attach the toolbar to the thumbnail.
                hr = ptbl->ThumbBarAddButtons(hwnd, ARRAYSIZE(thbButtons), &thbButtons);
            }
            ptbl->Release();
        }
        return hr;
    }
    
    vtbl 16 HRESULT ThumbBarUpdateButtons(HWND hwnd, DWORD cButtons, THUMBBUTTON* pButton)

    ウィンドウの現在の状態に応じて、サムネイルツールバーのボタンを表示、有効化、無効化、または非表示にします。サムネイルツールバーとは、タスクバーボタンのフライアウト内にあるウィンドウのサムネイル画像に埋め込まれたツールバーです。

    hwndHWNDinツールバーを含むサムネイル表示を持つウィンドウのハンドル。
    cButtonsDWORDinpButton が指す配列で定義されているボタンの数。許可されるボタンの最大数は 7 です。この配列には、更新対象となる既存のボタンを表す構造体のみが含まれます。
    pButtonTHUMBBUTTON*inTHUMBBUTTON 構造体の配列へのポインター。各 THUMBBUTTON は個々のボタンを定義します。ボタンがすでに存在する場合 (iId 値がすでに定義されている場合)、その既存のボタンは構造体で提供された情報で更新されます。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    サムネイルを表示する領域は限られており、さらに表示するサムネイルの数も絶えず変化するため、アプリケーションに特定のツールバーサイズが保証されるわけではありません。表示領域が不足している場合、ツールバーのボタンは必要に応じて右から左へ切り詰められます。したがって、アプリケーションはボタンに関連付けられたコマンドに優先順位を付け、最も優先度の高いものが左側になり、切り詰められる可能性が最も低くなるようにする必要があります。

    サムネイルツールバーは、タスクバーにサムネイルが表示されているときにのみ表示されます。たとえば、タスクバーボタンが、サムネイルを表示する余地よりも多くの開いているウィンドウを含むグループを表している場合、UI はサムネイルではなくレガシーメニューに切り替わります。

    アクセシビリティ

    サムバーのボタン画像におけるアクセシビリティについては、ThumbBarSetImageList の「解説」セクションを参照してください。

    次の例は、ThumbBarUpdateButtons を使用して、拡張タスクバー上のサムネイルツールバー内の既存ボタンのテキストと画像を変更する方法を示しています。

    HRESULT UpdateThumbBarButton(HWND hwnd)
    {
        // Define a single structure for the button to update. The ID is that
        // of an existing button, so the other information (bitmap index and 
        // tooltip) overwrites the existing values, updating the button.
        THUMBBUTTON thbButton;
        thbButton.dwMask = THB_BITMAP | THB_TOOLTIP;
        thbButtons[0].iId = 1;
        thbButton.iBitmap = 3;
        thbButton.pszTip = TEXT("Different Text");
        
        // Create an instance of ITaskbarList3
        ITaskBarList3 *ptbl;
        HRESULT hr = CoCreateInstance(CLSID_TaskbarList, 
                                      NULL, 
                                      CLSCTX_INPROC_SERVER, 
                                      IID_PPV_ARGS(&ptbl);
    
        if (SUCCEEDED(hr))
        {
            // Update the toolbar. In this case, only the single button is updated.
            hr = ptbl->ThumbBarUpdateButtons(hwnd, 1, &thbButton);
            ptbl->Release();
        }
        return hr;
    }
    
    vtbl 17 HRESULT ThumbBarSetImageList(HWND hwnd, HIMAGELIST himl)

    タスクバーボタンのフライアウト内にあるウィンドウのサムネイル画像に埋め込まれたツールバー用の、ボタン画像を含むイメージリストを指定します。

    hwndHWNDin更新対象のツールバーを含むサムネイル表示を持つウィンドウのハンドル。このハンドルは呼び出し側プロセスに属している必要があります。
    himlHIMAGELISTinツールバーで使用するすべてのボタン画像を含むイメージリストのハンドル。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    アプリケーションは、次のボタン画像を提供する必要があります。

    画像は 32 ビットで、寸法は GetSystemMetrics(SM_CXICON) x GetSystemMetrics(SM_CYICON) である必要があります。ボタンのクリック時、無効時、ホバー時の状態のビジュアルは、ツールバー自体が提供します。

    アクセシビリティ

    イメージリストからインデックス付けされ、THUMBBUTTON 構造体で指定されるボタン画像は、さまざまなユーザー個人設定のシナリオで使用できます。一般的な例としては、ライト/ダークのカラーモードや、アクセシビリティのためのコントラストテーマがあります。これらすべてのコンテキストで視覚的に明確なままとなるアセットを選択してください。

    これには次の 2 つの方法で対応できます。

    次の例は、画像がイメージリストから提供される 2 つのボタンを持つサムネイルツールバーを作成する方法を示しています。

    
    HRESULT AddThumbBarButtons(HWND hwnd, HIMAGELIST himl, HIMAGELIST himlHot)
    {
        // Define an array of two buttons. These buttons provide images through an 
        // image list and also provide tooltips.
        DWORD dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;
        
        THUMBBUTTON thbButtons[2];
        thbButtons[0].dwMask = dwMask;
        thbButtons[0].iId = 0;
        thbButtons[0].iBitmap = 0;
        thbButtons[0].pszTip = TEXT("Button 1");
        thbButtons[0].dwFlags = THBF_DISMISSONCLICK;
    
        dwMask = THB_BITMAP | THB_TOOLTIP;
        thbButtons[1].dwMask = dwMask;
        thbButtons[1].iId = 1;
        thbButtons[1].iBitmap = 1;
        thbButtons[1].pszTip = TEXT("Button 2");
        
        // Create an instance of ITaskbarList3
        ITaskBarList3 *ptbl;
        HRESULT hr = CoCreateInstance(CLSID_TaskbarList, 
                                      NULL, 
                                      CLSCTX_INPROC_SERVER, 
                                      IID_PPV_ARGS(&ptbl);
    
        if (SUCCEEDED(hr))
        {
            // Declare the image list that contains the button images.
            hr = ptbl->ThumbBarSetImageList(hwnd, himl);
            
            if (SUCCEEDED(hr))
            {
                // Attach the toolbar to the thumbnail.
                hr = ptbl->ThumbBarAddButtons(hwnd, ARRAYSIZE(thbButtons), &thbButtons);
            }
            ptbl->Release();
        }
        return hr;
    }
    
    vtbl 18 HRESULT SetOverlayIcon(HWND hwnd, HICON hIcon, LPWSTR pszDescription)

    タスクバーボタンにオーバーレイを適用して、アプリケーションの状態やユーザーへの通知を示します。

    hwndHWNDinオーバーレイを受け取る、関連付けられたタスクバーボタンを持つウィンドウのハンドル。このハンドルは、そのボタンのアプリケーションに関連付けられた呼び出し側プロセスに属し、かつ有効な HWND である必要があります。そうでない場合、呼び出しは無視されます。
    hIconHICONin

    オーバーレイとして使用するアイコンのハンドル。これは小さなアイコンで、96 dpi で 16x16 ピクセルであるべきです。オーバーレイアイコンがすでにタスクバーボタンに適用されている場合、その既存のオーバーレイは置き換えられます。

    この値は NULL にできます。NULL 値がどのように扱われるかは、タスクバーボタンが単一のウィンドウを表すか、ウィンドウのグループを表すかによって異なります。

    • タスクバーボタンが単一のウィンドウを表す場合、オーバーレイアイコンは表示から削除されます。
    • タスクバーボタンがウィンドウのグループを表しており、以前のオーバーレイがまだ利用可能な場合 (現在のオーバーレイより前に受け取られたが、まだ NULL 値で解放されていないもの)、現在のオーバーレイの代わりにその以前のオーバーレイが表示されます。

    hIcon が不要になったときに解放するのは、呼び出し側アプリケーションの責任です。タスクバーはアイコンの独自のコピーを作成して使用するため、これは通常 SetOverlayIcon を呼び出した後に行うことができます。

    pszDescriptionLPWSTRinアクセシビリティのために、オーバーレイが伝える情報の代替テキスト版を提供する文字列へのポインター。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    解説(Remarks)

    Windows 7 より前のバージョンの Windows では、アプリケーションはタスクバーの通知領域のアイコンを使用して、アプリケーションの状態や通知をユーザーに表示することがよくありました。Windows 7 のタスクバーでは、アプリケーションがタスクバーボタンを通じて同様のユーザーフィードバックを提供でき、より多くのアプリケーション情報が 1 か所に集約されます。これらのオーバーレイは、ショートカットアイコンやセキュリティ通知に使用される既存のオーバーレイと同様のもので、ボタンの右下隅に表示されます。

    次の図は、右端のタスクバーボタンに適用されたオーバーレイ (ユーザーの状態が「連絡可能」であることを示す小さな緑の四角) を示しています。

    Screen shot of the Windows Messenger taskbar button with an overlay to indicate an Available status アイコンオーバーレイは状態を文脈的に通知する役割を果たし、その情報をユーザーに伝えるために別個の通知領域の状態アイコンを必要としないようにすることを意図しています。アプリケーション設計者は、開発サイクル中に、アイコンオーバーレイと通知領域の状態アイコンのどちらの方法がそのアプリケーションに最も適しているかを判断する必要があります。オーバーレイアイコンは、ネットワークの状態、メッセンジャーの状態、新着メールなど、重要で長期的な状態や通知を提供することを意図しています。頻繁に変更したり、アニメーション化したりすべきではありません。

    オーバーレイアイコンを表示するには、タスクバーが既定の大きいアイコンモードである必要があります。タスク バーと [スタート] メニューのプロパティ を通じて小さいアイコンを表示するようにタスクバーが構成されている場合、オーバーレイは適用できず、このメソッドの呼び出しは無視されます。

    単一のオーバーレイは個々のウィンドウのサムネイルではなくタスクバーボタンに適用されるため、これはウィンドウ単位ではなくグループ単位の機能です。オーバーレイアイコンの要求はタスクバーグループ内の個々のウィンドウから受け取ることができますが、キューには入りません。最後に受け取ったオーバーレイが表示されます。最後に受け取ったオーバーレイが削除された場合は、それが置き換えたオーバーレイがまだアクティブであれば、それが復元されます。例として、ウィンドウ 1、2、3 が順にオーバーレイ A、B、C を設定するとします。オーバーレイ C が最後に受け取られたため、タスクバーボタンにはそれが表示されます。ウィンドウ 2 が SetOverlayIconNULL 値で呼び出してオーバーレイ B を削除します。次にウィンドウ 3 が同様にしてオーバーレイ C を削除します。ウィンドウ 1 のオーバーレイ A がまだアクティブであるため、その後タスクバーボタンにはそのオーバーレイが表示されます。

    Windows エクスプローラーが予期せず終了した場合、Windows エクスプローラーが復元されてもオーバーレイは復元されません。アプリケーションは、Windows エクスプローラーが再起動してタスクバーボタンが再作成されたことを示す TaskbarButtonCreated メッセージの受信を待ってから、SetOverlayIcon を再度呼び出してオーバーレイを再適用する必要があります。

    vtbl 19 HRESULT SetThumbnailTooltip(HWND hwnd, LPWSTR pszTip)

    タスクバーボタンのフライアウト内の個々のプレビューサムネイルの上にマウスポインターを置いたときに表示されるツールチップのテキストを指定または更新します。

    hwndHWNDinツールチップを表示するサムネイルを持つウィンドウのハンドル。このハンドルは呼び出し側プロセスに属している必要があります。
    pszTipLPWSTRinツールチップに表示するテキストへのポインター。この値は NULL にでき、その場合は hwnd で指定されたウィンドウのタイトルがツールチップとして使用されます。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    vtbl 20 HRESULT SetThumbnailClip(HWND hwnd, RECT* prcClip)

    ウィンドウのクライアント領域の一部を選択し、そのウィンドウのサムネイルとしてタスクバーに表示します。

    hwndHWNDinタスクバーに表されるウィンドウのハンドル。
    prcClipRECT*inウィンドウのクライアント領域内の選択範囲を、そのクライアント領域の左上隅を基準として指定する RECT 構造体へのポインター。すでに設定されているクリップをクリアしてサムネイルの既定の表示に戻すには、このパラメーターを NULL に設定します。

    戻り値

    Type: HRESULT

    このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

    出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
    Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

    HSP用 COM定義

    #usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

    出力引数:
    #define global IID_ITaskbarList3 "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"
    #usecom global ITaskbarList3 IID_ITaskbarList3 "{56FDF344-FD6D-11D0-958A-006097C9A090}"
    #comfunc global ITaskbarList3_SetProgressValue       9 sptr,int64,int64
    #comfunc global ITaskbarList3_SetProgressState       10 sptr,int
    #comfunc global ITaskbarList3_RegisterTab            11 sptr,sptr
    #comfunc global ITaskbarList3_UnregisterTab          12 sptr
    #comfunc global ITaskbarList3_SetTabOrder            13 sptr,sptr
    #comfunc global ITaskbarList3_SetTabActive           14 sptr,sptr,int
    #comfunc global ITaskbarList3_ThumbBarAddButtons     15 sptr,int,var
    #comfunc global ITaskbarList3_ThumbBarUpdateButtons  16 sptr,int,var
    #comfunc global ITaskbarList3_ThumbBarSetImageList   17 sptr,sptr
    #comfunc global ITaskbarList3_SetOverlayIcon         18 sptr,sptr,wstr
    #comfunc global ITaskbarList3_SetThumbnailTooltip    19 sptr,wstr
    #comfunc global ITaskbarList3_SetThumbnailClip       20 sptr,var
    ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
    ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
    ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
    ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。