Windows 7
ハンズオン ラボ: Shell ライブラリ

更新日: 2009 年 10 月 23 日


ハンズオンラボ

ダウンロード

目次

  1. 演習: SHELL ライブラリ
  2. 練習 1: ライブラリ操作ツールの作成

    タスク 1 – SLUtil プロジェクトを準備する
    タスク 2 – ライブラリ新規作成のコマンドを追加する
    タスク 3 – フォルダー追加とフォルダー削除のコマンドを追加する
    タスク 4 – 保存フォルダー、ナビゲーション ペインでの表示状態、アイコン、およびフォルダーの種類に関するコマンドを追加する
    タスク 5 – 情報表示コマンドを追加する
    タスク 6 – 管理用 UI の表示コマンドを追加する

  3. まとめ

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む) は、将来予告なしに変更することがあります。このドキュメントに記載された内容は情報提供のみを目的としており、明示または黙示に関わらず、これらの情報についてマイクロソフトはいかなる責任も負わないものとします。

お客様が本製品を運用した結果の影響については、お客様が負うものとします。お客様ご自身の責任において、適用されるすべての著作権関連法規に従ったご使用を願います。このドキュメントのいかなる部分も、米国 Microsoft Corporation の書面による許諾を受けることなく、その目的を問わず、どのような形態であっても、複製または譲渡することは禁じられています。ここでいう形態とは、複写や記録など、電子的な、または物理的なすべての手段を含みます。

マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではありません。

別途記載されていない場合、このソフトウェアおよび関連するドキュメントで使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、出来事などの名称は架空のものです。実在する会社名、組織名、商品名、個人名などとは一切関係ありません。

© 2009 Microsoft Corporation. All rights reserved.

Microsoft、MS-DOS、Windows、Windows NT、MSDN、Active Directory、BizTalk、Windows Server、SQL Server、SharePoint、Outlook、PowerPoint、FrontPage、Visual Basic、Visual C++、Visual C#、Visual Studio は、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。

記載されている会社名、製品名には、各社の商標のものもあります。

1. 演習: Shell ライブラリ

Windows 7 では、複数のコンピューターをまたいで複数の場所に広がるアイテムのコレクションとして、ユーザーがデスティネーションを検索したり整理したりできる、新しいライブラリのコンセプトが導入されました。このライブラリは、以前の Windows のバージョンで知られているフォルダー (たとえば、「ドキュメント」や「ピクチャ」、「ミュージック」など) の機能に取って代わるものであり、主な「ストレージ」のデスティネーションとして、これらに置き換わるものです。各アプリケーションは、Library API をプログラムから使用して、簡単にライブラリと連携できます。アプリケーションのエクスペリエンスの中で迅速にアクセスする手段として、ライブラリを作成し、操作し、サポートすることができます。

以前のバージョンの Windows では、それぞれのアプリケーションが、固有のライブラリを持っていました。たとえば、Windows Media Player は、iTune とは異なる範囲のデータを持っており、「ミュージック」 フォルダーとも一貫性は保たれていませんでした。Library API を使用すると、各アプリケーションは、ユーザーが定義した一貫性あるデータの管理範囲を指定し、利用することができます。

またぐ管理対象の一貫性

ライブラリは、ネットワーク フォルダーを含むこともあります。これによって、会社と自宅で作業する際のユーザー エクスペリエンスが向上します。ユーザーは、コモン ファイル ダイアログを開くと、ライブラリから利用可能なすべてのロケーションを確認できる、革新的なビューを閲覧することができます。

前提知識

この演習のドキュメントでは、次に挙げる知識を既にお持ちであることを前提に解説しています。ただし、C# の言語文法等に自信のない方でも、この演習付属のサンプルの完成品をコンパイルし、実行することで、この演習で取り上げた機能を体感することができます。

  • Visual Studio 2008 (Visual C# 2008) における基本的な操作。たとえば、ソリューションを開く方法、コードの編集、ビルド (コンパイル) や実行方法など。
  • C# の言語文法や、オブジェクト指向プログラミングに関する基本的な用語。

演習のシステム要件

この演習を行うには、あらかじめ以下の環境を用意する必要があります。

  • Windows 7 (日本語 32 ビット版)
  • Visual C# 2008 SP1 (Visual Studio 2008 SP1) 日本語版、Express Edition も可能
  • Windows API Code Pack 1.0 (Windows API Code Pack for Microsoft .NET Framework)
  • この演習で使用する付属のソース プログラム (サンプル プログラム)

この後は、上記の各項について、留意点をいつくか補足します。予めご覧ください。

Windows 7 では Visual Studio 2008 を動作させることが目的なので、特に Windows 7 のエディションは問いません。

Visual C# 2008 のエディションは問いません。Visual C# 2008 Express Edition も演習を行うことが可能です。ただし、SP1 をご利用ください。今回インストールする Windows API Code Pack 1.0 は、.NET Framework 3.5 SP1 が前提になります。なお、Visual C# 2008 Express Edition は、Visual Studio 2008 Express Edition SP1 の一部として、以下の URL のダウンロード センターから無償で入手できます。(2009 年 9 月現在)

この演習で使用する Windows API Code Pack 1.0 は、マネージ コードから Windows 7 の新機能を利用するための、ソースコード ライブラリです。Windows API Code Pack 1.0 は、MSDN Code Gallery の中の、以下の URL から入手することができます。

この Windows API Code Pack 1.0 を演習で使用するための準備方法については、後述の「Windows API Code Pack 1.0 の基本的な準備」、および、「Windows API Code Pack 1.0 の演習のための準備」の項を参照してください。

演習に使用する付属のソース プログラムの入手方法については、このドキュメントを入手されたサイト等でご確認ください。ソース プログラムの使用方法は、後述の「演習で使用する付属のソース プログラム (サンプル プログラム) のインストール方法」の項を参照してください。

Windows API Code Pack 1.0 の基本的な準備

Windows API Code Pack は、ソース コードとして提供されます。これを使用するには、コンパイルしてアセンブリを作る必要があります。演習を行うためには、次の操作でアセンブリを用意します。

  1. ダウンロード サイトから、WindowsAPICodePack.zip を入手できたことを確認します。
  2. WindowsAPICodePack.zip の中に含まれる WindowsAPICodePack フォルダーを解凍して取り出し、適当な場所に置きます。(ここでは、C:\ の直下にこのフォルダーを置くことにします。)
  3. 以下のパスにあるソリューション ファイルをダブル クリックして、 Visual Studio 2008 から開きます。

    C:\WindowsAPICodePack\WindowsAPICodePack\WindowsAPICodePack.sln

  4. ソリューションが開いたら、[ビルド] メニューの [ソリューションのビルド] をクリックして、ソリューション全体をビルドします。
  5. ビルドが済んだ後、次に示すパスに、2 つのアセンブリがあることを確認します。
  6. パス: C:\WindowsAPICodePack\WindowsAPICodePack\Shell\bin\Debug

    アセンブリ: Microsoft.WindowsAPICodePack.dll、および
    Microsoft.WindowsAPICodePack.Shell.dll
    Note: 上記の 2 つのアセンブリは、Windows API Code Pack を介して、Library API を使用する際に必要になります。ここまでの手順は、この演習に限らず、Windows API Code Pack を使用する場合に必要な手順です。さらに実際に使用するには、使用する側のプロジェクトに、これらのアセンブリへの参照を追加する必要があります。
    なお、このソリューションの既定である Debug 版のビルドをここでは行いましたが、運用環境で使用するならば、Release 版用のビルドを行うことになります。

演習で使用する付属のソース プログラム (サンプル プログラム) のインストール方法

演習で使用するソース プログラムには、特別なインストール方法はありません。入手されたソース プログラムのフォルダー「HOLShell」全体を、任意のパスにコピーしてください。たとえば、C:\ にコピーすれば、演習で作業を行うソース プログラムのパスは、次のようになります。

例 1. C:\HOLShell

なお、演習の本文では、ソース プログラム等の位置を示す際、次のように、ソース プログラムのルート フォルダーに対する相対パスで表記しています。

例 2. Ex1_Starter\Ex1_Starter.sln

この場合、ソース プログラムのフォルダーが例 1 の場所であるなら、絶対パスは次の意味になります。

例 3. C:\HOLShell\Ex1_Starter\Ex1_Starter.sln

なお、演習作業の中で、ソース プログラムに書き込む場合もあるので、作業を行うユーザー アカウントには、ソース プログラムに対して、書き込み可能なアクセス許可を与えてください。

Windows API Code Pack の演習のための準備

この演習では、この後の作業を行いやすくするため、Windows API Code Pack が提供するライブラリを別の場所にコピーしておくことにします。

  1. 演習用フォルダー HOLTaskbar の中に、dependencies サブフォルダーがあることを確認します。たとえば、演習用フォルダーが C:\ にあれば、dependencies サブフォルダーは次のパスになります。

    C:\HOLTaskbar\dependencies

  2. 前述のパスに、次に挙げるファイルをすべてコピーします。
    1. Microsoft.WindowsAPICodePack.dll、Microsoft.WindowsAPICodePack.Shell.dll

      (ライブラリの本体の一部であり、「Windows API Code Pack 1.0 の基本的な準備」でビルドしたアセンブリです。)

なお、このアセンブリを Visual Studio のプロジェクトから使用するには、個別にアセンブリへの参照の追加が必要になります。これは、演習の手順の中で行います。

演習の目的

このハンズオンでは、次に挙げた事項を含む、プログラムからライブラリを制御する方法を学びます。

  • 任意のロケーションに、ライブラリを新規作成する
  • 既存のライブラリを開く
  • ライブラリにフォルダーを追加し、削除する
  • ライブラリの既定の保存フォルダーを設定する
  • ライブラリのプロパティを設定する (たとえば、フォルダーの種類、アイコン、ナビゲーション ペインに常に表示させるなど)
  • 管理用のダイアログ ボックスを表示する

ページのトップへ


2. 練習 1: ライブラリ操作ツールの作成

この練習で作成する「ライブラリ操作ツール」(SLUtil) は、既定のライブラリのディレクトリに対して、ライブラリの管理を行うコマンド ライン ツールです。たとえば、コマンド ラインから、次のようにコマンドを実行して、ライブラリに対して、参照や編集を行います。

SLUtil Create LibraryName
SLUtil AddFolder LibraryName FolderPath
SLUtil RemoveFolder LibraryName FolderPath
SLUtil ShowInfo [LibraryName]
SLUtil FolderType LibraryName [Documents|Pictures|Music|Videos]
SLUtil SaveFolder LibraryName [FolderPath]
SLUtil NavPanePinnedState LibraryName [TRUE|FALSE]
SLUtil Icon LibraryName [Icon]
SLUtil ManageUI Videos
SLUtil ? [CommandName]

ページのトップへ


タスク 1 - SLUtil プロジェクトを準備する

  1. Visual Studio 2008 を起動して、プロジェクトを新規に作成するため、メニュー バーから、[ファイル]、[新規作成]、[プロジェクト] の順にクリックします。(エディションによって、多少操作が異なる場合があります。)
  2. [新しいプロジェクト] ダイアログ ボックスが表示されたら、次に示す各項を指定し、Visual C# のプロジェクトを新規作成します。
    • プロジェクト テンプレート: コンソール アプリケーション
    • プロジェクト名: SLUtil
    • 場所: (演習用のフォルダー、たとえば、C:\HOLShell)
  3. 最初に行うべき手順は、Windows API Code Pack 1.0 に含まれるライブラリを使用できるようにするため、必要なアセンブリへの参照を、プロジェクトに追加することです。次の要領で行います。
    1. 演習用フォルダーの中の dependencies サブフォルダー (HOLShell\dependencies) に、次のアセンブリがあることを確認します。(既に「Windows API Code Pack 1.0 の基本的な準備」の項の手順に基づいて、dependencies サブフォルダーに配置してあるはずです。)
      • Microsoft.WindowsAPICodePack.dll
      • Microsoft.WindowsAPICodePack.Shell.dll
    2. ソリューション エクスプローラー上で、SLUtil プロジェクト内の [参照設定] ノードを右クリックして、[参照の追加] メニューをクリックします。
    3. [参照の追加] ダイアログ ボックスが表示されたら、[参照] タブをクリックします。
    4. 前述の dependencies サブフォルダーにある Microsoft.WindowsAPICodePack.dll および Microsoft.WindowsAPICodePack.Shell.dll の 2 つのアセンブリを選択します。

      参照の追加

    5. [OK] をクリックし、[参照の追加] ダイアログ ボックスを閉じます。
    6. ソリューション エクスプローラーの [参照設定] ノードの配下に、前述の 2 つのアセンブリが追加されたことを確認します。

      ソリューション エクスプローラ

  4. 次に、この練習用に予め用意されたサンプル ソース ファイルを、SLUtil プロジェクトに追加します。次の要領で行ってください。
    1. ソリューション エクスプローラーの SLUtil プロジェクトを右クリックして、ショートカット メニューを表示させ、[追加]、[既存の項目] の順にクリックします。
    2. [既存項目の追加] ダイアログ ボックスが表示されたら、次のパスのソース ファイルを選択し、[追加] ボタンをクリックします。

      \Ex1_Starter\CommandLineInterpreter.cs

    3. 次図のように、SLUtil プロジェクトに CommandLineInterpreter.cs が追加されたことを確認します。

      ソリューション エクスプローラ

      Note: このソース ファイルのクラスは、コマンド プロンプトで利用者が入力したコマンドライン引数を解析して、解説結果に基づいて、特定の Command 属性が付いた静的メソッドを実行するユーティリティ クラスです。
  5. このコマンドラインを解析実行するクラスを使用するために、次のソース コードのように、Program.cs の中にある Main メソッドに追加するほか、ソース コードの他の using ディレクティブの下に、このクラスを使用するための using ディレクティブも追加します。(黄色の部分)
    • using ShellLibraryExercise;
    • CommandLineInterpreter cli = new CommandLineInterpreter(args);
      cli.Execute();
          ...

using ShellLibraryExercise;

namespace SLUtil { class Program { static void Main(string[] args) { CommandLineInterpreter cli = new CommandLineInterpreter(args); cli.Execute(); } } }

  1. このソリューションをビルドするため、[ビルド] メニューの [ソリューションのビルド] をクリックします。
  2. アプリケーションの現状の動作を確認するため、実行時のコマンドライン引数を追加します。そのためには、プロジェクト デザイナー (プロジェクト プロパティ) を開き、[デバッグ] タブをクリックして、コマンドライン引数の欄に、「?」を入力します。

    プロジェクト デザイナー

  3. 再びビルドします。
  4. このアプリケーションを実行するため、[デバッグ] メニューの [デバッグなしで開始] をクリックします。コマンド プロンプトに次のように出力されることを確認します。

    SLUtil ? [CommandName]
    続行するには何かキーを押してください . . .

  5. 確認が済んだら、コマンド プロンプトを閉じて、アプリケーションを終了します。

ページのトップへ


タスク 2 - ライブラリ新規作成のコマンドを追加する

Windows 7 のシェルから認識できる 1 つのライブラリを制御するには、Windows API Code Pack に含まれる ShellLibrary クラスのインスタンスを使用します。また、new キーワードを使用して、ShellLibrary のインスタンスを新規作成することは、ライブラリ自体を新規作成することを意味します。

また、この ShellLibrary クラスは、IDispose インターフェイスを実装しています。ShellLibrary クラスの内部で使用されている Library API の COM オブジェクトを解放するためには、このインターフェイスの Dispose メソッドを呼び出すことが重要です。

よって、このライブラリのオブジェクトを使用する C# での基本的な実装パターンは、次のように using ステートメント ブロックを使用することになります。

using (ShellLibrary library = new ShellLibrary(name, true))
{

}

Note: using ブロックの終端では、自動的に Dispose メソッドが呼び出されます。
  1. ここで、このユーティリティのコマンドを実装するクラスを新規追加するため、次の要領でプロジェクトにファイルを追加します。
    1. ソリューション エクスプローラーの SLUtil プロジェクトを右クリックして、ショートカット メニューを表示させ、[追加]、[クラス] の順にクリックします。
    2. [新しい項目の追加] ダイアログ ボックスが表示されたら、ファイル名として、「ShellCommands.cs」を指定して、[追加] ボタンをクリックします。
    3. SLUtil プロジェクトに ShellCommands.cs が追加されるほか、このファイルがコード エディター上に開くことを確認します。
  2. この ShellCommands.cs ファイルに記述された ShellCommands クラスのインスタンスは不要なので、クラスの先頭に static 修飾子を付けて、静的クラスにします。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SLUtil { static class ShellCommands { } }

  1. ファイル ShellCommands.cs に、次に示す using ディレクティブを追加します。
using Microsoft.WindowsAPICodePack.Shell;
using ShellLibraryExercise;
  1. コマンド プロンプトから特定のコマンド オプションを付けて、このユーティリティを実行すると、ライブラリを新規作成するように、次に示す CreateLibrary メソッドを ShellCommands クラスの中に追加します。
[Command(
Name = "Create",
Usage = "SLUtil Create LibraryName",
Info = "Create a new library",
Example = "SLUtil Create MyLib")]
public static void CreateLibrary(string name)
{
using (ShellLibrary library = new ShellLibrary(name, true))
{
}
}
Note: このユーティリティでは、CommandLineInterpreter クラスの中で、コマンド プロンプトに利用者が入力したコマンドライン引数を確認し、Command 属性の Name プロパティがコマンドライン引数と一致するメソッドを呼び出すように実装されています。つまり、コマンドライン引数に「Create」を指定すると、前述の CreateLibrary メソッドが呼び出されます。
  1. ビルドして、コンパイル エラーがないことを確認します。
  2. プロジェクト プロパティのコマンドライン引数を、「?」から「Create MyLib」に変更して、「MyLib」という名前のライブラリを作成するようにします。

    開始オプション

  3. ビルドして、アプリケーションを一旦実行した後、コマンド プロンプトを閉じます。
  4. エクスプローラーを開き、ライブラリに「MyLib」が追加されたことを確認します。

    エクスプローラ

Note: このユーティリティでは、実装を簡単にするため、同じ名前のライブラリがあると上書きします。誤って既存のものに上書きしないよう注意してください。
Note: 他のファイルと同様に、エクスプローラー上から、ライブラリを削除することができます (選択して [Del] キーを押すなど)。再度、MyLib の作成を実験した場合は、エクスプローラー上で、一旦削除してください。

ページのトップへ


タスク 3 - フォルダー追加とフォルダー削除のコマンドを追加する

次に、ライブラリに対して、フォルダーの追加と削除を行うコマンドを追加することにします。この処理には、ShellLibrary インスタンスの Add メソッドと Remove メソッドを使用します。ただし、ShellLibrary インスタンスを new キーワードで作成すると、その都度、ライブラリを新規作成する意味があるので、作成済みのライブラリにアクセスする場合は、ShellLibrary.Load メソッドを使用してインスタンスを作成します。

  1. 次のコードを ShellCommands クラスに追加します。
[Command(
Name = "AddFolder",
Usage = "SLUtil AddFolder LibraryName FolderPath",
Info = "Add a folder to a library",
Example = @"SLUtil AddFolder Documents C:\Docs")]
public static void AddFolder(string name, string folderPath)
{
using (ShellLibrary library = ShellLibrary.Load(name, false))
{
library.Add(folderPath);
}
}

[Command( Name = "RemoveFolder", Usage = "SLUtil RemoveFolder LibraryName FolderPath", Info = "Remove a folder from a library", Example = @"SLUtil RemoveFolder Documents C:\Docs")] public static void RemoveFolder(string name, string folderPath) { using (ShellLibrary library = ShellLibrary.Load(name, false)) { library.Remove(folderPath); } }

  1. ビルドを行い、次のように動作結果を確認します。
    1. コマンド プロンプトを開き、ディリクトリの移動 (CD コマンド) を行い、SLUtil.exe が存在するパスまで移動します (プロジェクト内の bin\debug\SLUtil.exe)。たとえば、次のように入力します (プロジェクトを作成した場所よって異なります)。

      CD C:\HOLShell\SLUtil\SLUtil\bin\Debug

    2. コマンド ラインから、次のように、SLUtil のコマンドをいくつか実行します。

      SLUtil ?
      SLUtil Create NewLibrary
      SLUtil AddFolder NewLibrary C:\Users
      SLUtil RemoveFolder NewLibrary C:\Users
      SLUtil AddFolder NewLibrary C:\HOLShell

    3. 特に、5 番目のコマンドを実行して、NewLibrary に C:\HOLShell をフォルダーとして追加した後、エクスプローラーで NewLibrary を表示すると、C:\HOLShell がブラウズできることを確認します。

      NewLibrary

    Note: このユーティリティは、コマンドを省略しても、最も近いコマンドを実行します。試しに、「SLUtil Cr Lib」や「SLUtil Add Lib C:\」も実行してみてください。
    Note: ShellLibrary クラスは、主に Library API の IShellLibrary インターフェイスの操作をカプセル化したものです。この IShellLibrary インターフェイスには、ライブラリの削除は実装されていません。ライブラリ自身は、拡張子 .library-ms のファイルであり、ライブラリを削除するには、ファイル操作関連の API を使用して、このファイルを削除することで行えます。

ページのトップへ


タスク 4 - 保存フォルダー、ナビゲーション ペインでの表示状態、アイコン、およびフォルダーの種類に関するコマンドを追加する

タスクの表題の 4 つのコマンドは、よく利用される機能です。これらの機能を実装するにあたり、順に、ShellLibrary インスタンスの、DefaultSaveFolder プロパティ、IsPinnedToNavigationPane プロパティ、IconResourceId プロパティ、および、LibraryType プロパティを使用します。

  1. 4 つのコマンドにあたるメソッドを ShellCommands クラスに次の要領で追加します。(4 つのメソッドの完成コードは次にあります。)
    1. SaveFolder メソッドは、ライブラリにファイルを保存する際の、既定の保存フォルダーの名前を調べたり、指定されたフォルダーを既定の保存フォルダーに設定したりするために使用します。引数に渡されたフォルダー パスが空の場合は、保存フォルダーは現状のままです。
    2. NavPanePinnedState コマンドは、指定されたライブラリが、エクスプローラーのナビゲーション ペインに表示されるか否かの状態を調べたり、設定したりするために使用します。
    3. Icon コマンドは、アイコンのリソース名を調べたり、設定したりするために使用します。このプロパティは空の場合があります。
    4. LibraryFolderType コマンドでは、ライブラリのフォルダーの種類を調べたり、設定したりするために使用します。種類によって、ライブラリ ウィンドウがどう表示されるかが決まります。それぞれの種類には、種類を表す相応の Guid (LibraryTypeId プロパティ) があります。
[Command(
Name = "SaveFolder",
Usage = "SLUtil SaveFolder LibraryName [FolderPath]",
Info = "Set or get the library's save folder path",
Example = @"SLUtil SaveFolder Documents C:\Docs")]
public static void SaveFolder(string name, string folderPath)
{
using (ShellLibrary library = ShellLibrary.Load(name, false))
{
if (string.IsNullOrEmpty(folderPath))
{
string path = "(none)";
try
{
path = library.DefaultSaveFolder;
}
catch
{
}
Console.WriteLine("Save folder: {0}", path);
}
else
{
library.DefaultSaveFolder = folderPath;
}
}
}

[Command( Name = "NavPanePinnedState", Usage = "SLUtil NavPanePinnedState LibraryName [TRUE|FALSE]", Info = "Set or get the library's Pinned to navigation pane state", Example = @"SLUtil NavPanePinnedState MyLib TRUE")] public static void NavPanePinnedState(string name, string stateText) { using (ShellLibrary library = ShellLibrary.Load(name, false)) { bool state;

    if (bool.TryParse(stateText, out state))
    {
        library.IsPinnedToNavigationPane = state;
    }
    else
    {
        Console.WriteLine(
           "The library {0} is{1}pinned to the navigation pane.",
         name,
               library.IsPinnedToNavigationPane ? " " : " not ");
    }
}

}

[Command( Name = "Icon", Usage = "SLUtil Icon LibraryName [Icon]", Info = "Set or get the library's icon", Example = @"SLUtil Icon MyLib imageres.dll,-1005")] public static void Icon(string name, string icon) { using (ShellLibrary library = ShellLibrary.Load(name, false)) { if (string.IsNullOrEmpty(icon)) { Console.WriteLine("Icon: {0}", library.IconResourceId.ReferencePath); } else { library.IconResourceId = new IconReference(icon); } } }

[Command( Name = "LibraryFolderType", Usage = "SLUtil LibraryFolderType LibraryName " + "[Generic|Documents|Pictures|Music|Videos]", Info = "Set or get the library's folder type", Example = @"SLUtil MyLib Documents")] public static void LibraryFolderType(string name, string folderType) { using (ShellLibrary library = ShellLibrary.Load(name, false)) { if (string.IsNullOrEmpty(folderType)) { string libraryTypeName = "-"; string libraryTypeId = "-"; try { libraryTypeName = library.LibraryType.ToString(); libraryTypeId = library.LibraryTypeId.ToString(); } catch { } Console.WriteLine("Folder type: {0}, {1}", libraryTypeName, libraryTypeId); } else { try { LibraryFolderType libraryType; libraryType = (LibraryFolderType)Enum.Parse( typeof(LibraryFolderType), folderType, true); library.LibraryType = libraryType; } catch { } } } }

Note: この練習では簡単にするため、例外処理の実装は単純なものにしてあります。
  1. ビルドを行い、次のように動作結果を確認します。
    1. コマンド プロンプトを開き、ディリクトリの移動 (CD コマンド) を行い、SLUtil.exe が存在するパスまで移動します (プロジェクト内の bin\debug\SLUtil.exe)。たとえば、次のように入力します (プロジェクトを作成した場所よって異なります)。

      CD C:\HOLShell\SLUtil\SLUtil\bin\Debug

    2. コマンド ラインから、次のように、SLUtil のコマンドをいくつか実行します。

      SLUtil Create MyLib2
      SLUtil AddFolder MyLib2 C:\HOLShell
      SLUtil SaveFolder MyLibs
      SLUtil AddFolder NewLibrary C:\HOLShell
      SLUtil NavPanePinnedState MyLib2
      SLUtil Icon MyLib2 imageres.dll,-1005
      SLUtil LbraryFolerType MyLib2

    3. 特に、6 番目のアイコンを設定するコマンドを実行では、コマンド プロンプトだけでなく、エクスプローラー上で MyLib2 のアイコンが変化することを確認します。

      MyLib2 のアイコンが変化することを確認

ページのトップへ


タスク 5 - 情報表示コマンドを追加する

次に実装する ShowInfo コマンドは、ライブラリについてのあらゆる情報を表示します。

  1. 以下のコードを、ShellCommands クラスに追加します。
[Command(
Name = "ShowInfo",
Usage = "SLUtil ShowInfo LibraryName",
Info = "Show Library information.",
Example = @"SLUtil ShowInfo Documents")]
public static void ShowInfo(string name)
{
using (ShellLibrary library = ShellLibrary.Load(name, true))
{
ShowInformation(library);
}
}

private static void ShowInformation(ShellLibrary library) { Console.WriteLine("\nShowing information of {0} library", library.Name); Console.WriteLine("\tIs pinned to navigation pane: {0}", library.IsPinnedToNavigationPane); string saveFolder = library.DefaultSaveFolder; Console.WriteLine("\tSave folder: {0}", saveFolder); try { Console.WriteLine("\tIcon: {0}", library.IconResourceId.ReferencePath); } catch { } Console.WriteLine("\tLibrary Folder type: {0}", library.LibraryType);

Console.WriteLine("\tFolder list:");
foreach (ShellFileSystemFolder folder in library)
{
    Console.WriteLine("\t\t{0} {1}", folder.Name,
            saveFolder == folder.Name ? "*" : "");
}

}

  1. ビルドを行い、次のように動作結果を確認します。
    1. コマンド プロンプトを開き、ディリクトリの移動 (CD コマンド) を行い、SLUtil.exe が存在するパスまで移動します (プロジェクト内の bin\debug\SLUtil.exe)。たとえば、次のように入力します (プロジェクトを作成した場所よって異なります)。

      CD C:\HOLShell\SLUtil\SLUtil\bin\Debug

    2. コマンド ラインから、次のように、SLUtil のコマンドを実行し、結果を確認します。

      SLUtil ShowInfo MyLib2

      (実行結果)

      Showing information of MyLib2 library
              Is pinned to navigation pane: True
              Save folder: C:\HOLShell
              Icon: imageres.dll,-1005
              Library Folder type: Generic
              Folder list:
                      HOLShell

ページのトップへ


タスク 6 - 管理用 UI の表示コマンドを追加する

SLUtil ツールを完成させる最後のコマンドは、ManageUI コマンドです。このコマンドは、次図のようなライブラリを管理するウィンドウを表示させます。

MyLib2 ライブラリの場所

  1. 以下のコードを、ShellCommands クラスに追加します。
[Command(
Name = "ManageUI",
Usage = "SLUtil ManageUI LibraryName",
Info = "Show the Shell Library management UI",
Example = @"SLUtil ManageUI Documents")]
public static void ManageUI(string name)
{
ShellLibrary.ShowManageLibraryUI(name,
IntPtr.Zero, null, null, true);
}
  1. ビルドを行い、次のように動作結果を確認します。
    1. コマンド プロンプトを開き、ディリクトリの移動 (CD コマンド) を行い、SLUtil.exe が存在するパスまで移動します (プロジェクト内の bin\debug\SLUtil.exe)。たとえば、次のように入力します (プロジェクトを作成した場所よって異なります)。

      CD C:\HOLShell\SLUtil\SLUtil\bin\Debug

    2. コマンド ラインから、次のように、SLUtil のコマンドを実行し、前述の管理するウィンドウが表示されるか確認します。

      SLUtil MangeUI MyLib2

この練習の完成品は、演習フォルダーの Ex1_Solution サブフォルダーの中にあります。

ページのトップへ


3. まとめ

この演習では、ライブラリを操作するために、ネイティブ API をラップした Windows API Code Pack を使用して、.NET アプリケーションから利用する方法について確認しました。ライブラリの使用方法について、さらに調べたい場合は、Windows API Code Pack として提供されているソース コードを参照することをお勧めします。

ページのトップへ