タスクバーのこの機能は、さまざまなアプリケーションで積極的に使用されています。 たとえば、Windows Media Playerはプレイリスト切り替えオプションを表示します。 Internet ExplorerとWindows Explorerには、最後に行った場所へのリンクを含むジャンプリストが含まれています。 Windows Live Messangerは、ステータス切り替えオプションを表示します。

ジャンプリストには、タスク、最近開いたドキュメントへのリンク、永続的なドキュメントへのリンクなど、いくつかの異なる種類の要素が含まれる場合があります。 さらに、これらのポジションを統合できます。 このようなアイテムは、時間の経過とともにジャンプリストから消えることはありません。 これは、たとえば同じドキュメントを頻繁に使用する場合などに便利です。 概略ジャンプリストは、次のように表すことができます。

実際、ジャンプリストの各項目は、プログラムまたはファイルへのリンクです。 したがって、たとえば、電卓、または特定の形式のドキュメントを実行できます。 残念ながら、ジャンプリスト内のアイテムをクリックするイベントを直接インターセプトする機能はありません。 次の項目を選択するたびに、アプリケーションの新しいインスタンスが起動されます。 これは主に、アプリケーションが実行されていなくてもジャンプリストを呼び出すことができるという事実によるものです。 この場合、タスクバーに固定する必要があります。 たとえば、次の図は、Internet Explorerが現在実行されていないことを示していますが、ジャンプリストを開くことができます。

それでは、アプリケーションに同様の機能を実装する方法を見てみましょう。 ジャンプリストを使用するには、JumpListManager型のオブジェクトが必要です。これは、.NET Interopサンプルライブラリの一部です。 タスクバーにアプリケーションのボタンを作成するときに作成する必要があります。 これらの目的のために、次のようにWndProcメソッドをオーバーライドできます。
protected override void WndProc(ref Message m)
{
if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
{
_jumpListManager = WindowsFormsExtensions.CreateJumpListManager(this);
_jumpListManager.UserRemovedItems += (o, e) =>
{
e.CancelCurrentOperation = false;
};
// add items
_jumpListManager.Refresh();
}
base.WndProc(ref m);
}
JumpListManagerオブジェクトを作成した後のRefreshメソッド呼び出しに注意してください。 ジャンプリスト内の位置を更新するには、このメソッドの呼び出しが必要です。 UserRemovedItemsイベントにサブスクライブすることも必要です。 不要なアイテムをジャンプリストから削除しようとすると実行されます。 次に、ジャンプリストに新しい位置を追加してみましょう。 これらの目的のために、ラッパークラスとJumpListManagerオブジェクトに必要なメソッドがあります。
ジャンプリスト内の最も単純なタイプのアイテムはタスクです。 タスクは、外部アプリケーションまたはいくつかのパラメーターを使用してアプリケーションを起動することです。 WLMでは、タスク状態の切り替えが実装されています。 ジャンプリストは、AddUserTaskメソッドを使用してタスクを作成します。
_jumpListManager.AddUserTask(new ShellLink
{
Path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "calc.exe"),
Title = "Calculator",
Category = "Applications",
IconLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "calc.exe"),
IconIndex = 0
});
ご覧のように、新しいShellLinkタイプのオブジェクトがここに作成され、そこにアプリケーションへのパス、タイトル、およびアイコンが渡されます。 アプリケーションに2つのタスクを追加し、次の結果を得ました。

ジャンプリストに入力する別のオプションは、以前にダウンロードしたドキュメントへのリンクです。 これらの目的のために、拡張子が「.myapp」のテキストファイルをいくつか作成し、このタイプのファイルをアプリケーションに関連付けました。 アプリケーションの起動時に、アプリケーションの起動時にファイル名がパラメーターとして渡されるかどうかを確認します。 名前が指定されている場合、このファイルを読み取り、以前にダウンロードしたファイルのリストに追加します。 これらの目的のために、AddToRecentメソッドが存在します。
if (File.Exists(Environment.GetCommandLineArgs().Skip(1).FirstOrDefault() ?? String.Empty) == true)
{
_jumpListManager.AddToRecent(Environment.GetCommandLineArgs().Skip(1).FirstOrDefault() ?? String.Empty);
}
次に、Windowsエクスプローラーからこれらのファイルを開きます。 これにより、デモアプリケーションが起動します(このタイプのファイルをアプリケーションに正しく関連付けた場合)。 同時に、ジャンプリストを呼び出すと、「最近」のカテゴリに以前に開いたファイルへのリンクがあることがわかります。

最も頻繁に仕事をするポジションを統合できます。 この場合、ジャンプリストを使用して必要なドキュメントをすばやく開くことができます。

ジャンプリストにアイテムを配置する別の方法は、永続的なドキュメント/プログラムへのリンクを作成することです。 この場合、これらのポジションをカテゴリにグループ化することもできます。 これらの目的のために、AddCustomDestinationメソッドが存在します。
_jumpListManager.AddCustomDestination(new ShellLink
{
Path = @"about.txt",
Title = "About",
Category = "My application",
IconLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll"),
IconIndex = 11
});
これらのリンクのいくつかをジャンプリストに追加し、次の結果を得ました。

この図は、内部にリンクがある2つの追加グループが現れたことを示しています。
ジャンプリストの優れた機能は、その内容が[スタート]メニューでも利用できることです。 したがって、たとえば、この機能を積極的に使用する場合、これはスタートメニューからも使用できます。

したがって、Windows 7タスクバーが提供する追加機能を使用して、最も快適なユーザーエクスペリエンスを確保できます。
デモアプリケーション:
Taskbar-JumpLists.zip