Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Упрощение работы со сканером

Ответить
Настройки темы
Любой язык - Упрощение работы со сканером

Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Есть сканер Epson V37 и программа EPSON Scan.

Можно ли сделать так, чтобы в контекстном меню Создать был пункт Новый скан, при выборе которого в любом месте создавался бы скан с заложенными изначально настройками???
Как это можно реализовать на основе команд TWAIN??
Как считать команды, которые настроенный EPSON Scan передает сканеру???

Отправлено: 15:07, 20-11-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Sisin:
Можно ли сделать так, чтобы в контекстном меню Создать был пункт Новый скан, при выборе которого в любом месте создавался бы скан с заложенными изначально настройками??? »
Можно попробовать.

Цитата Sisin:
Как это можно реализовать на основе команд TWAIN?? »
Без понятия. А вот на основе WIA — вполне.

Цитата Sisin:
Как считать команды, которые настроенный EPSON Scan передает сканеру??? »
Не представляю.

Посмотрите пример работы здесь: vbscript: сканирование с заданными параметрами — Коллекция скриптов и идей — Серый форум. Что скажете?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:24, 20-11-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Цитата Iska:
Что скажете? »
Спасибо, за направление...

А как в скрипте прописать правильно путь strPath2Save, чтобы скан создавался в той папке, из которой выбрали Создать - Новый скан???

Запускаю скрипт:
Код: Выделить весь код
Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

' Задаём характеристики изображения
Dim strPath2Save = "C:\MyImage.jpg"           ' Полное имя файла для сохранения
Dim strFormat = wiaFormatJPEG                 ' Формат файла — *.jpg
Dim intQuality = 85                           ' Качество jpg
Dim intDPI = 150                              ' Разрешение — 150 dpi
Dim intHorizontalSize = (210 / 25.4) * intDPI ' Размер по горизонтали — A4
Dim intVerticalSize = (297 / 25.4) * intDPI   ' Размер по вертикали — A4

Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
Set objDeviceInfos = objDeviceManager.DeviceInfos

If objDeviceInfos.Count > 0 Then
    ' Выбираем устройство для сканирования. Если оно единственное, то сие произойдёт без отображения диалога.
     Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
    ' Кроме того, зная DeviceID устройства, можно использовать иной способ подключения, например:
    'Dim objDeviceInfo
    '
    'For Each objDeviceInfo In objDeviceManager.DeviceInfos
    '    WScript.Echo objDeviceInfo.DeviceID
    '
    '    If objDeviceInfo.DeviceID = "{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000" Then
    '        Set objDevice = objDeviceInfo.Connect
    '    End If
    'Next

    If Not objDevice Is Nothing Then
        WScript.Echo objDevice.Properties.Item("Name") & " [" & objDevice.DeviceID & "]"
        WScript.Echo "Scanning..."

        With objDevice
            With .Items(1)
                ' Задаём требуемые характеристики изображения для сканирования
                With .Properties
                    .Item("6146").Value = ColorIntent             ' Цветовая модель (Current Intent)

                    ' Разрешение…
                    .Item("6147").Value = intDPI                  ' …по горизонтали (Horizontal Resolution)
                    .Item("6148").Value = intDPI                  ' …по вертикали (Vertical Resolution)

                    ' Начало области сканирования…
                    .Item("6149").Value = 0                       ' …по горизонтали (Horizontal Start Position)
                    .Item("6150").Value = 0                       ' …по вертикали (Vertical Start Position)

                    ' Размер области сканирования…
                    .Item("6151").Value = intHorizontalSize       ' …по горизонтали (Horizontal Extent)
                    .Item("6152").Value = intVerticalSize         ' …по вертикали (Vertical Extent)
                End With

                ' Инициируем начало операции сканирования
                Set objImageFile = .Transfer()

                ' Конвертируем полученное изображение
                WScript.Echo "Converting..."

                Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")

                With objImageProcess
                    With .Filters
                        .Add objImageProcess.FilterInfos("Convert").FilterID

                        With .Item(1).Properties
                            .Item("FormatID").Value = strFormat  ' Формат изображения
                            .Item("Quality").Value  = intQuality ' Качество изображения
                        End With
                    End With

                    Set objImageFile = .Apply(objImageFile)
                End With
            End With
        End With

        ' Если файл существует — предварительно удаляем его
        With WScript.CreateObject("Scripting.FileSystemObject")
            If .FileExists(strPath2Save) Then
                .DeleteFile strPath2Save
            End If
        End With

        ' Сохраняем полученное изображение
        objImageFile.SaveFile strPath2Save

        WScript.Echo "Complete."

        Set objDevice = Nothing
    Else
        WScript.Echo "Cancel scanning by user"
    End If
Else
    WScript.Echo "No connected devices"
End If

Set objDeviceManager = Nothing
Set objDeviceInfos   = Nothing

WScript.Quit 0
А в нем показывается ошибка в Dim strPath2Save = "C:\MyImage.jpg". Что не так????

Последний раз редактировалось Sisin, 20-11-2014 в 15:50.


Отправлено: 15:33, 20-11-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Sisin:
А в нем показывается ошибка в Dim strPath2Save = "C:\MyImage.jpg". Что не так???? »
В VBScript объявление переменной не может одновременно использоваться для присвоения ей значения. Т.е., должно быть отдельно объявление переменной:
Код: Выделить весь код
Dim strPath2Save
и отдельно — присвоение значения:
Код: Выделить весь код
strPath2Save = "C:\MyImage.jpg"
Цитата Sisin:
… чтобы скан создавался в той папке, из которой выбрали Создать - Новый скан??? »
Давайте попробуем.

Код WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim strBaseName
Dim iCount

Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize


If WScript.Arguments.Count = 1 Then
	strPath2Save = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		iCount = 1
		strBaseName = .GetBaseName(strPath2Save)
		
		Do
			If .FileExists(strPath2Save) Then
				iCount = iCount + 1
				strPath2Save = .BuildPath(.GetParentFolderName(strPath2Save), strBaseName & " (" & CStr(iCount) & ")." & .GetExtensionName(strPath2Save))
			Else
				Exit Do
			End If
		Loop
	End With
	
	' Задаём характеристики изображения
	strFormat         = wiaFormatJPEG         ' Формат файла — *.jpg
	intQuality        = 85                    ' Качество jpg
	intDPI            = 150                   ' Разрешение — 150 dpi
	intHorizontalSize = (210 / 25.4) * intDPI ' Размер по горизонтали — A4
	intVerticalSize   = (297 / 25.4) * intDPI ' Размер по вертикали — A4
	
	
	Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
	Set objDeviceInfos = objDeviceManager.DeviceInfos
	
	If objDeviceInfos.Count > 0 Then
		' Выбираем устройство для сканирования. Если оно единственное, то сие произойдёт без отображения диалога.
		Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
		' Кроме того, зная DeviceID устройства, можно использовать иной способ подключения, например:
		'Dim objDeviceInfo
		'
		'For Each objDeviceInfo In objDeviceManager.DeviceInfos
		'    WScript.Echo objDeviceInfo.DeviceID
		'
		'    If objDeviceInfo.DeviceID = "{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000" Then
		'        Set objDevice = objDeviceInfo.Connect
		'    End If
		'Next
		
		If Not objDevice Is Nothing Then
			With objDevice
				With .Items(1)
					' Задаём требуемые характеристики изображения для сканирования
					With .Properties
						.Item("6146").Value = ColorIntent             ' Цветовая модель (Current Intent)
						
						' Разрешение…
						.Item("6147").Value = intDPI                  ' …по горизонтали (Horizontal Resolution)
						.Item("6148").Value = intDPI                  ' …по вертикали (Vertical Resolution)
						
						' Начало области сканирования…
						.Item("6149").Value = 0                       ' …по горизонтали (Horizontal Start Position)
						.Item("6150").Value = 0                       ' …по вертикали (Vertical Start Position)
						
						' Размер области сканирования…
						.Item("6151").Value = intHorizontalSize       ' …по горизонтали (Horizontal Extent)
						.Item("6152").Value = intVerticalSize         ' …по вертикали (Vertical Extent)
					End With
					
					' Инициируем начало операции сканирования
					Set objImageFile = .Transfer()
					
					' Конвертируем полученное изображение
					Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
					
					With objImageProcess
						With .Filters
							.Add objImageProcess.FilterInfos("Convert").FilterID
							
							With .Item(1).Properties
								.Item("FormatID").Value = strFormat  ' Формат изображения
								.Item("Quality").Value  = intQuality ' Качество изображения
							End With
						End With
						
						Set objImageFile = .Apply(objImageFile)
					End With
				End With
			End With
			
			' Сохраняем полученное изображение
			objImageFile.SaveFile strPath2Save
			
			Set objDevice = Nothing
		Else
			WScript.Echo "Cancel scanning by user"
		End If
	Else
		WScript.Echo "No connected devices"
	End If
	
	Set objDeviceManager = Nothing
	Set objDeviceInfos   = Nothing
Else
	WScript.Echo "This script can not be used directly."
	WScript.Quit 1
End If

WScript.Quit 0

Сохраните его в файл с именем, например, «My preset scan.vbs».

Далее:
Скрытый текст
  1. Обязательно сделайте резервную копию раздела «HKEY_CLASSES_ROOT\.jpg».
  2. Убедитесь, что параметр по умолчанию раздела «HKEY_CLASSES_ROOT\.jpg» содержит значение «jpegfile» (добавьте/измените, если параметр отсутствует/не содержит).
  3. Создайте в разделе «HKEY_CLASSES_ROOT\.jpg» раздел «ShellNew» (если его нет).
  4. Создайте в новосозданном разделе «HKEY_CLASSES_ROOT\.jpg\ShellNew» параметр «Command» типа «REG_SZ» («Строковый параметр»). Если раздел «ShellNew» существовал — предварительно удалите всё его содержимое (я надеюсь, Вы не забыли сделать резервную копию, как указано выше?).
  5. Присвойте ему значение вида:
    Код: Выделить весь код
    "%SystemRoot%\system32\wscript.exe" "E:\Песочница\0409\My preset scan.vbs" "%1"
  6. где:
    • «%SystemRoot%\system32\wscript.exe» — путь к исполняемому файлу WSH;
    • «E:\Песочница\0409\My preset scan.vbs» — полный путь к файлу скрипта;
    • «%1» — передаваемый параметр, будет содержать путь и имя вида «Путь\Рисунок JPEG.jpg» («Рисунок JPEG» берётся из значения по умолчанию ассоциированного раздела «HKEY_CLASSES_ROOT\jpegfile», а расширение из раздела «HKEY_CLASSES_ROOT\.jpg»).

После этого можете пробовать пользоваться.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:24, 21-11-2014 | #4


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Спасибо, Iska

А можно как-нибудь сделать, чтобы в контектном меню был не "Рисунок JPEG", а "Скан"???

В программе Epson Scan есть опции настройки изображения: Повышение резкости, Удаление растра, Улучшение текста. Эти настройки можно реализовать на основе WIA команд или это просто сама программа делает???

Последний раз редактировалось Sisin, 21-11-2014 в 11:44.


Отправлено: 11:23, 21-11-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Sisin:
А можно как-нибудь сделать, чтобы в контектном меню был не "Рисунок JPEG", а "Скан"??? »
Можно.

а) Заменив значение «Рисунок JPEG» в параметре по умолчанию раздела «HKEY_CLASSES_ROOT\jpegfile» на «Скан». Естественно, все .jpg с этого момента будут именно типа «Скан». Не рекомендую.

б) Создав своё уникальное расширение, свой привязанный к этому расширению уникальный тип, приписав которому в параметре по умолчанию значение «Скан» мы также можем добиться искомого. Но это уже излишние извращения, на мой взгляд.

Цитата Sisin:
В программе Epson Scan есть опции настройки изображения: Повышение резкости, Удаление растра, Улучшение текста. Эти настройки можно реализовать на основе WIA команд или это просто сама программа делает??? »
Это делает само приложение. В WIA, конечно, есть небольшое количество фильтров, но для манипуляции именно самим изображением — масштабирование, вращение, отражение, обрезка, накладка… Теоретически, можно и самому написать фильтры в виде обработки вектора ARGB, которым может быть представлено изображение, но, как понимаете, это а) надо знать и понимать алгоритм, б) уметь перевести его на работу с вектором и в) в любом случае, скорость обработки подобного самопального фильтра на WSH будет дико удручающей.

Отправлено: 16:38, 21-11-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Упрощение работы со сканером

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Мастер работы со сканером ankerok Microsoft Windows 2000/XP 6 18-01-2012 00:33
Разное - Мастер работы со сканером в Виндовс ХР СП3 legality Microsoft Windows 2000/XP 3 02-02-2011 14:04
Разное - Мастер работы со сканером или цифровой камерой shomurod Microsoft Windows 2000/XP 1 13-04-2010 13:47
Система - Проблемы со сканером askarmuk Программное обеспечение Windows 8 16-11-2008 22:58
Права учетной записи для работы со сканером ren77 Microsoft Windows 2000/XP 1 23-05-2007 10:20




 
Переход