Windows API Code Packによるアプリ開発 第17回 Windows 7 タスクバー ~ジャンプリストの実装方法~

Windows API Code Packによるアプリ開発 [TechED2010 ポストセッション ] 第17回 Windows 7 タスクバー ~ジャンプリストの実装方法~

Windows API Code Packによるアプリ開発も、いよいよ最終回です。

[ 実装前にやること ]
既存のプロジェクトに、ジャンプリストの機能を実装するという前提で進めます。
ここでは、Visual Studio 2008とC#を使用したプロジェクトを想定しています。

最初に、.NET Framework 2.0をご使用の場合は、メニューの[プロジェクト]-[(プロジェクト名)のプロパティ]を選択して、対象のフレームワークを.NET Framework 3.5に変更してください。

次に、メニューの[プロジェクト]-[参照の追加]を選択し、表示される参照の追加ダイアログの[参照]タブをクリックして、インストールしているMicrosoft.WindowsAPICodePack.Shell.dllへの参照を追加してください。

プログラムの最初のほうにあるusingが並んでいるところには、以下の2文を追加しておきます。

using Microsoft.WindowsAPICodePack.Taskbar;
using Microsoft.WindowsAPICodePack.Shell;

さらに、Form1クラスなどの機能を実装するクラスに、以下の定義を追加します。

private JumpList myJumpList;

これで、ジャンプリストの機能を実装できるようになりました。

[JumpTaskの実装 ]
特定のアプリケーションを起動させるJumpTaskの実装を行います。
まずフォームの何も貼り付けていない部分をダブルクリックし、自動的に生成されるForm1_Shownの中に、以下のコードを記述してください。

myJumpList = JumpList.CreateJumpList();

ここでジャンプリストを生成し、そこにJumpTaskに表示させるタスクを追加します。
例えばメモ帳を表示させる場合、Form1_Shownの中に以下のコードを書きます。

string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);

myJumpList.AddUserTasks(new JumpListLink(System.IO.Path.Combine(systemFolder, "notepad.exe"), "メモ帳を起動する")
{
IconReference = new IconReference(System.IO.Path.Combine(systemFolder, "notepad.exe"), 0)
// コマンドラインオプションを追加するときは、以下のように行う
, Arguments = "c:\\autoexec.bat"
});

コマンドラインオプションを追加しない場合は、Argumentsが含まれる行を削除してください。
なおこの例では、1行まるまる削除すればいいように、カンマをこの行の冒頭につけています。コマンドラインオプションを指定する際は、このカンマを前の行末につけたほうが見栄えがいいです。

[JumpPathの追加 ]
JumpPathの追加も、基本はJumpTaskの追加と方法は変わりません。
指定するファイルを、実行可能形式ファイルである.exeのファイルから、他のファイルに変えるだけです。
例えばスクリーンセーバーのバブルを表示される場合は、以下のように実装します。

myJumpList.AddUserTasks(new JumpListLink(System.IO.Path.Combine(systemFolder, "bubbles.scr"), "バブルを表示する")
{
IconReference = new IconReference(System.IO.Path.Combine(systemFolder, "bubbles.scr"), 0)
});

ここでの注意点は、拡張子がアプリケーションに関連付けされているものでないと起動ができないという点です。
もしアプリケーションに関連付けられていない拡張子のファイルを指定したい場合は、事前にアプリケーションとの関連付けを行ってください。

[ セパレーターの追加 ]
ジャンプリストの中に、セパレーターと呼ばれる横線を入れることができます。
セパレーターを追加するには、以下のように実装します。

myJumpList.AddUserTasks(new JumpListSeparator());

追加するタスクの数が増えたときは、セパレーターを入れると見やすくなります。

[ 最近使ったファイルの表示/非表示 ]
最近使用したファイルを表示させる場合には、以下のように指定します。

myJumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;

よく使用するファイルを表示させる場合は、Recentの部分をFrequentに変更します。
どちらも表示しない場合は、Recentの部分をNeitherに変更します。

[ 最後の仕上げ ]
ジャンプリストに関する全ての実装が終わったら、最後にこのコードを追加します。

myJumpList.Refresh();

これにより、ジャンプリストがリフレッシュされ、追加したタスクなどの情報がジャンプリストに反映されます。

TechEDポストセッション "Windows API Code Packによるアプリ開発" はいかがでしたでしょうか?
フィードバックをいただけるとありがたいです。
約半月にわたりご購読いただき、ありがとうございました!

[ 参考資料 ]
TechEDでのビデオとスライド
https://msdn.microsoft.com/ja-jp/events/ff973814.aspx
内容を早く知りたい方や、デモを確認されたい方は、ビデオをご覧ください。
本連載は、Code Packのバージョン1.1を元に説明しています。
TechEDでは、当時の最新バージョンである1.01を元に説明しました。
内容はほぼ同じですが、クラス名など一部に小さな違いがあることがあります。

[Visual Basicのコード ]
上記のTechEDのスライドに、Visual Basicでのコードの記述例を入れています。
VBをよく使う方は、スライド後半にあるVBのコードをご参照ください。

[Windows API Code Packのダウンロード ]
https://code.msdn.microsoft.com/WindowsAPICodePack
このページの右上にある、「Current Release」と書かれた部分のすぐ下にあるリンクをクリックすると、ダウンロードページに飛びます。

[Windows API Code PackによるWindowsアプリ開発 / TechEDポストセッション ]
第1回 : Windows API Code Packとは
第2回 : アプリケーションの再起動と修復その1
第3回 : アプリケーションの再起動と修復その2
第4回 : 電源の状況の把握
第5回 : Windows 7 タスクバー ~アイコンオーバーレイ~
第6回 : Windows 7 タスクバー ~進行状況バー ( プログレス バー )
第7回 : Windows 7 タスクバー ~サムネイル ツールバー その1
第8回 : Windows 7 タスクバー ~サムネイル ツールバー その2
第9回 : Windows 7 タスクバー ~サムネイルについて知っておくべきこと~
第10回 : Windows 7 タスクバー ~アプリケーション ユーザー モデル ID (AppID)
第11回 : Windows 7 タスクバー ~タブに対応したサムネイル~
第12回 : Windows 7 タスクバー ~タブ サムネイルの実装~
第13回 : Windows 7 タスクバー ~タブ サムネイルのイベント処理~
第14回 : Windows 7 タスクバー ~画面の一部だけをサムネイルする~
第15回 : Windows 7 タスクバー ~見られたら困るサムネイル~
第16回 : Windows 7 タスクバー ~ジャンプリストについて知っておくべきこと~
第17回(最終回) : Windows 7 タスクバー ~ジャンプリストの実装方法~

番外編 : Windowsフォームアプリによる電源の状況の把握
番外編1 : アプリをクラッシュさせるには
番外編2 : シューティングゲームにタスクバーの機能を追加
Windows API Code Packの連載のあとは、Windows Live Essentialsに含まれるフォトギャラリーとムービーメーカーのプラグインについての連載を始めます。
同時に並行して、不定期でWindowsフォームを使われている方のWPF移行時のつまづきポイントの解説も始めます。

マイクロソフト
田中達彦