Сканирование по сети с автоподачей

30 марта 2011 г.

В данной статье я расскажу как можно реализовать сканирование по сети с помощью МФУ в поточном режиме с автоподачей бумаги. Для этого я использовал программу для написания скриптов Autoit и PsExec программу для удаленного запуска exe и других команд.

Передо мной стояла задача организовать сканирование по сети, т.к. в данной компании купили по ошибке не тот МФУ (нужен был с планшетным сканированием), а взяли с поточным только, то пришлось выкручиваться. Итак для начала я скачал Autoit отсюда. После установки запускаем SciTE4AutoIt3 и начинаем собственно писать скрипт:

Скриншот кода


Код с комментариями:

Run ("wiaacmgr.exe") //запускаем мастер работы со сканером
WinWait ( "Мастер работы", "Этот мастер помогает скопировать изображения") // winwait приостанавливаем работу скрипта пока не появится окно с заголовком содержащим текст Мастер работы, и внутренним содержаним текста Этот мастер помогает скопировать изображения
WinSetState ( "Мастер работы", "", @SW_MINIMIZE ) // минимизируем окно с заголовком Мастер работы
ControlSend ( "Мастер работы", "Этот мастер помогает скопировать изображения", "Button2", "{ENTER}" ) // программно нажимаем на объект Button2 с помощью {ENTER} на клавиатуре в окне с соответствующим заголовком и текстом.
WinWait ( "Мастер работы", "Тип изображения")
ControlSend ( "Мастер работы", "Тип изображения", "Button2", "{SPACE}" )
ControlSend ( "Мастер работы", "Тип изображения", "Button9", "{ENTER}" )
WinWait ( "Мастер работы", "Введите")
ControlSend ( "Мастер работы", "Введите", "Button9", "{ENTER}" )
if WinWait ( "Мастер работы", "Что вы желаете сделать")=True Then // обрабатываем ситуацию когда в МФУ забыли вставить бумагу для сканирования
ControlSend ( "Мастер работы", "Что вы желаете сделать","Button12", "{ENTER}" )
WinWait ( "Мастер работы", "Скопировано")
ControlSend ( "Мастер работы", "Скопировано","Button13", "{ENTER}" )
Else
WinWait ( "Мастер работы", "&Повторить попытку")
Send ("{TAB}" )
Send ("{ENTER}" )
WinWait ( "Мастер работы", "Ошибка не позволила")
ControlSend ( "Мастер работы", "Ошибка не позволила", "Button10", "{ENTER}" )
EndIf
Exit 0

При написании кода вам понадобится такая утилита от Autoit под названием Autoit Window Info

 Autoit Window Info

При отключении режима Freeze в меню Autoit Window Info, программа начинает считывать данные об объектах на которые ты наведешь мышью, на скриншоте видно что при наведении на цифру 9 на калькуляторе на вкладке Controls, ClassnameNN — Button14, это то, что нам надо как раз при написании скрипта.
Таким образом мы можешь контролировать окна по содержанию текста и заголовкам и перемещаться и выбирать нужные нам действия программым нажатием. У команды ControlSend есть так же масса других способов действий над выбраным объектом, я пользовался только примитивными Enter и Space (для выбора Checkbox).
После компилирования скрипта я благополучно проверил его на Windows 2003 server к которому был подсоединен МФУ HP LaserJet M1319F MFP.После запуска скрипта быстро промелькивало окно с мастером сканирования и начиналось сканирование документов, снимки сохранялись в первоначалоно заданной папке на жестком диске, который был расшарен по сети.
Теперь этот скрипт надо было как то запустить с рабочей станции пользователя, в этом мне помогла программа PsExec от создателя Марка Руссиновича, взятая отсюда. После чтения мануала по ней, я написал небольшой батник который упростил мне жизнь.
Код батника:
@echo off
PsExec.exe -u 10.254.254.101\Администратор -p password \\10.254.254.101 -i 0 -d D:\sc.exe
exit

И так кратко по ключам, первые два думаю объяснять не стоит, ключ -i запускает программу в сессии номер который вы укажете, 0- текущая сессия админа, ну и ключ -d путь до запускаемого приложения на удаленном пк. У пользователя на рабочем столе в итоге отображался файлик scan.bat и скрытый рядом лежал PsExec.exe
Вот собственно и все после запуска с рабочего стола файла scan.bat быстро промелькивало консольное окошко и через сек 5 начиналось сканирование на МФУ, после чего все снимки забирались с расшареной папки по сети.
Думаю можно доработать этот скрипт еще для проверки события когда сканер не обнаружен в компе, потому что бывало такое когда сканер на сервере отваливался и приходилось потом после жалоб пользователя заходить на сервер и убивать кучу процессов скрипта и закрывать сообщения об ошибке от мастера сканирования.
Ниже выкладываю ссылки на готовые материалы описываемые в статье:

Теги: рубрика Программирование
  • Похожие статьи
  • Предыдущие из рубрики