SHAddToRecentDocs 関数 (shlobj_core.h)

最近、最も頻繁に使用されるアイテムを追跡する目的で、項目にアクセスされたことをシステムに通知します。 この関数を使用して、すべての使用状況データを消去することもできます。

構文

void SHAddToRecentDocs(
                 UINT    uFlags,
  [in, optional] LPCVOID pv
);

パラメーター

uFlags

型: UINT

PV パラメーターが指す情報の形式を示す SHARD 列挙からの値。

[in, optional] pv

型: LPCVOID

アクセスされた項目を識別するデータへのポインター。 このパラメーターでは、次のいずれかの形式で項目を指定できます。

すべてのアイテムのすべての使用状況データを消去するには、このパラメーターを NULL に設定します。

戻り値

なし

解説

このメソッドの呼び出しによって収集された使用状況統計は、最近、最も頻繁にアクセスされる項目の一覧を決定するために使用されます。 これらのリストは、[ スタート ] メニューと Windows 7 以降のアプリケーションのジャンプ リストに表示されます。

このメソッドが呼び出されると、次の領域に影響します。

  • 関連付けられているアプリケーションのジャンプ リストの最近使ったリストと頻繁なリストを更新します。
  • ユーザーの [最近] フォルダー (FOLDERID_RecentCSIDL_RECENT) にショートカットを追加します。 これは、[スタート] メニューの [最近使ったドキュメント (Windows XP)] メニューと [最近使ったアイテム] (Windows Vista 以降) メニューに反映されます。
  • [クラシック スタート] メニューの [ドキュメント] サブメニューにショートカット 追加します。 (Windows 7 以降では、[クラシック スタート] メニュー オプションは使用できません。
IShellLink によって表される項目は、アプリケーションのジャンプ リストに反映されますが、最近使ったフォルダーには追加されません。

特に、ユーザーが Windows エクスプローラーで項目を開いたり、共通のファイル ダイアログを使用してファイルを開いたり、保存したり、作成したりすると、シェルはアプリケーションの代わりに SHAddToRecentDocs を呼び出します。 項目を選択するためのカスタム UI を持つアプリケーションでは、正確な統計を確保するために SHAddToRecentDocs を明示的に呼び出す必要があります。 重複する呼び出しはシステムによって考慮されるため、そうすることでデータを歪めるリスクはありません。

実行可能ファイル (.exe) は、Windows XP 以降のバージョンで最近使用したドキュメントの一覧からフィルター処理されます。 SHAddToRecentDocs は実行可能ファイルのパスを受け入れますが、そのファイルは最近使用したアイテムの一覧には表示されません。

フォルダーは SHAddToRecentDocs でも受け入れられますが、Windows エクスプローラーのタスク バー ボタンのジャンプ リストにのみ表示されます。 フォルダーは、他のアプリケーションのジャンプ リストには表示されません。

場合によっては、 SHAddToRecentDocs は、処理するために登録されていないファイルの種類を処理するアプリケーションの登録を試みます。 これは、次の状況で発生します。

  • アプリケーションは、 SHAddToRecentDocs を、処理するために登録されていないファイルの種類で明示的に呼び出します。 これは、アプリケーションの代わりに共通ファイル ダイアログによって SHAddToRecentDocs に対して行われた呼び出しにも適用されますが、ダイアログがファイルを開くために使用される場合にのみ適用され、保存に使用される場合には適用されません。
  • ユーザーは、アプリケーションのタスク バー ボタンで処理するためにアプリケーションが登録されていない種類のファイルを削除します。
この登録はユーザーごとに行われます。

登録を正常に完了するには、一連の要件を満たす必要があります。

  • アプリケーションは、 HKEY_CLASSES_ROOT\Applications に登録する必要があります。
  • その登録に NoOpenWith 値を含めることはできません。 NoOpenWith の詳細については、「 ファイルの種類 」を参照してください。
  • その登録では、 SupportedTypes サブキーの下にデータを指定できません。 SupportedTypes サブキーの詳細については、「ファイルの種類」を参照してください。
  • アプリケーションの実行可能ファイルは、ここで見つかった KillList 値に一覧表示できません。
    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      FileAssociation
                         KillList
    メモ サード パーティ製アプリケーションでは、KillList 値を変更しないでください。 読み取り専用と見なす必要があります。
     
  • アプリケーションの HKEY_CLASSES_ROOT\アプリケーションの 登録には、既定の動詞のセットが定義されている必要があります。 HKEY_CLASSES_ROOT\Applications\ExampleApp.exe\shell サブキーです。

    SHAddToRecentDocs がタスク バー ボタンへのドラッグ アンド ドロップの結果として登録を試みる場合、既存のアプリケーション登録に NoOpenWith 値が含まれていないか、アプリケーションの実行可能ファイルが KillList 値に一覧表示されていない限り、シェル サブキーがまだ存在しない場合は、シェル サブキーが作成されます。

SHAddToRecentDocs への呼び出しの抑制

Windows 7 より前のバージョンの Windows では、ファイルの種類によって FTA_NoRecentDocs フラグが設定され、そのファイルの種類が [最近使 ったフォルダー] フォルダーに追加されるのを防ぐことができます。 このメカニズムは、Windows 7 以降でもサポートされています。 詳細については、「 ファイルの種類」 を参照してください。

SHAddToRecentDocs は、 これらのドキュメントにアクセスするために呼び出される動詞を介してドキュメントの使用状況の統計情報を追跡します。 登録された IContextMenu ハンドラーによって提供される動詞は追跡され、それらの項目は [最近使ったドキュメント ] (Windows XP) と [最近使った項目 ] (Windows Vista) に表示されます。 Windows 7 では、ドキュメントの親フォルダーが Windows エクスプローラーのタスク バー ボタンのジャンプ リストに表示されます。 ただし、これらの IContextMenu 動詞を介してアクセスされたドキュメントは、アプリケーションジャンプ リストには表示されません。 これらの項目をアプリケーションのジャンプ リストに表示するには、アプリケーションで SHAddToRecentDocs を明示的に呼び出す必要があります。

Windows 7 より前では、動詞のみが openSHAddToRecentDocs を呼び出しました。 Windows 7 以降では、他の動詞でも使用状況の統計情報を生成できます。 この情報は、ジャンプ リストの目的地をより完全かつ正確にするために使用されます。

ただし、ファイルの種類の関連付け登録または個々の IContextMenu 実装の一部のクラスは、この種の追跡には適していません。 使用状況の追跡のポイントは、ユーザーが再びアクセスする可能性が高い項目の一覧を生成することです。 たとえば、特定の動詞deleteが、ユーザーが再びアクセスしないアイテムに対して本質的に呼び出される場合、またはファイルのウイルス スキャンなどのセカンダリ アクションである場合、その動詞は追跡に適していません。 ファイルの種類のクラスは、レジストリ エントリ NoRecentDocs を使用して、この追跡から自分自身を削除する必要があります。 NoRecentDocs はREG_SZ型であり、関連付けられたデータはありません。 SHAddToRecentDocs の呼び出しを防ぐために必要なのは、その存在です。

たとえば、"*"、"AllFileSystemObjects"、"Folder" などのクラスの HKEY_CLASSES_ROOT に登録されているコンテキスト メニュー拡張機能や静的動詞は追跡できません。 このような場合、NoRecentDocs エントリは、次に示すように、クラス キーのルートに追加され、そのクラスに登録されている動詞または拡張機能を介して起動されたドキュメントの追跡を抑制します。

HKEY_CLASSES_ROOT
   AllFileSystemObjects
      NoRecentDocs

NoRecentDocs エントリは、既定 *で 、 AllFileSystemObjectsFolderDirectoryDesktopBackground クラスのサブキーに割り当てられます。

個々の IContextMenu 実装では、次に示すように、NoRecentDocs サブキーをコンポーネント オブジェクト モデル (COM) オブジェクトの登録 ( shellex サブキー) に追加することで追跡をオプトアウトできます。

HKEY_CLASSES_ROOT
   CLSID
      {093C7AAB-5E72-454f-A91D-CA1BC991FCEC}
         shellex
            NoRecentDocs

このサブキーは、 IContextMenu 実装には既定では存在しません。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shlobj_core.h (Shlobj.h を含む)
Library Shell32.lib
[DLL] Shell32.dll (バージョン 4.0 以降)
API セット ext-ms-win-shell-shell32-l1-2-2 (Windows 10 バージョン 10.0.14393 で導入)

こちらもご覧ください

SHGetFolderLocation

SHGetFolderPath