我有一台相當舊的佳能掃描儀Pixma MP 110。問號的中文版本。
但是,如果我去設備和印表機Windows 下的管理器並右鍵單擊掃描儀,我可以使用以我的母語顯示的 Windows 整合掃描管理器。它的功能有些有限,但仍然比一堆充滿問號的按鈕要好。
我搜尋了一下,發現我所謂的功能叫做威亞。
這是捷克語的方法,對你來說可能聽起來像這些問號對我來說聽起來一樣。
選擇後開始掃描出現一個對話框。它在 下運行explorer.exe
,因此無需更改即可查明它實際上是什麼程式。
我想要的是製作一個桌面快捷方式自動開始掃描,無需我點擊“開始掃描“ 和 ”掃描」。
此外,掃描器有一個開始掃描的按鈕,按下該按鈕時我的電腦會辨識。當我按下它時,Windows 會詢問我應該為該按鈕運行什麼應用程式 - 然而,這裡沒有任何掃描器軟體可以工作,Windows 給我的選擇中也沒有出現任何掃描器軟體。我想知道我是否可以破解它來運行該按鈕的任何應用程式。 (如果我得到主要問題的答案,這將很有用)。
如果您懶得閱讀那篇長篇文章,那麼問題再次出現:
- 如何使用批次腳本或
.lnk
檔案中的簡單指令讓 Windows 自動從已安裝的掃描器開始掃描? - (可選)如何將任何應用程式指派給掃描器的按鈕按下?
答案1
PowerShell解決方案
該腳本應該適用於大多數掃描儀,無論是佳能、愛普生還是其他任何掃描儀,只要它們與 WIA 相容並支援該transfer()
命令。該腳本將立即開始掃描。檔案名稱、路徑或影像格式等所有選項均已透過腳本設定。您只需使用快捷方式開始掃描過程
- 將其另存為例如
D:\StartScan.ps1
建立一個新的快捷方式並將其指向
%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
如果您之前曾更改過圖像格式,請更改擴展名
使用的資源
- http://www.da5is.com/2013/09/08/quick-powershell-to-scan-to-evernote/
- http://msdn.microsoft.com/en-us/library/ms630814(v=vs.85).aspx
- http://ardalis.com/powershell-control-over-nikon-d3000-camera
- http://msdn.microsoft.com/en-us/library/windows/desktop/ms630806(v=vs.85).aspx
- http://deletethis.net/dave/?uri=http%3A%2F%2Fcerealnumber.livejournal.com%2F47638.html
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms630810(v=vs.85).aspx
- https://stackoverflow.com/a/28422467/935614
- https://msdn.microsoft.com/en-us/library/ms630819(v=vs.85).aspx#FilterSharedSample016
答案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"