July 2009

Volume 24 Number 07

Windows 7 徹底解剖 - タスクバー API について

Yochay Kiriaty | July 2009

この記事では、次の内容について説明します。

  • タスク バー ボタン
  • オーバーレイ アイコン
  • 進行状況バー
  • 縮小表示ツール バー
この記事では、次のテクノロジを使用しています。
Windows 7

シリーズ全体の内容は次のとおりです。

この記事は、Windows 7 のプレリリース版を基にしています。ここに記載されている情報は変更される可能性があります。

目次

タスク バー ボタン
オーバーレイ アイコンと進行状況バー
縮小表示ツール バー
ジャンプ リスト
その他の機能
まとめ

Windows 7 のタスク バーは、Windows 1.0 から進化を続けている、一連のタスク バー設計の最新版です。Windows 7 のタスク バーは、ユーザー エクスペリエンスに関するデザインとアーキテクチャの変更を象徴しており、ユーザーの生産性を大きく向上します。図 1 は Windows 1.0 のタスク バーを示しています (Windows 1.0 のタスク バーは、Windows Vista のタスク バーよりも Windows 7 のタスク バーに似ています)。

fig01.gif

図 1 Windows 1.0 のタスク バー

近年行われた多数のユーザー セッションを基に分析した結果、起動領域 (プログラムの起動専用の領域) を多数用意しても、ユーザーの作業が必ずしも容易にならないことが明らかになっています。ユーザー インターフェイスのデザインに関する限り、作業の実行方法を 1 つだけ用意する方が、多くの場合、ユーザーの混乱を防ぐうえで効果が高いようです。

Windows 7 のタスク バーのデザイン目標は、ユーザーがタスク バーを再び自由に操作できるようにし、混乱を最小限に抑えることです。そのためには、次の原則に従います。

  • よく使用するプログラムや操作対象の起動領域を 1 か所にまとめます。これにより、頻繁に使用するアプリケーションやデータをいつでもすぐに使用できます。
  • 制御を容易にします。これにより、アプリケーションやウィンドウの切り替えやウィンドウの整列が、簡単で管理しやすくなります。
  • 簡潔で、不要な情報がなく、シンプルなタスク バーにします。

大きなタスク バー ボタン、わかりやすい外観、滑らかなデザインは、Windows 7 にログインしたユーザー エクスペリエンスに大きく影響します。しかし、開発者にとっては、Windows 7 のタスク バーに用意されている新しい機能をどのように活用できるのでしょう。最高のユーザー エクスペリエンスを実現するためには、基盤となるメカニズムとどのように連携するのでしょう。今回は、Windows 7 のタスク バーの新機能と基盤となる機能について、ネイティブ コードとマネージ コードの例を示しながら説明します。

タスク バー ボタン

タスク バーのボタンは、新しい Windows 7 のタスク バーに含まれる機能にアクセスする入り口になります。最も注目すべき点は、現在実行中ではないアプリケーションのアイコンもタスク バーに表示されることです。たとえば、ユーザーがアプリケーションをタスク バーに固定すると、そのアプリケーションが実行中でなくても固定状態のアイコンがタスク バーに表示されます。この固定状態のアイコンをクリックすると、アプリケーションが起動します。これは、クイック起動の概念と Windows の標準タスク バーを統一する考え方です。実のところ、Windows 7 ではクイック起動領域は必要ありません。クイック起動フォルダーが Windows 7 に残っている理由はただ 1 つ、旧バージョンとの互換性のためです。

ジャンプ リスト、縮小表示ツール バー、タスク バーの進行状況バーなどの機能を耳にされた方もいらっしゃるでしょう。これらの機能はどれも、デザインが見直され、新しいタスク バーに表示されるようになったタスク バーの大きなボタンに関係しています。Windows 7 のタスク バー ボタン (図 2 参照) は、複数の視覚効果によって区別されます。これらのタスク バー ボタンをひと目見るだけで、実行中のアプリケーション、同じアプリケーションが複数のウィンドウで開かれているかどうか、現在アクティブなアプリケーション、および現在マウスを重ねているタスク バー ボタンがわかります。

fig02.gif

図 2 Windows 7 のタスク バー ボタンのさまざまな状態

Windows 7 のタスク バーの機能はすべて、アプリケーションのタスク バー ボタンを作成した後のみロックが解除されます。タスク バー ボタンがまだ存在しなければ、オーバーレイ アイコンを変更できないため、これは理にかなっています。実際の処理では、新しい Windows 7 のタスク バー API を使用するマネージ アプリケーションやネイティブ アプリケーションは、TaskbarButtonCreated 文字列で識別可能な新しいウィンドウ メッセージを待機する必要があります。このメッセージの識別子を取得するには、RegisterWindowMessage Win32 API を呼び出して、TaskbarButtonCreated 文字列をパラメーターとして渡します。

以下のコードは、Win32 アプリケーションで、タスク バーボタンが作成されたことを示すウィンドウ メッセージを受け取る方法を示しています。

 

DWORD g_wmTBC = (DWORD)-1; //In the window procedure:

switch (msg) { case WM_CREATE: g_wmTBC =

RegisterWindowMessage(L"TaskbarButtonCreated"); //Proceed

to create the window case g_wmTBC: //The taskbar button has

been created }

Windows フォームを使用するアプリケーションなど、マネージ アプリケーションの場合にウィンドウ メッセージを処理するには、フォームのウィンドウ プロシージャ (WndProc メソッド) をオーバーライドします。以下のコードは、その方法を示します。

uint wmTBC = (uint)-1; [DllImport("user32.dll")] static extern uint

RegisterWindowMessage(string message); void Form_Load() {

wmTBC = RegisterWindowMessage(L"TaskbarButtonCreated"); }

protected override void WndProc(...) { if (msg == wmTBC) { //The

taskbar button has been created } }

これで、タスク バー ボタンが表示されるまではアプリケーションで Windows 7 のタスク バーを使用しないようにする方法がわかりました。さらに興味深い機能の説明に進む前に、タスク バー ボタンの謎を解明するために必要な情報が 1 つだけ残っています。タスク バー ボタンはどのようにウィンドウやアプリケーションと関連付けられるのでしょう。1 つのアプリケーションを 2 つのウィンドウで開いている場合にタスク バー ボタンを 2 つ表示する必要があるかどうか、または複数のアプリケーションで 1 つのタスク バー ボタンを共有する必要があるかどうかをシステムではどのように判断しているのでしょう。

その答えはアプリケーション ID です。アプリケーション ID は Windows シェルの新しいプロパティで、ウィンドウ、プロセス、およびシェル リンク (別名、ショートカット) の属性です。個別のウィンドウやプロセスのアプリケーション ID を制御することで、アプリケーションの開発者は、タスク バー ボタンを適切なウィンドウに確実に関連付けます。アプリケーション ID は GUID ではなく文字列で、自由形式で 128 文字まで指定できます。偶然にでも アプリケーション ID の競合が発生しないよう、アプリケーション ID には企業名、製品名、アプリケーション名などを含めることをお勧めします。ウィンドウの既定のアプリケーション ID は、ウィンドウが属しているプロセスの既定のアプリケーション ID によって決まります。プロセスの既定のアプリケーション ID は、プロセスを実行している実行可能ファイルに対して生成される既定のアプリケーション ID です。メモ帳などのアプリケーションを数回起動して、この動作を確認してみましょう。メモ帳のインスタンスを同時に複数実行しても、作成されるタスク バー ボタンは 1 つだけです。

これらの既定の ID をカスタマイズするには、プロセスまたは個別のウィンドウのアプリケーション ID を明示的に設定します。この結果、興味深いシナリオが発生します。たとえば、2 つのプロセスのアプリケーション ID を同じ値に設定すると、両方のプロセスによって作成されたウィンドウは同じタスク バー ボタンにグループ化されます。また、2 つのウィンドウ (同一プロセス内) のアプリケーション ID を異なる値に設定すると、各ウィンドウに 1 つずつ、合計 2 つのタスク バー ボタンが作成されます。プロセスのアプリケーション ID とウィンドウ固有のアプリケーション ID を組み合わせると、柔軟性を最大限に高めることができます。図 3 の左側の画面は、異なるプロセスのウィンドウが 1 つのタスク バー ボタンにグループ化されるようすを示し、右側の画面は、同じプロセスの複数のウィンドウに複数のタスク バー ボタンが作成されるようすを示しています。

fig03.gif

図 3 ウィンドウ、プロセス、およびタスク バー ボタン

プロセスのアプリケーション ID を設定するには、shell32.dll の SetCurrentProcessExplicitAppUserModelID Win32 関数を呼び出します。ウィンドウのアプリケーション ID を設定するには、SHGetPropertyStoreForWindow 関数を呼び出して、返される IPropertyStore オブジェクトを操作する必要があります。以下の例は、この処理方法を示しています。

 

PROPVARIANT pv; InitPropVariantFromString(L"MyAppID", &pv);

IPropertyStore* pps;

VERIFY(SHGetPropertyStoreForWindow(hwnd,

IID_PPV_ARGS(&pps))); VERIFY(pps->SetValue(PKEY_AppUserModel_ID, pv)); VERIFY(pps->Commit());

ここまではマネージ コードから複雑な API を呼び出さずに済みましたが、今度は避けられません。さいわい、Windows API Code Pack を利用できます。

Windows API Code Pack for Microsoft .NET Framework (英語) には、マネージ コードから Windows 7 や Windows Vista の新機能にアクセスするために使用できるライブラリが用意されています。この記事の執筆時点では、Windows API Code Pack には Windows 7 のシェル ライブラリ、既知のフォルダー、Windows Vista のタスク ダイアログ ボックス、Windows 7 のジャンプ リスト、アイコン オーバーレイ、進行状況バーなどの機能のサポートが含まれています。Windows API Code Pack は公式にサポートされるマイクロソフト製品ではありませんが、Windows 7 を対象とするマネージ アプリケーションの開発者が効率よく開発作業を始めるうえで非常に役に立ちます。また、複雑な Windows 機能のマネージ ラッパーを実装する必要が少なくなります。

Windows API Code Pack には、特定のプロセスのアプリケーション ID を操作する静的な Taskbar.AppId プロパティが用意されています。あいにく、特定のウィンドウのアプリケーション ID を設定する同等のプロパティはありません。ただし、必要なラッパーを手作業で作成するか、Windows API Code Pack の前身を使用すると、ウィンドウのアプリケーション ID を設定できます (Windows 7 のタスク バー向けサンプル相互運用ライブラリを「Windows 7 タスク バー: 開発者向けリソース」(英語) からダウンロードできます。このライブラリを使用すると、厄介な相互運用性確保の処理を実行してくれる Windows7Taskbar.SetWindowAppId 静的メソッドを使用できます)。

オーバーレイ アイコンと進行状況バー

Windows 7 のほとんどのタスク バー機能には、ITaskbarList3 インターフェイス経由でアクセスします。マネージ コードとマネージ ラッパーを使用していると、このインターフェイスを意識する必要がないこともあります。しかし、ネイティブ コードを使用している場合は、タスク バー機能にアクセスする方法を知っておくことが重要です。タスク バー ボタンが作成されたことを示すメッセージを受け取ってから実行するようにすれば、この処理は簡単です。つまり、以下のコードのように、タスク バー ボタンが初期化されるのを待機してから、ITaskbarList3 インターフェイスへのポインターを取得します。

ITaskbarList3* ptl; VERIFY(CoCreateInstance(

CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3,

(void**)&ptl));

Windows 7 のタスク バーにオーバーレイ アイコンを設定したり進行状況バーを提供したりする処理は実に簡単です。さいわい、マネージ開発者向けには、Windows API Code Pack に同等のマネージ コードがあります。オーバーレイ アイコンを設定するには、ITaskbarList3::SetOverlayIcon メソッドを使用します。このメソッドはアイコンのハンドル (HICON) と、アクセシビリティ目的の説明として機能する文字列を受け取ります。同等のマネージ コードは Taskbar.OverlayImage プロパティで、やはり簡単に使用できます。

以下のコードでは、コンボ ボックスで選択したオプションに応じてアプリケーションのオーバーレイ アイコンを制御します (図 4 も参照)。

void comboBox1_ValueChanged(...) { if

(comboBox1.SelectedItem == ...) { Taskbar.OverlayImage = new

OverlayImage(icon1, "Icon 1"); } else { Taskbar.OverlayImage =

new OverlayImage(icon2, "Icon 2"); } }

fig04.gif

図 4 Windows Live Messenger とそのオーバーレイ アイコン

同様に、ITaskbarList3::SetProgressState メソッドと ITaskbarList3::SetProgressValue メソッドは、タスク バーの進行状況バーの状態を変更します。アプリケーションで使用できる状態は、不定、一時停止、エラー、および通常です。さまざまな状態の外観をまとめたのが図 5 です。同等のマネージ コードは、Taskbar.ProgressBar.State 静的プロパティ、Taskbar.ProgressBar.CurrentValue 静的プロパティ、および Taskbar.ProgressBar.MaxValue プロパティです。

fig05.gif

図 5 タスク バーの進行状況バーのさまざまな状態

以下のコードと図 6 は、バックグラウンド操作がタスク バーの進行状況バーの状態に及ぼす影響を示しています (DoWork 関数がバックグラウンド スレッドで別途実行されると想定しています)。

 

HWND hmainwnd;//Application main window ITaskbarList3*

ptl;//Created earlier DWORD WINAPI DoWork(LPVOID) { ptl->SetProgressState(hmainwnd, TBPF_NORMAL); for (int i = 0; i <

WorkToDo; ++i) { DoSomePartOfTheWork(i); ptl->SetProgressValue(hmainwnd, i, WorkToDo); } ptl->SetProgressState(hmainwnd, TBPF_PAUSED); return 0; }

fig06.gif

図 6 Internet Explorer に表示されるダウンロードの進行状況

Windows Vista の Windows シェルに追加された組み込みのファイル操作機能を使用するアプリケーションでは、何も指定しなくても自動的にタスク バーの進行状況バーがサポートされます。Win32 の SHFileOperation 関数または IFileOperation インターフェイスを使用している場合、API をコンソール アプリケーションから呼び出しているときでも、タスク バー ボタンに進行状況が表示されます。マネージ コードの場合は、Stephen Toub による 2007 年 12 月号の MSDN マガジンの記事「.NET の問題: Windows Vista での IFileOperation」を参照してください。この記事の FileOperation クラスには基になるネイティブ API の優れたラッパーが用意されているため、マネージ コードでもネイティブ コードと同じくらい簡単にこの API を使用できるようになります。Windows 7 でこの記事のサンプルを実行すると、タスク バーの進行状況バーのデモンストレーションをすぐに確認できます。

縮小表示ツール バー

縮小表示ツール バーは、Windows 7 のタスク バーに追加された優れた機能です。縮小表示機能とリアルタイム プレビュー機能は、Windows 7 で大幅に強化されています (残念ながら、これらの機能の詳細についてはここで扱う範囲を超えているため詳しくは説明しません)。縮小表示ツール バーを使用すると、縮小表示からウィンドウの簡易 "リモート コントローラー" を表示できます。たとえば、Windows Media Player で次の曲に切り替える場合、扱いにくい Media Player デスクバンドを使用する必要も、Media Player アプリケーションに切り替える必要もありません。縮小表示ツール バーを直接使用して曲を変更でき、別のアプリケーションに移動してもワークフローは中断しません (図 7 参照)。

fig07.gif

図 7 Windows Media Player で提供されるナビゲーションが容易な縮小表示ツール バー

縮小表示ツール バーを使用するには、まず、既に示したようにタスク バー ボタンが初期化されるのを待機してから、ITaskbarList3 インターフェイスへのポインターを取得します。次に、縮小表示ツール バーに表示される個別のボタンを表す、一連の THUMBBUTTON 構造体を初期化します (ボタン数の上限が 7 個に制限されていること、およびツール バーの初期化後はボタンの追加や削除を行えず、無効または非表示にのみできることに注意してください)。最後に、縮小表示ツール バーを制御する ITaskbarList3::ThumbBarAddButtons メソッドと ITaskbarList3::ThumbBarUpdateButtons メソッドを呼び出します。

縮小表示のボタンをクリックすると、アプリケーションは wParam の上位ワードが THBN_CLICKED に設定され、下位ワードがボタン ID に設定された WM_COMMAND メッセージを受け取ります。このメッセージは、縮小表示が属しているウィンドウにディスパッチされます。図 8 は、縮小表示ツール バーの使用に必要な、ボタンの作成とメッセージの処理を示しています。

図 8 作成とメッセージ処理

ITaskbarList3* ptl;//Created earlier //In your window procedure:

switch (msg) { case g_wmTBC://TaskbarButtonCreated

THUMBBUTTON buttons[2]; buttons[0].dwMask =

THB_ICON|THB_TOOLTIP|THB_FLAGS; buttons[0].iId = 0;

buttons[0].hIcon = GetIconForButton(0); wcscpy(buttons[0].szTip, L"Tooltip 1"); buttons[0].dwFlags = THBF_ENABLED;

buttons[1].dwMask = THB_ICON|THB_TOOLTIP|THB_FLAGS;

buttons[1].iId = 1; buttons[1].hIcon = GetIconForButton(1);

wcscpy(buttons[0].szTip, L"Tooltip 2"); buttons[1].dwFlags =

THBF_ENABLED; VERIFY(ptl->ThumbBarAddButtons(hWnd, 2,

buttons)); break; case WM_COMMAND: if (HIWORD(wParam)

== THBN_CLICKED) { if (LOWORD(wParam) == 0)

MessageBox(L"Button 0 clicked", ...); if (LOWORD(wParam) ==

1) MessageBox(L"Button 1 clicked", ...); } break;

この記事の執筆時点では、同等のマネージ コードは Windows API Code Pack に用意されていませんが、今後のリリースで追加される予定です。それまでは、Windows 7 Taskbar and Libraries .NET 相互運用性サンプル ライブラリ (英語) を使用できます。このライブラリには、縮小表示ツール バーを制御するための対応する CreateThumbButton メソッドと AddThumbButtons メソッドを備えた ThumbButtonManager クラス、および実行時に縮小表示ボタンの状態を変更するための ThumbButton クラスが用意されています。通知を受け取るには、ThumbButton.Clicked イベントを登録し、ウィンドウ プロシージャをオーバーライドして、メッセージを ThumbButtonManager クラスにディスパッチします。ディスパッチ処理は自動的にこのクラスで実行されます (詳細については、ブログ記事「Windows 7 Taskbar: Thumbnail Toolbars」(Windows 7 タスク バー: 縮小表示ツール バー、英語) を参照してください)。

ジャンプ リスト

ここで詳しく説明する Windows 7 のタスク バーの最後の機能は、ジャンプ リストです。ジャンプ リストこそ、Windows 7 で洗練されたアプリケーションを提供するためにアプリケーションで利用する必要がある最も重要な機能であると言って差し支えないでしょう。Windows 7 のタスク バーでは、各タスク バー ボタンがジャンプ リストに関連付けられます。ジャンプ リストは、特定のアプリケーションに関連した項目 (別名、ターゲット) やタスクのコレクションを表示する伸縮自在のメニューです。ターゲットは一般的にシェル項目で表され (IShellItem インターフェイスを使用します)、具体的にはアプリケーションで操作するファイルやドキュメントです。タスクは一般的にシェル リンクで表され (ショートカットとも呼ばれ、IShellLink インターフェイスを使用します)、他の関連アプリケーションを起動したり、場合によっては独自のアプリケーションを別のコマンド ライン引数で起動したりできます。

アプリケーションによっては、ジャンプ リストのタスク領域をカスタマイズしていることがあります。たとえば、Windows Live Messenger では、さまざまなタスクと区切りを使用して、ジャンプ リストから簡単に Windows Live Messenger を使用できるようにしています (図 9 参照)。

fig08.gif

図 9 Windows Live Messenger

別のアプリケーションでは、ジャンプ リストの項目 (ターゲット) 領域をカスタマイズしたり、さらにはユーザーが作業しやすいように項目を分類したりすることもあります。すべての Windows 7 アプリケーションに対して、ユーザーはそのアプリケーションに関連する最近使った項目やよく使う項目のコレクションが表示されると期待するようになるため、アプリケーションでは、少なくともこの機能を提供することを求められます。たとえば、Microsoft Office Word のジャンプ リストについて考えてみましょう (図 10 参照)。Word は Windows 7 用に設計されてはいませんが、Windows に組み込まれている最近使った項目のインフラストラクチャを使用するため、ジャンプ リストが既定で機能します。

fig08.gif

図 10 最近使った文書のジャンプ リスト

たいして苦労しなくても独自のアプリケーションでジャンプ リストが機能するようにできることは、明白でしょう。最近使った項目をアプリケーションのジャンプ リストに表示するには、以下の手順に従います。

  1. アプリケーションのファイルの種類が、Windows レジストリでアプリケーションに (登録済みハンドラーとして) 関連付けられるようにします。ただし、アプリケーションがそのファイルの種類の主要なハンドラーや既定のハンドラーである必要はありません (詳細については、msdn.microsoft.com/en-us/library/dd378402(VS.85).aspx (英語) を参照してください)。
  2. ファイルの読み込みと保存にコモン ファイル ダイアログ ボックスを使用するようにします。コモン ファイル ダイアログを使用しない場合は、SHAddToRecentDocs Win32 関数を呼び出して、ユーザーの要求によりファイルを使用していることを Windows シェルに通知します (コモン ダイアログの詳細については、MSDN の「コモン ダイアログ ボックス ライブラリ」(英語) を参照してください)。

ジャンプ リストをさらにカスタマイズする必要があれば、ターゲットのカスタム カテゴリやカスタム タスクを追加して機能を強化できます。ICustomDestinationList インターフェイスは、AddUserTasks、AppendCategory、および AppendKnownCategory という便利なメソッドと同様に、ジャンプ リスト機能の基盤となります。リスト作成処理を開始するには BeginList メソッドを呼び出します。その後、AbortList と CommitList のどちらかのメソッドを呼び出します (名前のとおり、AbortList メソッドはリスト作成を中止し、CommitList メソッドはリスト作成をコミットします)。また、DeleteList メソッドを呼び出して、すべての項目をリストから削除することもできます。Windows 7 SDK には、リスト作成処理のサンプルが用意されています。

同等のマネージ コードは、ネイティブ コードよりはるかに簡単に使用できます。まず、Taskbar.JumpList プロパティを使用して、ジャンプ リストのターゲットとタスクを操作するいくつかのメソッドやプロパティのロックを解除します。AddToRecent メソッドは、SHAddToRecentDocs 関数と同等のメソッドです。KnownCategoryToDisplay プロパティは、最近使った項目やよく使う項目を既定で表示するかどうかを決定します。UserTasks プロパティは、ユーザー タスクの変更可能なコレクションです。CustomCategories プロパティは、カスタム カテゴリのコレクションを返します (各カスタム カテゴリには、名前とジャンプ リストの項目のコレクションが設定されています)。以下の例は、アプリケーションのジャンプ リストに項目やタスクを追加するリスト作成処理を示しています。

JumpListLink notepad = new JumpListLink { Title = "Launch

Notepad", Path = @"C:\Windows\notepad.exe" }; JumpListItem

doc1 = new JumpListItem(@"doc1.txt"); JumpListItem doc2 =

new JumpListItem(@"doc2.txt"); CustomCategory category =

new CustomCategory("Special Items");

category.JumpListItems.Add(doc1);

category.JumpListItems.Add(doc2);

Taskbar.JumpList.UserTasks.Add(notepad);

Taskbar.JumpList.CustomCategories.Add(category);

重要な点として、ユーザーがタスク バーの項目を右クリックして [この一覧から削除] をクリックすると、その項目をタスク バーから削除できます。アプリケーションでは、この機能に対応する必要があります。ユーザーが削除した項目をアプリケーションで追加しようとすると、リスト作成処理全体が失敗します。Win32 コードの場合、ICustomDestinationList::BeginList メソッドを呼び出すと、次のように特別な注意が必要な削除された項目のコレクションを受け取るので、削除された項目を追加し直すことがありません。

ICustomDestinationList* cdl;

VERIFY(CoCreateInstance(CLSID_DestinationList, ...,

IID_ICustomDestinationList, (void**)cdl)); IObjectArray*

removedItems; cdl->BeginList(&maxSlots, IID_IObjectArray, (void**)removedItems); //…Iterate removedItems and make decisions

removedItems->Release();

 

また、事前に ICustomDestinationList::GetRemovedDestinations メソッドを呼び出して、削除された項目を取得してからリスト作成処理を開始することもできます。マネージ アプリケーションでは、Windows API Code Pack に組み込まれている機能を活用でき、ユーザーが以前に削除した項目の追加が自動的に防止される JumpList クラスを使用できます。また、マネージ アプリケーションでは、ジャンプ リストの項目が削除されたことをインフラストラクチャで (リスト作成処理の一環として) 検出したときに発生する、Taskbar.JumpList.JumpListItemsRemoved イベントを登録できます。

ジャンプ リストで提供される代替機能は非常に多彩に思えることもあるでしょうが、ほとんどのユーザーはアプリケーションに少なくとも必要最低限のインターフェイスが用意されていることを望んでいます (アプリケーションで以前に使用した、最近使った項目やよく使う項目のリストなど)。この基本的な要件に準拠すると、ユーザーはほぼ確実に満足します。さらにカスタム タスクやカスタム ターゲットを使用してジャンプ リストにカスタム機能を追加すると、Windows 7 でアプリケーションを差別化できます。

その他の機能

Windows 7 のタスク バーには、ここでは取り上げなかった機能が他にも多数あります。たとえば、リアルタイム プレビュー (別名、Aero プレビュー)、縮小表示のカスタマイズ (アプリケーションをプレビューするとユーザーの生産性を向上できます)、タブ付きドキュメント インターフェイス (TDI) アプリケーションやマルチ ドキュメント インターフェイス (MDI) アプリケーションに対する縮小表示のサポートなどがあります。

これらの機能の概要、および関連するネイティブ API や同等のマネージ API の説明については、以下のリソースを参照してください。

まとめ

この記事では、アプリケーション ID、縮小表示ツール バー、オーバーレイ アイコン、進行状況バー、ジャンプ リストなど、Windows 7 のタスク バーの機能をいくつか紹介しました。Windows 7 のタスク バーには、ユーザーに非常に役立つ簡潔な起動領域が用意されます。この領域に統合することは、あらゆる Windows 7 のアプリケーション開発者の主目標になります。

ネイティブ Win32 API やマネージ コードの Windows API Code Pack を使用すると、Windows 7 でアプリケーションを洗練されたものにして差別化できます。タスク バーは、ユーザーが Windows にログインしたとき最初に目にする要素であることに留意し、ユーザーがタスク バーに固定してくれるようなアプリケーションを目指すことを心掛けてください。

Yochay Kiriaty は、Windows 7 を得意とする Microsoft のテクニカル エバンジェリストです。ソフトウェア開発の分野で 10 年以上の経験があります。学術的なコンピューター サイエンスの講座に関する著作や講義を行い、The Windows Blog (英語) への積極的な寄稿者でもあります。

Sasha Goldshtein は、国際的なトレーニング、コンサルティング、および開発サービスを提供する企業である Sela Group のシニア コンサルタントです。Sasha は Sela のデバッグとパフォーマンス チームを指揮し、高パフォーマンスのアプリケーション、相互運用性シナリオ、高可用性サーバー アプリケーションなど、Windows のマネージ ソリューションとネイティブ ソリューションを専門にしています。世界各国で提供されてマイクロソフト コースウェア ライブラリで公開されている、Windows の内部や Windows Vista に関する講座の執筆者でもあります。Sasha はさまざまなマイクロソフトのカンファレンスで講演しています。