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

Показать сообщение отдельно

Ветеран


Сообщения: 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