既知のフォルダー

Windows Vista では、新しいストレージ シナリオと新しいユーザー プロファイル名前空間が導入されています。 これらの新しい要因に対処するために、CSIDL 値によって標準フォルダーを参照する古いシステムが置き換えられました。 Windows Vista の時点では、これらのフォルダーは、既知のフォルダー ID と呼ばれる新しい GUID 値のセットによって参照されます。

既知のフォルダー システムには、次の利点があります。

  • 独立系ソフトウェア ベンダー (ISV) は、既知のフォルダー ID のセットを独自に拡張できます。 フォルダーの定義、ID の付与、システムへの登録を行うことができます。 CSIDL 値を拡張できませんでした。
  • システム上のすべての既知のフォルダーを列挙できます。 CSIDL 値に対してこの機能を提供する API はありません。 詳細については、IKnownFolderManager::GetFolderIds を参照してください。
  • ISV によって追加された既知のフォルダーには、その目的と使用目的を説明するカスタム プロパティを追加できます。
  • ネットワークの場所など、多くの既知のフォルダーを新しい場所にリダイレクトできます。 CSIDL システムでは、マイ ドキュメント フォルダーのみをリダイレクトできました。
  • 既知のフォルダーには、作成時または削除時に使用するカスタム ハンドラーを含めることができます。

CSIDL の値を使用する CSIDL システムと API は、互換性のために引き続きサポートされています。 ただし、新しい開発で使用することはお勧めしません。

Important

新しいコードでは、常に SHGetKnownFolderPathKNOWNFOLDERID 定数と共に使用してください。 古い SHGetFolderPath と CSIDL の値は非推奨であり、新しいアプリケーションでは使用しないでください。

SHGetKnownFolderPath を呼び出すとき:

  • この関数 を使用する 前に 、CoInitializeEx を呼び出す必要があります (COM は呼び出し元のスレッドで初期化する必要があります)。
  • 完了したら、CoTaskMemFree で返された文字列を解放する必要があります。 これを行わないと、メモリ リークが発生します。
  • .NET アプリケーションでは、シェル関数を P/Invoke で直接呼び出す代わりに、Environment.GetFolderPath または Windows.Storage.KnownFolders (WinRT) を使用します。

次のトピックでは、既知のフォルダー システムの詳細について説明します。

次のリファレンス ページでは、既知のフォルダーの場所を取得したり、新しい場所にリダイレクトしたりするために使用できる Win32 既知のフォルダー関数について説明します。 これらの関数は、以前の Win32 関数を置き換えます。 新しい関数は、古い関数と同等の動作を提供するために提供されますが、新しい各関数もコンポーネント オブジェクト モデル (COM) API によって複製されます。

新しい関数 置き換えます COM に相当する
SHGetKnownFolderPath SHGetFolderPath IKnownFolder::GetPath
SHGetKnownFolderIDList SHGetFolderLocation IKnownFolder::GetIDList
SHSetKnownFolderPath SHSetFolderPath IKnownFolder::SetPath

 

次のリファレンス ページでは、上記の Win32 API のすべての機能を提供する COM 既知のフォルダー API について説明します。さらに、すべての既知のフォルダーを列挙し、既知のフォルダーのプロパティにアクセスし、既知のフォルダーの標準セットを拡張する機能を追加します。

既知のフォルダー API を示す C++ サンプルは、Windows ソフトウェア開発キット (SDK) に含まれています。 コンピューターに Windows SDK をインストールすると、サンプルは %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Samples\WinUI\Shell\AppPlatform\KnownFolders にあります。

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