建置裝置選取器

裝置選取器可讓您在列舉裝置時限制要搜尋的裝置,這有助於您獲得更相關的結果並提高系統效能。

在大多數情況下,您可以從裝置堆疊中取得裝置選取器。 例如,您可以對透過 USB 發現的裝置使用 GetDeviceSelector。 這些裝置選取器會傳回進階查詢語法 (AQS) 字串。 有關 AQS 格式的更多詳細資訊,請參閱以程式設計方式使用進階查詢語法

重要 API

建置篩選字串

在某些情況下,您需要列舉裝置,但提供的裝置選取器不適用於您的場景。 裝置選取器是包含以下資訊的 AQS 篩選字串。 在建立篩選字串之前,您需要了解一些有關要列舉裝置的關鍵資訊。

  • 您感興趣裝置的 DeviceInformationKind。 有關 DeviceInformationKind 如何影響列舉裝置的更多資訊,請參閱列舉裝置
  • 如何建置 AQS 篩選字串 (本主題中進行了說明)。
  • 您感興趣的屬性。 可用屬性將取決於 DeviceInformationKind。 如需詳細資訊,請參閱裝置資訊屬性
  • 您要查詢的通訊協定。 只有當您透過無線或有線網路搜尋裝置時才需要。 有關執行此操作的更多資訊,請參閱透過網路列舉裝置

使用 Windows.Devices.Enumeration API 時,您經常將裝置選取器與您感興趣的裝置類型結合。 可用的裝置類型清單由 DeviceInformationKind 列舉定義。 這些因素的組合可以幫助您限制您感興趣裝置可用的裝置。 如果您未指定 DeviceInformationKind,或您使用的方法未提供 DeviceInformationKind 參數,則預設類型為 DeviceInterface

Windows.Devices.Enumeration API 使用規範的 AQS 語法,但並非所有運算子都支援。 有關建置篩選字串時可用的屬性清單,請參閱裝置資訊屬性

警告

建構 AQS 篩選字串時,不能使用以 {GUID} PID 格式定義的自訂屬性。 這是因為屬性類型是從已知屬性名稱衍生的。

下表列出了 AQS 運算子及其支援的參數類型。

運算子 支援的類型
COP_EQUAL 字串、布林值、GUID、UInt16、UInt32
COP_NOTEQUAL 字串、布林值、GUID、UInt16、UInt32
COP_LESSTHAN UInt16、UInt32
COP_GREATERTHAN UInt16、UInt32
COP_LESSTHANOREQUAL UInt16、UInt32
COP_GREATERTHANOREQUAL UInt16、UInt32
COP_VALUE_CONTAINS 字串、字串陣列、布林值陣列、GUID 陣列、UInt16 陣列、UInt32 陣列
COP_VALUE_NOTCONTAINS 字串、字串陣列、布林值陣列、GUID 陣列、UInt16 陣列、UInt32 陣列
COP_VALUE_STARTSWITH String
COP_VALUE_ENDSWITH String
COP_DOSWILDCARDS 不支援
COP_WORD_EQUAL 不支援
COP_WORD_STARTSWITH 不支援
COP_APPLICATION_SPECIFIC 不支援

您可以為 COP_EQUALCOP_NOTEQUAL 指定 NULL。 這代表屬性沒有值,或者該值不存在。 在 AQS 中,您可以使用空括號 [] 來指定 NULL

重要

使用 COP_VALUE_CONTAINSCOP_VALUE_NOTCONTAINS 運算子時,它們對字串和字串陣列的行為有所不同。 如果是字串,系統將執行不區分大小寫的搜尋,以查看裝置是否包含指示的字串作為子字串。 對於字串陣列,不會搜尋子字串。 對於字串陣列,將搜尋該陣列以查看它是否包含整個指定的字串。 無法搜尋字串陣列來查看陣列中的元素是否包含子字串。

如果您無法建立單一 AQS 篩選字串來適當確定結果的範圍,則可以在收到結果後進行篩選。 但是,我們建議在將初始 AQS 篩選字串提供給 Windows.Devices.Enumeration API 時,盡量限制其結果。 這將有助於提高應用程式的效能。

AQS 字串範例

以下範例示範如何使用 AQS 語法來限制要列舉的裝置。 所有這些篩選字串都與 DeviceInformationKind 配對,以建立完整的篩選。 如果未指定種類,請記住預設種類是 DeviceInterface

當此篩選與 DeviceInterfaceDeviceInformationKind 配對時,它會列舉包含音訊擷取介面類別且目前啟用的所有物件。 = 會轉譯為 COP_EQUALS

System.Devices.InterfaceClassGuid:="{2eef81be-33fa-4800-9670-1cd474972c3f}" AND
System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True

當此篩選與 DeviceDeviceInformationKind 配對時,它會列舉至少具有一個 GenCdRom 硬體識別碼的所有物件。 ~~ 會轉譯為 COP_VALUE_CONTAINS

System.Devices.HardwareIds:~~"GenCdRom"

當此篩選與 DeviceContainerDeviceInformationKind 配對時,它會列舉模型名稱包含子字串 Microsoft 的所有物件。 ~~ 會轉譯為 COP_VALUE_CONTAINS

System.Devices.ModelName:~~"Microsoft"

當此篩選與 DeviceInterfaceDeviceInformationKind 配對時,它會列舉名稱以子字串 Microsoft 開頭的所有物件。 ~< 會轉譯為 COP_STARTSWITH

System.ItemNameDisplay:~<"Microsoft"

當此篩選與 DeviceDeviceInformationKind 配對時,它會列舉設定了 System.Devices.IpAddress 屬性的所有物件。 <>[] 會轉譯為 COP_NOTEQUALSNULL 值的組合。

System.Devices.IpAddress:<>[]

當此篩選與 DeviceDeviceInformationKind 配對時,它會列舉未設定 System.Devices.IpAddress 屬性的所有物件。 =[] 會轉譯為 COP_EQUALSNULL 值的組合。

System.Devices.IpAddress:=[]

另請參閱