Esempio n. 1
0
 private WiaItem GetItem(WiaDevice device)
 {
     if (ScanProfile.UseNativeUI)
     {
         var  hwnd      = Invoker.Current.InvokeGet(() => DialogParent.Handle);
         bool useWorker = Environment.Is64BitProcess && device.Version == WiaVersion.Wia10;
         if (useWorker)
         {
             WiaConfiguration config;
             using (var worker = workerServiceFactory.Create())
             {
                 config = worker.Service.Wia10NativeUI(device.Id(), hwnd);
             }
             var item = device.FindSubItem(config.ItemName);
             device.Properties.DeserializeEditable(device.Properties.Delta(config.DeviceProps));
             item.Properties.DeserializeEditable(item.Properties.Delta(config.ItemProps));
             return(item);
         }
         else
         {
             return(device.PromptToConfigure(hwnd));
         }
     }
     else if (device.Version == WiaVersion.Wia10)
     {
         // In WIA 1.0, the root device only has a single child, "Scan"
         // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/wia-scanner-tree
         return(device.GetSubItems().First());
     }
     else
     {
         // In WIA 2.0, the root device may have multiple children, i.e. "Flatbed" and "Feeder"
         // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/non-duplex-capable-document-feeder
         // The "Feeder" child may also have a pair of children (for front/back sides with duplex)
         // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/simple-duplex-capable-document-feeder
         var items             = device.GetSubItems();
         var preferredItemName = ScanProfile.PaperSource == ScanSource.Glass ? "Flatbed" : "Feeder";
         return(items.FirstOrDefault(x => x.Name() == preferredItemName) ?? items.First());
     }
 }