У меня довольно старый сканер Canon Pixma MP 110. Конечно, Canon не предоставляет никаких полезных драйверов (их сайт действительно отчаянный, раздражающий и бесполезный во всех отношениях) - единственное программное обеспечение, которое я нашел, это китайская версия со знаками вопроса повсюду.
Однако, если я пойду вУстройства и принтерыменеджер под Windows и щелкнуть правой кнопкой мыши по сканеру, я могу использовать интегрированный в Windows менеджер сканирования на моем родном языке. Он имеет несколько ограниченные возможности, но все равно лучше, чем куча кнопок, полных вопросительных знаков.
Я немного поискал и обнаружил, что функция, о которой я говорю, называетсяВИА.
Вот подход, правда, на чешском языке, который может показаться вам таким же, как эти вопросительные знаки звучат для меня.
После выбораНачать сканированиепоявляется диалоговое окно. Он работает под управлением explorer.exe
, поэтому нет никаких изменений в том, что это за программа на самом деле.
Я хочу создать ярлык на рабочем столе, который быавтоматически начать сканирование, без моего нажатия на кнопку "Начать сканирование" и "Сканировать".
Кроме того, сканер имеет кнопку для запуска сканирования, и мой компьютер распознает ее нажатие. Когда я нажимаю ее, Windows спрашивает меня, какое приложение должно запускаться для кнопки -- однако ни одно программное обеспечение сканера не сработало, и ни одно не появилось в списке, который Windows предлагает мне. Мне было интересно, смогу ли я взломать это, чтобы запуститьлюбое приложение для этой кнопки. (это было бы полезно, если бы я когда-нибудь получил ответ на основной вопрос).
Итак, еще раз вопросы, если вам лень читать этот длинный пост:
- Как заставить Windows автоматически запускать сканирование с установленного сканера с помощью пакетного скрипта или простой команды в
.lnk
файле? - (необязательно) Как назначить любое приложение на нажатие кнопки сканера?
решение1
Решение PowerShell
Скрипт должен работать с большинством сканеров, независимо от того, Canon это, Epson или что-то еще, если они совместимы с WIA и поддерживают команду transfer()
. Скрипт начнет сканирование немедленно. Все параметры, такие как имя файла, путь или формат изображения, уже установлены через скрипт. Вам просто нужно запустить процесс сканирования с помощью ярлыка
- Сохраните его как например
D:\StartScan.ps1
Создайте новый ярлык и укажите его
%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
, если вы ранее изменили формат изображения
Использованные ресурсы
- 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, который я использую. Я скопировал его из одного из ответов в этой теме и изменил его для работы с другим устройством подачи. Если вы не используете стеклянное устройство подачи, вы можете изменить устройство подачи, изменив «значение свойства» на 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 для запуска диалога очень просто, но (насколько мне известно с моими ограниченными знаниями) (а) WIA требует хоста для обработки отсканированного изображения, поэтому все, что вам нужно будет сделать, это получить и сохранить изображение (а не просто запустить диалог) и (б) диалог WIA, похоже, не имеет «автоматического» режима.
Ресурс для вас:Автоматизация WIA
И скрипт vbs для запуска wia (создайте текстовый файл с именем 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"