訓練
模組
Create and manage columns within a table in Microsoft Dataverse - Training
Learn how to create and manage table columns in Dataverse.
[此功能僅支援在 Windows XP 或更早版本下。 ]
Windows 檔案總管中的 [詳細資料] 檢視通常會顯示數個標準欄。 每個數據行都會列出目前資料夾中每個檔案的資訊,例如檔案大小或類型。 藉由實作和註冊數據行處理程式,您可以讓自定義數據行可供顯示。
建立 Shell 延伸模組處理程式中討論實作和註冊 Shell 延伸模組處理程式的一般程序。 本檔著重於數據行處理程式特有的實作層面。
正在討論以下主題。
下圖顯示 Windows 檔案總管中的「詳細資料」檢視。
在 Windows 2000 中,資料夾還可以支援一些預設不會顯示的欄位。 用戶可以在其中一個數據行標頭上單擊滑鼠右鍵,然後從功能表選取 [More... 命令,以顯示其他數據行。 然後會出現一個對話框,其中列出資料夾的可用資料行,並允許使用者選取要顯示的數據行。 下圖顯示上述範例的這個對話框。
藉由建立數據行處理程式,您可以建立自定義數據行,並將其新增至該清單。 例如,包含音樂的檔案集合可以使用數據行處理程式來顯示每個檔案所包含藝術家和片段的數據行。
欄位處理程式是每次 Windows 檔案總管顯示詳細資料檢視時呼叫的全域物件。 不過,資料行處理程式通常只會針對特定 檔案類型的成員顯示自訂資料行,。 在顯示 [詳細數據] 檢視之前,Windows 檔案總管會查詢所有已註冊的數據行處理程式,以取得其數據行特性。 如果使用者已選取處理程式的其中一個欄位,Windows 檔案總管會向該處理程式查詢相關的數據。 當數據行處理程式收到數據要求時,如果檔案是其支援類型的成員,則會提供它。 否則,它會傳回S_FALSE來忽略要求。
欄位處理程式會在下列子機碼下註冊。
HKEY_CLASSES_ROOT
Folder
shellex
ColumnHandlers
將 ColumnHandlers 下所建立的子機碼 命名為處理程式類別識別碼(CLSID)GUID 的字串形式。 如需進行一般討論關於如何註冊殼層擴充處理程式,請參閱 建立殼層擴充處理程式。 下列範例說明如何註冊數據行處理程式。
HKEY_CLASSES_ROOT
Folder
shellex
ColumnHandlers
{My Column Handler CLSID GUID}
如同所有 Shell 擴充處理程式,欄位處理程式都是實作為 DLL 的同進程元件物件模型 (COM) 物件。 除了 IUnknown之外,它們也會匯出 IColumnProvider 介面。
Windows 檔案總管會呼叫 IColumnProvider 所導出的三種方法, 要求顯示數據行所需的資訊。 Windows 檔案總管所使用的程序是
Windows 檔案總管會呼叫 IColumnProvider::Initialize 來初始化數據行處理程式。 方法有三個參數,但目前只使用 wszFolder ,。 它會設定為即將顯示 [詳細數據] 檢視的資料夾。 儲存資料夾名稱以供稍後使用,並視需要初始化處理程序物件。
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 結構的其餘成員可用來定義數據行的特性。 視需要指派值。
如果已選取欄位處理器的欄位,Windows 資源管理器會針對要顯示之資料夾中的每個檔案呼叫 IColumnProvider::GetItemData。 pscid 參數是指向識別欄目的 SHCOLUMNID 結構的指標。 pscd 參數指向識別特定檔案的 SHCOLUMNDATA 結構。
pvarData 參數會傳回應該顯示在 pscd所指定檔案之處理程式數據行中的數據。 如果數據行處理程式支援該檔案,請將其數據值指派給 pvarData,並傳回S_OK。 如果您的資料行處理程式不支援檔案,則傳回S_FALSE而不將值指派給 pvarData 。
許多資料夾將包含任何特定數據行處理程式不支援的多個檔案。 為了提高效率,IColumnProvider::GetItemData 應該首先檢查結構中由 pscd所指向的 pwszExt 成員。 此成員包含檔案名稱副檔名。 如果擴展名指出檔案不是處理程式所支援的檔類型成員,請立即傳回S_FALSE,以避免不必要的處理。
訓練
模組
Create and manage columns within a table in Microsoft Dataverse - Training
Learn how to create and manage table columns in Dataverse.
文件
使用自訂數據格式處理程式擴充剪貼簿。
Shell 延伸模組處理物件必須註冊後才能使用。 本主題是如何註冊 Shell 延伸模組處理程式的一般討論。
當使用者以滑鼠右鍵按下Shell物件時,通常顯示的快捷方式選單會包含 [屬性] 專案。