自動 Windows 掃描功能

自動 Windows 掃描功能

我有一台相當舊的佳能掃描儀Pixma MP 110。問號的中文版本。

但是,如果我去設備和印表機Windows 下的管理器並右鍵單擊掃描儀,我可以使用以我的母語顯示的 Windows 整合掃描管理器。它的功能有些有限,但仍然比一堆充滿問號的按鈕要好。

我搜尋了一下,發現我所謂的功能叫做威亞

這是捷克語的方法,對你來說可能聽起來像這些問號對我來說聽起來一樣。 在此輸入影像描述

選擇後開始掃描出現一個對話框。它在 下運行explorer.exe,因此無需更改即可查明它實際上是什麼程式。 在此輸入影像描述

我想要的是製作一個桌面快捷方式自動開始掃描,無需我點擊“開始掃描“ 和 ”掃描」。

此外,掃描器有一個開始掃描的按鈕,按下該按鈕時我的電腦會辨識。當我按下它時,Windows 會詢問我應該為該按鈕運行什麼應用程式 - 然而,這裡沒有任何掃描器軟體可以工作,Windows 給我的選擇中也沒有出現任何掃描器軟體。我想知道我是否可以破解它來運行該按鈕的任何應用程式。 (如果我得到主要問題的答案,這將很有用)。

在此輸入影像描述

如果您懶得閱讀那篇長篇文章,那麼問題再次出現:

  1. 如何使用批次腳本或.lnk檔案中的簡單指令讓 Windows 自動從已安裝的掃描器開始掃描?
  2. (可選)如何將任何應用程式指派給掃描器的按鈕按下?

答案1

PowerShell解決方案

該腳本應該適用於大多數掃描儀,無論是佳能、愛普生還是其他任何掃描儀,只要它們與 WIA 相容並支援該transfer()命令。該腳本將立即開始掃描。檔案名稱、路徑或影像格式等所有選項均已透過腳本設定。您只需使用快捷方式開始掃描過程

  1. 將其另存為例如D:\StartScan.ps1
  2. 建立一個新的快捷方式並將其指向

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

開始掃描.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 value”變更為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”,有人已經解決了自動化問題。專家用戶等級。

製作一個 vb 腳本來啟動對話框非常容易,但是(據我所知,以我有限的知識)(a)WIA 需要主機來處理掃描的圖像,因此您所做的任何事情都需要接收和存儲圖像(不僅僅是啟動對話框)並且; (b) WIA 對話方塊似乎沒有「無人值守」模式。

為您提供的資源:威亞自動化

和一個啟動 wia 的 vbs 腳本(建立一個名為 eg 的文字檔案launchWia.vbs):

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

可以使用批次檔運行:

cscript launchWia.vbs
pause

可以透過快捷方式運作。

同樣,這可能不會為你帶來任何好處,因為它不處理圖像。有關處理影像處理的範例,請參閱 MSDN 文件。

答案4

掃描.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"

相關內容