- PVSM.RU - https://www.pvsm.ru -
Как заставить сканеры вообще (речь пойдет про Canoscan LIDE 210) молчаливо сканировать файл с нужными параметрами в требуемую папку?

По-моему, это самая распространенная задача и для ее решения производитель нам дает самые нераспространенные решения.
Я уверен, что в следующих версиях производители добавят в свой софт что-то вроде «отправить скан в facebook» или «поделиться в Twitter» но чтобы сделать тихий режим, настроить раз и сканировать без каких либо окон, не… это слишком не востребовано.
Без родного софта, кнопки нашего сканера Canoscan LIDE 210 никак не хотят работать. А с родным софтом кнопки вызывают негодование. Поменять бы софт, да нету ничего. Секретаршам приходится смотреть на кошек из-за этого на 5% больше времени, может быть поэтому они так популярны?(кошки)). Я сталкивался с этой проблемой три года назад в предыдущей модели сканера, я столкнулся с этой проблемой сегодня. Я читал комментарии многих людей выбешенных этой проблемой, но кажется… им теперь можно вздохнуть спокойно как и мне как и ему.
На сегодняшний день сканер Canoscan LIDE 210 кажется хорошим выбором по своим характеристикам… некоторые интернет магазины в одноименном разделе в лидерах показывают именно его. Однако, цена немного выше собратьев. Работа от USB удобная вещь, и совсем не плохая скорость работы. Из минусов: плохая глубина резкости CIS матрицы на толстых книжках (в местах переплета возможно мыло, но кому оно сейчас нужно?). Софт.
У нас есть в офисе паспортный сканер формата А5 Plusteck 550, он правда раза в три дороже, но его софт умеет молча с кнопок делать то, что указано в их настройках. Слава богу, что почти все сканнеры давно и поголовно поддерживают стандарты TWAIN и WIA. Это значит, что в семействе windows они должны работать без своего софта и вообще без установки каких либо драйверов производителя.
Можем снести при желании весь стандартный софт. Мы будем работать через собственное безоконное приложение через WIA (кто не хочет делать свое, качайте CmdTwain [1] или в конце статьи наша утилита).
Утилита написана на c# из-за количества готовых примеров. По старту ищет первый сканер в системе и просит сохранить скан в директорию (передается параметром). Утилита работает отлично. Но нам нужно поместить свое приложение каким-то образом вот в это окно:

Это самый праведный способ.
Сказать честно, информации об этом довольно мало, гугл не открыл мне Америки как и msdn. Я возможно плохо искал. Есть несколько источников (привет icopy), но они не рабочие… Но каким то образом производитель Canon (в данном случае приложения «MP Navigator EX 4.0», а на скриншоте выше «Photoshop») умудрился это сделать и мы попробуем узнать как.
Все нужные записи хранятся в реестре и для поиска изменений мы воспользуемся приложением Regshot (http://sourceforge.net/projects/regshot/ [2])
Сделаем снимок реестра до установки MP Navigator EX 4.0 и после, а результат сравнения сохраним в html файл для анализа.
Я не буду приводить весь лог, который мы получили. Из него для нас оказалось интересным два ключа в реестре. Начну с менее интересного способа.
HKLMSYSTEMCurrentControlSetControlClass{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}
Данная ветка содержит в себе в виде папок ваши USB подключения устройств съема изображений (веб-камеры, сканеры и пр). Если устройство подключается на какой либо USB порт первый раз, создается папка со следующим порядковым номером и вложенной иерархией присущей подключаемому типу устройства.

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

Именно эту папку вы можете повторить самостоятельно изменив GUID раздела и путь к исполняемому файлу.
Давайте попробуем:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}014EventsPushButtonPushed1{9927FCDF-2047-4571-B318-762646A98111}]
"Name"="Notepad salo"
"Desc"="Notepad"
"Icon"="sti.dll,0"
"Cmdline"="C:\Project1.exe /StiDevice:%1 /StiEvent:%2"

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

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

Этот способ работает сразу после переподключения USB как я уже писал, но вы должны понимать, что при смене USB разъема на другой, вам придется повторять ваши действия. Ваши изменения привязаны к конкретному USB разъему.
Ровно по этому, я считаю это хоть и вполне рабочем вариантом из-за простоты привязки к каждой кнопке своего приложения или ярлыка с параметрами какого-либо приложения ( CmdTwain способ для тех кто не кодит), но это не универсально и не true.
Для разработчиков скорее будет вызывать интерес этот раздел. Он более логичен и правилен.
HKEY_LOCAL_MACHINESYSTEMControlSet001ControlStillImageEventsSTIProxyEvent

Какие то Прокси Эвенты? Именно!
Раздел, созданный в этой директории, позволяет глобально быть доступным вашему приложению в окне выбора привязки событий на кнопки сканера. На сквозь.
Достаточно записи в этом разделе, и ваше приложение будет доступно для всех событий, а WIA драйвер сам передаст вашему приложению в виде двух параметров с какого устройства идет запрос и с какой кнопки. ( Вроде так))
Это работает глобально не зависимо от места USB подключения. Минус только один — чтобы изменения вступили в силу, требуется перезагрузка.(поменяли путь к приложению? Аналогично — перезагрузка.)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMControlSet001ControlStillImageEventsSTIProxyEvent{9927FCDF-2047-4571-B318-762646A98111}]
"Name"=""
"Desc"=""
"Icon"="sti.dll,0"
"Cmdline"=" C:\twia\WIATest.exe C:\scans"
Но я знаю, что есть какой то способ и без перезагрузки. Photoshop умеет это делать. (удаляем его ключ, ребут, в привязке событий на кнопки пусто, запускаем фотошоп, привязки появляются без перезагрузки, с создаваемым нами ключом так не проходит)
Рецепта реинициализации данной ветки для системы я не знаю. Потому просто перезагружаемся:

Выпадающий список с приложениями для привязки к кнопкам сканера строится из этих 2-х веток (скорее всего есть еще какие то ветки, но меня они не заинтересовали).
Утилита для вызова сканирования через WIA пользуется профилем по умолчанию, который настраивается тут.

Наверное, это все. С другими сканерами думаю будет все аналогично ибо — wia. Удалять стандартный софт не обязательно.
И еще, дублировать ветки реестра для 64 битных систем нет необходимости. Они каким то образом сами это делают — удобно)
Приятно, когда такую неразбериху, можно так аккуратно разрулить.
Утилита (win7-64 и win 8-64):
Открыть с помощью архиватора(7zip и др.) картинку или переименовать в zip
Автор: Alexufo
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/obrabotka-izobrazhenij/47671
Ссылки в тексте:
[1] CmdTwain: http://www.gssezisoft.com/main/product/cmdtwain/
[2] http://sourceforge.net/projects/regshot/: http://sourceforge.net/projects/regshot/
[3] Источник: http://habrahabr.ru/post/200528/
Нажмите здесь для печати.