共用方式為


了解 Shell 命名空間擴展

Windows 檔案總管提供Shell命名空間的圖形表示法,結合工具可讓使用者與Shell對象互動。 使用命名空間擴充功能,您可以取得任何數據主體,並讓 Windows 檔案總管將它呈現給使用者作為虛擬資料夾。 當使用者流覽至此資料夾時,您的數據會顯示為資料夾和檔案的樹狀結構階層,就像殼層命名空間的其餘部分一樣。 使用者和應用程式能夠以與任何其他命名空間物件相同的方式,與這個虛擬資料夾的內容互動。 本文件討論如何建立命名空間延伸模組。

命名空間延伸模組的運作方式

在幕後,Windows 檔案總管顯示的每個資料夾都會以元件物件模型 (COM) 物件表示,稱為 資料夾物件。 每次使用者與資料夾或其內容互動時,Shell 都會透過其中一個標準介面與相關聯的資料夾物件通訊。 資料夾物件接著會執行回應使用者動作所需的任何操作,而 Shell 程式會更新 Windows 檔案總管介面。

使用者與其互動的大部分檔案和資料夾都是文件系統或系統虛擬資料夾的一部分,例如回收站。 其他文件已討論如何自定義這些標準資料夾的行為,以符合應用程式的需求,方法是修改登錄,或實作 Shell 擴充處理程式。 然而,當您的資訊可以方便地以一般檔案系統中的檔案或資料夾形式包裝時,以這些方式來擴充 Shell 是最有用的。

在某些情況下,將資料儲存為文件系統資料夾和檔案的集合可能不可取或甚至不可能。 這類資料的一些範例包括:

  • 最有效地封裝在單一檔案中的項目集合,例如資料庫。
  • 儲存在沒有標準 Windows 檔案系統的遠端電腦上的項目集合。 這類數據的範例是儲存在個人數位助理(PDA)或數位相機上的資訊。
  • 不屬於已儲存數據的項目集合。 這類數據的範例是標準 Printer 資料夾所包含的印表機連結。

向用戶呈現這類數據的方法之一,就是撰寫應用程式,讓用戶檢視和與各種項目互動。 不過,如果您的數據可以顯示為資料夾/檔案階層,您需要實作的大部分功能可能是 Windows 檔案總管所提供的使用者介面服務。 更有效率的方法可能是撰寫命名空間延伸模組,並讓 Windows 檔案總管成為您的 GUI。

若要實作命名空間擴充功能,您必須將資訊組織為樹狀結構命名空間。 您的 命名空間根 會顯示為Shell命名空間中的虛擬資料夾。 根資料夾及其所有子資料夾和資料資料項都會成為Shell命名空間的一部分,而Windows檔案總管會成為您的使用者介面。 因此,您可以使用比自定義應用程式所需的更少的UI程式設計,以熟悉且容易存取的方式向使用者呈現資訊。

命名空間延伸包含兩個基本元件:

  • 數據管理員
  • 數據管理員與 Windows 檔案總管之間的介面

清單上的第一個元件完全由您決定。 您可以以最有效的方式儲存和管理您的資料。 第二個元件是將數據封裝為資料夾物件並處理與 Windows 檔案總管互動所需的程式代碼。 然後,Windows 檔案總管可以呼叫這些物件,讓用戶檢視數據並與其互動,就像是資料夾和檔案的集合一樣。 命名空間延伸模組的資料夾對象必須與 Windows 檔案總管互動,就像是一般資料夾一樣。 嘗試實作命名空間擴充功能之前,您必須先瞭解 Windows 檔案總管如何處理資料夾物件。

預設系統資料夾檢視物件 (DefView)

Shell 提供資料夾檢視的預設實作,稱為 DefView,因此您可以避免實作自己的命名空間延伸模組的大部分工作。 由於某些檢視功能無法透過自定義檢視來達成,因此通常建議使用預設系統資料夾檢視物件來取代自定義檢視。 如需詳細資訊,請參閱 SHCreateShellFolderView

Windows 檔案總管如何與命名空間延伸模塊互動

Windows 檔案總管為使用者提供 GUI,可讓他們執行各種工作,包括:

Windows 檔案總管 GUI 有五個基本元件。 下圖標示元件名稱,並顯示它們通常在 Windows 檔案總管中的位置。

顯示 Windows 檔案總管使用者介面元件的插圖

當使用者在 Windows 檔案總管中顯示屬於命名空間延伸模組的資料夾時,資料夾物件至少可以部分控制這五個區域的內容。

樹視圖

樹視圖提供命名空間的高階檢視。 此區域會裝載 樹檢視控件,以顯示命名空間階層中的每個命名空間資料夾和資料夾位置。 使用者可以使用樹檢視區域執行數項作業,包括:

  • 顯示或隱藏命名空間中的下一個層級。
  • 複製、移動或刪除資料夾。
  • 以滑鼠右鍵按下資料夾以顯示快捷方式功能表。
  • 選取資料夾並在資料夾檢視中檢視其內容。

樹視圖主要透過其 IShellFolder 介面與資料夾物件通訊。 例如,當使用者按兩下資料夾圖示旁的加號 (+)時,Windows 檔案總管會展開顯示以顯示資料夾的子資料夾。 若要取得更新樹視圖所需的資訊,Shell 會對資料夾物件的 IShellFolder 介面進行數次呼叫:

  • 要求資料夾的屬性。
  • 列舉資料夾的內容。
  • 請求每個子資料夾的顯示名稱。
  • 請求顯示在每個資料夾旁邊的圖示。

Windows 檔案總管接著會更新樹檢視,以顯示所選資料夾的子資料夾。 如果子資料夾有子資料夾,則會在其資料夾圖示旁邊顯示 『+』 字元。 使用者也可以使用樹檢視執行一些更複雜的工作,包括:

  • 使用剪貼簿剪下或複製資料夾,並將它貼到另一個資料夾。
  • 使用拖放功能來剪下或複製資料夾,並將它放在另一個資料夾上。
  • 使用搜尋引擎來搜尋資料夾或其子資料夾中的項目。
  • 修改資料夾的屬性。

如需命名空間延伸模組如何處理這些使用者動作的詳細討論,請參閱 實作基本資料夾物件介面

資料夾檢視

當使用者選取資料夾時,資料夾的內容會顯示在資料夾檢視中。 在某種程度上,資料夾檢視的一般功能會與樹視圖重疊。 用戶可以移動或複製資料夾、變更資料夾屬性、檢視子資料夾的內容、顯示資料夾的快捷方式選單等等。 不過,樹視圖和資料夾檢視之間有一些明顯的差異:

  • 資料夾檢視只會顯示單一資料夾的內容,而不是部分或所有命名空間階層。
  • 資料夾檢視會顯示檔案物件和資料夾物件。
  • 資料夾檢視可以顯示物件比樹檢視更多的資訊。
  • 資料夾檢視可讓命名空間延伸模組幾乎完全控制顯示的資訊和方式。 只能修改樹檢視的次要層面,例如資料夾圖示。

不同於樹視圖,Windows 檔案總管不會直接控制資料夾檢視的內容。 資料夾檢視是 Windows 檔案總管提供給資料夾物件的區域。 在資料夾檢視中顯示和管理資料夾內容是資料夾物件的責任。 雖然大部分的資料夾檢視都遵循相當標準的格式,但顯示的內容或方式實際上很少有限制。 極端的情況是 Internet 資料夾,這是功能完整的瀏覽器。

當使用者選取屬於命名空間延伸模組的資料夾時,您可以建立視窗並將其句柄傳遞至 Windows 檔案總管。 此視窗會變成資料夾檢視視窗的子系。 Windows 檔案總管提供資料夾檢視視窗的維度,但不會限制子窗口的內容。 然後,您可以使用子視窗來顯示資料夾的資料夾檢視。

命名空間延伸模組使用兩種方法之一來建立資料夾檢視:

  • 使用子視窗來裝載 清單檢視 控件。 此控制項可讓您以與 Windows 檔案總管 傳統檢視相同的方式顯示資料夾的內容。
  • 使用您的子視窗來裝載 WebBrowser 控件,並使用動態 HTML (DHTML) 檔來顯示資料夾的內容。

這兩種方法都會顯示與系統資料夾顯示非常類似的資料夾檢視。 不過,如果您想要使用不同的顯示配置,您可以自由執行此動作。

與大部分的 Windows 應用程式一樣,Windows 檔案總管會為使用者提供工具集合。 可透過功能表列取得完整的工具選擇。 較常用的工具也會以工具列上的按鈕或編輯框來表示。 不同於許多 Windows 應用程式,Windows 檔案總管功能表欄實際上是一個 工具列控制項, 被自定義成讓它像傳統功能表一樣運作。 功能表列和工具列都會整合到 Rebar 控制項,讓使用者可以根據自己的需求來排列各個控制項。

預設情況下,Windows 檔案總管支援一組標準按鈕和功能表項,例如 [複製] 和 [屬性]。 您的命名空間擴展可以通過刪除標準工具並新增自定義工具來自定義選單列和工具列。 當您的資料夾檢視物件初始化時,Windows 檔案總管會將指標傳遞至其 IShellBrowser 介面。 這個介面支持數種方法,您可以呼叫以自定義功能表欄和工具列。 當使用者選取其中一個自定義功能表項或工具列按鈕時,Windows 檔案總管會將針對自定義功能表和工具列專案的 WM_COMMAND 訊息轉送至子視窗的視窗程序。

狀態列

Windows 檔案總管狀態列會顯示目前選取對象的相關信息。 命名空間延伸模組可以使用狀態列來顯示狀態資訊,例如文字字串。 您可以呼叫 IShellBrowser來自定義狀態列。