次の方法で共有


カメラ バーコード スキャナーの使用を開始する

このトピックでは、UWP アプリケーションで基本的なカメラ バーコード スキャナーを設定する方法について説明します。

Windows 10/11 に組み込まれているソフトウェア デコーダーは、Digimarc Corporationによって提供されます。

次のコード スニペットは、デモンストレーションのみを目的としています。 完全な作業サンプルについては、バーコード スキャナーのサンプルを参照してください。

手順 1: アプリ マニフェストに機能宣言を追加する

  1. Microsoft Visual Studio の ソリューション エクスプローラーで、package.appxmanifest 項目をダブルクリックして、アプリケーション マニフェストのデザイナーを開きます。
  2. 機能タブ を選択します。
  3. Webカメラ および PointOfServiceのチェックボックスをオンにします。

Web カメラ 機能は、ソフトウェア デコーダーがカメラからフレームを受信してバーコードをデコードし、アプリケーションでプレビューを提供するために必要です。

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

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

手順 3: デバイス セレクターを定義する

BarcodeScanner.GetDeviceSelector メソッドのいずれかを使用して、接続されているバーコード スキャナーごとに BarcodeScanner オブジェクトを取得します。

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

string selector = BarcodeScanner.GetDeviceSelector();

オプション B: スコープに基づいてすべてのバーコード スキャナーを検索します(この例では、ローカル接続タイプ にフィルターします)

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

手順 4: バーコード スキャナーを列挙する

アプリケーションの有効期間中にデバイスの一覧が変わるとは思わない場合は、DeviceInformation.FindAllAsync を使用して 1 回限りのスナップショットを取得します。 ただし、アプリケーションの有効期間中にバーコード スキャナーの一覧が変更される可能性がある場合は、代わりに DeviceWatcher を使用してください。

Von Bedeutung

GetDefaultAsync を使用して PointOfService デバイス 列挙すると、クラス内で見つかった最初のデバイスのみが返されるため、動作が不整合になる可能性があります (セッションからセッションに変更される可能性があります)。

オプション A: 手順 3 で作成した セレクター 基づいて、接続されているすべてのバーコード スキャナーのスナップショットを列挙する

このスニペットでは、DeviceInformationCollection オブジェクトを作成し、****DeviceInformation.FindAllAsync を使用して設定します。

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

オプション B: 手順 3 で作成 セレクターに基づいて使用可能なバーコード スキャナーを列挙し、そのコレクションに対する変更を監視する

このスニペットでは、DeviceInformation.CreateWatcherを使用して、DeviceWatcher を作成します。

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

ヒント

詳細については、「デバイスを列挙して監視するDeviceWatcher」を参照してください。

手順 5: カメラ バーコード スキャナーを識別する

カメラ バーコード スキャナーは、(コンピューターに接続された) カメラとソフトウェア デコーダーを組み合わせて構成され、Windows は動的にペアリングして、ユニバーサル Windows プラットフォーム (UWP) アプリ用の完全に機能する バーコード スキャナー を作成します。

BarcodeScanner.VideoDeviceID を使用して、カメラ バーコード スキャナーと物理バーコード スキャナーを区別できます。 NULL 以外の VideoDeviceID は、デバイス コレクションのバーコード スキャナー オブジェクトがカメラ バーコード スキャナーであることを示します。 複数のカメラ バーコード スキャナーがある場合は、物理的なバーコード スキャナーを除外する別のコレクションを作成できます。

Windows に付属するデコーダーを使用するカメラ バーコード スキャナーは、次のように識別されます。

Microsoft BarcodeScanner (お使いのカメラの名前)

複数のカメラがあり、それらがコンピュータのシャーシに組み込まれている場合、名前はフロント カメラと リア カメラとして区別される場合があります。

DeviceWatcher が起動すると (「手順 4:バーコード スキャナーを列挙する」を参照)、接続されている各デバイスを通じて列挙されます。 次のスニペットでは、使用可能な各スキャナーを BarcodeScanner コレクションに追加し、コレクションを ListBoxにバインドします。

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

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

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

ListBoxSelectedIndex が変更されると (前のスニペットで最初の項目が既定で選択されています)、デバイス情報に対してクエリを実行します (SelectScannerAsync タスクは、手順 6: カメラ バーコード スキャナーを要求します)。

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

    await SelectScannerAsync(deviceId);
}

手順 6: カメラ バーコード スキャナーを要求する

BarcodeScanner.ClaimScannerAsync 呼び出して、カメラ バーコード スキャナーの排他的な使用を取得します。

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: システムによって提供されるプレビュー

カメラのプレビューは、ユーザーがバーコードでカメラを向けるのを助けるために必要です。 Windows には、カメラ バーコード スキャナーを制御するためのダイアログを起動する基本的なカメラ プレビューが用意されています。

ClaimedBarcodeScanner.ShowVideoPreview を に呼び出してダイアログを開き、ClaimedBarcodeScanner.HideVideoPreview を にしてダイアログを閉じます。

ヒント

アプリケーションでカメラ バーコード スキャナーのプレビューをホストするには、「ホスティング プレビュー」を参照してください。

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

StartSoftwareTriggerAsync呼び出すことによって、スキャン プロセスを開始できます。

IsDisabledOnDataReceived の値に応じて、スキャナーは 1 つのバーコードのみをスキャンして停止するか、または StopSoftwareTriggerAsyncを呼び出すまで連続してスキャンを続ける場合があります。

バーコードがデコードされたときのスキャナーの動作を制御するには、IsDisabledOnDataReceived の目的の値を設定します。

価値 説明
正しい バーコードを 1 つだけスキャンしてから停止する
いいえ 停止せずにバーコードを継続的にスキャンする

こちらも参照ください