Partager via


Bien démarrer avec un scanneur de codes-barres appareil photo

Cette rubrique explique comment configurer un scanneur de codes-barres de caméra de base dans une application UWP.

Note

Le décodeur logiciel intégré à Windows 10/11 est fourni par Digimarc Corporation.

Les extraits de code suivants sont à des fins de démonstration uniquement. Pour obtenir un exemple de travail complet, consultez l’exemple de scanneur de codes-barres .

Étape 1 : Ajouter des déclarations de capacité à votre manifeste d’application

  1. Dans Microsoft Visual Studio, dans Explorateur de solutions, ouvrez le concepteur du manifeste de l’application en double-cliquant sur l’élément package.appxmanifest.
  2. Sélectionnez l’onglet Fonctionnalités.
  3. Cochez les cases Webcam et PointOfService.

Note

La fonctionnalité Webcam est requise pour que le décodeur logiciel reçoive des images de l’appareil photo pour décoder le code-barres et fournir un aperçu dans votre application.

Étape 2 : Ajouter des directives using

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

Étape 3 : Définir votre sélecteur d’appareil

Utilisez l’une des méthodes BarcodeScanner.GetDeviceSelector pour obtenir un objet BarcodeScanner pour chaque scanneur de codes-barres connecté.

Option A : Rechercher tous les scanneurs de codes-barres

string selector = BarcodeScanner.GetDeviceSelector();

Option B : Rechercher tous les scanneurs de codes-barres en fonction de l’étendue (pour cet exemple, nous filtrons sur le type de connexion local)

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

Étape 4 : Énumérer les scanneurs de codes-barres

Si vous ne vous attendez pas à ce que la liste des appareils change pendant la durée de vie de votre application, utilisez DeviceInformation.FindAllAsync pour obtenir un instantané ponctuelle. Toutefois, si la liste des scanneurs de codes-barres peut changer pendant la durée de vie de votre application, utilisez plutôt un DeviceWatcher .

Important

L’utilisation de GetDefaultAsync pour énumérer les appareils PointOfService peut entraîner un comportement incohérent, car elle retourne uniquement le premier appareil trouvé dans la classe (qui peut passer d’une session à une session).

Option A : Énumérer un instantané de tous les scanneurs de codes-barres connectés en fonction du sélecteur créé à l’étape 3

Dans cet extrait de code, nous créons un objet DeviceInformationCollection et utilisons ***DeviceInformation.FindAllAsync pour le remplir.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Astuce

Consultez Énumérer un instantané d’appareils pour plus d’informations sur l’utilisation de DeviceInformation.FindAllAsync.

Option B : Énumérer les scanneurs de codes-barres disponibles en fonction du sélecteur créé à l’étape 3 et regarder les modifications apportées à cette collection

Dans cet extrait de code, nous créons un DeviceWatcher à l’aide de DeviceInformation.CreateWatcher.

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

Astuce

Pour plus d’informations, consultez Énumérer et regarder des appareils et DeviceWatcher.

Étape 5 : Identifier les scanneurs de codes-barres de caméra

Un scanneur de codes-barres à caméra se compose d’une caméra (attachée à un ordinateur) associée à un décodeur logiciel, que Windows associe dynamiquement pour créer un scanneur de codes-barres entièrement fonctionnel pour les applications plateforme Windows universelle (UWP).

BarcodeScanner.VideoDeviceID pouvez être utilisé pour différencier les scanneurs de codes-barres de caméra et les scanneurs de codes-barres physiques. Un VideoDeviceID non NULL indique que l’objet scanneur de codes-barres de votre collection d’appareils est un scanneur de codes-barres de caméra. Si vous avez plusieurs scanneurs de codes-barres de caméra, vous souhaiterez peut-être créer une collection distincte qui exclut les scanneurs de codes-barres physiques.

Les scanneurs de codes-barres de caméra utilisant le décodeur fourni avec Windows sont identifiés comme suit :

Microsoft BarcodeScanner (nom de votre appareil photo ici)

S’il y a plusieurs caméras et qu’elles sont intégrées au châssis de l’ordinateur, le nom peut faire la distinction entre caméras avant et arrière.

Lorsque DeviceWatcher démarre (voir Étape 4 : Énumérer les scanneurs de codes-barres), il énumère chaque appareil connecté. Dans l’extrait de code suivant, nous ajoutons chaque scanneur disponible à une collection BarcodeScanner et liez la collection à un Objet 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;
        }
    });
}

Lorsque l’élément SelectedIndex du ListBox change (le premier élément est sélectionné par défaut dans l’extrait de code-barres précédent), nous interrogeons les informations sur l’appareil (la tâche SelectScannerAsync est implémentée à l’étape 6 : Revendication du scanneur de codes-barres de l’appareil photo).

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

    await SelectScannerAsync(deviceId);
}

Étape 6 : Revendiquer le scanneur de codes-barres de la caméra

Appelez BarcodeScanner.ClaimScannerAsync pour obtenir l’utilisation exclusive du scanneur de codes-barres de la caméra.

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

Étape 7 : préversion fournie par le système

Une préversion de la caméra est nécessaire pour aider l’utilisateur à orienter la caméra vers un code-barres. Windows fournit une préversion de base de l’appareil photo qui lance une boîte de dialogue pour contrôler le scanneur de codes-barres de l’appareil photo.

Appelez ClaimedBarcodeScanner.ShowVideoPreview pour ouvrir la boîte de dialogue et ClaimedBarcodeScanner.HideVideoPreview pour le fermer.

Astuce

Consultez Hébergement en préversion pour héberger la préversion du scanneur de codes-barres de l’appareil photo dans votre application.

Étape 8 : Lancer l’analyse

Vous pouvez lancer le processus d’analyse en appelant StartSoftwareTriggerAsync.

Selon la valeur de IsDisabledOnDataReceived , le scanneur ne peut analyser qu’un seul code-barres, puis arrêter ou analyser en continu jusqu’à ce que vous appeliez StopSoftwareTriggerAsync.

Définissez la valeur souhaitée de IsDisabledOnDataReceived pour contrôler le comportement du scanneur lorsqu’un code-barres est décodé.

valeur Description
True Scannez un seul code-barres, puis arrêtez
False Scanner en continu les codes-barres sans s’arrêter

Voir aussi