クイック スタート: デバイス コンテナーの列挙 (HTML)

PnpObjectType 列挙体のプラグ アンド プレイ (PnP) オブジェクトの種類には、特定のデバイス インターフェイスと関連付けられているデバイス情報、インターフェイスがその一部であるデバイス、またはハードウェア製品全体を表すデバイス コンテナーが格納されます。デバイス コンテナーは、製造元やモデル名のようなデバイスの表示される部分を表します。Windows.Devices.Enumeration.DeviceInformation は、PnpObjectType.DeviceInterface と同じ種類を表します。

Windows.Devices.Enumeration.PnP 名前空間を使うと、デバイスとデバイス コンテナーに加えてデバイスとデバイス情報を列挙できます。このトピックでは、Windows.Devices.Enumeration.PnP 名前空間を使ってデバイス コンテナーを列挙する方法を示します。

目標: デバイス コンテナーのプロパティを列挙する。

必要条件

JavaScript と HTML について理解している必要があります。

完了までの時間: 20 分.

手順

1. Microsoft Visual Studio を開く

Visual Studio のインスタンスを開きます。

2. 新しいプロジェクトを作る

[新しいプロジェクト] ダイアログ ボックスで、[JavaScript] > [Windows ストア アプリ] プロジェクトの種類から、[新しいアプリケーション] をクリックします。

3. アプリケーションの HTML を挿入する

Default.html を開き、次のコードをこのファイルにコピーして、ファイルの内容を置き換えます。


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="/js/default.js"></script>
</head>
<body data-design-activate="defaultPage.activated">
    <h1>Device Enumeration Sample</h1>

    <h2 >Input</h2>

    <div>            

       <div id="Input">
         <p>This scenario demonstrates enumerating device containers.</p>
          <p>Pressing the enumerate button will start a
             search for device containers.
             The containers will be listed below.</p>
          <input onclick="onEnumerateDeviceContainers()" type="button" value="Enumerate" />
                <br /><br />
       </div>
    </div>


    <h2> Output</h2>

            <div id="statusMessage"></div>

            <!-- Container Enumeration results are displayed in this element -->
            <div  id="output"></div>
</body>
</html>

4. Javascript を挿入する

Default.js で、次のコードを挿入します。


function onEnumerateDeviceContainers() {
    try {

        document.getElementById("output").innerHTML = "";

        var propertiesToRetrieve = new Array();
        propertiesToRetrieve.push("System.ItemNameDisplay");
        propertiesToRetrieve.push("System.Devices.ModelName");
        propertiesToRetrieve.push("System.Devices.Manufacturer");

        var DevEnum = Windows.Devices.Enumeration;
        var Pnp = DevEnum.Pnp;
        var pnpObjType = Pnp.PnpObjectType;
        var deviceContainerType = pnpObjType.deviceContainer;

        Pnp.PnpObject.findAllAsync(
            deviceContainerType, 
            propertiesToRetrieve).then(
                function (devinfoCollection) {
                    var numDevices = devinfoCollection.length;
                    document.getElementById("statusMessage").innerHTML = 
                        numDevices + " device containers(s) found";
                    if (numDevices) {
                        for (var i = 0; i < numDevices; i++) {
                            printDeviceContainer(devinfoCollection[i], 
                            document.getElementById("output"));
                        }
                    } else {
                    document.getElementById("statusMessage").innerHTML = 
                        ("No devices found");
                    }
                },
                function (e) {
                    document.getElementById("statusMessage").innerHTML = 
                        ("Failed to find devices, error: " + e.message);
                });
    } catch (e) {
        document.getElementById("statusMessage").innerHTML = 
            ("Failed to enumerate devices, error: " + e.message);
    }
}


function printProperties(log, prop) {
    log.innerHTML += "property store count is: " + prop.size;
    var pt = prop.first();
    while (pt.hasCurrent) {
        log.innerHTML += "<br />" + pt.current.key + " := " + pt.current.value;
        pt.moveNext();
    }
    log.innerHTML += "<br />";
}

function printDeviceContainer(deviceContainer, log) {
    var prop = deviceContainer.properties;
    if (prop) {
        log.innerHTML += "<h3>" + prop.lookup("System.ItemNameDisplay") + "<h3/>";
        log.innerHTML += "<p>Container ID: " + deviceContainer.id + "<p/>";
        printProperties(log, prop);
    }
    log.innerHTML += "<br /><br />";
}

要約

デバイス コンテナーのプロパティの列挙が完了しました。コンテナー列挙の結果にプロパティを格納するには、Windows.Devices.Enumeration.Pnp.findAllAsyncrequestedProperties パラメーターが必要です。