關聯陣列
關聯陣列是用來儲存項目類型相關信息的已排序登錄位置清單,包括處理程式、動詞命令和其他屬性,例如該類型的圖示和顯示名稱。 Shell 會使用關聯數位來查詢一組預先定義的登錄位置,這些登錄位置可能包含殼層專案的相關信息。
本主題的組織方式如下:
關於關聯數位
關聯陣列是一份已排序的登錄位置清單,其中包含專案類型的相關信息,包括處理程式、動詞命令和其他屬性,例如該類型的圖示和顯示名稱。 有關項目類型的資訊可以在不同層級的特定性上註冊。 例如,您可以註冊一個動詞,該動詞只會針對特定文件類型顯示(例如 .jpg),或針對具有相同 System.Kind 的所有專案(例如 System.kind = picture),或針對所有項目顯示。
Shell 會使用關聯數位來查詢一組預先定義的登錄位置,這些位置可能會包含專案的相關信息。 關聯陣列 API 可用來從登錄子機碼擷取包含所要求資訊的單一值,該值來自提供它之數位中的第一個專案。 例如,以這種方式擷取預設圖示值。 關聯數位也可以用來擷取儲存在登錄子機碼中的一組值。 例如,動詞清單是從所有子機碼下註冊的動詞建立。
在Shell查詢預先定義的登錄位置集以取得殼層專案的相關信息之後,它會將登錄位置放入陣列中,以從最特定位置到最一般的位置。
因為關聯陣列是已排序的清單,所以會為應用程式開發人員提供一個機制,以便將資訊新增至將針對特定類型專案傳回的登錄。 同樣地,關聯數位可讓應用程式開發人員在較一般的位置註冊這些專案時,將資訊新增至特定專案群組的登錄。 此邏輯會通知您關於登錄中最適合位置的決定,以儲存殼層專案的相關信息。
在預設 Windows 系統上,.jpg 檔案具有下列關聯數位:
- HKEY_CLASSES_ROOT\jpgfile
- HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
- HKEY_CLASSES_ROOT\映像
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFilesystemObjects
如需註冊關聯數位資訊,請參閱 應用程式註冊。
查詢關聯數位
殼層 API 可從一系列登錄子機碼擷取資訊,從最特定的登錄子機碼到所有登錄子機碼中資訊的超集。
關聯數位最常見的用法是查詢Shell從陣列中具有要求資訊的最特定元素傳回的單一值。 下列程式代碼範例示範如何執行此動作。
IQueryAssociations *pqa;
// pShellItem is assumed to be an existing IShellItem object.
hr = pShellItem->BindToHandler(NULL, BHID_AssociationArray, IID_PPV_ARGS(&pqa));
if (SUCCEEDED(hr))
{
wchar_t szValue[256];
DWORD cbValue = sizeof(szValue); // Count of bytes in the array
hr = pqa->GetData(0, ASSOCDATA_VALUE, L"InfoTip", szValue, &cbValue);
if (SUCCEEDED(hr))
{
// The "InfoTip" value is used to compute the infotip string from
// properties of an item.
}
pqa->Release();
}
下列 API 可用來查詢關聯數位,或建構可查詢的 IQueryAssociations物件關聯數位:
- AssocCreate (在 Windows Vista 之前)
- AssocCreateForClasses
- AssocQueryString
使用特定 Shell 數據源的關聯數位
每個 Shell 數據源都會為其專案定義關聯數位。 定義關聯數位通常是項目類型的函式。 殼層數據源實作者應該定義並記錄關聯數位,讓應用程式能夠擴充這些類型的行為,例如註冊動詞或其他資訊。 應用程式可以根據將數據新增至關聯數位來擴充項目的行為,例如新增項目的動詞。
檔案系統資料來源會根據下列登錄子機碼和特殊 ProgID 來建置檔案的關聯數位:
如果檔案具有已註冊的 ProgID,則會使用 HKEY_CLASSES_ROOT\ProgID。 否則會使用 HKEY_CLASSES_ROOT\未知。
擴展名會在 HKEY_CLASSES_ROOT\SystemFileAssociations\.fileExtension 子機碼下註冊。
下表顯示特殊 ProgID。
特殊 progID 描述 HKEY_CLASSES_ROOT\* 所有檔案 (非資料夾) HKEY_CLASSES_ROOT\AllFilesystemObjects 檔案和檔案系統資料夾 HKEY_CLASSES_ROOT\Directory 檔案系統資料夾 HKEY_CLASSES_ROOT\資料夾 殼層容器
Shell 數據源關聯數位
下列清單代表一些殼層數據存放區關聯陣列,可用於本主題所述的用途:
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFilesystemObjects
- HKEY_CLASSES_ROOT\Kind.Document
- HKEY_CLASSES_ROOT\結果
- HKEY_CLASSES_ROOT\SystemFileAssociations\.docx
- HKEY_CLASSES_ROOT\Word.Document.12
可用於 DBFolder 的殼層數據源關聯數位(代表搜尋結果和查詢型檢視中專案的 Shell 數據存放區),如下所示:
- 驅動器
- 網路
- RegItems
- 例子:
- ContentView
- 動詞
其他常見的關聯數位包括 Folder 和 Printers。
其他資源
- 若要建立 Shell 資料存放區,請參閱 實作基本資料夾物件介面。
相關主題