Поделиться через


Начало работы с сканером штрихкодов камеры

В этом разделе описывается настройка базового сканера штрихкодов камеры в приложении UWP.

Примечание.

Декодировщик программного обеспечения, встроенный в Windows 10/11, предоставляется Digimarc Corporation.

Следующие фрагменты кода предназначены только для демонстрационных целей. Полный рабочий пример см. в примере сканера штрихкодов.

Шаг 1. Добавление объявлений возможностей в манифест приложения

  1. В Microsoft Visual Studio в Обозреватель решений откройте конструктор манифеста приложения, дважды щелкнув элемент package.appxmanifest.
  2. Перейдите на вкладку Возможности.
  3. Установите флажки для веб-камеры и PointOfService.

Примечание.

Возможность веб-камеры необходима для получения кадров от камеры для декодирования штрихкода и предоставления предварительного просмотра в приложении.

Шаг 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 для получения однократного моментального снимка. Однако если список сканеров штрихкодов может измениться в течение срока существования приложения, используйте DeviceWatcher .

Внимание

Использование GetDefaultAsync для перечисления устройств PointOfService может привести к несогласованности поведения, так как оно возвращает только первое устройство, найденное в классе (которое может измениться с сеанса на сеанс).

Вариант A. Перечисление моментального снимка всех подключенных сканеров штрихкодов на основе селектора, созданного на шаге 3.

В этом фрагменте кода мы создадим объект DeviceInformationCollection и используем ***DeviceInformation.FindAllAsync для заполнения.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Совет

Дополнительные сведения об использовании DeviceInformation.FindAllAsync см. в статье "Перечисление моментального снимка устройств".

Вариант B. Перечисление доступных сканеров штрихкодов на основе селектора, созданного на шаге 3, и просмотрите изменения в этой коллекции.

В этом фрагменте кода мы создадим DeviceWatcher с помощью DeviceInformation.CreateWatcher.

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;
        }
    });
}

При изменении SelectedIndex элемента ListBox (первый элемент выбран по умолчанию в предыдущем фрагменте), мы запрашиваем сведения об устройстве (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 средство проверки может сканировать только один штрихкод, а затем непрерывно останавливать или сканировать до вызова StopSoftwareTriggerAsync.

Задайте требуемое значение IsDisabledOnDataReceived , чтобы управлять поведением сканера при декодировании штрихкода.

значение Описание
Истина Сканирование только одного штрихкода, а затем остановка
False Непрерывно сканировать штрихкоды без остановки

См. также