自动 Windows 扫描功能

自动 Windows 扫描功能

我有一台相当老款的佳能扫描仪 Pixma MP 110。当然,佳能不提供任何有用的驱动程序(他们的网站真的很令人失望,完全令人沮丧和无用)——我找到的唯一软件是一个到处都是问号的中文版。

然而,如果我去设备和打印机在 Windows 下打开管理器并右键单击扫描仪,我可能会使用以我的母语编写的 Windows 集成扫描管理器。它的功能有些有限,但仍然比一堆充满问号的按钮要好。

我搜索了一下,发现我谈论的功能叫做威亚

但是这是用捷克语表示的方法,对您来说可能听起来就像我听到的这些问号一样。 在此处输入图片描述

选择后开始扫描出现一个对话框。它在 下运行explorer.exe,因此无法确定它实际上是什么程序。 在此处输入图片描述

我想要的是创建一个桌面快捷方式,这样自动开始扫描,无需我点击“开始扫描“ 和 ”扫描“。

此外,扫描仪有一个按钮可以开始扫描,我的电脑可以识别按下按钮的时间。当我按下按钮时,Windows 会询问我应该为该按钮运行什么应用程序——但是,这里没有扫描仪软件可以工作,Windows 给我的选项中也没有出现任何扫描仪软件。我想知道我是否可以破解它来运行该按钮的任何应用程序.(如果我能得到主要问题的答案,那将会很有用)。

在此处输入图片描述

如果你懒得读那篇长文的话,我再问你一遍:

  1. 如何让 Windows 使用批处理脚本或.lnk文件中的简单命令自动从已安装的扫描仪开始扫描?
  2. (可选)如何将任何应用程序分配给扫描仪的按钮按下?

答案1

PowerShell 解决方案

该脚本应该适用于大多数扫描仪,无论是佳能、爱普生还是其他品牌,只要它们兼容 WIA 并支持该transfer()命令即可。脚本将立即开始扫描。所有选项(如文件名、路径或图像格式)都已通过脚本设置。您只需使用快捷方式启动扫描过程

  1. 另存为例如D:\StartScan.ps1
  2. 创建新的快捷方式并将其指向

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "D:\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为(或 TIFF、BMP、GIF)$wiaFormatPNG
  • $([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"如果需要其他输出路径,请进行更改。.jpg如果之前更改过图像格式,请更改扩展名

使用的资源

答案2

这是我正在使用的 ps 脚本,我从这个线程中的一个答案中复制了它,并对其进行了修改,以便与另一个进纸器一起使用,如果您不使用玻璃进纸器,您可以通过将“prop 值”更改为 0 1 2 来修改进纸器。此脚本不会在扫描后显示图像,而只会保存它。

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

# Set the scanner source to the feeder
foreach ($prop in $device.Properties) {
    if ($prop.Name -eq "Document Handling Select") {
        $prop.Value = 1
    }
}

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

# Store file format GUID strings
$wiaFormatJPEG = "{B96B3CAE-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 C:\scan path and filename 'Scan 0'
$filename = "C:\scan\Scan {0}.pdf"

# 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:\scan\Scan {x}'
$image.SaveFile($filename)

答案3

这可能在 stackoverflow 上更适用。搜索标签“WIA”,会发现有人已经解决了自动化问题。专家级用户。

编写一个 vbscript 来启动对话框非常简单,但是(据我有限的知识所知)(a)WIA 需要主机来处理扫描的图像,因此您所做的任何事情都需要接收和存储图像(而不仅仅是启动对话框);(b)WIA 对话框似乎没有“无人值守”模式。

为您提供的资源:WIA自动化

还有一个用于启动 wia 的 vbs 脚本(创建一个名为例如的文本文件launchWia.vbs):

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

可以使用批处理文件运行:

cscript launchWia.vbs
pause

可以通过快捷方式运行。

再次强调,由于它不处理图像,因此可能不会给您带来任何帮助。请参阅 MSDN 文档以获取处理图像的示例。

答案4

扫描工具

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"

相关内容