Come recuperare oggetti PnP correlati (HTML)
[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]
Questo argomento descrive come trovare oggetti Plug and Play (PnP) correlati tra loro. Potresti ad esempio avere necessità di recuperare l'oggetto contenitore di dispositivi correlato a un oggetto informazioni sui dispositivi. I contenitori di dispositivi rappresentano il dispositivo fisico visualizzato all'utente. Il contenitore di dispositivi consente di accedere a informazioni relative all'intero prodotto hardware del dispositivo anziché a una sola delle interfacce funzionali. Alcuni esempi di proprietà di un contenitore di dispositivi sono il produttore o il nome del modello.
Informazioni sulle relazioni tra oggetti PnP
Le tabelle di questo argomento indicano la relazione esistente tra i diversi oggetti PnpObjectType e le proprietà da usare per spostarsi tra di essi. Nota che un oggetto DeviceInformation equivale a un oggetto PnpObject con l'enumerazione PnpObjectType impostata su deviceInterface.
Relazioni molti-a-uno
La tabella di questa sezione indica come spostarsi da un oggetto che ha una relazione N-a-1 con altri oggetti. Una o più interfacce di dispositivo, rappresentate da oggetti DeviceInformation, possono ad esempio appartenere a uno stesso contenitore di dispositivi. Le intestazioni delle prime due colonne contengono il tipo di oggetto Plug and Play (PnP) iniziale. Le voci nella terza colonna contengono l'oggetto PnP correlato da trovare. Il valore nelle celle della tabella, se presente, corrisponde alla proprietà da usare per cercare l'oggetto PnP correlato.
Per spostarti dall'oggetto elencato nelle intestazioni di colonna all'oggetto elencato nella terza colonna, esegui le operazioni seguenti:
- Cerca una proprietà nella stessa colonna dell'intestazione dell'oggetto iniziale e nella stessa riga dell'oggetto correlato da trovare.
- Recupera la proprietà come descritto in Come recuperare oggetti PnP correlati.
- Usa il valore recuperato come parametro ID in una chiamata di PnpObject.createFromIdAsync per creare un oggetto del tipo correlato.
interfaccia di dispositivo (DeviceInformation) | dispositivo | oggetto correlato |
System.Devices.ContainerId | System.Devices.ContainerId | deviceContainer |
System.Devices.DeviceInstancePath | dispositivo | |
System.Devices.DeviceInterfaceClassGuid | deviceInterfaceClass |
Relazioni uno-a-molti
La tabella di questa sezione indica come spostarsi da un oggetto che ha una relazione 1-a-N con altri oggetti. Per spostarti dall'oggetto iniziale, presente nella riga superiore, all'oggetto correlato elencato sulla destra, esegui le operazioni seguenti:
Cerca una proprietà nella stessa colonna dell'intestazione dell'oggetto iniziale e nella stessa riga dell'oggetto correlato da trovare.
Usa l'ID dell'oggetto iniziale, presente nella riga dell'intestazione, e la proprietà identificata nella tabella per creare una stringa nella Sintassi di ricerca avanzata (AQS) con il formato seguente "<property>:=<id>".
Per trovare ad esempio tutte le interfacce di un contenitore con l'identità "{1451362b-4b9c-4780-a4bf-6c001619646c}", la stringa AQS da usare è "System.Devices.ContainerId:={1451362b-4b9c-4780-a4bf-6c001619646c}".
Usa la stringa AQS come parametro in una chiamata di Windows.Devices.Enumeration.Pnp.PnpObject.findAllAsync per trovare oggetti del tipo correlato.
Nota Quando usi proprietà che contengono GUID, il valore GUID deve essere racchiuso tra parentesi graffe all'interno della stringa AQS.
deviceContainer | dispositivo | deviceInterfaceClass | oggetto correlato |
System.Devices.ContainerId | System.Devices.DeviceInstancePath | System.Devices.DeviceInterfaceClassGuid | deviceInterface |
System.Devices.ContainerId | System.Devices.DeviceInstancePath | dispositivo |
Esempi
Recupero di un contenitore dall'ID di un oggetto DeviceInformation
Potresti avere necessità di recuperare proprietà del contenitore a cui appartiene un'interfaccia di dispositivo. Se ad esempio hai a disposizione l'ID di un dispositivo selezionato, per recuperare il nome del modello devi creare un oggetto contenitore perché System.Devices.ModelName è una proprietà di contenitore e non una proprietà di interfaccia di dispositivo.
Questo codice mostra come recuperare una proprietà di contenitore da un ID di dispositivo.
// 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;
}
Nota
Per passare il risultato con il valore GUID di una ricerca di proprietà a una funzione che accetta il GUID come argomento stringa, come nell'esempio precedente, devi prima aggiungere parentesi graffe aggiuntive "{}" attorno all'argomento GUID. Questo perché il risultato di una ricerca di proprietà è un tipo di variante anziché una stringa. Quando l'argomento viene passato a una funzione che accetta una stringa, una coppia di parentesi graffe viene persa nella conversione implicita.
Recupero di tutti gli oggetti DeviceInformation in un contenitore di dispositivi specifico
Questo esempio mostra come trovare tutti gli oggetti DeviceInformation in un contenitore di dispositivi specificato creando una query AQS e passandola a 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.
}
Argomenti correlati
Come recuperare altre proprietà di un dispositivo o un oggetto Plug and Play