Delphi XE2 で WIA 2.0 を使用しています。現在、スキャナーでスキャンしようとしています。最初はCommonDialog.ShowAcquireImage
、1 つのことを除いて、正常に動作していたものを使用していました。デバイス選択ダイアログをスキップするためにIDevice
、 、IDeviceInfo
、またはを渡せるようにしたいと考えています。のプロパティをDeviceId
列挙しようとしましたが、同期してデバイス ツリーを構築するだけです。これらの 2 つのコマンドはどちらも、私が探しているものではないようです。Commands
IDevice
このダイアログ ボックスを回避しようとしています
ただし、このダイアログ ボックスを表示する
.
私は2つの方法で近づくことができました。ShowTransfer
1つ目は、次の方法を使用することです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;
これにより、両方のダイアログがスキップされ、進行状況バーが表示されます。プロパティ ダイアログ ボックスを表示する必要があるため、このままでは機能しません。
私が親しくなった 2 番目の方法は、電話をかける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 デバイスが 1 つしかない場合に、希望どおりに機能します。カメラ付き携帯電話をコンピューターに接続し直すと、[デバイスの選択] ダイアログ ボックスが表示され始めます。
私の質問は、マシンに接続されているデバイスの数に関係なく、スキャン中にデバイス選択ダイアログ ボックスをスキップし、プロパティ ダイアログ ボックスを表示するにはどうすればよいですか?