Функция автоматического сканирования Windows

Функция автоматического сканирования Windows

У меня довольно старый сканер Canon Pixma MP 110. Конечно, Canon не предоставляет никаких полезных драйверов (их сайт действительно отчаянный, раздражающий и бесполезный во всех отношениях) - единственное программное обеспечение, которое я нашел, это китайская версия со знаками вопроса повсюду.

Однако, если я пойду вУстройства и принтерыменеджер под Windows и щелкнуть правой кнопкой мыши по сканеру, я могу использовать интегрированный в Windows менеджер сканирования на моем родном языке. Он имеет несколько ограниченные возможности, но все равно лучше, чем куча кнопок, полных вопросительных знаков.

Я немного поискал и обнаружил, что функция, о которой я говорю, называетсяВИА.

Вот подход, правда, на чешском языке, который может показаться вам таким же, как эти вопросительные знаки звучат для меня. введите описание изображения здесь

После выбораНачать сканированиепоявляется диалоговое окно. Он работает под управлением explorer.exe, поэтому нет никаких изменений в том, что это за программа на самом деле. введите описание изображения здесь

Я хочу создать ярлык на рабочем столе, который быавтоматически начать сканирование, без моего нажатия на кнопку "Начать сканирование" и "Сканировать".

Кроме того, сканер имеет кнопку для запуска сканирования, и мой компьютер распознает ее нажатие. Когда я нажимаю ее, Windows спрашивает меня, какое приложение должно запускаться для кнопки -- однако ни одно программное обеспечение сканера не сработало, и ни одно не появилось в списке, который Windows предлагает мне. Мне было интересно, смогу ли я взломать это, чтобы запуститьлюбое приложение для этой кнопки. (это было бы полезно, если бы я когда-нибудь получил ответ на основной вопрос).

введите описание изображения здесь

Итак, еще раз вопросы, если вам лень читать этот длинный пост:

  1. Как заставить Windows автоматически запускать сканирование с установленного сканера с помощью пакетного скрипта или простой команды в .lnkфайле?
  2. (необязательно) Как назначить любое приложение на нажатие кнопки сканера?

решение1

Решение 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, если вы ранее изменили формат изображения

Использованные ресурсы

решение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"

Связанный контент