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 utiliser les API de scanneur de codes-barres de la plateforme Windows universelle (UWP) pour traiter les symbologies de codes-barres sans configurer manuellement le scanneur.
La symbologie de code-barres consiste en le mappage des données à un format de code-barres spécifique. Certaines symbologies courantes incluent UPC, Code 128, QR Code, et ainsi de suite.
Déterminer les symbologies prises en charge
Étant donné que votre application peut être utilisée avec différents modèles de scanneur de codes-barres de plusieurs fabricants, vous pouvez interroger le scanneur pour déterminer la liste des symbologies qu’il prend en charge. Cela peut être utile si votre application nécessite une symbologie spécifique qui peut ne pas être prise en charge par tous les scanneurs ou si vous devez activer les symbologies qui ont été désactivées manuellement ou par programmation sur le scanneur.
Une fois que vous avez un objet BarcodeScanner à l’aide de BarcodeScanner.FromIdAsync, appelez GetSupportedSymbologiesAsync pour obtenir la liste des symbologies prises en charge par l’appareil.
L’exemple suivant obtient une liste des symbologies prises en charge du scanneur de codes-barres et les affiche dans un bloc de texte :
private void DisplaySupportedSymbologies(BarcodeScanner barcodeScanner, TextBlock textBlock)
{
var supportedSymbologies = await barcodeScanner.GetSupportedSymbologiesAsync();
foreach (uint item in supportedSymbologies)
{
string symbology = BarcodeSymbologies.GetName(item);
textBlock.Text += (symbology + "\n");
}
}
Déterminer si une symbologie spécifique est prise en charge
Pour déterminer si le scanneur prend en charge une symbologie spécifique, vous pouvez appeler IsSymbologySupportedAsync.
L’exemple suivant vérifie si le scanneur de codes-barres prend en charge la symbologie Code32 :
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
Modifier les symbologies reconnues
Dans certains cas, vous pouvez utiliser un sous-ensemble de symbologies pris en charge par le scanneur de codes-barres. Cela est particulièrement utile pour bloquer les symbologies que vous n’avez pas l’intention d’utiliser dans votre application. Par exemple, pour vous assurer qu’un utilisateur analyse le code-barres approprié, vous pouvez limiter l’analyse à UPC ou EAN lors de l’acquisition des références SKU d’élément et limiter l’analyse au code 128 lors de l’acquisition de numéros de série.
Une fois que vous connaissez les symbologies que votre scanneur prend en charge, vous pouvez définir les symbologies que vous souhaitez reconnaître. Cette opération peut être effectuée après avoir établi un objet ClaimedBarcodeScanner à l’aide de ClaimScannerAsync. Vous pouvez appeler SetActiveSymbologiesAsync pour activer un ensemble spécifique de symbologies alors que ceux omis dans votre liste sont désactivés.
L’exemple suivant définit les symbologies actives d’un scanneur de codes-barres revendiqués sur Code39 et Code39Ex:
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
Attributs de symbologie de code-barres
Différents symbologies de code-barres peuvent avoir différents attributs, tels que la prise en charge de plusieurs longueurs de décodage, la transmission du chiffre de vérification à l’hôte dans le cadre des données brutes et la validation des chiffres de vérification. Avec la classe BarcodeSymbologyAttributes, vous pouvez obtenir et définir ces attributs pour un ClaimedBarcodeScanner et pour la symbologie de code-barres correspondante.
Vous pouvez obtenir les attributs d’un symbologie donné avec GetSymbologyAttributesAsync. L’extrait de code suivant obtient les attributs de la symbologie Upca pour un ClaimedBarcodeScanner.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
Une fois que vous avez terminé de modifier les attributs et que vous êtes prêt à les définir, vous pouvez appeler SetSymbologyAttributesAsync. Cette méthode retourne un bool, qui est true si les attributs ont été correctement définis.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
Restreindre les données d'analyse en fonction de leur longueur
Certaines symbologies sont de longueur variable telle que Code 39 ou Code 128. Les codes-barres de ces symbologies peuvent se trouver à proximité les uns des autres contenant des données différentes souvent d’une longueur spécifique. La définition de la longueur spécifique des données dont vous avez besoin peut empêcher les analyses non valides.
Avant de définir la longueur de décodage, vérifiez si la symbologie de code-barres prend en charge plusieurs longueurs avec IsDecodeLengthSupported. Une fois que vous savez qu’il est pris en charge, vous pouvez définir le DecodeLengthKind, qui est de type BarcodeSymbologyDecodeLengthKind. Cette propriété peut être l’une des valeurs suivantes :
- anyLength: décoder les longueurs d’un nombre quelconque.
- Discrète: décoder les longueurs de DecodeLength1 ou DecodeLength2 de caractères codés sur un octet.
- Plage: Décodage des longueurs entre DecodeLength1 et DecodeLength2 de caractères à octet unique. L’ordre de DecodeLength1 et DecodeLength2 n’ont pas d’importance (peut être supérieur ou inférieur à l’autre).
Enfin, vous pouvez définir les valeurs de DecodeLength1 et DecodeLength2 pour contrôler la longueur des données dont vous avez besoin.
L’extrait de code suivant illustre la définition de la longueur du décodage :
private async Task<bool> SetDecodeLength(
ClaimedBarcodeScanner scanner,
uint symbology,
BarcodeSymbologyDecodeLengthKind kind,
uint decodeLength1,
uint decodeLength2)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsDecodeLengthSupported)
{
attributes.DecodeLengthKind = kind;
attributes.DecodeLength1 = decodeLength1;
attributes.DecodeLength2 = decodeLength2;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Vérifier la transmission des chiffres
Un autre attribut que vous pouvez définir sur un symbology est de savoir si le chiffre de vérification sera transmis à l’hôte dans le cadre des données brutes. Avant de définir ce paramètre, assurez-vous que la symbologie prend en charge la transmission de chiffres de vérification avec IsCheckDigitTransmissionSupported. Ensuite, définissez si la transmission de chiffres de vérification est activée avec IsCheckDigitTransmissionEnabled.
L’extrait de code suivant illustre la définition de la transmission de chiffres de vérification :
private async Task<bool> SetCheckDigitTransmission(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitTransmissionSupported)
{
attributes.IsCheckDigitTransmissionEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Vérifier la validation des chiffres
Vous pouvez également définir si le chiffre de vérification du code-barres sera validé. Avant de définir ce paramètre, assurez-vous que la symbologie prend en charge la validation du chiffre de contrôle avec IsCheckDigitValidationSupported. Définissez ensuite si la validation des chiffres de vérification est activée avec IsCheckDigitValidationEnabled.
L’extrait de code suivant illustre la définition de la validation des chiffres de vérification :
private async Task<bool> SetCheckDigitValidation(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitValidationSupported)
{
attributes.IsCheckDigitValidationEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Support et commentaires
Trouver des réponses à vos questions
Vous avez des questions ? Demandez-nous sur notre forum Docs Q&A avec la balise UWP ou sur Stack Overflow avec la balise pointofservice.
Aidez-nous à trouver vos questions :
- Ajoutez la balise pointofservice à votre question sur Stack Overflow.
- Incluez le terme « UWP » dans votre billet sur le forum Q&A