SHAddToRecentDocs 函式 (shlobj_core.h)

通知系統已存取專案,以便追蹤最近和最常使用的專案。 此函式也可以用來清除所有使用方式數據。

語法

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

參數

uFlags

類型: UINT

SHARD 列舉中的值,指出 pv 參數所指向的資訊形式。

[in, optional] pv

類型: LPCVOID

識別已存取之項目的數據的指標。 項目可以在下列其中一種形式中指定於此參數中:

將此參數設定為 NULL ,以清除所有專案上的所有使用方式數據。

傳回值

備註

透過呼叫此方法所收集的使用統計數據,可用來判斷最近和最常存取的項目清單。 這些清單會顯示在 [ 開始 ] 選單和 Windows 7 和更新版本中的應用程式跳躍清單。

呼叫此方法時,會影響下列區域:

  • 匯報 相關聯應用程式的 [跳躍清單] 的 [最近] 和 [常用] 列表。
  • 將快捷方式新增至使用者的 [ 最近 使用] 資料夾 (FOLDERID_Recent,CSIDL_RECENT) 。 這會反映在 [開始] 功能表中的 [我的最近使用的檔] (Windows XP) 和 [最近使用的專案] (Windows Vista 和更新版本的 [) ] 功能表中。
  • 將快捷方式新增至傳統 [開始 ] 功能表的 [ 文件 ] 子功能表。 (請注意,Windows 7 和更新版本中無法使用 [傳統 開始 ] 功能表選項。)
IShellLink 所代表的專案不會新增至 [最近] 資料夾,雖然這些專案會反映在應用程式的跳躍清單中。

在某些情況下,特別是當使用者透過 Windows 檔案總管開啟專案,或使用通用檔案對話框來開啟、儲存或建立檔案時,Shell 代表應用程式呼叫 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\Applications 註冊必須定義一組默認動詞 HKEY_CLASSES_ROOT\Applications\ExampleApp.exe\shell 子機碼。

    如果 SHAddToRecentDocs 嘗試註冊,因為拖放到任務欄按鈕,則會建立 殼層 子機碼,前提是現有的應用程式註冊不包含 NoOpenWith 值,而且應用程式可執行檔未列在 KillList 值中。

隱藏對 SHAddToRecentDocs 的呼叫

在 Windows 7 之前的 Windows 版本中,檔類型可以設定 FTA_NoRecentDocs 旗標,以防止該文件類型新增至 [最近] 資料夾。 Windows 7 和更新版本也支援此機制。 如需詳細資訊,請參閱 文件類型

SHAddToRecentDocs 會透過叫用以存取這些文件的動詞來追蹤檔使用量統計數據。 已註冊 IContextMenu 處理程式所提供的動詞會追蹤,這些專案 會出現在 Windows XP) (Windows XP) 和 最近使用的專案 (Windows Vista) 。 在 Windows 7 中,檔的父資料夾會出現在 [Windows 檔案總管] 工作列按鈕的 [跳躍清單] 中。 不過,透過這些 IContextMenu 動詞存取的檔案不會出現在應用程式 Jump 清單 中。 若要讓這些專案出現在應用程式的跳躍清單中,應用程式必須明確呼叫 SHAddToRecentDocs

在 Windows 7 之前,只有 open 動詞會導致呼叫 SHAddToRecentDocs。 在 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) 對象的註冊,如這裡所示:

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

此子機碼預設不會出現在任何 IContextMenu 實作 上。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 shlobj_core.h (包含 Shlobj.h)
程式庫 Shell32.lib
Dll Shell32.dll (4.0 版或更新版本)
API 集合 ext-ms-win-shell32-l1-2-2 (於 Windows 10 10.0.14393 版)

另請參閱

SHGetFolderLocation

SHGetFolderPath