Scannen aus Ihrer AppScan from your app

Wichtige APIsImportant APIs

Erfahren Sie, wie Sie Inhalte über Ihre App mithilfe eines Flachbett-, Einzugs- oder automatisch konfigurierten Scanners scannen können.Learn here how to scan content from your app by using a flatbed, feeder, or auto-configured scan source.

Wichtige  der Windows.Devices.Scanners APIs sind Teil des Desktops Gerätefamilie.Important  The Windows.Devices.Scanners APIs are part of the desktop device family. Apps können diese APIs nur für die desktop-Version von Windows 10 verwenden.Apps can use these APIs only on the desktop version of Windows 10.

Damit Sie über Ihre App scannen können, müssen Sie zunächst die verfügbaren Scanner auflisten, indem Sie ein neues DeviceInformation-Objekt deklarieren und den DeviceClass-Typ abrufen.To scan from your app, you must first list the available scanners by declaring a new DeviceInformation object and getting the DeviceClass type. Nur Scanner, die lokal mit WIA-Treibern installiert sind, werden in Ihrer App aufgeführt und stehen darin zur Verfügung.Only scanners that are installed locally with WIA drivers are listed and available to your app.

Nachdem Ihre App verfügbare Scanner aufgelistet hat, kann sie die auf dem Scannertyp basierenden automatisch konfigurierten Scaneinstellungen verwenden oder einfach unter Verwendung der verfügbaren Flachbett- oder Einzugsscanquelle scannen.After your app has listed available scanners, it can use the auto-configured scan settings based on the scanner type, or just scan using the available flatbed or feeder scan source. Damit die automatisch konfigurierten Einstellungen verwendet werden können, muss der Scanner mit der automatischen Konfiguration kompatibel sein und darf nicht sowohl über einen Flachbett- als auch über einen Einzugsscanner verfügen.To use auto-configured settings, the scanner must be enabled for auto-configuration must not be equipped with both a flatbed and a feeder scanner. Weitere Informationen finden Sie unter Automatisch konfigurierter Scan.For more info, see Auto-Configured Scanning.

Aufzählen verfügbarer ScannerEnumerate available scanners

Windows erkennt Scanner nicht automatisch.Windows does not detect scanners automatically. Sie müssen diesen Schritt ausführen, damit Ihre App mit dem Scanner kommunizieren kann.You must perform this step in order for your app to communicate with the scanner. In diesem Beispiel erfolgt die Scannergeräteaufzählung mit dem Windows.Devices.Enumeration-Namespace.In this example, the scanner device enumeration is done using the Windows.Devices.Enumeration namespace.

  1. Fügen Sie zunächst diese using-Anweisungen zu Ihrer Klassendefinitionsdatei hinzu.First, add these using statements to your class definition file.
    using Windows.Devices.Enumeration;
    using Windows.Devices.Scanners;
  1. Implementieren Sie dann die Geräteüberwachung, um mit der Scanneraufzählung zu beginnen.Next, implement a device watcher to start enumerating scanners. Weitere Informationen finden Sie unter Aufzählen von Geräten.For more info, see Enumerate devices.
    void InitDeviceWatcher()
    {
       // Create a Device Watcher class for type Image Scanner for enumerating scanners
       scannerWatcher = DeviceInformation.CreateWatcher(DeviceClass.ImageScanner);

       scannerWatcher.Added += OnScannerAdded;
       scannerWatcher.Removed += OnScannerRemoved;
       scannerWatcher.EnumerationCompleted += OnScannerEnumerationComplete;
    }
  1. Erstellen Sie einen Ereignishandler für den Fall, dass ein Scanner hinzugefügt wird.Create an event handler for when a scanner is added.
    private async void OnScannerAdded(DeviceWatcher sender,  DeviceInformation deviceInfo)
    {
       await
       MainPage.Current.Dispatcher.RunAsync(
             Windows.UI.Core.CoreDispatcherPriority.Normal,
             () =>
             {
                MainPage.Current.NotifyUser(String.Format("Scanner with device id {0} has been added", deviceInfo.Id), NotifyType.StatusMessage);

                // search the device list for a device with a matching device id
                ScannerDataItem match = FindInList(deviceInfo.Id);

                // If we found a match then mark it as verified and return
                if (match != null)
                {
                   match.Matched = true;
                   return;
                }

                // Add the new element to the end of the list of devices
                AppendToList(deviceInfo);
             }
       );
    }

ScanScan

  1. Abrufen eines Objekts ImageScannerGet an ImageScanner object

Für jeden ImageScannerScanSource-Aufzählungstyp (ob Default, AutoConfigured, Flatbed oder Feeder) müssen Sie zunächst ein ImageScanner-Objekt erstellen, indem Sie wie folgt die ImageScanner.FromIdAsync-Methode aufrufen.For each ImageScannerScanSource enumeration type, whether it's Default, AutoConfigured, Flatbed, or Feeder, you must first create an ImageScanner object by calling the ImageScanner.FromIdAsync method, like this.

   ImageScanner myScanner = await ImageScanner.FromIdAsync(deviceId);
  1. Nur ÜberprüfungJust scan

Zum Scan mit den Standardeinstellungen ist Ihre App bei der Auswahl eines Scanners vom Windows.Devices.Scanners-Namespace abhängig und scannt aus dieser Quelle.To scan with the default settings, your app relies on the Windows.Devices.Scanners namespace to select a scanner and scans from that source. Es werden keine Scaneinstellungen geändert.No scan settings are changed. Die möglichen Scanner sind „Automatisch konfiguriert“, „Flachbett“ und „Einzug“.The possible scanners are auto-configure, flatbed, or feeder. Bei dieser Scanart kommt es wahrscheinlich zu einem erfolgreichen Scanvorgang, selbst wenn der Scan von der falschen Quelle aus stattfindet (wie Flachbett anstelle von Einzug).This type of scan will most likely produce a successful scan operation, even if it scans from the wrong source, like flatbed instead of feeder.

Beachten Sie  , wenn der Benutzer das Dokument überprüfen im Einzug platziert, der Scan wird Scannen aus dem Flachbett stattdessen.Note  If the user places the document to scan in the feeder, the scanner will scan from the flatbed instead. Wenn der Benutzer versucht, aus einem leeren Einzug zu scannen, generiert der Scanauftrag keine gescannten Dateien.If the user tries to scan from an empty feeder, the scan job won't produce any scanned files.  

    var result = await myScanner.ScanFilesToFolderAsync(ImageScannerScanSource.Default,
        folder).AsTask(cancellationToken.Token, progress);
  1. Überprüfung von automatisch konfiguriert, Flachbett oder Feeder QuelleScan from Auto-configured, Flatbed, or Feeder source

Ihre App kann den automatisch konfigurierten Scan des Geräts mit den optimalen Scaneinstellungen verwenden.Your app can use the device's Auto-Configured Scanning to scan with the most optimal scan settings. Bei dieser Option kann das Gerät selbst die besten Scaneinstellungen, wie Farbmodus und Scanauflösung, basierend auf dem zu scannenden Inhalt bestimmen.With this option, the device itself can determine the best scan settings, like color mode and scan resolution, based on the content being scanned. Das Gerät wählt die Scaneinstellungen zur Laufzeit für jeden neuen Scanauftrag.The device selects the scan settings at run time for each new scan job.

Beachten Sie  nicht alle Scanner unterstützen dieses Feature, damit die app überprüft werden muss, wenn die Überprüfung dieses Feature unterstützt wird, bevor Sie diese Einstellung verwenden.Note  Not all scanners support this feature, so the app must check if the scanner supports this feature before using this setting.

In diesem Beispiel prüft die App zunächst, ob der Scanner die automatische Konfiguration unterstützt, und startet dann den Scanvorgang.In this example, the app first checks if the scanner is capable of auto-configuration and then scans. Um einen Flachbett- oder Einzugsscanner anzugeben, ersetzen Sie einfach AutoConfigured durch Flatbed oder Feeder.To specify either flatbed or feeder scanner, simply replace AutoConfigured with Flatbed or Feeder.

    if (myScanner.IsScanSourceSupported(ImageScannerScanSource.AutoConfigured))
    {
        ...
        // Scan API call to start scanning with Auto-Configured settings.
        var result = await myScanner.ScanFilesToFolderAsync(
            ImageScannerScanSource.AutoConfigured, folder).AsTask(cancellationToken.Token, progress);
        ...
    }

ScanvorschauPreview the scan

Sie können Code hinzufügen, um eine Scanvorschau vor dem Scan in einen Ordner anzuzeigen.You can add code to preview the scan before scanning to a folder. Im folgenden Beispiel prüft die App, ob der Flatbed-Scanner die Vorschau unterstützt, und zeigt dann die Scanvorschau an.In the example below, the app checks if the Flatbed scanner supports preview, then previews the scan.

if (myScanner.IsPreviewSupported(ImageScannerScanSource.Flatbed))
{
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
                // Scan API call to get preview from the flatbed.
                var result = await myScanner.ScanPreviewToStreamAsync(
                    ImageScannerScanSource.Flatbed, stream);

Abbrechen des ScansCancel the scan

Sie können wie folgt zulassen, dass Benutzer den Scanauftrag während der Ausführung abbrechen.You can let users cancel the scan job midway through a scan, like this.

void CancelScanning()
{
    if (ModelDataContext.ScenarioRunning)
    {
        if (cancellationToken != null)
        {
            cancellationToken.Cancel();
        }                
        DisplayImage.Source = null;
        ModelDataContext.ScenarioRunning = false;
        ModelDataContext.ClearFileList();
    }
}

Scannen mit FortschrittScan with progress

  1. Erstellen eines System.Threading.CancellationTokenSource-Objekts.Create a System.Threading.CancellationTokenSource object.
cancellationToken = new CancellationTokenSource();
  1. Richten Sie den Fortschritts-Ereignishandler ein, und rufen Sie den Scanfortschritt ab.Set up the progress event handler and get the progress of the scan.
    rootPage.NotifyUser("Scanning", NotifyType.StatusMessage);
    var progress = new Progress<UInt32>(ScanProgress);

Scannen in die BildbibliothekScanning to the pictures library

Benutzer können dynamisch mit der FolderPicker-Klasse in beliebige Ordner scannen. Sie müssen aber die Funktion Bildbibliothek im Manifest deklarieren, damit Benutzer in diesen Ordner scannen können.Users can scan to any folder dynamically using the FolderPicker class, but you must declare the Pictures Library capability in the manifest to allow users to scan to that folder. Weitere Informationen zu App-Funktionen finden Sie unter Deklarationen der App-Funktionen.For more info on app capabilities, see App capability declarations.