web-dev-qa-db-ja.com

Windowsスキャン機能の自動化

私はかなり古いCanonスキャナーPixma MP 110を持っています。もちろん、Canonは便利なドライバーを提供していません(彼らのサイトは本当に絶望的で、イライラし、まったく役に立たないです)-私が見つけた唯一のソフトウェアどこにでも疑問符が付いた中国語版です。

ただし、Windowsで デバイスとプリンター マネージャーに移動し、スキャナーを右クリックすると、母国語のWindows統合スキャンマネージャーを使用できます。機能は多少制限されていますが、疑問符でいっぱいのボタンの束よりも優れています。

少し調べてみると、私が話している機能は [〜#〜] wia [〜#〜] と呼ばれていることがわかりました。

これがアプローチですが、チェコ語では、これらの疑問符が私に聞こえるように聞こえるかもしれません。 enter image description here

スキャン開始を選択するとダイアログが表示されます。 Explorer.exeで実行されるため、実際のプログラムを確認するのに変更はありません。 enter image description here

私が欲しいのは、デスクトップショートカットを作成することです。これにより、「スキャンの開始」をクリックせずに自動的にスキャンを開始します。 "スキャン"。

また、スキャナーにはスキャンを開始するボタンがあり、コンピューターはそれが押されたことを認識します。それを押すと、Windowsはボタンに対してどのアプリケーションを実行する必要があるかを尋ねてきますが、ここではスキャナーソフトウェアは機能せず、Windowsが選択したものにも何も表示されませんでした。これをハックしてそのボタンの任意のアプリケーションを実行できるかどうか疑問に思いました。 (これは、最初の質問に対する回答が得られた場合に役立ちます)。

enter image description here

それで、あなたがその長い投稿を読むのが面倒だった場合、もう一度質問します:

  1. バッチスクリプトまたは.lnkファイルの簡単なコマンドを使用して、インストールされているスキャナーからWindowsにスキャンを自動的に開始させるにはどうすればよいですか?
  2. (オプション)スキャナーのボタン押下にアプリケーションを割り当てるにはどうすればよいですか?

PowerShellソリューション

スクリプトは、Canon、Epson、またはWIA互換であり、transfer()コマンドをサポートしている限り、ほとんどのスキャナーで機能するはずです。スクリプトはすぐにスキャンを開始します。ファイル名、パス、画像形式などのすべてのオプションは、スクリプトを介してすでに設定されています。ショートカットを使用してスキャンプロセスを開始する必要があります

  1. 例として保存します_D:\StartScan.ps1_
  2. 新しいショートカットを作成し、それをポイントします

    _%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "D:\StartScan.ps1"
    _

StartScan.ps1

_# Create object to access the scanner
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()

# Create object to access the scanned image later
$imageProcess = new-object -ComObject WIA.ImageProcess

# Store file format GUID strings
$wiaFormatBMP  = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatPNG  = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatGIF  = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"

# Scan the image from scanner as BMP
foreach ($item in $device.Items) {
    $image = $item.Transfer() 
}

# set type to JPEG and quality/compression level
$imageProcess.Filters.Add($imageProcess.FilterInfos.Item("Convert").FilterID)
$imageProcess.Filters.Item(1).Properties.Item("FormatID").Value = $wiaFormatJPEG
$imageProcess.Filters.Item(1).Properties.Item("Quality").Value = 5
$image = $imageProcess.Apply($image)

# Build filepath from desktop path and filename 'Scan 0'
$filename = "$([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"

# If a file named 'Scan 0' already exists, increment the index as long as needed
$index = 0
while (test-path ($filename -f $index)) {[void](++$index)}
$filename = $filename -f $index

# Save image to 'C:\Users\<username>\Desktop\Scan {x}'
$image.SaveFile($filename)

# Show image 
& $filename
_

カスタマイズ

  • 別の画像形式が必要な場合は、Item("FormatID").Value = $wiaFormatJPEGを_$wiaFormatPNG_(またはTIFF、BMP、GIF)に変更してください
  • 別の出力パスが必要な場合は、$([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"を変更してください。以前に画像形式を変更したことがある場合は、拡張子_.jpg_を変更します

使用済みリソース

1
nixda

プログラムはWindowsファックスとスキャンです。 enter image description here

[新規スキャン]をクリックすると、投稿したウィンドウが表示されます。 enter image description here

0
user291737

これは、stackoverflowでより適切に提供される可能性があります。タグ「WIA」を検索すると、自動化に取り組んだ人がいます。エキスパートユーザーレベル。

ダイアログを起動するためのvbscriptを作成するのは簡単ですが、(私の限られた知識で知る限り)(a)WIAはスキャンされた画像を処理するためにホストを必要とするため、画像を受信して​​保存する必要があります(単にダイアログを起動するだけではありません)そして; (b)WIAダイアログに「無人」モードが表示されない。

あなたのためのリソース: WIA Automation

そして、wiaを起動するvbsスクリプト(例:launchWia.vbsという名前のテキストファイルを作成します):

set oDlg = CreateObject("WIA.CommonDialog")
oDlg.ShowAcquireImage()

バッチファイルを使用して実行できます。

cscript launchWia.vbs
pause

これはショートカットを介して実行できます。

繰り返しますが、これは画像を処理しないため、おそらく何も得られません。画像処理を扱うサンプルについては、MSDNドキュメントを参照してください。

0
horatio

scan.vbs

Set CommonDialog = CreateObject("WIA.CommonDialog")
Set DeviceManager = CreateObject("WIA.DeviceManager")

' List all Available Devices by Name and DeviceID
' The following example shows how to list all available Deviceices by name and DeviceID. 
Dim i, n 'As Integer
n = DeviceManager.DeviceInfos.Count
WScript.Echo "Number of Deviceice found = " & n
For i = 1 to DeviceManager.DeviceInfos.Count
  WScript.Echo " Device " & i & ":" & vbTab & DeviceManager.DeviceInfos(i).Properties("Name").Value & vbTab & "(" & DeviceManager.DeviceInfos(i).DeviceID & ")"
Next

Set DevInfo = DeviceManager.DeviceInfos(1)
Set Device = DevInfo.Connect

Device.Items(1).Properties("6146").Value = 2 'colors
Device.Items(1).Properties("6147").Value = 600 'dots per inch/horizontal
Device.Items(1).Properties("6148").Value = 600 'dots per inch/vertical
Device.Items(1).Properties("6149").Value = 0 'x point where to start scan
Device.Items(1).Properties("6150").Value = 0 'y point where to start scan
Device.Items(1).Properties("6151").Value = 5100 'horizontal exent DPI x inches wide
Device.Items(1).Properties("6152").Value = 7002 'vertical extent DPI x inches tall
Device.Items(1).Properties("4104").Value = 8 'bits per pixel

'Device.Items(1).Properties("3098").Value = 1700 'page width
'Device.Items(1).Properties("3099").Value = 2196 'page height

Set img = CommonDialog.ShowTransfer(Device.Items(1), "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}", true)

img.SaveFile "F:/image.bmp"

実行"C:/Windows/System32/cscript.exe" //X "F:/scan.vbs"

0
Sergey L