瞭解殼層命名空間延伸模組

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

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

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

使用者與其互動的大部分檔案和資料夾都是檔案系統或系統虛擬資料夾的一部分,例如回收站。 其他檔已討論如何自訂這些標準資料夾的行為,以符合應用程式的需求,方法是修改登錄或實作 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 檔案總管提供給資料夾物件的區域。 顯示和管理資料夾檢視中資料夾的內容是資料夾物件的責任。 雖然大部分的資料夾檢視都遵循相當標準的格式,但實際上顯示的內容或方式有一些限制。 極端情況是網際網路資料夾,這是功能完整的瀏覽器。

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

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

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

這兩種方法都會顯示非常像系統資料夾所顯示的資料夾檢視。 不過,如果您想要使用不同的顯示配置,您可以隨意這麼做。

就像大部分的 Windows 應用程式一樣,Windows 檔案總管會為使用者提供一組工具。 您可以透過功能表列取得工具的完整選擇。 較常用的工具也會由工具列上的按鈕或編輯方塊來表示。 不同于許多 Windows 應用程式,Windows 檔案總管功能表列實際上是已自訂成類似傳統功能表的 工具列控制項 。 功能表列和工具列都會併入 Rebar 控制項 ,讓使用者組織個別控制項以符合其需求。

根據預設,Windows 檔案總管支援一組標準按鈕和功能表項目,例如複製和屬性。 您的命名空間延伸模組可以藉由刪除標準工具和新增自訂工具來自訂功能表列和工具列。 初始化資料夾檢視物件時,Windows 檔案總管會將指標傳遞至其 IShellBrowser 介面。 此介面支援數種方法,您可以呼叫以自訂功能表列和工具列。 當使用者選取其中一個自訂功能表項目或工具列按鈕時,Windows 檔案總管會將自訂功能表和工具列專案的訊息轉送至子視窗程式的WM_COMMAND訊息。

狀態列

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