(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Как научить сканеры сканировать молча по кнопкам без окон и костылей?

Источник: habrahabr
Alexufo

Как заставить сканеры вообще (речь пойдет про Canoscan LIDE 210) молчаливо по кнопке сканировать файл с нужными параметрами в требуемую папку?

image

По-моему, это самая распространенная задача и для ее решения производитель нам дает самые нераспространенные решения.
В следующих версиях производители ну наверняка добавят в свой софт что-то вроде "отправить скан в facebook" или "поделиться в Twitter" но чтобы сделать тихий режим, настроить раз и сканировать без каких либо окон… до этого мы не доживем.

В конце статьи готовая утилита, позволяющая производить сканирование с любой кнопки любого сканера в любую папку без какого либо проявления на экране. А теперь начнем с того, каким же образом это удалось реализовать…
=================================================================
Статья в процессе обновления. Кое что требует дополнения и изменения. 11.11.2013
Утилиту пока используйте cmdtwain
=================================================================

Без родного софта, кнопки Canoscan LIDE 210 работать не хотят. А с родным - вызывают жуткое негодование. Невозможно сканировать по кнопкам без открытия родного приложения. Поменять бы софт, да нету ничего. Секретаршам приходится смотреть на кошек из-за этого на 5% больше времени, может быть поэтому они так популярны?(кошки)). Я сталкивался с этой проблемой три года назад в предыдущей модели сканера, я столкнулся с этой проблемой сегодня. Я читал комментарии многих людей выбешенных этой проблемой.

У нас есть в офисе паспортный сканер формата А5 Plusteck 550, он правда раза в три дороже, но его софт умеет молча с кнопок делать то, что указано в их настройках. Слава богу, что почти все сканнеры давно и поголовно поддерживают стандарты TWAIN и WIA. Это значит, что в семействе windows они должны работать без своего софта и вообще без установки каких либо драйверов производителя.

Можем снести при желании весь стандартный софт. Мы будем работать через собственное безоконное приложение через WIA (качайте CmdTwain или в конце статьи наша утилита).

Она написана на c# из-за количества готовых примеров. Работает очень просто:

  • По старту ищет первый сканер в системе
  • Сохраняет скан в директорию, указанной в параметре.
  • Позволяет назначить себя на кнопку

С двумя первыми пунктами понятно, а третий мы как раз рассмотрим в этой статье. С рабочего стола утилита работает отлично. Но нам нужно добиться, чтобы она вызывалась по кнопке со сканера. Лучше всего ее поместить каким-то образом вот в это окно:

image

Сказать честно, информации об этом довольно мало, гугл не открыл мне Америки как и msdn. Я возможно плохо искал. Есть несколько источников (привет icopy), но они не рабочие… Но каким то образом производитель Canon (в данном случае приложения "MP Navigator EX 4.0", а на скриншоте выше "Photoshop") умудрился это сделать и мы попробуем узнать как.

Поиск решения


Все нужные записи хранятся в реестре и для поиска изменений мы воспользуемся приложением Regshot (http://sourceforge.net/projects/regshot/)
Сделаем снимок реестра до установки MP Navigator EX 4.0 и после, а результат сравнения сохраним в html файл для анализа.

Я не буду приводить весь лог, который мы получили. Из него для нас оказалось интересным два ключа в реестре.

Способ 1.

HKLM\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\

Данная ветка отвечает за сканеры и вебкамеры. Она содержит в себе в виде папок ваши USB подключения устройств съема изображений.
Если устройство подключается на какой либо USB порт первый раз, создается папка со следующим порядковым номером и вложенной иерархией присущей подключаемому типу устройства. У разных сканеров по разному могут называться разделы.

image

При подключении Canoscan LIDE 210 создалась директория 0014 с двумя подпапками DeviceData и Events. Если ваш сканнер поддерживает 5 кнопок, в папке Events вы увидите каждую из них даже с описанием действия в значениях ключей. (однако не все так логично, об этом ниже)

Если вы подключили сканер первый раз по этому USB, то в разделах PushButtonPushed у вас будет пусто. В противном случае вы обнаружите папки с именами в виде GUID и ключами с описанием привязанного программного обеспечения, ссылки на исполняемый файл тп.
Эта папка есть назначенное событие через виндовый интерфейс в свойствах сканера. Удалите папки GIUD ключами, сбросится привязка. Удалять их можно без проблем.

А вот удалять сами папки 0014 ни в коем случае нельзя. Они не восстанавливаются даже при накате офиц драйверов и с wia больше работать не будут. Проверено

image

Именно эту папку вы можете повторить самостоятельно изменив GUID раздела и путь к исполняемому файлу. Логика подобия здесь работает. Только GUID придумайте уникальный.

Примерно так:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0014\Events\PushButtonPushed1\{9927FCDF-2047-4571-B318-762646A98111}] "Name"="Notepad salo" "Desc"="Notepad" "Icon"="sti.dll,0" "Cmdline"="C:\\Project1.exe /StiDevice:%1 /StiEvent:%2"

image

Изменения в систему вступят в силу после переподключения USB разъема.

Project1.exe приложение выводящие параметры %1 и %2
Теперь мы можем полюбоваться, что в окне привязки событий к кнопкам появилось наше тестовое приложение:

wia

Однако, мне не понятен тот факт, что хоть в реестре мы создали папку с путем до запуска нашего приложения, в корне родителя которого указано "Кнопка для посылки по емейл" в виндовом окне привязки кнопок наше приложение доступно по другому событию. Почему так… я до конца не выяснил.

По нажатию на кнопку сканера мы видим наше консольное приложение выводящее параметры. Ура.
wia

Способ 2

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\StillImage\Events\STIProxyEvent\

STIProxyEvent

Какие то Прокси Эвенты?
Раздел, созданный в этой директории, позволяет глобально быть доступным вашему приложению в свойствах сканирования для привязки к кнопкам. Он позволяет назначать событие на текущий подключенный сканер через виндовый интерфейс.

В первом случае вы должны будете сами догадаться на какой папке (0014 в нашем случае) висит ваш сканер.

Достаточно записи в этом разделе, и ваше приложение будет доступно для всех событий, а при привязки WIA драйвер сделает копию из STIProxyEvent к нужной кнопке сканера.

Чтобы изменения вступили в силу, требуется перезагрузка.(поменяли путь к приложению? Аналогично - перезагрузка.) Или рестарт службы WIA.

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\StillImage\Events\STIProxyEvent\{9927FCDF-2047-4571-B318-762646A98111}] "Name"="" "Desc"="" "Icon"="sti.dll,0" "Cmdline"=" C:\\twia\\WIATest.exe C:\\scans"

image

Как вы видите на картинке выше, мы можем повесить на любую клавишу нашу утилиту, которая прекрасно отрабатывает.

Назначение события - это просто копия директории из STIProxyEvent в соотвествующую папку PushButtonPushed описанной в первом случае.

Итого.

  • Вы должны понимать, что при смене USB разъема на другой, вам придется повторять привязку событий к кнопкам. Это не недоработка, это так работает даже и у официальных продуктов. Поменял разъем - настрой кнопки.
  • Ветка реестра STIProxyEvent нужна только как мастер. В момент назначения кнопкам приложений WIA копирует раздел с ветки EventProxy в нужную папку события кнопки сканера.
  • В свойствах сканирования, в событиях, выпадающий список с приложениями для привязки к кнопкам сканера строится из 2-х веток, с STIProxyEvent и всех папок PushButtonPushed находящихся в родительской директории.
  • Настройки яркости, dpi и прочего настраивать через утилиту не нужно. Она пользуется профилем по умолчанию, который настраивается тут.

image

Наверное, это все. С другими сканерами думаю будет все аналогично ибо - wia. Удалять стандартный софт не обязательно.
И еще, дублировать ветки реестра для 64 битных систем нет необходимости. Они каким то образом сами это делают - удобно)

Приятно, когда такую неразбериху, можно так аккуратно разрулить.

Утилита (win7-64 и win 8-64):
Открыть с помощью архиватора(7zip и др.) картинку или переименовать в zip

Установка

Пока не доступно для скачивания. Есть бага.

UPDATE. 08.11.13

1) Canon mp280 по отзывам изначально как-то криво работает через мастер изображений. Сканирует только 1/4 формата А4 при прописанном жестко где только можно формате А4. Соответственно и утилита наша сканирует 1/4.

Читателем статьи и обладателем данного аппарата было предложено решение повторить идею через VBscript компилируемым в exe. pastebin.com/ce5d8yFi

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 23.12.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Business Standard (corporate)
Microsoft 365 Apps for business (corporate)
Microsoft Windows Professional 10, Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерные книги. Рецензии и отзывы
3D и виртуальная реальность. Все о Macromedia Flash MX.
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100