我正在使用带有 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;
这会导致两个对话框都被跳过并显示一个进度条。这不会按原样工作,因为我仍然需要显示属性对话框。
我接近的第二种方法是打电话ShowAcquireImage
给ICommonDialog
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 设备连接到计算机,这完全符合我的要求。第二次我把我的照相手机插回电脑,我开始得到选择设备对话框。
我的问题是如何在扫描时跳过设备选择对话框,无论有多少设备连接到机器但仍显示属性对话框?