Windows API Code Packの使用
自由にダウンロードできるWindows API Code Packは、さまざまな種類のアセンブリにコンパイルされた.NETクラスのセットです。各自のプロジェクトでこれらを簡単に参照し、クラスを利用できます。
Code Packを使用するには、まずファイルをダウンロードする必要があります。Code Packのファイルは通常のzip形式なので、Visual Studioプロジェクトフォルダの下など、使いやすい場所に展開します。次に、展開先のフォルダ内に移動し、Visual StudioでShell.slnという名前のソリューションを開きます。ソリューション全体をビルドし、生成されたDLLファイルの場所を覚えておきます。通常はbin\Debug
フォルダの下に生成されます。
ビルドが正常に終了すると、出力フォルダにMicrosoft.WindowsAPICodePack.Shell.dllとMicrosoft.WindowsAPICodePack.dllの2つのアセンブリが作成されます。後者のファイルは自動的に作成されます。ShellプロジェクトはCoreというプロジェクトに依存しているからです。CoreプロジェクトもCode Packの一部です。
次に、Visual Studioで新しいプロジェクトを開始し(または既にプロジェクトがある場合はそれを開き)、Code Packの2つのDLLをプロジェクトへの参照として追加します(図5)。適切な参照を設定したら、コードの作成を開始できます。アセンブリのファイル名が適切な名前空間を暗に示しています。Code Packをジャンプリストに使用するには、次のusing
ステートメントをC#コードに追加します。
using Microsoft.WindowsAPICodePack.Shell; using Microsoft.WindowsAPICodePack.Taskbar;
後者の名前空間内に、JumpList
という名前のクラスがあります。ジャンプリストの機能を見て回るうえで、このクラスが有効な出発点になります。例えば、ジャンプリストのカスタム動詞をアプリケーションのメニューに追加する方法を見てみましょう。
最初に、JumpList
クラスのインスタンスを生成します。その後で、ジャンプリストに追加するカスタム動詞ごとに、IJumpListTask
インターフェースをサポートするオブジェクトを作成する必要があります。これを行うには、JumpListLink
クラスを利用します。このクラスもMicrosoft.WindowsAPICodePack.Taskbar
名前空間に属しています。
例えば、メモ帳や電卓をすばやく起動するコマンドをアプリケーションのジャンプリストに追加するとします。これを行うには、次のようなコードを使います。
JumpList list = JumpList.CreateJumpList(); string systemFolder = Environment.GetFolderPath( Environment.SpecialFolder.System); string notepadPath = System.IO.Path.Combine( systemFolder, "notepad.exe"); JumpListLink notepadTask = new JumpListLink( notepadPath, "Open Notepad"); notepadTask.IconReference = new IconReference( notepadPath, 0); string calculatorPath = System.IO.Path.Combine( systemFolder, "calc.exe"); JumpListLink calculatorTask = new JumpListLink( calculatorPath, "Open Calculator"); calculatorTask.IconReference = new IconReference( calculatorPath, 0); list.AddUserTasks(notepadTask, calculatorTask); list.Refresh(); MessageBox.Show("Custom tasks have been added!");
ここでは、新しいジャンプリストオブジェクトを生成し、JumpListLink
クラスを使って2つの動詞を作成しています。コンストラクタにはファイルベースのコマンドが必要で、この例ではWindows\System32
ディレクトリにあるNotepad.exe(およびCalc.exe)のフルパス名がそのコマンドになります。この処理にはSystem.IO.Path
クラスを利用しています。また、IconReference
クラスを使ってメニューアイコンを追加しています。このクラスには、フルパスとアイコンインデックスを指定します。0はファイル内の最初のアイコンを意味し、通常はこれがメインアイコンになっています。
最後に、JumpList
クラスのAddUserTasks
メソッドを呼び出して、メニューに新しい動詞を追加しています。コマンドは[タスク]汎用グループの下に作成されるので、ここに追加される動詞はタスクと呼ぶこともできます。作成したタスクの記録はWindowsに保持されます。従って、タスクは一度作成するだけで済みます。