3

Delphi XE2 で WIA 2.0 を使用しています。現在、スキャナーでスキャンしようとしています。最初はCommonDialog.ShowAcquireImage、1 つのことを除いて、正常に動作していたものを使用していました。デバイス選択ダイアログをスキップするためにIDevice、 、IDeviceInfo、またはを渡せるようにしたいと考えています。のプロパティをDeviceId列挙しようとしましたが、同期してデバイス ツリーを構築するだけです。これらの 2 つのコマンドはどちらも、私が探しているものではないようです。CommandsIDevice

このダイアログ ボックスを回避しようとしています

選択ダイアログ ボックス

ただし、このダイアログ ボックスを表示する

[プロパティ] ダイアログ ボックス.

私は2つの方法で近づくことができました。ShowTransfer1つ目は、次の方法を使用することです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 つしかない場合に、希望どおりに機能します。カメラ付き携帯電話をコンピューターに接続し直すと、[デバイスの選択] ダイアログ ボックスが表示され始めます。

私の質問は、マシンに接続されているデバイスの数に関係なく、スキャン中にデバイス選択ダイアログ ボックスをスキップし、プロパティ ダイアログ ボックスを表示するにはどうすればよいですか?

4

1 に答える 1

2

UnspecifiedDeviceType (=0) の代わりに WIA_TLB.ScannerDeviceType (=1) を使用してみましたか?

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 に答える