Цитата 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».
Далее:
Скрытый текст
- Обязательно сделайте резервную копию раздела «HKEY_CLASSES_ROOT\.jpg».
- Убедитесь, что параметр по умолчанию раздела «HKEY_CLASSES_ROOT\.jpg» содержит значение «jpegfile» (добавьте/измените, если параметр отсутствует/не содержит).
- Создайте в разделе «HKEY_CLASSES_ROOT\.jpg» раздел «ShellNew» (если его нет).
- Создайте в новосозданном разделе «HKEY_CLASSES_ROOT\.jpg\ShellNew» параметр «Command» типа «REG_SZ» («Строковый параметр»). Если раздел «ShellNew» существовал — предварительно удалите всё его содержимое (я надеюсь, Вы не забыли сделать резервную копию, как указано выше?).
- Присвойте ему значение вида:
Код:

"%SystemRoot%\system32\wscript.exe" "E:\Песочница\0409\My preset scan.vbs" "%1"
- где:
- «%SystemRoot%\system32\wscript.exe» — путь к исполняемому файлу WSH;
- «E:\Песочница\0409\My preset scan.vbs» — полный путь к файлу скрипта;
- «%1» — передаваемый параметр, будет содержать путь и имя вида «Путь\Рисунок JPEG.jpg» («Рисунок JPEG» берётся из значения по умолчанию ассоциированного раздела «HKEY_CLASSES_ROOT\jpegfile», а расширение из раздела «HKEY_CLASSES_ROOT\.jpg»).
После этого можете пробовать пользоваться.