简体   繁体   English

如何在 UWP 中获取连接的扫描仪列表

[英]How to get connected scanner list in UWP

I want to get the connected scanner list(names) and bind the scanner names to combo box, for scan purpose.我想获取连接的扫描仪列表(名称)并将扫描仪名称绑定到组合框,以进行扫描。 I am new to UWP, please share any link or code.我是 UWP 的新手,请分享任何链接或代码。

I have just installed the NTwain library from NuGet Package.我刚刚从 NuGet 包安装了 NTwain 库。

i want to bind the scanner name to combobox at page load(by creating getScannerName method ) how to do that ?我想在页面加载时将扫描仪名称绑定到组合框(通过创建 getScannerName 方法)怎么做?

For your requirement, you could use DeviceWatcher to enumerate all ImageScanner .根据您的要求,您可以使用DeviceWatcher枚举所有ImageScanner Then bind the result to the ListView .然后将结果绑定到ListView For more detail you could refer DeviceEnumerationAndPairing official code sample scenario 2.有关更多详细信息,您可以参考DeviceEnumerationAndPairing官方代码示例场景 2。

private void StartWatcher()
    {
        startWatcherButton.IsEnabled = false;
        ResultCollection.Clear();

        // First get the device selector chosen by the UI.
        DeviceSelectorInfo deviceSelectorInfo = (DeviceSelectorInfo)selectorComboBox.SelectedItem;

        if (null == deviceSelectorInfo.Selector)
        {
            // If the a pre-canned device class selector was chosen, call the DeviceClass overload
            deviceWatcher = DeviceInformation.CreateWatcher(deviceSelectorInfo.DeviceClassSelector);
        }
        else if (deviceSelectorInfo.Kind == DeviceInformationKind.Unknown)
        {
            // Use AQS string selector from dynamic call to a device api's GetDeviceSelector call
            // Kind will be determined by the selector
            deviceWatcher = DeviceInformation.CreateWatcher(
                deviceSelectorInfo.Selector, 
                null // don't request additional properties for this sample
                );
        }
        else
        {
            // Kind is specified in the selector info
            deviceWatcher = DeviceInformation.CreateWatcher(
                deviceSelectorInfo.Selector,
                null, // don't request additional properties for this sample
                deviceSelectorInfo.Kind);
        }

        // Hook up handlers for the watcher events before starting the watcher

        handlerAdded = new TypedEventHandler<DeviceWatcher, DeviceInformation>(async (watcher, deviceInfo) =>
        {
            // Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
            await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                ResultCollection.Add(new DeviceInformationDisplay(deviceInfo));

                rootPage.NotifyUser(
                    String.Format("{0} devices found.", ResultCollection.Count),
                    NotifyType.StatusMessage);
            });
        });
        deviceWatcher.Added += handlerAdded;

        handlerUpdated = new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(async (watcher, deviceInfoUpdate) =>
        {
            // Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
            await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                // Find the corresponding updated DeviceInformation in the collection and pass the update object
                // to the Update method of the existing DeviceInformation. This automatically updates the object
                // for us.
                foreach (DeviceInformationDisplay deviceInfoDisp in ResultCollection)
                {
                    if (deviceInfoDisp.Id == deviceInfoUpdate.Id)
                    {
                        deviceInfoDisp.Update(deviceInfoUpdate);
                        break;
                    }
                }
            });
        });
        deviceWatcher.Updated += handlerUpdated;

        handlerRemoved = new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(async (watcher, deviceInfoUpdate) =>
        {
            // Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
            await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                // Find the corresponding DeviceInformation in the collection and remove it
                foreach (DeviceInformationDisplay deviceInfoDisp in ResultCollection)
                {
                    if (deviceInfoDisp.Id == deviceInfoUpdate.Id)
                    {
                        ResultCollection.Remove(deviceInfoDisp);
                        break;
                    }
                }

                rootPage.NotifyUser(
                    String.Format("{0} devices found.", ResultCollection.Count), 
                    NotifyType.StatusMessage);
            });
        });
        deviceWatcher.Removed += handlerRemoved;

        handlerEnumCompleted = new TypedEventHandler<DeviceWatcher, Object>(async (watcher, obj) =>
        {
            await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                rootPage.NotifyUser(
                    String.Format("{0} devices found. Enumeration completed. Watching for updates...", ResultCollection.Count),
                    NotifyType.StatusMessage);
            });
        });
        deviceWatcher.EnumerationCompleted += handlerEnumCompleted;

        handlerStopped = new TypedEventHandler<DeviceWatcher, Object>(async (watcher, obj) =>
        {
            await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                rootPage.NotifyUser(
                    String.Format("{0} devices found. Watcher {1}.", 
                        ResultCollection.Count,
                        DeviceWatcherStatus.Aborted == watcher.Status ? "aborted" : "stopped"),
                    NotifyType.StatusMessage);
            });
        });
        deviceWatcher.Stopped += handlerStopped;

        rootPage.NotifyUser("Starting Watcher...", NotifyType.StatusMessage);
        deviceWatcher.Start();
        stopWatcherButton.IsEnabled = true;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM