IFileIsInUse 介面 (shobjidl_core.h)
公開可呼叫的方法,以取得另一個應用程式正在使用之檔案的資訊或關閉。 當應用程式嘗試存取檔案並尋找已使用中的檔案時,可以使用這個介面的方法來收集資訊,以在對話框中向用戶呈現。
繼承
IFileIsInUse 介面繼承自 IUnknown 介面。 IFileIsInUse 也有下列類型的成員:
方法
IFileIsInUse 介面具有這些方法。
IFileIsInUse::CloseFile 關閉目前使用的檔案。 |
IFileIsInUse::GetAppName 擷取使用 檔案的應用程式名稱。 |
IFileIsInUse::GetCapabilities 判斷是否可以關閉檔案,以及 UI 是否能夠切換至使用檔案的應用程式視窗。 |
IFileIsInUse::GetSwitchToHWND 擷取使用檔案之應用程式最上層視窗的句柄。 |
IFileIsInUse::GetUsage 取得值,這個值表示正在使用中的檔案。 |
備註
在 Windows Vista 之前的 Windows 版本中,當使用者嘗試存取在另一個應用程式中開啟的檔案時,使用者只會收到一個對話方塊,其中包含指出檔案已經開啟的訊息。 訊息會指示使用者關閉其他應用程式,但未識別它。 除了建議之外,對話框未提供任何用戶動作來處理這種情況。 此介面提供方法,可讓使用者從中採取直接動作,進而產生更具資訊性的對話方塊。
執行中的物件數據表
當應用程式開啟檔案時,該應用程式會將具現化的 IFileIsInUse 物件插入執行中的物件數據表中, (ROT) 來註冊檔案。 ROT 是可全域存取的查閱表格,可追蹤目前執行中的物件。 這些物件可由Moniker識別。 當客戶端嘗試將Moniker系結至物件時,Moniker會檢查 ROT,以判斷物件是否已執行。 這可讓Moniker系結至目前的實例,而不是載入新的實例。執行下列步驟,將檔案新增至 ROT:
- 呼叫 GetRunningObjectTable 函式來擷取 IRunningObjectTable 的實例。
- 為目前使用的檔案建立 IFileIsInUse 物件。
- 為目前使用的檔案建立 IMoniker 物件。
- 呼叫 IRunningObjectTable::Register,將 IFileIsInUse 和 IMoniker 物件插入 ROT。
在對 Register 的呼叫中,指定 ROTFLAGS_ALLOWANYCLIENT 旗標。 這可讓 ROT 專案跨安全性界限運作。 使用此旗標需要呼叫應用程式具有明確的應用程式使用者模型標識碼, (AppUserModelID) (System.AppUserModel.ID) 。 明確的 AppUserModelID 可讓元件物件模型 (COM) 檢查應用程式的安全性設定。 嘗試使用 ROTFLAGS_ALLOWANYCLIENT呼叫 Register ,且沒有明確的 AppUserModelID 將會失敗。 您可以在沒有ROTFLAGS_ALLOWANYCLIENT旗標的情況下呼叫 Register ,而應用程式會正常運作,但只能在自己的安全性層級內運作。
Register 方法 [out] 參數中擷取的值可用來識別稍後呼叫中的專案,以從 ROT 擷取或移除它。
實作時機
開啟其他應用程式可開啟之檔類型的應用程式應該實作 IFileIsInUse。 此介面的應用程式實作可讓 Windows 檔案總管探索共用錯誤的來源,讓使用者處理和重試因這些錯誤而失敗的作業。使用時機
應用程式會呼叫 IFileIsInUse 與其他應用程式通訊,以解決共用錯誤。 這些錯誤會在回應檔系統中的用戶動作時發生。 例如,當使用者嘗試在應用程式中開啟該資料夾中的檔案時重新命名資料夾時,重新命名作業會失敗。 Windows 檔案總管可以呼叫該應用程式的 IFileIsInUse 實作,以協助使用者識別衝突並解決此問題。樣品
請參閱 使用中的檔案 範例,其中示範如何實作 IFileIsInUse ,並使用 ROT 註冊檔案。 接著會示範如何自定義 [ 使用中檔案 ] 對話框,以顯示目前在應用程式中開啟之檔案的其他資訊和選項。規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | shobjidl_core.h (包括 Shobjidl.h) |