このトピックでは、UWP アプリケーションで基本的なカメラ バーコード スキャナーを設定する方法について説明します。
注
Windows 10/11 に組み込まれているソフトウェア デコーダーは、Digimarc Corporationによって提供されます。
次のコード スニペットは、デモンストレーションのみを目的としています。 完全な作業サンプルについては、バーコード スキャナーのサンプルを参照してください。
手順 1: アプリ マニフェストに機能宣言を追加する
- Microsoft Visual Studio の ソリューション エクスプローラーで、package.appxmanifest 項目をダブルクリックして、アプリケーション マニフェストのデザイナーを開きます。
- 機能タブ を選択します。
- 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
オプション A: 手順 3 で作成した セレクター 基づいて、接続されているすべてのバーコード スキャナーのスナップショットを列挙する
このスニペットでは、DeviceInformationCollection オブジェクトを作成し、****DeviceInformation.FindAllAsync を使用して設定します。
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
ヒント
使用方法の詳細については、「デバイスのスナップショットを列挙する」を参照してくださいDeviceInformation.FindAllAsync。
オプション 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;
}
});
}
ListBox の SelectedIndex が変更されると (前のスニペットで最初の項目が既定で選択されています)、デバイス情報に対してクエリを実行します (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 を
ヒント
アプリケーションでカメラ バーコード スキャナーのプレビューをホストするには、「ホスティング プレビュー」を参照してください。
手順 8: スキャンを開始する
StartSoftwareTriggerAsync
IsDisabledOnDataReceived の値に応じて、スキャナーは 1 つのバーコードのみをスキャンして停止するか、または StopSoftwareTriggerAsyncを呼び出すまで連続してスキャンを続ける場合があります。
バーコードがデコードされたときのスキャナーの動作を制御するには、IsDisabledOnDataReceived の目的の値を設定します。
価値 | 説明 |
---|---|
正しい | バーコードを 1 つだけスキャンしてから停止する |
いいえ | 停止せずにバーコードを継続的にスキャンする |
こちらも参照ください
- JustScanIt - Windows ストア アプリ
- バーコードスキャナー サンプル