tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB.NETでWIA制御
記事No11521
投稿日: 2015/10/28(Wed) 10:21
投稿者かなやん
いつもお世話になってます。

VB.NETでスキャナを起動し画像を保存したいです。
ネットでサンプルを拾ってきて以下のコードを実行してみました。

Dim CD As New WIA.CommonDialog
Dim F As WIA.ImageFile = CD.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType)
F.SaveFile("C:\Temp\WIA." + F.FileExtension)

しかしこれだと、スキャナを選択するウィンドウやスキャンを実行するウィンドウが出てきて
それに従ってスキャンを実行しなければいけません。

全て(スキャナ選択・画質等設定・スキャン開始)を自動で行うことは可能なのでしょうか?
また、WIAのプロパティやイベントに関する説明があるサイトをご存じでしたら教えてください。

よろしくお願いいたします。

環境はWin7で開発はVisualStudioExpress2013ForDesktopを使っています。

[ツリー表示へ]
タイトルRe: VB.NETでWIA制御
記事No11522
投稿日: 2015/10/28(Wed) 10:53
投稿者Hongliang
ちらっとリファレンスを見ただけですが。
hhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms630491.aspx

DeviceManagerを作成して、
DeviceInfosの中からTypeがScannerDeviceTypeであったりするDeviceInfoオブジェクトを手に入れ、
ConnectメソッドでDeviceオブジェクトを手に入れ、
ExecuteCommand(wiaCommandTakePicture)でItemオブジェクトを手に入れ、
TransferメソッドでImageFileオブジェクトを手に入れ、
……って感じですかね。

設定はDeviceオブジェクトのPropertiesプロパティからできそうかな。
hhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms630196.aspx

[ツリー表示へ]
タイトルRe^2: VB.NETでWIA制御
記事No11523
投稿日: 2015/10/28(Wed) 13:25
投稿者かなやん
早速のご返答、ありがとうございます!!

ところで、お恥ずかしいのですが、
教えていただいた

> DeviceInfosの中からTypeがScannerDeviceTypeであったりするDeviceInfoオブジェクトを手に入れ、
> ConnectメソッドでDeviceオブジェクトを手に入れ、
> ExecuteCommand(wiaCommandTakePicture)でItemオブジェクトを手に入れ、
> TransferメソッドでImageFileオブジェクトを手に入れ、

は、具体的にどのように記述すればよいのでしょうか?
Dim DM As WIA.DeviceManager
でDeviceManagerを宣言し、
DM.DeviceInfos.
と打ち込んだところで出てくるリストには、思うようなものが無く・・
リファレンスを追って行っても「DeviceInfos」で検索しても
情けないことに私には理解できませんでした。

[ツリー表示へ]
タイトルRe^3: VB.NETでWIA制御
記事No11524
投稿日: 2015/10/28(Wed) 13:35
投稿者Hongliang
> Dim DM As WIA.DeviceManager
Newする必要があります。

> DM.DeviceInfos.
> と打ち込んだところで出てくるリストには、思うようなものが無く・・
VBだと、
For i As Integer = 0 To DM.DeviceInfo.Count - 1
    Dim devInfo As DeviceInfo = DM.DeviceInfos(i)
とかでできませんでしたか。
DM.DeviceInfos.Item(i)かな?

[ツリー表示へ]
タイトルRe^2: VB.NETでWIA制御
記事No11525
投稿日: 2015/10/28(Wed) 14:50
投稿者かなやん

> DeviceManagerを作成して、
> DeviceInfosの中からTypeがScannerDeviceTypeであったりするDeviceInfoオブジェクトを手に入れ、
> ConnectメソッドでDeviceオブジェクトを手に入れ、
・・ここまでできました!
ちなみに DM.DeviceInfos.Item(i)は1から始まっていました。
ExecuteCommand()の引数にwiaCommandTakePictureかそれに近いものは見当たらず・・
もう少しさぐってみます。

この先まだまだ長そうです;

[ツリー表示へ]
タイトルRe^3: VB.NETでWIA制御
記事No11526
投稿日: 2015/10/28(Wed) 15:09
投稿者かなやん
途中経過です。
ExecuteCommand(WIA.CommandID.wiaCommandTakePicture)
とすると構文エラーは避けられましたが
実行時エラー「CommandIDはWIAのメンバーではありません」
となりました。

[ツリー表示へ]
タイトルRe^4: VB.NETでWIA制御
記事No11527
投稿日: 2015/10/28(Wed) 15:44
投稿者Hongliang
// うちではC#だとエラーになるけどVBだと通るなぁ…。

案1: 参照でwiaautを選んで、プロパティの「相互運用型の埋め込み」をFalseにする。
  ただし自動生成されるinterop.wiaaut.dllが実行に必要。

案2: wiaCommandTakePictureを「参照へ移動」で表示される定義文字列を、
  自分とこで勝手に再定義してそれを使用する。
  所詮文字列なので、どこの値を使おうが文字列があってれば問題ありません。

[ツリー表示へ]
タイトルRe^5: VB.NETでWIA制御
記事No11528
投稿日: 2015/10/29(Thu) 09:55
投稿者かなやん
お世話になっております。
昨日いろいろ試しましたが相変わらず実行時エラーで先に進みませんでした。
もちろんご提示いただいた案も試してみましたがどうにもこうにも・・。

しかしなぜ、CommandIDを右クリック「定義へ移動」で
表示される中にしっかり「WIA のメンバー」と書いてあるのに
動かすと「メンバーではありません」となるのでしょうね。

お忙しい中何度もお付き合いいただきありがとうございました!
解決するまでがんばります!

[ツリー表示へ]