關聯陣列

關聯陣列是用來儲存專案類型相關資訊的已排序登錄位置清單,包括處理常式、動詞和其他屬性,例如圖示和類型的顯示名稱。 Shell 會使用關聯陣列來查詢一組可能包含 Shell 專案相關資訊的預先定義登錄位置。

本主題的組織方式如下:

關於關聯陣列

關聯陣列是登錄位置的已排序清單,其中包含專案類型的相關資訊,包括處理常式、動詞和其他屬性,例如類型圖示和顯示名稱。 有關專案類型的資訊可以在不同的特定層級註冊。 例如,您可以註冊動詞,該動詞只會針對特定檔案類型顯示 (,例如.jpg) ,或針對具有相同 System.Kind (的所有專案,例如 System.kind = 圖片) ,或針對所有專案顯示。

Shell 會使用關聯陣列來查詢可能包含專案相關資訊的預先定義登錄位置集。 關聯陣列 API 可用來從登錄子機碼擷取包含所要求資訊的單一值,而該值來自提供它之陣列中的第一個專案。 例如,以這種方式擷取預設圖示值。 關聯陣列也可以用來擷取一組儲存在登錄子機碼中的值。 例如,動詞清單是從所有子機碼下註冊的動詞建置。

Shell 查詢一組預先定義的登錄位置以取得 Shell 專案的相關資訊之後,它會將登錄位置放入陣列中,從最特定的位置到最通用的位置。

由於關聯陣列是已排序的清單,所以它們會為應用程式開發人員提供一種機制,將資訊新增至將針對特定類型的專案傳回的登錄。 同樣地,關聯陣列可讓應用程式開發人員在較一般的位置註冊這些專案時,將資訊新增至特定專案群組的登錄。 此邏輯會通知您決定登錄中最適合的位置,以儲存殼層專案的相關資訊。

在預設 Windows 系統上,.jpg檔案具有下列關聯陣列:

  • \ HKEY_CLASSES_ROOTjpgfile
  • \ HKEY_CLASSES_ROOTSystemFileAssociations\.jpg
  • \ HKEY_CLASSES_ROOT圖像
  • HKEY_CLASSES_ROOT\*
  • \ HKEY_CLASSES_ROOTAllFilesystemObjects

如需註冊關聯陣列的資訊,請參閱 應用程式註冊

查詢關聯陣列

有殼層 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 物件:

使用特定殼層資料來源的關聯陣列

每個 Shell 資料來源都會為其專案定義關聯陣列。 定義關聯陣列通常是專案類型的函式。 Shell 資料來源實作者應該定義並記錄關聯陣列,讓應用程式能夠擴充這些類型的行為,例如註冊動詞或其他資訊。 應用程式可以根據將資料新增至關聯陣列子機碼來擴充專案的行為,例如新增專案的動詞。

檔案系統資料來源會根據下列登錄子機碼和特殊 ProgID 來建置檔案的關聯陣列:

  • 如果檔案具有已註冊的 ProgID,則會使用HKEY_CLASSES_ROOT\ProgID。 否則會使用HKEY_CLASSES_ROOT\Unknown

  • 副檔名會在HKEY_CLASSES_ROOT\SystemFileAssociations.fileExtension\ 子機碼下註冊。

  • 下表顯示特殊 ProgID。

    特殊 progID Description
    HKEY_CLASSES_ROOT\* 所有檔案 (非資料夾)
    \ HKEY_CLASSES_ROOTAllFilesystemObjects 檔案和檔系統資料夾
    \ HKEY_CLASSES_ROOT目錄 檔系統資料夾
    \ HKEY_CLASSES_ROOT資料夾 殼層容器

     

Shell 資料來源關聯陣列

下列清單代表一些殼層資料存放區關聯陣列,可用於本主題所述的用途:

  • HKEY_CLASSES_ROOT\*
  • \ HKEY_CLASSES_ROOTAllFilesystemObjects
  • \ HKEY_CLASSES_ROOTKind.Document
  • \ HKEY_CLASSES_ROOT結果
  • \ HKEY_CLASSES_ROOTSystemFileAssociations\.docx
  • \ HKEY_CLASSES_ROOTWord。Document.12

殼層資料來源關聯陣列,可用於 DBFolder (Shell 資料存放區,代表搜尋結果中的專案和查詢型檢視) 如下:

  • 磁碟機
  • 網路
  • RegItems
  • 範例:
    • ContentView
    • 動詞

其他常見的關聯陣列包括資料夾和印表機。

其他資源

應用程式註冊

檔案類型

檔案關聯的運作方式

依檔案類型或種類檢視內容

檔案類型驗證程式

檔案類型處理常式

程式設計識別碼

認知類型