Имя пользователя:
Пароль:
 

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

Ветеран


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

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


Цитата magnum888:
а нужно чтобы файл получал следующий порядковый номер. »
Цитата magnum888:
И было бы отлично, если скрипт определял наличие папки в папке, то есть находясь в "Z:\Отсканированные документы\" он создавал папку с сегодняшним числом, а если папка уже создана, просто сканировал бы документы сразу в неё. »
Мы сделаем иначе. Создание папки лежит на совести пользователя. Файлы получают имена по шаблону «ScanImage_YYYYMMDDHHMMSS.jpg»:
читать дальше »
Код: Выделить весь код
Option Explicit

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


Dim objFSO

Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

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


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

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strPath2Save) Then
	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)
		
		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
			
			' Сохраняем полученное изображение
			objImageFile.SaveFile objFSO.BuildPath(strPath2Save, "ScanImage_" & FormatLocalDateTime() & ".jpg")
			
			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
Else
	WScript.Echo "Папка для сохранения результатов сканирования [" & strPath2Save & "] не найдена."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function FormatLocalDateTime()
	Dim objSWbemObjectEx
	
	For Each objSWbemObjectEx In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT LocalDateTime FROM Win32_OperatingSystem")
		FormatLocalDateTime = Left(objSWbemObjectEx.LocalDateTime, 8 + 6)
		
		Exit For
	Next
End Function
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:25, 31-03-2014 | #2