SHAddToRecentDocs 函式 (shlobj_core.h)
通知系統已存取專案,以便追蹤最近和最常使用的專案。 此函式也可以用來清除所有使用方式數據。
語法
void SHAddToRecentDocs(
UINT uFlags,
[in, optional] LPCVOID pv
);
參數
uFlags
類型: UINT
SHARD 列舉中的值,指出 pv 參數所指向的資訊形式。
[in, optional] pv
類型: LPCVOID
識別已存取之項目的數據的指標。 項目可以在下列其中一種形式中指定於此參數中:
- 以 Null 結尾的字串,其中包含專案的路徑和檔名。
- 識別專案檔案物件的 PIDL。
- 僅限 Windows 7 和更新版本。 SHARDAPPIDINFO、SHARDAPPIDINFOIDLIST 或 SHARDAPPIDINFOLINK 結構,可透過 AppUserModelID 識別專案。 如需詳細資訊,請參閱 應用程式使用者模型標識碼 (AppUserModelIDs) 。
- 僅限 Windows 7 和更新版本。 IShellLink 物件,可透過快捷方式識別專案。
將此參數設定為 NULL ,以清除所有專案上的所有使用方式數據。
傳回值
無
備註
透過呼叫此方法所收集的使用統計數據,可用來判斷最近和最常存取的項目清單。 這些清單會顯示在 [ 開始 ] 選單和 Windows 7 和更新版本中的應用程式跳躍清單。
呼叫此方法時,會影響下列區域:
- 匯報 相關聯應用程式的 [跳躍清單] 的 [最近] 和 [常用] 列表。
- 將快捷方式新增至使用者的 [ 最近 使用] 資料夾 (FOLDERID_Recent,CSIDL_RECENT) 。 這會反映在 [開始] 功能表中的 [我的最近使用的檔] (Windows XP) 和 [最近使用的專案] (Windows Vista 和更新版本的 [) ] 功能表中。
- 將快捷方式新增至傳統 [開始 ] 功能表的 [ 文件 ] 子功能表。 (請注意,Windows 7 和更新版本中無法使用 [傳統 開始 ] 功能表選項。)
在某些情況下,特別是當使用者透過 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 項目預設會指派給 *、 AllFileSystemObjects、 Folder、 Directory 和 DesktopBackground 類別子機碼。
個別 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 版) |