Comment récupérer des objets PnP associés (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Cette rubrique décrit comment rechercher des objets PnP (Plug and Play) qui sont liés les uns aux autres. À titre d’exemple, vous voulez récupérer l’objet conteneur de périphérique qui est lié à un objet d’informations de périphérique. Les conteneurs de périphérique représentent le périphérique physique comme le voit l’utilisateur. Le conteneur de périphérique vous permet d’accéder aux informations relatives à l’intégralité du périphérique matériel, plutôt qu’à l’une de ses interfaces fonctionnelles. Le nom du fabricant ou celui du modèle sont des exemples de propriétés de conteneur de périphérique.

Présentation des relations entre les objets PnP

Les tableaux figurant dans cette rubrique montrent les relations qui existent entre les différents objets PnpObjectType et les propriétés qui doivent être utilisées pour naviguer entre eux. Notez qu’un objet DeviceInformation équivaut à un PnpObject dont le PnpObjectType est égal à deviceInterface.

Relations plusieurs-à-un

Le tableau figurant dans cette section montre comment naviguer à partir d’un objet qui présente une relation N-à-1 avec d’autres objets. Par exemple, une ou plusieurs interfaces de périphérique (représentées par les objets DeviceInformation) peuvent appartenir au même conteneur de périphérique. Les en-têtes des deux premières colonnes contiennent l’objet PnP avec lequel vous avez démarré. Les entrées de la troisième colonne contiennent l’objet PnP que vous voulez rechercher. Les cellules du tableau, dans le cas où elles sont remplies, contiennent la propriété qui peut être utilisée pour interroger l’objet PnP associé.

Pour naviguer à partir de l’objet répertorié dans les en-têtes de colonnes jusqu’à l’objet répertorié dans la troisième colonne, procédez comme suit :

  1. Recherchez une propriété qui se trouve dans la même colonne que l’en-tête qui correspond à l’objet avec lequel vous avez commencé, et qui se trouve dans la même ligne que l’objet associé que vous voulez identifier.
  2. Récupérez la propriété en effectuant les étapes décrites dans Comment récupérer des objets PnP associés.
  3. Utilisez la valeur récupérée en tant que paramètre d’ID dans un appel PnpObject.createFromIdAsync pour créer un objet du type associé.
interface de périphérique (DeviceInformation) périphérique objet associé
System.Devices.ContainerId System.Devices.ContainerId deviceContainer
System.Devices.DeviceInstancePath périphérique
System.Devices.DeviceInterfaceClassGuid deviceInterfaceClass

 

Relations un-à-plusieurs

Le tableau figurant dans cette section montre comment naviguer à partir d’un objet qui présente une relation 1-à-N avec d’autres objets. Pour naviguer depuis l’objet à partir duquel vous avez commencé (dans la première ligne), jusqu’à l’objet associé répertorié à droite, procédez comme suit :

  1. Recherchez une propriété qui se trouve dans la même colonne que l’en-tête correspondant à l’objet avec lequel vous avez commencé, et qui se trouve dans la même ligne que l’objet associé que vous voulez identifier.

  2. Utilisez l’ID de l’objet avec lequel vous avez commencé (à partir de la ligne d’en-tête) et la propriété que vous avez identifiée dans le tableau, pour constituer une chaîne AQS au format « <property>:=<id> ».

    Par exemple, si nous voulions trouver toutes les interfaces dans un conteneur avec l’identité « {1451362b-4b9c-4780-a4bf-6c001619646c} », la chaîne AQS serait « System.Devices.ContainerId:={1451362b-4b9c-4780-a4bf-6c001619646c} ».

  3. Utilisez la chaîne AQS en tant que paramètre d’un appel Windows.Devices.Enumeration.Pnp.PnpObject.findAllAsync afin de rechercher des objets du type associé.

    Remarque  Lorsque vous utilisez des propriétés qui contiennent des GUID, la valeur du GUID doit être placée entre accolades pour former la chaîne AQS.

     

deviceContainer périphérique deviceInterfaceClass objet associé
System.Devices.ContainerId System.Devices.DeviceInstancePath System.Devices.DeviceInterfaceClassGuid deviceInterface
System.Devices.ContainerId System.Devices.DeviceInstancePath périphérique

 

Exemples

Obtention d’un conteneur à partir de l’ID DeviceInformation

Vous pouvez avoir besoin d’obtenir les propriétés du conteneur auquel une interface de périphérique appartient. Par exemple, si vous connaissez l’ID de périphérique d’un périphérique sélectionné mais que vous avez besoin d’obtenir le nom de modèle, vous devez créer un objet conteneur, car System.Devices.ModelName est une propriété de conteneur, pas une propriété d’interface de périphérique.

Ce code vous montre comment obtenir une propriété de conteneur commençant par un ID de périphérique.


// 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;
}

Remarque  

Si vous passez le résultat du GUID d’une consultation de propriété à une fonction qui considère le GUID comme un argument de chaîne, vous devez ajouter des accolades supplémentaires « {} » autour de l’argument GUID avant de le passer à la fonction, comme dans l’exemple précédent. En fait, le résultat d’une consultation de propriété est de type variant, plutôt que de type chaîne. Ainsi, lorsque l’argument est passé à une fonction qui prend une chaîne, une paire d’accolades est perdue dans la conversion implicite.

 

Obtention de tous les objets DeviceInformation dans un conteneur de périphérique spécifique

Cet exemple montre comment rechercher tous les DeviceInformation objets dans un conteneur de périphérique spécifié, en formant une requête AQS et en passant cette dernière à findAllAsync.

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.
}

Rubriques associées

Comment récupérer les propriétés supplémentaires pour un périphérique ou un objet PnP

Chaîne AQS