デバイス

ユーザーが自宅でコンテンツを楽しんだり、仕事でコンテンツを作ったりするときに、Windows 8.1 デバイスの携帯性や柔軟性の恩恵を受けることができるようにする、広範なワイヤード (有線) デバイスやワイヤレス デバイスにすぐ接続できるアプリを開発しましょう。

  • ヒューマン インターフェイス デバイス (HID) のサポート
  • Point of Service (PoS) デバイスのサポート
  • USB デバイスのサポート
  • Bluetooth デバイスのサポート
  • 3D プリンターのサポート
  • スキャンのサポート

ヒューマン インターフェイス デバイス (HID) のサポート

[カスタム HID デバイスのアクセスおよび HID のサンプルのモーション センサー、ファームウェア、および Windows Runtime アプリを今すぐ入手する]

Windows.Devices.HumanInterfaceDevice API により、Windows ストア アプリは、HID プロトコルをサポートするデバイスにアクセスできます。

このプロトコルは、最初に開発されたときは、キーボード、マウス、ジョイスティックなどのデバイスが対象でした。当初は、USB トランスポートで実行するように設計されました。現在、このプロトコルははるかに多くのデバイスをサポートしています。さらに、Windows 8.1 には、USB、Bluetooth、Bluetooth LE、I²C トランスポートのサポートが組み込まれてます。

新しい API は、次の 2 種類の異なるユーザーを対象としています。

  1. HID 周辺機器を製造し、Windows 8.1 のユーザーがそのデバイスにアクセスまたは制御できるようにする Windows ストア アプリを必要とするハードウェア パートナー (ハードウェア パートナーは、ユーザーが周辺機器を接続すると 1 つのアプリが自動的に取得されるように宣言できます)。

  2. これらのいずれかの周辺機器用アプリを作成するアプリ開発者。

ハードウェア パートナーは既に HID に精通していますが、Windows ストア アプリの要件を理解する必要があります。アプリ開発者は、プロトコルを理解する必要があります。HID の初心者は、MSDN で HID ドライバーのドキュメントの「HID の概念」をご覧ください。

新しい API を使う前に、後の「制限事項」セクションをご覧になり、デバイスがサポート対象カテゴリに分類されるかどうか確認してください。

  次の例のターゲット デバイスは SuperMUTT です。これは、JJG Technologies から購入できるテスト デバイスです。

HID への接続

次のコード例では、XAML と C# を使って作成された Windows ストア アプリで HidDevice.GetDeviceSelector メソッドを使って特定の HID デバイスのセレクターを作成する方法を示します。次に、アプリは、HidDevice.FromIdAsync メソッドを使って、このデバイスとの接続を開きます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Windows.Devices.Enumeration;
using Windows.Devices.HumanInterfaceDevice;
using Windows.Storage;
using Windows.Storage.Streams;

namespace HidSampleCS
{
    class Enumeration
    {
        // Enumerate HID devices.
        private async void EnumerateHidDevices()
        {
            UInt32 vendorId = 0x045E;
            UInt32 productId = 0x078F;
            UInt32 usagePage = 0xFF00;
            UInt32 usageId = 0x0001;

            // Create a selector that gets a HID device using VID/PID and a 
            // VendorDefined usage.
            string selector = HidDevice.GetDeviceSelector(usagePage, usageId, 
                              vendorId, productId);

            // Enumerate devices using the selector.
            var devices = await DeviceInformation.FindAllAsync(selector);

            if (devices.Count > 0)
            {
                // Open the target HID device at index 0.
                HidDevice device = await HidDevice.FromIdAsync(devices.ElementAt(0).Id, 
                                   FileAccessMode.ReadWrite);

                // At this point the device is available to communicate with,
                // so we can send/receive HID reports from it or 
                // query it for control descriptions.
            }
            else
            {
                // There were no HID devices that met the selector criteria.
                this.NotifyUser("MUTT HID device not found");
            }
        }
    }
}

HID からのデータの取得

アプリは、入力レポートを使って HID デバイスからデータを取得します。次の例は、アプリが HidInputReport.GetNumericControl メソッドを使って SuperMUTT デバイスから数値を取得する方法を示しています。

この例では、接続されているデバイス HID デバイスは DeviceList.Current.CurrentDevice オブジェクトで表されます。

        private async Task GetNumericInputReportAsync()
        {
            var inputReport = await DeviceList.Current.CurrentDevice.GetInputReportAsync(SuperMutt.ReadWriteBuffer.ReportId);

            var inputReportControl = inputReport.GetNumericControl(SuperMutt.ReadWriteBuffer.NumericUsagePage, SuperMutt.ReadWriteBuffer.NumericUsageId);

            var data = inputReportControl.Value;

            rootPage.NotifyUser("Value read: " + data.ToString("X2", NumberFormatInfo.InvariantInfo), NotifyType.StatusMessage);
        }

HID API の制限事項

この API セットの実装を検討する際は、次の考慮事項を確認してください。

Windows.Devices.HumanInterfacDevice API はほとんどの HID デバイスをサポートします。ただし、次の利用状況ページで表される最上位のアプリ コレクションをブロックします。

  • HID_USAGE_PAGE_UNDEFINED
  • HID_USAGE_PAGE_GENERIC
  • HID_USAGE_GENERIC_KEYBOARD
  • HID_USAGE_GENERIC_KEYPAD
  • HID_USAGE_GENERIC_SYSTEM_CTL
  • HID_USAGE_PAGE_KEYBOARD
  • HID_USAGE_PAGE_CONSUMER
  • HID_USAGE_PAGE_DIGITIZER
  • HID_USAGE_PAGE_SENSOR
  • HID_USAGE_PAGE_BARCODE_SCANNER
  • HID_USAGE_PAGE_WEIGHING_DEVICE
  • HID_USAGE_PAGE_MAGNETIC_STRIPE_READER
  • HID_USAGE_PAGE_TELEPHONY

インボックス デバイス ドライバーのみ

この新しい API では、前の利用状況ページの一覧で示したサポートのブロックに加えて、アプリが Windows 8.1 に付属するインボックス デバイス ドライバーを使って実行されることが求められます。この API は、ベンダーが提供するデバイス ドライバーはサポートしません。

周辺機器のサポートのみ

HID API は主に周辺機器にアクセスするアプリ用に設計されています。 前のセクションで説明されているアプリ開発者シナリオは、これらの機器にのみ適用されます。

この API は、PC の (周辺機器以外の) 内部デバイスにアクセスするために使用できますが、これらのデバイスへのアクセスは、デバイスの製造元によって作成された特権アプリのみに制限されます。アプリ開発者は、内部デバイスにアクセスできません。

コントロール パネル アプリのサポートなし

HID API を使って作成されたアプリは、ユーザーを単位とするアプリです。 つまり、ユーザーは設定を保存できません (これはコントロール パネル アプリの標準的な要件です)。

サービス ポイント (POS) デバイスのサポート

[バー コード スキャナー磁気ストライプ リーダーのサンプルを今すぐ入手する]

Windows 8.1 には、特殊なサービス ポイント (POS) デバイス用の新しい Windows.Devices.PointOfService 名前空間が導入されています。このリリースは、バー コード スキャナーと磁気ストライプ リーダーをサポートしています。製造元に依存しない POS API を使って、さまざまな製造元の POS デバイスにアクセスし、POS アプリと POS デバイス間の多対多マッピングを有効にできる Windows ストア アプリを書くことができます。

この名前空間は、業界標準の Unified Point of Service (UPOS) の仕様に基づいています。詳しくは、UnifiedPOS の Web サイトをご覧ください。

バー コード スキャナーについては、GetDefaultAsync メソッドを使った静的ライセンス認証によってデバイスを作成します。このメソッドはタブレットへの接続に使用できる最初のバー コード スキャナーを取得します (複数のバー コード スキャナーがある場合)。また、FromIdAsync メソッドを使って特定のデバイスを作成することもできます。このメソッドは DeviceInformation ID からバー コード スキャナーを取得します。ClaimScannerAsync は、アプリのデバイスへの排他的アクセスを取得し、他のアプリがデバイスを使用できないようにします。EnableAsync は、DataReceived イベント用にデバイスを準備します。同じパターンと API 要素が磁気ストライプ リーダーに適用されます。

次のコード例では、タブレットに接続されたバー コード スキャナーを取得し、そのスキャナーでデータの受信を有効にする方法を示します。

// Creates the barcode scanner, claims it for exclusive use, and enables it to receive data.
var _scanner = null;
var _claimedScanner = null;

function startReceivingData() {
    Windows.Devices.PointOfService.BarcodeScanner.getDefaultAsync().then(function (scanner) {
        if (scanner !== null) {
            _scanner = scanner;

            scanner.claimScannerAsync().done(function (claimedScanner) {
                if (claimedScanner !== null) {
                    _claimedScanner = claimedScanner;
                    claimedScanner.isDecodeDataEnabled = true;

                    claimedScanner.addEventListener("datareceived", onDataReceived);
                    claimedScanner.enableAsync().done(function () {

                        document.getElementById("btnStartReading").disabled = true;
                        document.getElementById("btnEndReading").disabled = false;
                    }, function error(e) {
                        // Failed to enable scanner.
                    });

                } else {
                    // Could not claim the scanner.
                }
            }, function error(e) {
                // Could not claim the scanner.
            });

        } else {
            // Barcode scanner not found. Connect a barcode scanner.
        }

    }, function error(e) {
        // Asynchronous method failed.
    });
}
// Creates the default barcode scanner.

private async Task<bool> CreateDefaultScannerObject()
{
    if (scanner == null)
    {
        
        scanner = await BarcodeScanner.GetDefaultAsync();

        if (scanner != null)
        {
            // UpdateOutput("Default barcode scanner created.");
            // UpdateOutput("Device Id is:" + scanner.DeviceId);
        }
        else
        {
            // UpdateOutput("Barcode scanner not found. Please connect a barcode scanner.");
            return false;
        }
    }
    return true;
}

// Claims the barcode scanner for exclusive use. 

private async Task<bool> ClaimScanner()
{
    if (claimedScanner == null)
    {
        // Claim the barcode scanner.
        claimedScanner = await scanner.ClaimScannerAsync();

        if (claimedScanner != null)
        {
            // UpdateOutput("Barcode scanner claimed successfully.");
           
        }
        else
        {
            // UpdateOutput("Failed to claim the barcode scanner.");
            return false;
        }
    }
    return true;
}

// Enables the barcode scanner to receive data. 

private async Task<bool> EnableScanner()
{
   
    if (claimedScanner == null)
    {
        return false;   
    }
    else
    {   
        await claimedScanner.EnableAsync();
      
        return true;
    }            
  
}
// Creates the barcode scanner.
task<void> Scenario1::CreateDefaultScannerObject()
{
    return create_task(BarcodeScanner::GetDefaultAsync()).then([this] (BarcodeScanner^ _scanner)
    {
        this->scanner = _scanner;
        if (this->scanner != nullptr)
        {            
            // UpdateScannerStatusTextBlock("Barcode scanner created.");
            // UpdateScannerStatusTextBlock("Device ID is:" + this->scanner->DeviceId);
        }
        else
        {
            // UpdateScannerStatusTextBlock("Barcode scanner not found. Connect a barcode scanner.");
            // rootPage->NotifyUser("No barcode scanner found.", NotifyType::StatusMessage);
        }
    });

}

// Claims the barcode scanner for exclusive use.
task<void> Scenario1::ClaimScanner()
{
    return create_task(scanner->ClaimScannerAsync()).then([this] (ClaimedBarcodeScanner^ _claimedScanner)
    {
        this->claimedScanner = _claimedScanner;
        if (claimedScanner != nullptr)
        {
            // UpdateScannerStatusTextBlock("Barcode scanner claimed successfully.");        
        }
        else
        {
            // UpdateScannerStatusTextBlock("Failed to claim barcode scanner.");
        }
    });
}

// Enables the barcode scanner to receive data.
task<void> Scenario1::EnableScanner()
{
    return create_task(claimedScanner->EnableAsync()).then([this](void)
    {
        // UpdateScannerStatusTextBlock("Barcode scanner enabled successfully.");
    });
}   

これらのメソッド、イベント、プロパティについて詳しくは、Windows.Devices.PointOfService のリファレンスをご覧ください。

この API は、POS 開発者のための簡単な移行パスを提供します。Microsoft POS for .NET を使うデスクトップ アプリを、Windows ランタイムを使ってタブレット上で実行される Windows ストア アプリに移行できます。API モデルは POS for .NET に似ていますが、一部が変更されています。

USB デバイスのサポート

[カスタム USB デバイスのアクセスのサンプルを今すぐ入手する]

Windows.Devices.Usb という Windows 8.1 の新しい名前空間は、USB デバイスのアプリ サポートを提供します。この名前空間を使って、カスタム USB デバイスと通信する Windows ストア アプリを作成できます。このコンテキストの ""カスタム"" とは、Microsoft からインボックス クラス ドライバーが提供されない周辺機器のことです。

公式な USB 仕様は、PC 用の USB 周辺機器を製造するハードウェア製造元のための業界標準です。 Windows には、これらのほとんどのデバイス用のインボックス ドライバーが用意されています。インボックス ドライバーがないデバイスの場合、ユーザーは Microsoft が提供する汎用インボックス ドライバー Winusb.sys をインストールできます。製造元は、新しい周辺機器を製造した際に、独自のカスタム ドライバーを提供することも Winusb.sys を使うこともできます。Winusb.sys を選んだ場合は、デバイスと通信するためにユーザーが使用できる付随のアプリを簡単に作成できます。以前のバージョンの Windows では、このようなアプリは WinUSB 関数を使って書かれたデスクトップ アプリでした。Windows 8.1 では、新しい Windows.Devices.Usb 名前空間を使って Windows ストア アプリを作成できます。

新しい USB API を使う状況

次の条件にすべて該当する場合は、新しい API を使うことができます。

  • デバイス ドライバーが、Microsoft から提供されている Winusb.sys ドライバーであること。 この名前空間は、製造元が提供するデバイス ドライバーをサポートしません。デバイスを接続したときに、Winusb.sys が自動的にインストールされるかどうかは、デバイスの設計によって異なります。デバイス ドライバーが自動的にインストールされない場合は、デバイス マネージャーで手動でインストールする必要があります。

    1. 目的のデバイスを右クリックし、[ドライバー ソフトウェアの更新] をクリックします。

    2. ウィザードで [コンピューターを参照してドライバー ソフトウェアを検索します] を選びます。

    3. 次のページで、[コンピューター上のデバイス ドライバーの一覧から選択します] を選びます。

    4. 次のページの一覧から [ユニバーサル シリアル バス デバイス] を選びます。

    5. [WinUsb デバイス] を選び、[次へ] をクリックしてドライバーをインストールします。

  • デバイスに関する情報を、アプリ マニフェストでデバイス機能の宣言として指定する。 これにより、アプリがデバイスに対応付けられます。

    詳しくは、USB デバイスのアプリ マニフェスト パッケージの更新に関するページをご覧ください。

  • デバイスは、名前空間でサポートされているいずれかのデバイス クラスに属する。 カスタム デバイスは定義済み USB デバイス クラスに属することができ、製造元によって機能が定義される場合もあります。

これらの USB デバイス クラス、サブクラス、プロトコル コードには、Windows.Devices.Usb 名前空間を使います。

  • CDC コントロール クラス (クラス コード: 0x02、サブクラス コード: 任意、プロトコル コード: 任意)
  • 物理クラス (クラス コード: 0x05、サブクラス コード: 任意、プロトコル コード: 任意)
  • PersonalHealthcare クラス (クラス コード: 0x0f、サブクラス コード: 0x00、プロトコル コード: 0x00)
  • ActiveSync クラス (クラス コード: 0xef、サブクラス コード: 0x01、プロトコル コード: 0x01)
  • PalmSync クラス (クラス コード: 0xef、サブクラス コード: 0x01、プロトコル コード: 0x02)
  • DeviceFirmwareUpdate クラス (クラス コード: 0xfe、サブクラス コード: 0x01、プロトコル コード: 0x01)
  • IrDA クラス (クラス コード: 0、サブクラス コード: 0x02、プロトコル コード: 0x00)
  • Measurement クラス (クラス コード: 0xfe、サブクラス コード: 0x03、プロトコル コード: 任意)
  • ベンダー固有クラス (クラス コード: 0xff、サブクラス コード: 任意、プロトコル コード: 任意)

新しい USB API を使わない状況

次のどちらかの条件に該当する場合は、新しい API を使うことができません。

  • アプリで内部デバイスにアクセスする。 Windows.Devices.Usb がアクセスする対象は、周辺機器のみです。 Windows ストア アプリは、そのシステムの OEM によって明示的に宣言された特権アプリである場合のみ、内部 USB デバイスにアクセスできます。

  • アプリがコントロール パネル アプリである。 この名前空間を使うアプリは、ユーザー準拠のアプリである必要があります。つまり、アプリはデバイスと通信できますが、設定データをスコープ外に保存することはできません。これは多くのコントロール パネル アプリで求められている機能です。

これらの USB デバイス クラスに Windows.Devices.Usb 名前空間を使わないでください。

  • オーディオ クラス (0x01)
  • HID クラス (0x03)
  • 画像クラス (0x06)
  • プリンター クラス (0x07)
  • 大容量記憶装置クラス (0x08)
  • スマート カード クラス (0x0B)
  • オーディオ/ビデオ クラス (0x10)
  • 無線コントローラー (たとえば、無線 USB ホストまたはハブ) (0xE0)

これらの USB デバイス クラスは、他の API との競合を避けるため、名前空間によってブロックされます。これらのクラスに対しては、その他の関連 API を使います。 たとえば、デバイスが HID プロトコルに準拠している場合は、Windows.Devices.HumanInterfaceDevice を使います。

USB デバイスの検出と接続

次のコード例は、USB デバイスを検索し、そのデバイスに接続する方法を示しています。

 
    var deviceQueryString = UsbDevice.GetDeviceSelector(deviceVid, devicePid, deviceInterfaceClass);

    var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(deviceQueryString, null);
    
    UsbDevice device = await UsbDevice.FromIdAsync(myDevices[0].Id);

    // Device is in use.
    if (device != null)
    {
        MainPage.Current.NotifyUser("Device " + id + " opened", NotifyType.StatusMessage);
    }
    else
    {
        MainPage.Current.NotifyUser("Unable to open device : " + id, NotifyType.ErrorMessage);
    }

USB 対応の Windows ストア アプリの記述を開始するには、CustomUsbDeviceAccess サンプルを研究します。このサンプルには、Windows.Devices.Usb 名前空間を使って USB デバイスと通信する方法が示されています。

Bluetooth デバイスのサポート

[Bluetooth Rfcomm チャットBluetooth 汎用属性プロファイルのサンプルを今すぐ入手する]

Windows 8.1 では、Windows ストア アプリは新しい RFCOMM と GATT (汎用属性プロファイル) Windows ランタイム API を使って、Bluetooth デバイスにアクセスできます。これらの API を使うと、Bluetooth BR/EDR と Bluetooth LE トランスポートにアクセスできます。

Bluetooth Classic デバイスと Bluetooth Smart デバイスを Bluetooth 向け Windows ランタイム API を通じてアクセス可能にするには、Windows 8.1 の [PC 設定] UI ([PC とデバイス][Bluetooth] の順にクリック) でデバイスを検出し、ペアリングする必要があります。

デバイスに関する情報を、アプリ マニフェストでデバイス機能の宣言として指定します。これにより、アプリがデバイスに対応付けられます。

新しい API に関する詳しい情報をいくつか次に示します。

Bluetooth RFCOMMWindows.Devices.Bluetooth.Rfcomm

  • この API により、Windows ストア アプリの開発者は、シリアル ポート プロファイル (SPP) などの RFCOMM プロトコル上に構築された Bluetooth プロファイルを実装できます。

  • クライアントとサーバーの役割が指定されます。

  • リモート SDP (Service Discovery Protocol) レコードにアクセスし、ローカル SDP レコードを公開できます。

  • Sockets.ControlChannelTrigger クラスは RFCOMM ベースのソケットでは利用できません。

  • RFCOMM API は、次のインボックス サービスと無効なサービスにアクセスできないようにします。

    サービス ID サービス (Bluetooth の SIG 名)

    0x1000

    サービスの検出

    0x1001

    参照グループ記述子

    0x1102

    PPP を使った LAN アクセス

    0x1103

    ダイヤルアップ ネットワーク

    0x1108、0x1112

    ヘッドセット

    0x1109

    コードレス テレフォニー

    0x110A

    オーディオ ソース

    0x110B

    オーディオ シンク

    0x110C、0x110E、0x110F

    A/V リモコン

    0x1110

    インターコム

    0x1111

    FAX

    0x1113、0x1114

    WAP

    0x1115

    PANU

    0x1116

    NAP

    0x1117

    GN

    0x111E、0x111F

    ハンズフリー

    0x1124

    ヒューマン インターフェイス デバイス

    0x1126

    HCR 印刷

    0x1127

    HCR スキャン

    0x1128

    一般的な ISDN アクセス

    0x112D

    SIM アクセス

    0x1131

    ヘッドセット – HS

    0x1136

    GNSS サーバー

    0x1200

    PnP に関する情報

    0x1201

    汎用ネットワーク

    0x1203

    汎用オーディオ

    0x1204

    汎用テレフォニー

    0x1205、0x1206

    UPnP

    0x1300、0x1301、0x1302

    ESDP UPnP IP

    0x1303

    ビデオ ソース

    0x1304

    ビデオ シンク

    0x1305

    ビデオの配布

    0x1401

    HDP ソース

    0x1402

    HDP シンク

     

Bluetooth GATTWindows.Device.Bluetooth.Gatt

  • この API を使って、低エネルギー (LE) センサーからデータを収集するための GATT クライアント プロファイルを Windows ストア アプリに実装できます。

  • GATT API を使うには、Bluetooth 4.0 無線が必要です。

  • GATT API は、次のインボックス サービスと無効なサービスにアクセスできないようにします。

    サービス ID サービス (Bluetooth の SIG 名)

    0x1812

    HID Over GATT サービス

     

  • GATT API は、次のインボックス サービスと無効なサービスに読み取り専用でアクセスできるようにします。

    サービス ID サービス (Bluetooth の SIG 名)

    0x1800

    GAP サービス

    0x1801

    GATT サービス

    0x1813

    スキャン パラメーター サービス

     

  RFCOMM と GATT 向けの Windows ランタイム API は、コントロール パネル アプリでの使用は意図されていません。

Windows.Devices.Bluetooth.Rfcomm API の使い方については、次の 2 つのシナリオを参考にしてください。

Windows.Device.Bluetooth.Gatt API の使い方については、次の 3 つのシナリオを参考にしてください。

3D プリンターのサポート

[3D プリントのサンプルを今すぐ入手する]

Windows 8.1 での 3D コンテンツのプリントは 2D コンテンツのプリントと同様です。実際、IXpsOMPackageWriter および IXpsDocumentPackageTarget の各インターフェイスを単純に拡張してこの機能を実現しています。Windows 8.1 でアプリからプリンターに 3D コンテンツを送信するには、アプリは Windows 印刷機能にアクセスして、プリントする書式付き 3D コンテンツを用意する必要があります。

Windows 8.1 で 3D プリントを実行するには、3D コンテンツを作成し、それを Windows スプーラーとドライバー フィルター経由で 3D プリンターのような 3D 製造デバイスに渡します。

3D プリント API には 2 つのインターフェイス —IXpsDocumentPackageTarget3DIXpsOMPackageWriter3D— があります。 IXpsDocumentPackageTarget3D はプリント キューとジョブの詳細を表します。 IXpsOMPackageWriter3D には、Windows プリント パイプラインにコンテンツを送るメソッドが用意されています。このインターフェイスは、3D コンテンツを不透明なストリームとして Windows スプーラーとドライバー フィルター経由で 3D 製造デバイスに渡します。

3D プリント インターフェイスには、以下の特長があります。

  • プリント用の Open Packaging Conventions 形式での 3D コンテンツの送信をサポートしています。

  • 3D コンテンツに加えて、2D プリント用の XPS コンテンツの送信もサポートしています。

  • 3D コンテンツは、ゼロ以上のテクスチャ パーツとゼロまたは 1 つのプリント チケット パーツにリンクされた 1 つの 3D モデル パーツに制限されています。

  • 3D モデルとテクスチャ データは、API によって不透明なストリームと見なされ、検証も解析もされません。

機能の概要については「3D プリントのサポート」を参照し、「クイック スタート: 3D プリント」でアプリに 3D プリント機能を追加する方法を確認してください。

スキャンのサポート

[スキャンのサンプルを今すぐ入手する]

フラットベッド、フィーダー、または自動構成スキャン ソースを使って、Windows ストア アプリからコンテンツをスキャンできるようになりました。

新しい Windows.Devices.Scanners 名前空間は、既にある WIA API の上に組み入れられ、Device Access API と統合されています。

  スキャン アプリは Windows 8.1 に組み込まれています。

機能の概要については、「スキャン」(JavaScript と HTML の場合) または「スキャン」 (C#/C++/VB と XAML の場合) をご覧ください。