アプリケーションでの既知のフォルダーの操作

既知のフォルダー システムは、Windows に既定で存在する特定のプロファイルの高いフォルダーを操作する方法を提供します。 また、アプリケーションによってインストールされ、既知のフォルダー システムに登録されているフォルダーと同じ操作を行うこともできます。 このトピックでは、既知のフォルダー API によって提供される可能性のある相互作用について説明します。

重要

ドキュメント、画像、またはデスクトップ フォルダーを OneDrive にリダイレクトするには、この記事で説明するリダイレクト方法ではなく、OneDrive の既知のフォルダー移動を使用します。 詳細については、「 Windows の既知のフォルダーを OneDrive にリダイレクトして移動する」を参照してください。

既知のフォルダー インターフェイス

既知のフォルダー インターフェイスには、 IKnownFolderIKnownFolderManager の 2 つがあります。

IKnownFolderManager は、これらのフォルダーに関してより一般的な機能の多くを提供します。 そのメソッドを使用すると、次のことができるようになります。

  • そのフォルダーの KNOWNFOLDERID、正規名、文字列として表されるパス、または IDList として表されるパスのいずれかに基づいて IKnownFolder を取得します。
  • CSIDL を 対応する KNOWNFOLDERID に変換するか、 KNOWNFOLDERID を従来の CSIDL と同等のものに変換します。
  • 既知のフォルダーをシステムに登録または登録解除します。
  • そのシステムに登録されているすべての KNOWNFOLDERID 値を取得します。
  • 既知のフォルダーを新しい場所にリダイレクトします。

IKnownFolder には、新しいパスを指定してフォルダー自体をリダイレクトできるようにするメソッドが用意されています。 その他のメソッドは、次を含む特定の既知のフォルダーに関する情報を取得します。

  • フォルダーのカテゴリ:仮想、固定、共通、またはユーザーごと。
  • 圧縮、ドキュメント、画像、ユーザー ファイルなどのフォルダーの種類。
  • フォルダーの KNOWNFOLDERID
  • IDList または文字列としてのフォルダーの完全パス。 親フォルダーへの相対パスも指定します。
  • フォルダーの正規名。
  • フォルダーに表示されるツールヒント。
  • フォルダーに表示されるアイコン。
  • 目的と使用方法を説明するフォルダーの説明。
  • フォルダーがリダイレクト可能かどうか。

IKnownFolder には、 フォルダーに基づいて IShellItem を取得するメソッドも用意されています。 これにより、フォルダーをハンドラーにバインドし、2 つのフォルダーを比較し、フォルダーの属性、表示名、親フォルダーを取得できます。

リダイレクト

フォルダー リダイレクトは、既知のフォルダー システムの重要な機能です。 カテゴリ共通KF_CATEGORY_COMMON**** またはユーザーごとのKF_CATEGORY_PERUSER**** のすべての既知のフォルダーはリダイレクト可能です。 ただし、カテゴリ 仮想KF_CATEGORY_VIRTUAL**** または fixedrKF_CATEGORY_FIXED**** のフォルダーはリダイレクトできません。

フォルダーは、同じコンピューター上の別の場所またはネットワーク上の場所にリダイレクトできます。 ネットワーク リダイレクトの場合、オフライン アクセスを提供するために、クライアント側のキャッシュを使用してフォルダーをローカルにキャッシュできます。 ただし、ローカル キャッシュが存在する場合でも、リダイレクトされたフォルダー自体にネットワーク経由でアクセスする必要があります。

フォルダーリダイレクトは、Windows Vista では新しいものではありません。 たとえば、Windows XP では、CSIDL システムを介して識別された一部のフォルダーは 、SHSetFolderPath の呼び出しまたはレジストリ内の CSIDL のエントリを変更することによってリダイレクトできます。 Windows Vista 以降では、 IKnownFolder::SetPath または SHSetKnownFolderPath を使用してリダイレクトを実行する必要があります。

フォルダーをリダイレクトできるかどうかを判断するには、 IKnownFolder::GetRedirectionCapabilities を呼び出します。 フォルダーをリダイレクトできない場合は、この呼び出しで説明を行うことができます。

フォルダーがネットワーク上の場所にリダイレクトされた場合でも、 IKnownFolder メソッドを正常に呼び出すことができます。

既知のフォルダーのサンプル