カメラ バーコード スキャナーの概要Getting started with a camera barcode scanner

ここで使用するスニペットは、デモンストレーションのみを目的としています。The snippets used here are for demonstration purposes only. 実際のサンプルについては、 バーコードスキャナーのサンプルを参照してください。For a working sample, see the Barcode scanner sample.

手順 1: アプリ マニフェストに機能宣言を追加するStep 1: Add capability declarations to your app manifest

  1. Microsoft Visual Studio のソリューション エクスプローラーで、package.appxmanifest 項目をダブルクリックしてアプリケーション マニフェストのデザイナーを開きます。In Microsoft Visual Studio, in Solution Explorer, open the designer for the application manifest by double-clicking the package.appxmanifest item.
  2. [ 機能 ] タブを選択します。Select the Capabilities tab
  3. [Web カメラ][PointOfService] のチェック ボックスをオンにします。Check the boxes for Webcam and PointOfService

注意

Web カメラ機能は、アプリケーションからプレビューを表示するだけでなく、ソフトウェア デコーダーでカメラからデコードするフレームを受信するためにも必要です。The Webcam capability is required to for the software decoder to receive frames from the camera to decode as well as to provide a preview from your application

手順 2: using ディレクティブを追加するStep 2: Add using directives

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

手順 3: デバイス セレクターを定義するStep 3: Define your device selector

オプション A: すべてのバーコード スキャナーを検索するOption A: Find all barcode scanners

string selector = BarcodeScanner.GetDeviceSelector();

オプション B: デバイス セレクターで接続の種類を制限するOption B: Scoping device selector to connection type

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

手順 4: すべてのバーコードスキャナーを列挙するStep 4: Enumerate all barcode scanners

アプリケーションの有効期間中にデバイスの一覧が変化することが予想されない場合は、Deviceinformation を使用して1回だけスナップショットを列挙することができ ます。ただし、アプリケーションの有効期間中にバーコードスキャナーの一覧が変更される可能性がある場合は、代わりに deviceinformation を使用する必要があります。If you do not expect the list of devices to change over the lifespan of your application you can enumerate a snapshot just once with DeviceInformation.FindAllAsync, but if you believe that the list of barcode scanners could change over the lifespan of your application you should use a DeviceWatcher instead.

重要

GetDefaultAsync を使用して PointOfService デバイスを列挙すると、結果の動作が一貫しない可能性があります。GetDefaultAsync は、クラスで見つかった最初のデバイスを返すだけであり、このデバイスはセッションによって変化する可能性があるためです。Using GetDefaultAsync to enumerate PointOfService devices can result in inconsistent behavior as it simply returns the first device found in the class and this can change from session to session.

オプション A: バーコード スキャナーのスナップショットを列挙するOption A: Enumerate a snapshot of barcode scanners

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

ヒント

FindAllAsync の使用方法の詳細については、「デバイスのスナップショットの列挙」を参照してください。See Enumerate a snapshot of devices for more information on using FindAllAsync.

オプション B: 使用可能なバーコードスキャナーを列挙し、使用可能なスキャナーの変更を監視するOption B: Enumerate available barcode scanners and watch for changes to the available scanners

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();

ヒント

詳細については、「デバイスの列挙と監視」と「DeviceWatcher」を参照してください。See Enumerate and watch device changes and DeviceWatcher for more information.

手順 5: カメラ バーコード スキャナーの識別Step 5: Identify camera barcode scanners

カメラ バーコード スキャナーは、Windows によって、コンピューターに接続されているカメラとソフトウェア デコーダーがペアリングされたときに動的に作成されます。A camera barcode scanner is created dynamically as Windows pairs the camera(s) attached to your computer with a software decoder. カメラとデコーダーのペアはそれぞれ完全な機能を持つバーコード スキャナーです。Each camera - decoder pair is a fully functional barcode scanner.

結果として得られるデバイスコレクション内のバーコードスキャナーごとに、Barコードのスキャナーと物理的なバーコードスキャナーを区別できます。これを行うには、 Bardeviceid プロパティを調べます。For each barcode scanner in the resulting device collection, you can differentiate between camera barcode scanners and physical barcode scanners by checking the BarcodeScanner.VideoDeviceID property. NULL でない VideoDeviceID は、デバイスコレクションのバーコードスキャナーオブジェクトがカメラバーコードスキャナーであることを示します。A non-NULL VideoDeviceID indicates that the barcode scanner object from your device collection is a camera barcode scanner. 複数のカメラバーコードスキャナーがある場合は、物理的なバーコードスキャナーを除外する個別のコレクションを作成することをお勧めします。If you have more than one camera barcode scanner you might want to build a separate collection which excludes physical barcode scanners.

Windows に付属しているデコーダーを使用したカメラバーコードスキャナーは、次のように識別されます。Camera barcode scanners using the decoder that ships with Windows are identified as:

Microsoft BarcodeScanner (使用しているカメラの名前)Microsoft BarcodeScanner (name of your camera here)

複数のカメラがあり、コンピューターのシャーシに組み込まれている場合は、 前面背面 のカメラが区別されることがあります。If you have more than one camera, and they are built into the chassis of your computer, the name might differentiate between front and rear cameras.

注意

今後、名前付けスキームが異なる追加のソフトウェアデコーダーがリリースされる可能性があります。In the future, additional software decoders with different naming schemes might be released.

DeviceWatcher が開始されると (手順 4)、接続されている各デバイスを列挙します。When the DeviceWatcher starts (step 4), it enumerates through each connected device. ここで、利用可能なスキャナーをバーコードスキャナーコレクションに追加し、コレクションを ListBox にバインドします。Here we add the available scanners to a barcode scanner collection and bind the collection to a ListBox.

ObservableCollection<BarcodeScannerInfo> barcodeScanners = new ObservableCollection<BarcodeScannerInfo>();

private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        barcodeScanners.Add(new BarcodeScannerInfo(args.Name, args.Id));

        // Select the first scanner by default.
        if (barcodeScanners.Count == 1)
        {
            ScannerListBox.SelectedIndex = 0;
        }
    });
}

リストボックスの SelectedIndex が変更された場合 (前のスニペットでは最初の項目が既定で選択されています)、デバイス情報に対してクエリを実行します。When the SelectedIndex of the ListBox changes (the first item is selected by default in the previous snippet), we query the device info.

private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
    var selectedScannerInfo = (BarcodeScannerInfo)args.AddedItems[0];
    var deviceId = selectedScannerInfo.DeviceId;

    await SelectScannerAsync(deviceId);
}

手順 6: カメラ バーコード スキャナーを要求するStep 6: Claim the camera barcode scanner

BarcodeScanner.ClaimScannerAsync を使用して、カメラ バーコード スキャナーの排他的使用を取得します。Use BarcodeScanner.ClaimScannerAsync to obtain exclusive use of the camera barcode scanner.

private async Task SelectScannerAsync(string scannerDeviceId)
{
    selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);

    if (selectedScanner != null)
    {
        claimedScanner = await selectedScanner.ClaimScannerAsync();
        if (claimedScanner != null)
        {
            await claimedScanner.EnableAsync();
        }
        else
        {
            rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
        }
    }
    else
    {
        rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
    }
}

手順 7: システムが提供するプレビューStep 7: System provided preview

ユーザーがカメラを正しくバーコードに向けるには、カメラ プレビューが必要です。A camera preview is needed for the user to successfully aim the camera at barcodes. Windows には、カメラバーコードスキャナーの基本的なコントロールのダイアログを起動する単純なカメラプレビューが用意されています。Windows provides a simple camera preview that launches a dialog for basic control of the camera barcode scanner. ダイアログを開くときは ClaimedBarcodeScanner.ShowVideoPreview を呼び出し、作業が終わってダイアログを閉じるときは ClaimedBarcodeScanner.HideVideoPreview を呼び出すだけです。Simply call ClaimedBarcodeScanner.ShowVideoPreview to open the dialog and ClaimedBarcodeScanner.HideVideoPreview to close it when finished.

ヒント

アプリケーションでカメラ バーコード スキャナーのプレビューをホストする方法については、「プレビューのホスト」を参照してください。See Hosting Preview to host the preview for camera barcode scanner in your application.

手順 8: スキャンを開始するStep 8: Initiate scan

StartSoftwareTriggerAsync を呼び出すことでスキャン プロセスを開始できます。You can initiate the scan process by calling StartSoftwareTriggerAsync.

IsDisabledOnDataReceivedの値によっては、スキャナーが1つのバーコードだけをスキャンし、 StopSoftwareTriggerAsyncを呼び出すまで継続的に停止またはスキャンすることがあります。Depending on the value of IsDisabledOnDataReceived the scanner might scan only one barcode then stop or scan continuously until you call StopSoftwareTriggerAsync.

IsDisabledOnDataReceived を目的の値に設定することで、バーコードがデコードされたときのスキャナー動作を制御します。Set the desired value of IsDisabledOnDataReceived to control the scanner behavior when a barcode is decoded.

Value 説明Description
TrueTrue バーコードを 1 つだけスキャンして停止するScan only one barcode then stop
FalseFalse 停止せずに継続的にバーコードをスキャンするContinuously scan barcodes without stopping

関連項目See also

サンプルSamples