Ersten Schritten mit einem Kamera Barcode ScannerGetting started with a camera barcode scanner

Die hier verwendeten Ausschnitte dienen nur zu Demonstrationszwecken.The snippets used here are for demonstration purposes only. Ein funktionierendes Beispiel finden Sie im Beispiel Barcode Scanner.For a working sample, see the Barcode scanner sample.

Schritt 1: Hinzufügen von Funktions Deklarationen zum App-ManifestStep 1: Add capability declarations to your app manifest

  1. Öffnen Sie in Microsoft Visual Studio im Projektmappen-Explorer den Designer für das Anwendungsmanifest, indem Sie auf das Element package.appxmanifest doppelklicken.In Microsoft Visual Studio, in Solution Explorer, open the designer for the application manifest by double-clicking the package.appxmanifest item.
  2. Registerkarte " Funktionen " auswählenSelect the Capabilities tab
  3. Aktivieren Sie die Kontrollkästchen für Webcam und pointservice .Check the boxes for Webcam and PointOfService

Hinweis

Die Webcam -Funktion ist erforderlich, damit der Software Decoder Frames von der Kamera zum Decodieren empfängt und eine Vorschau von Ihrer Anwendung bereitstellt.The 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

Schritt 2: Hinzufügen von using-DirektivenStep 2: Add using directives

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

Schritt 3: Definieren der GeräteauswahlStep 3: Define your device selector

Option A: alle Barcode Scanner suchenOption A: Find all barcode scanners

string selector = BarcodeScanner.GetDeviceSelector();

Option B: Bereich für die Geräteauswahl auf VerbindungstypOption B: Scoping device selector to connection type

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

Schritt 4: Auflisten aller Barcode ScannerStep 4: Enumerate all barcode scanners

Wenn Sie nicht erwarten, dass sich die Liste der Geräte im Laufe der Lebensdauer Ihrer Anwendung ändert, können Sie eine Momentaufnahme nur einmal mit der Datei "endviceinformation. findallasync" auflisten, aber wenn Sie der Meinung sind, dass sich die Liste der Barcode Scanner während der Lebensdauer Ihrer Anwendung ändern könnte, sollten Sie stattdessen einen devicewatcher verwenden.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.

Wichtig

Die Verwendung von getdefaultasync zum Auflisten von pointfservice-Geräten kann zu inkonsistentem Verhalten führen, da es einfach das erste in der-Klasse gefundene Gerät zurückgibt, das sich von Sitzung zu Sitzung ändern kann.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: Auflisten einer Momentaufnahme von Barcode ScannernOption A: Enumerate a snapshot of barcode scanners

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Tipp

Weitere Informationen zur Verwendung von findallasyncfinden Sie unter Auflisten einer Momentaufnahme von Geräten .See Enumerate a snapshot of devices for more information on using FindAllAsync.

Option B: Auflisten der verfügbaren Barcode Scanner und beobachten der Änderungen an verfügbaren ScannernOption 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();

Tipp

Weitere Informationen finden Sie unter Auflisten und Überwachen von Geräteänderungen und devicewatcher .See Enumerate and watch device changes and DeviceWatcher for more information.

Schritt 5: Identifizieren der Kamera Barcode ScannerStep 5: Identify camera barcode scanners

Ein Kamera-Barcode Scanner wird dynamisch erstellt, da Windows die Kamera (n) mit einem Software Decoder an Ihren Computer anfügt.A camera barcode scanner is created dynamically as Windows pairs the camera(s) attached to your computer with a software decoder. Jedes Kamera-Decoder-Paar ist ein voll funktionsfähiger Barcode Scanner.Each camera - decoder pair is a fully functional barcode scanner.

Für jeden Barcode Scanner in der sich ergebenden Geräte Sammlung können Sie die Barcode Scanner und physische Barcode Scanner unterscheiden, indem Sie die Eigenschaft Barcodescanner. videodeviceid überprüfen.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. Eine videodebug-ID, die nicht NULL ist, gibt an, dass das Barcode Scanner-Objekt aus der Geräte Sammlung ein Kamera-Barcode Scanner ist.A non-NULL VideoDeviceID indicates that the barcode scanner object from your device collection is a camera barcode scanner. Wenn Sie mehr als einen Kamera Barcode Scanner haben, können Sie eine separate Sammlung erstellen, die physische Barcode Scanner ausschließt.If you have more than one camera barcode scanner you might want to build a separate collection which excludes physical barcode scanners.

Kamera Barcode Scanner, die den im Lieferumfang von Windows enthaltenen Decoder verwenden, werden wie folgt identifiziert:Camera barcode scanners using the decoder that ships with Windows are identified as:

Microsoft Barcodescanner (Name der Kamera hier)Microsoft BarcodeScanner (name of your camera here)

Wenn Sie über mehr als eine Kamera verfügen und diese in das Chassis Ihres Computers integriert sind, kann der Name zwischen der Vorder -und der Rückseite unterscheiden.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.

Hinweis

In Zukunft können zusätzliche Software Decoder mit unterschiedlichen Benennungs Schemas freigegeben werden.In the future, additional software decoders with different naming schemes might be released.

Wenn devicewatcher startet (Schritt 4), listet er alle verbundenen Geräte auf.When the DeviceWatcher starts (step 4), it enumerates through each connected device. Hier fügen wir die verfügbaren Scanner zu einer Barcode Scanner-Sammlung hinzu und binden die Auflistung an ein ListBox-Steuerfeld.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;
        }
    });
}

Wenn der SelectedIndex des ListBox-Elements geändert wird (das erste Element ist standardmäßig im vorherigen Code Ausschnitt ausgewählt), werden die Geräteinformationen abgefragt.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);
}

Schritt 6: Anfordern des Kamera Barcode ScannersStep 6: Claim the camera barcode scanner

Verwenden Sie " Barcodescanner. claimscannerasync ", um den Kamera Barcode Scanner exklusiv zu verwenden.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);
    }
}

Schritt 7: vom System bereitgestellte VorschauStep 7: System provided preview

Eine Kamera Vorschau ist erforderlich, damit der Benutzer die Kamera bei Barcodes erfolgreich verfolgen kann.A camera preview is needed for the user to successfully aim the camera at barcodes. Windows bietet eine einfache Kamera Vorschau, mit der ein Dialogfeld für die grundlegende Steuerung des Kamera Barcode Scanners gestartet wird.Windows provides a simple camera preview that launches a dialog for basic control of the camera barcode scanner. Nennen Sie einfach claimedbarcodescanner. showvideopreview , um das Dialogfeld zu öffnen, und claimedbarcodescanner. hidevideopreview , um es zu schließen, wenn Sie fertig sind.Simply call ClaimedBarcodeScanner.ShowVideoPreview to open the dialog and ClaimedBarcodeScanner.HideVideoPreview to close it when finished.

Tipp

Weitere Informationen finden Sie in der hostingvorschau zum Hosten der Vorschau für den Kamera Barcode Scanner in Ihrer AnwendungSee Hosting Preview to host the preview for camera barcode scanner in your application.

Schritt 8: Initiieren der ÜberprüfungStep 8: Initiate scan

Sie können den Scanvorgang initiieren, indem Sie startsoftwaretriggerasyncaufrufen.You can initiate the scan process by calling StartSoftwareTriggerAsync.

Abhängig vom Wert von isdisabledondatareceived scannt der Scanner möglicherweise nur einen Barcode und beendet oder scannt fortlaufend, bis Sie stopsoftwaretriggerasyncaufrufen.Depending on the value of IsDisabledOnDataReceived the scanner might scan only one barcode then stop or scan continuously until you call StopSoftwareTriggerAsync.

Legen Sie den gewünschten Wert von isdisabledondatareceived fest, um das scannerverhalten zu steuern, wenn ein Barcode decodiert wird.Set the desired value of IsDisabledOnDataReceived to control the scanner behavior when a barcode is decoded.

ValueValue BESCHREIBUNGDescription
TrueTrue Nur einen Barcode Scannen und dann den Vorgang abbrechenScan only one barcode then stop
FalseFalse Kontinuierliches Scannen von Barcodes ohne BeendenContinuously scan barcodes without stopping

Weitere InformationenSee also

ProbenSamples