共用方式為


建立資料行處理常式

[此功能僅支援 Windows XP 或更早版本。 ]

Windows Windows 檔案總管中的 [詳細資料] 檢視通常會顯示數個標準資料行。 每個資料行都會列出目前資料夾中每個檔案的資訊,例如檔案大小或類型。 藉由實作和註冊資料行處理常式,您可以讓自訂資料行可供顯示。

建立 殼層延伸模組處理常式中會討論實作和註冊 Shell 延伸模組處理常式的一般程式。 本檔著重于資料行處理常式特有的實作層面。

下列主題會討論。

資料行處理常式的運作方式

下圖顯示 [詳細資料] 檢視中的 Windows 檔案總管。

詳細資料檢視中 Windows 檔案總管的螢幕擷取畫面

使用 Windows 2000 時,資料夾也可以支援一些預設不會顯示的資料行。 使用者可以在其中一個資料行標頭上按一下滑鼠右鍵,然後從功能表中選取 [更多...] 命令,以顯示其他資料行。 然後會出現一個對話方塊,列出資料夾的可用資料行,並允許使用者選取要顯示哪些資料行。 下圖顯示上述範例的這個對話方塊。

視窗總管的螢幕擷取畫面,其中顯示 [選擇詳細資料] 對話方塊

藉由建立資料行處理常式,您可以建立自訂資料行,並將其新增至該清單。 例如,包含音樂的檔案集合可能會使用資料行處理常式來顯示每一個檔案所包含之作者和片段的資料行。

資料行處理常式是每次 Windows 檔案總管顯示 [詳細資料] 檢視時呼叫的全域物件。 不過,資料行處理常式通常只會針對特定 檔案類型的成員顯示自訂資料行。 在顯示 [詳細資料] 檢視之前,Windows 檔案總管會查詢所有已註冊的資料行處理常式,以取得其資料行特性。 如果使用者已選取其中一個處理常式的資料行,Windows 檔案總管會查詢關聯資料的處理常式。 當資料行處理常式收到資料的要求時,如果檔案是其支援類型的成員,則會提供它。 否則,它會傳回S_FALSE來忽略要求。

註冊資料行處理常式

資料行處理常式會在下列子機碼下註冊。

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

使用處理程式類別識別碼的字串形式建立 名為 的 ColumnHandlers 子機碼, (CLSID) GUID。 如需如何註冊 Shell 延伸模組處理常式的一般討論,請參閱 建立殼層延伸模組處理常式。 下列範例說明如何註冊資料行處理常式。

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

實作資料行處理常式

如同所有 Shell 延伸模組處理常式,資料行處理常式是同進程元件物件模型, (COM) 實作為 DLL 的物件。 除了IUnknown之外,它們還會匯出IColumnProvider介面。

Windows 檔案總管會呼叫 IColumnProvider 匯出的三種方法,以要求顯示資料行所需的資訊。 Windows 檔案總管所使用的程式如下:

  1. 呼叫 IColumnProvider::Initialize 以指定即將顯示的資料夾。
  2. 呼叫 IColumnProvider::GetColumnInfo 以擷取資料行的識別碼和特性。
  3. 如果使用者已選取資料行,請針對資料夾中的每個檔案呼叫 IColumnProvider::GetItemData ,以擷取屬於檔案資料行專案的資料。

Initialize 方法

Windows 檔案總管會呼叫 IColumnProvider::Initialize 來初始化資料行處理常式。 方法有三個參數,但目前只使用 wszFolder 。 它會設定為即將顯示 [詳細資料] 檢視的資料夾。 儲存資料夾名稱以供稍後使用,並視需要初始化處理常式物件。

GetColumnInfo 方法

Windows 檔案總管接著會呼叫 IColumnProvider::GetColumnInfo 來要求資料行的識別碼和特性。 它會傳入 dwIndex 參數中資料行的索引。 此索引是用來列舉資料行的任意值。 Windows 檔案總管也會傳入 SHCOLUMNINFO 結構的指標。 這個結構可用來傳回資料行的識別碼和特性。 IColumnProvider::GetColumnInfo 應該將適當的值指派給 結構的成員並傳回。

資料行是由其 OLE 屬性集識別碼 (FMTID) 和相關聯的屬性識別碼 (PID) 來識別。 SHCOLUMNINFO結構的第一個成員scid是用來識別資料行之SHCOLUMNID結構的指標。 其 fmtid 成員會保存資料行的 FMTID,而其 pid 成員則保存資料行的 PID。 例如,通常用來識別資料行的標準 FMTID/PID 組是摘要資訊屬性集的 Author PID。

可能的話,您的處理常式應該使用現有的 FMTID 和 PID 來識別它支援的資料行。 如果您使用自訂 SHCOLUMNID 結構,資料行只會顯示處理常式所支援之檔案的資料。 如果資料夾包含其他檔案,則其專案會是空白的。 如果資料夾包含來自多個檔案類型的檔案,使用標準 FMTID/PID 值可能會將資料從不同類型合併到相同的資料行。

vt 成員設定為要在資料行中顯示的 資料 VARIANT 類型。 最常使用的型別是VT_LPSTR,因為大部分的資料行都會將其資料顯示為字元字串。 SHCOLUMNINFO結構的其餘成員是用來定義資料行的特性。 視需要指派值。

GetItemData 方法

如果已選取資料行處理常式的資料行,Windows 檔案總管會針對要顯示之資料夾中的每個檔案呼叫 IColumnProvider::GetItemDatapscid參數是識別資料行之SHCOLUMNID結構的指標。 pscd參數指向可識別特定檔案的SHCOLUMNDATA結構。

pvarData參數會傳回應該顯示在pscd所指定檔案之處理常式資料行中的資料。 如果資料行處理常式支援該檔案,請將其資料值指派給 pvarData ,並傳回S_OK。 如果資料行處理常式不支援檔案,請傳回S_FALSE,而不需將值指派給 pvarData

許多資料夾將包含任何特定資料行處理常式不支援的數個檔案。 為了提升效率,IColumnProvider::GetItemData應該先檢查pscd所指向結構的pwszExt成員。 這個成員會保存副檔名。 如果延伸模組指出檔案不是處理常式所支援的檔案類型成員,請立即傳回S_FALSE,以避免不必要的處理。