Prise en main d’un scanneur de codes-barres de l’appareil photoGetting started with a camera barcode scanner

Les extraits de code utilisés ici sont fournis à des fins de démonstration uniquement.The snippets used here are for demonstration purposes only. Pour obtenir un exemple fonctionnel, consultez l' exemple de scanneur de codes-barres.For a working sample, see the Barcode scanner sample.

Étape 1 : ajouter des déclarations de fonctionnalité à votre manifeste d’applicationStep 1: Add capability declarations to your app manifest

  1. Dans Microsoft Visual Studio, dans l’Explorateur de solutions, ouvrez le concepteur pour le manifeste de l’application en double-cliquant sur l’élément package.appxmanifest.In Microsoft Visual Studio, in Solution Explorer, open the designer for the application manifest by double-clicking the package.appxmanifest item.
  2. Sélectionnez l’onglet capacitésSelect the Capabilities tab
  3. Cochez les cases webcam et PointOfServiceCheck the boxes for Webcam and PointOfService

Notes

La fonction webcam est requise pour permettre au décodeur logiciel de recevoir des frames de la caméra à décoder, ainsi que de fournir un aperçu de votre applicationThe 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

Étape 2 : ajouter des directives usingStep 2: Add using directives

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

Étape 3 : définir votre sélecteur d’appareilStep 3: Define your device selector

Option A : Rechercher tous les scanneurs de codes-barresOption A: Find all barcode scanners

string selector = BarcodeScanner.GetDeviceSelector();

Option B : portée du sélecteur d’appareil à un type de connexionOption B: Scoping device selector to connection type

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

Étape 4 : énumérer tous les scanneurs de codes-barresStep 4: Enumerate all barcode scanners

Si vous ne vous attendez pas à ce que la liste des appareils change sur la durée de vie de votre application, vous pouvez énumérer une capture instantanée une seule fois avec DeviceInformation. FindAllAsync, mais si vous pensez que la liste des scanneurs de codes-barres peut changer pendant la durée de vie de votre application, vous devez utiliser un DeviceWatcher à la place.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.

Important

L’utilisation de GetDefaultAsync pour énumérer les appareils PointOfService peut entraîner un comportement incohérent, car elle retourne simplement le premier périphérique trouvé dans la classe, ce qui peut changer d’une session à l’autres.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.

Option A : énumérer un instantané des scanneurs de codes-barresOption A: Enumerate a snapshot of barcode scanners

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Conseil

Pour plus d’informations sur l’utilisation de FindAllAsync, consultez énumérer un instantané de périphériques .See Enumerate a snapshot of devices for more information on using FindAllAsync.

Option B : énumérer les scanneurs de codes-barres disponibles et surveiller les modifications apportées aux scanneurs disponiblesOption 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();

Conseil

Pour plus d’informations, consultez énumérer et surveiller les modifications des appareils et DeviceWatcher .See Enumerate and watch device changes and DeviceWatcher for more information.

Étape 5 : identifier les scanneurs de codes-barres de l’appareil photoStep 5: Identify camera barcode scanners

Un scanneur de codes-barres de l’appareil photo est créé dynamiquement lorsque Windows associe la ou les caméras attachées à votre ordinateur à un décodeur logiciel.A camera barcode scanner is created dynamically as Windows pairs the camera(s) attached to your computer with a software decoder. Chaque paire décodeur de caméra est un scanneur de codes-barres entièrement fonctionnel.Each camera - decoder pair is a fully functional barcode scanner.

Pour chaque scanneur de codes-barres du regroupement d’appareils obtenu, vous pouvez différencier les scanneurs de code-barres de l’appareil photo des scanneurs de codes-barres physiques en activant la propriété BarcodeScanner. VideoDeviceID .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. Un VideoDeviceID non NULL indique que l’objet de scanneur de codes-barres de votre collection de périphériques est un scanneur de codes-barres de l’appareil photo.A non-NULL VideoDeviceID indicates that the barcode scanner object from your device collection is a camera barcode scanner. Si vous avez plusieurs scanneurs de codes-barres d’appareil photo, vous souhaiterez peut-être créer un regroupement distinct qui exclut les scanneurs de codes-barres physiques.If you have more than one camera barcode scanner you might want to build a separate collection which excludes physical barcode scanners.

Les scanneurs de codes-barres de l’appareil photo utilisant le décodeur fourni avec Windows sont identifiés comme suit :Camera barcode scanners using the decoder that ships with Windows are identified as:

Microsoft BarcodeScanner (nom de votre appareil photo ici)Microsoft BarcodeScanner (name of your camera here)

Si vous disposez de plusieurs caméras et que celles-ci sont intégrées au châssis de votre ordinateur, le nom peut faire la différence entre les caméras de l' avant et l' arrière .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.

Notes

À l’avenir, des décodeurs logiciels supplémentaires avec des schémas de nommage différents pourront être publiés.In the future, additional software decoders with different naming schemes might be released.

Quand le DeviceWatcher démarre (étape 4), il énumère chaque appareil connecté.When the DeviceWatcher starts (step 4), it enumerates through each connected device. Ici, nous allons ajouter les scanneurs disponibles à une collection de scanneurs de codes-barres et lier la collection à une zone de liste.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;
        }
    });
}

Lorsque la SelectedIndex du ListBox change (le premier élément est sélectionné par défaut dans l’extrait de code précédent), nous interrogeons les informations de l’appareil.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);
}

Étape 6 : demander le scanneur de codes-barres de l’appareil photoStep 6: Claim the camera barcode scanner

Utilisez BarcodeScanner. ClaimScannerAsync pour obtenir l’utilisation exclusive du scanneur de codes-barres de l’appareil photo.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);
    }
}

Étape 7 : version préliminaire fournie par le systèmeStep 7: System provided preview

Une préversion de l’appareil photo est nécessaire pour que l’utilisateur cherche correctement l’appareil photo dans les codes-barres.A camera preview is needed for the user to successfully aim the camera at barcodes. Windows fournit un aperçu de caméra simple qui lance une boîte de dialogue de contrôle de base du scanneur de codes-barres de l’appareil photo.Windows provides a simple camera preview that launches a dialog for basic control of the camera barcode scanner. Appelez simplement ClaimedBarcodeScanner. ShowVideoPreview pour ouvrir la boîte de dialogue et ClaimedBarcodeScanner. HideVideoPreview pour la fermer une fois terminé.Simply call ClaimedBarcodeScanner.ShowVideoPreview to open the dialog and ClaimedBarcodeScanner.HideVideoPreview to close it when finished.

Conseil

Consultez la version préliminaire d’hébergement pour héberger la version préliminaire du scanneur de code-barres de l’appareil dans votre application.See Hosting Preview to host the preview for camera barcode scanner in your application.

Étape 8 : lancer l’analyseStep 8: Initiate scan

Vous pouvez lancer le processus d’analyse en appelant StartSoftwareTriggerAsync.You can initiate the scan process by calling StartSoftwareTriggerAsync.

Selon la valeur de IsDisabledOnDataReceived , le scanneur peut analyser un seul code-barres, l’arrêter ou l’analyser en continu jusqu’à ce que vous appeliez StopSoftwareTriggerAsync.Depending on the value of IsDisabledOnDataReceived the scanner might scan only one barcode then stop or scan continuously until you call StopSoftwareTriggerAsync.

Définissez la valeur souhaitée de IsDisabledOnDataReceived pour contrôler le comportement de l’analyseur lorsqu’un code-barres est décodé.Set the desired value of IsDisabledOnDataReceived to control the scanner behavior when a barcode is decoded.

ValeurValue DescriptionDescription
TrueTrue Analyser un seul code-barres puis arrêterScan only one barcode then stop
FauxFalse Analyser en continu les codes-barres sans les arrêterContinuously scan barcodes without stopping

Voir aussiSee also

ExemplesSamples