So wird’s gemacht: Abrufen zugehöriger PnP-Objekte (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Dieses Thema beschreibt, wie Sie zusammengehörige PnP-Objekte (Plug & Play) finden. Sie können z. B. das Gerätecontainerobjekt abrufen, das zu einem Geräteinformationsobjekt gehört. Gerätecontainer stellen die physischen Geräte dar, die der Benutzer erkennen kann. Mit dem Gerätecontainer können Sie auf Informationen zugreifen, die sich auf das gesamte Gerätehardwareprodukt beziehen, nicht nur auf eine seiner funktionalen Schnittstellen. Hersteller oder Modellname sind Beispiele für Gerätecontainereigenschaften.

Grundlegendes zu PnP-Objektbeziehungen

Die Tabellen in diesem Thema zeigen die Beziehungen zwischen den verschiedenen PnpObjectType-Objekten und die Eigenschaften, die zum Navigieren zwischen diesen Objekten verwendet werden müssen. Beachten Sie, dass ein DeviceInformation-Objekt einem PnpObject mit einem PnpObjectType von deviceInterface entspricht.

n:1-Beziehungen

Die Tabelle in diesem Abschnitt zeigt die Navigation ausgehend von einem Objekt mit einer n:1-Beziehung zu anderen Objekten. Eine oder mehrere Geräteschnittstellen (dargestellt durch DeviceInformation-Objekte) können z. B. zum selben Gerätecontainer gehören. Die Überschriften der ersten beiden Spalten enthalten den Typ des PnP-Objekts, von dem Sie ausgehen. Die Einträge in der dritten Spalte enthalten die zugehörigen PnP-Objekte, die Sie suchen. Die Zellen in der Tabelle (falls ein Eintrag vorhanden ist) enthalten die Eigenschaft, mit der das zugehörige PnP-Objekt abgefragt werden kann.

Gehen Sie wie folgt vor, um von dem Objekt in der Spaltenüberschrift zu dem Objekt in der dritten Spalte zu navigieren:

  1. Suchen Sie eine Eigenschaft, die sich in der gleichen Spalte befindet wie die Überschrift, die dem Ausgangsobjekt entspricht, und in der gleichen Zeile wie das zugehörige Objekt, das Sie suchen.
  2. Rufen Sie die Eigenschaft mit den Schritten ab, die unter Abrufen zugehöriger PnP-Objekte beschrieben werden.
  3. Verwenden Sie den abgerufenen Wert als id-Parameter in einem PnpObject.createFromIdAsync-Aufruf, um ein Objekt des zugehörigen Typs zu erstellen.
Geräteschnittstelle (DeviceInformation) device Zugehöriges Objekt
System.Devices.ContainerId System.Devices.ContainerId deviceContainer
System.Devices.DeviceInstancePath device
System.Devices.DeviceInterfaceClassGuid deviceInterfaceClass

 

1:n-Beziehungen

Die Tabelle in diesem Abschnitt zeigt die Navigation ausgehend von einem Objekt mit einer 1:n-Beziehung zu anderen Objekten. Gehen Sie wie folgt vor, um vom Ausgangsobjekt (in der obersten Zeile) zu den rechts aufgeführten zugehörigen Objekten zu navigieren:

  1. Suchen Sie eine Eigenschaft, die sich in der gleichen Spalte befindet wie die Überschrift für das Ausgangsobjekt und in der gleichen Zeile wie das zugehörige Objekt, das Sie suchen.

  2. Verwenden Sie die ID des Ausgangsobjekts (aus der Überschriftszeile) und die Eigenschaft, die Sie in der Tabelle gefunden haben, um eine AQS-Zeichenfolge im Format "<property>:=<id>" zu bilden.

    Beispiel: Wenn wir alle Schnittstellen in einem Container mit der ID "{1451362b-4b9c-4780-a4bf-6c001619646c}" suchen, muss die AQS-Zeichenfolge "System.Devices.ContainerId:={1451362b-4b9c-4780-a4bf-6c001619646c}" lauten.

  3. Verwenden Sie die AQS-Zeichenfolge als Parameter für einen Windows.Devices.Enumeration.Pnp.PnpObject.findAllAsync-Aufruf, um alle Objekte des zugehörigen Typs zu finden.

    Hinweis  Wenn Sie mit Eigenschaften arbeiten, die GUIDs enthalten, muss der GUID-Wert in der AQS-Zeichenfolge in Klammern gesetzt werden.

     

deviceContainer device deviceInterfaceClass Zugehöriges Objekt
System.Devices.ContainerId System.Devices.DeviceInstancePath System.Devices.DeviceInterfaceClassGuid deviceInterface
System.Devices.ContainerId System.Devices.DeviceInstancePath device

 

Beispiele

Abrufen eines Containers aus einer DeviceInformation-ID

Sie müssen möglicherweise die Eigenschaften des Containers abrufen, zu dem die Geräteschnittstelle gehört. Angenommen, Sie kennen die Geräte-ID eines bestimmten Geräts, müssen aber den Modellnamen abrufen. In diesem Fall müssen Sie ein Containerobjekt erstellen, weil es sich bei "System.Devices.ModelName" um eine Containereigenschaft und nicht um eine Geräteschnittstelleneigenschaft handelt.

Dieser Code zeigt, wie Sie ausgehend von einer Geräte-ID eine Containereigenschaft abrufen.


// GetModelNameFromDeviceID gets the ModelName property from the
// device interface's container.
// The parameter devID is assumed to be a valid device interface ID.
string GetModelNameFromDeviceID (devID)
{
// First create a DeviceInformation object from the ID.
// Create the argument that specifies that additional properties
// returned should include the System.Devices.ContainerId property.
   var propertiesToGet = new Array();
   propertiesToGet.push("System.Devices.ContainerId");


// Create a DeviceInformation object from the ID.
   var Enum = Windows.Devices.Enumeration;
   var DevInfo = Enum.DeviceInformation;
   var contID;   // The container ID
   DevInfo.createFromIdAsync(devID, propertiesToGet).then(
       function(devInf) {             
            var prop = devInf.properties;
            if (prop) {
                contID = prop.lookup("System.Devices.ContainerID");               
            }
       },
       function (e) {
           displayError("Failed to create DeviceInformation: " + e.message);
       });

// Use the container ID to create a PnPObject representing the container,
// and specify that the created object should have a 
// System.Devices.ModelId property.


// Create the argument that specifies that the additional properties to
// return should include the System.Devices.ContainerId property.
   var containerPropertiesToGet = new Array();
   containerPropertiesToGet.push("System.Devices.ModelId");

   var modelID;


var Pnp = Enum.Pnp;
var pnpObjType = Pnp.PnpObjectType;
var deviceType = pnpObjType.device;

// NOTE: We need to add extra braces "{}" back to the container ID before
// passing it to createIdAsync (a pair of braces is lost in the implicit
// conversion from GUID to string).
   contID = "{" + contID + "}";

// Create the container from its ID.
   Pnp.createFromIdAsync(deviceType, contID, containerPropertiesToGet).then(
       function(contInf) {
           var prop = contInf.properties;
           if (prop) {
               modelID = prop.lookup("System.Devices.ModelID");
           });
   return modelID;
}

Hinweis  

Wenn Sie das GUID-Ergebnis einer Eigenschaftssuche an eine Funktion übergeben, die die GUID als Zeichenfolgenargument akzeptiert (wie im vorherigen Beispiel), müssen Sie zusätzliche Klammern "{}" um das GUID-Argument hinzufügen, bevor Sie es an die Funktion übergeben. Denn beim Ergebnis einer Eigenschaftssuche handelt es sich um einen Varianttyp und nicht um eine Zeichenfolge. Folglich geht ein Klammernpaar bei der impliziten Konvertierung verloren, wenn das Argument an eine Funktion übergeben wird, die eine Zeichenfolge akzeptiert.

 

Abrufen aller DeviceInformation-Objekte in einen bestimmten Gerätecontainer

Dieses Beispiel veranschaulicht, wie alle DeviceInformation-Objekte in einem bestimmten Gerätecontainer gesucht werden, indem eine AQS-Abfrage erstellt und an findAllAsync übergeben wird.

function findInterfacesInContainer(containerId) {

    var Enum = Windows.Devices.Enumeration;
    var aqsString = "System.Devices.ContainerId:=\"" + containerId + "\"";

    Enum.DeviceInformation.findAllAsync(aqsString, null).then(
            successCallback, 
            errorCallback);
}

// Handles successful completion of the findAllAsync method.
function successCallback(deviceInformationCollection) {
    // Add your code here for processing the enumerated device collection.
}

// Handles an error completion of the findAllAsync method.
function errorCallback(e) {
    // Add your error-handling code here.
}

Verwandte Themen

Abrufen zusätzlicher Eigenschaften für ein Gerät oder PnP-Objekt

AQS-Abfrage