3

我正在使用带有 Delphi XE2 的 WIA 2.0。现在,我正在尝试让扫描仪进行扫描。起初我使用CommonDialog.ShowAcquireImage它工作正常,除了一件事。我希望能够传入 an IDevice、 anIDeviceInfo或 theDeviceId以跳过设备选择对话框。我试过枚举 的Commands属性IDevice,但我得到的只是同步和构建设备树。这两个命令似乎都不是我想要的。

我试图避免这个对话框

选择对话框

但仍显示此对话框

属性对话框.

我已经能够通过两种方式接近。第一种是仅使用以下ShowTransfer方法ICommonDialog

procedure TForm1.btnAutoScanClick(Sender: TObject);
var
  lDevice : IDevice;
  lImage : IImageFile;
  lCommonDialog : ICommonDialog;
begin
  lDevice := fDeviceManager.DeviceInfos[1].Connect;
  lCommonDialog := CoCommonDialog.Create;
  lCommonDialog.ShowDeviceProperties(lDevice,false);
  lImage := IUnknown(lCommonDialog.ShowTransfer(lDevice.Items[1],'{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}',false)) as IImageFile;
  lImage.SaveFile('c:\testauto.jpg');
end;

这会导致两个对话框都被跳过并显示一个进度条。这不会按原样工作,因为我仍然需要显示属性对话框。

我接近的第二种方法是打电话ShowAcquireImageICommonDialog

procedure TForm1.btnScanClick(Sender: TObject);
const
  pngFormat = '{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}';
  jpegFormat = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
var
  lImage : IImageFile;
  lDialog : ICommonDialog;
begin
  lDialog := CoCommonDialog.Create;
  lImage := lDialog.ShowAcquireImage(WIA_TLB.UnspecifiedDeviceType,WIA_TLB.GrayscaleIntent,WIA_TLB.MinimizeSize,
    jpegFormat,false,false,false);
  lImage.SaveFile('c:\testmanual.jpg');
end;

如果只有一个 WIA 设备连接到计算机,这完全符合我的要求。第二次我把我的照相手机插回电脑,我开始得到选择设备对话框。

我的问题是如何在扫描时跳过设备选择对话框,无论有多少设备连接到机器但仍显示属性对话框?

4

1 回答 1

2

您是否尝试过使用 WIA_TLB.ScannerDeviceType (=1) 而不是 UnspecifiedDeviceType (=0)?

lDialog.ShowAcquireImage(WIA_TLB.ScannerDeviceType,WIA_TLB.GrayscaleIntent,WIA_TLB.MinimizeSize,
           jpegFormat,false,false,false);

找到@: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms630829 (v=vs.85).aspx

于 2013-02-21T02:27:00.377 回答