Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique explique comment configurer un scanneur de codes-barres de caméra de base dans une application UWP.
Remarque
Le décodeur logiciel intégré à Windows 10/11 est fourni par Digimarc Corporation.
Les extraits de code suivants sont uniquement à des fins de démonstration. Pour obtenir un exemple de travail complet, consultez l’exemple de scanneur de codes-barres .
Étape 1 : Ajouter des déclarations de fonctionnalité au manifeste de votre application
- 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.
- Sélectionnez l’onglet Fonctionnalités.
- Cochez les cases pour Webcam et PointOfService.
Remarque
La fonctionnalité webcam est requise pour que le décodeur logiciel reçoive des images de la caméra 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 lecteurs de codes-barres en fonction du périmètre (par exemple, nous appliquons un filtre sur 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é unique. Toutefois, si la liste des scanneurs de codes-barres peut changer pendant la durée de vie de votre application, utilisez un DeviceWatcher à la place.
Important
L’utilisation de GetDefaultAsync pour énumérer pointOfService appareils peut entraîner un comportement incohérent, car il retourne uniquement le premier appareil trouvé dans la classe (qui peut passer de la session à la session).
Option A : Énumérer une vue instantanée de tous les scanners 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);
Conseil / Astuce
Consultez Énumérer un instantané des 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 observer les modifications apportées à cette collection
Dans cet extrait de code, nous créons un DeviceWatcher avec DeviceInformation.CreateWatcher .
DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();
Conseil / Astuce
Pour plus d’informations, consultez Énumérer et surveiller des appareils et DeviceWatcher.
Étape 5 : Identifier les scanneurs de codes-barres de caméra
Un scanneur de codes-barres de caméra se compose d’une caméra (attachée à un ordinateur) combinée à un décodeur logiciel, que Windows associe dynamiquement pour créer un scanneur de codes-barres entièrement fonctionnel pour les applications de 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 différencier avant et caméras arrière.
Lorsque le DeviceWatcher
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'index sélectionné de la ListBox change (le premier élément est sélectionné par défaut dans l'extrait précédent), nous interrogeons les informations sur l'appareil (la tâche SelectScannerAsync
est implémentée à l'étape 6 : revendiquer le scanneur de codes-barres de la caméra).
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 : Aperçu fourni par le système
Un aperçu de la caméra est nécessaire pour aider l’utilisateur à viser la caméra à un code-barres. Windows fournit un aperçu de la caméra de base qui lance une boîte de dialogue pour contrôler le scanneur de codes-barres de la caméra.
Appelez ClaimedBarcodeScanner.ShowVideoPreview pour ouvrir la boîte de dialogue et ClaimedBarcodeScanner.HideVideoPreview la fermer.
Conseil / Astuce
Consultez Aperçu de l'hébergement pour héberger l'aperçu du lecteur de codes-barres de la caméra 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 peut lire un seul code-barres, puis s'arrêter ou scanner 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 | Descriptif |
---|---|
Vrai | Scannez un seul code-barres, puis arrêtez |
Faux | Analyser en continu les codes-barres sans arrêter |