Перехват нажатия кнопки на сканере из NT-службы

Сканер HP G2710, точнее его ПО, не могло по нажатию кнопки отправлять изображение в общую сетевую папку, если пользователь не был залогинен в Windows (XP). Также сканирование “без вопросов, без окошек” требовалось для того, чтобы не отвлекать сотрудника, к чьему компьютеру был подключен сканер.

Скачать программу rooscan
версия 3.5 (06.02.13) | 1.2 Мб | stable

Программа rooscan представляет из себя NT-службу Windows XP и предназначена для перехвата нажатия кнопок сканера. Отсканированный файл будет сохранен в указанной папке (например, на сетевом ресурсе) в JPG или PDF-формате. Ведет краткий лог. Листинг основной части программы на C# приведен чуть ниже.
Перед запуском rooscan убедитесь, что у вас установлен .NET Framework 2.0, есть права администратора и выполните следующие действия:

  1. Скачайте приложенный к этой записи файл и установите, например, в C:\Program Files\rooscan
  2. Запустите оснастку управления службами (Пуск – Выполнить – services.msc), в списке дважды щелкните на службе rooscan, перейдите на вкладку “Вход в систему”, убедитесь, что выбран переключатель “Вход с системной учетной записью”. Однако, если вы работаете в домене, либо к папке сохранения нужны права доступа, то выберите переключатель “С учетной записью”, укажите здесь любой локальный или доменный аккаунт с достаточными правами доступа (особенно к сетевым папкам), например, “Администратор”, введите его пароль и нажмите “OK”, чтобы сохранить настройки.
  3. Убедитесь, что сканер подключен и присутствует в системе. Уберите из автозагрузки программное обеспечение сканера (есть или нет – здесь вам может помочь msconfig)
  4. Запустите и остановите службу rooscan. Все возможные идентификаторы событий от вашего сканера добавятся в конец файла rooscan.conf
    (добавление к концу файла выглядеть будет приблизительно так)
  5. Здесь параметрам scanEvent и pdfEvent выставьте свои значения-события, выбранные, как уже было сказано – из полученных способом выше. Если собираетесь использовать связку сканер+принтер (как ксерокс), также заполните параметры printEvent и printerName.
  6. Заполните остальные параметры (там даны комментарии), сохраните конфигурационный файл и запустите службу rooscan

Листинг основной части программы на C# (правда, это еще код версии 1.0, весь код есть в ссылке в комментариях):

Если у вас ADF (automatic document feeder, устройство автоматической подачи документов) можете дополнительно использовать библиотеку adfwia
Для тестирования взаимодействия кода с WIA установил виртуальный сканер Microsoft “WIA Sample MicroDriver Scanner Device”: файлы testmcro.dll и testmcro.inf находятся внутри установочного файла по ссылке выше (собрал при помощи XP DDK).
Для удаления старой версии службы достаточно выполнить – sc delete rooscan)
UPD. Если при запуске службы появляется “Ошибка 1053: Служба не ответила на запрос своевременно”, выполните
regsvr32 “C:\Program Files\rooscan\wiaaut.dll”

Discussion

Guest
18.04.2011
Вариант решения подобной задачи: http://habrahabr.ru/blogs/sysadm/116362 UPD: Переложил файл scan.7z
nobody
18.05.2011
Иногда бывает после перезапуска сканирует, а файл не появляется. Тогда надо удалить файл $temp.bmp или $temp.jpg из папки Windows\System32
Zorg
20.10.2011
мФУ HP MF2727 - в rooscan.conf появляются только события device connected :( и родное по не поддерживает сканирование через кнопку
Владимир
21.10.2011
Пробую сделать как у вас, пока без службы, просто из приложения. Никак не получается побороть одну проблему - сканирует только после первого нажатия кнопки. Следующее нажатие уже не приходит в OnScanBtnPress. Помогает только выключение/включение сканера, но опять срабатывает только один раз. Причем если в OnScanBtnPress оставить только MsgBox, то он появится столько раз, сколько нажата кнопка. А если раскоментить device.Items[1].Transfer, то как я сказал, после первого сканирования событие совсем не срабатывает. Буду рад любой помощи ;-)
Uchla
25.10.2011
Следовательно, у вас загружен виндовой обработчик (перехватчик) сканирования (.Transfer), который у меня, естественно еще не мог загрузиться (до логина ведь). Это 99% - разные hpmgr.exe, hpcpmmgr.exe и тп, которые являются родным софтом сканера - из памяти поубивайте. Главное, что драйвера загружены и все.
И на всякий случай еще - панель управления - "Сканеры и камеры" - в свойствах сканера "Ничего не предпринимать" выставляли?

Напишите мне на E-mail
Dmitry
01.03.2012
Ваш софт скачал, запустил, на кнопки не реагирует. подозреваю что нужно изменить параметры scanEvent и pdfEventесли да, то как узнать мне мои?
Uchla
03.03.2012
Переписал пост с объяснением, как узнавать свои значения нажатия кнопок сканера (пункт №4). Если будет такая ошибка:

просто необходимо выполнить команду regsvr32 "C:\Program Files\rooscan\wiaaut.dll" Или же, возможно, отсутствует или работает с ошибками .NET Framework. В таком случае необходимо установить/переустановить его.
Юрий
16.03.2012
Подскажите, пожалуйста что писать в printerName, если принтер сетевой? В панели управления он подключен как "Kyocera FS-3900DN KX на BRANDMANAGER"(windows XP)
Uchla
17.03.2012
В подобном случае можете сделать так printerName=\\BRANDMANAGER\Kyocera FS-3900DN KX (\\имя_компьютера_с_принтером\ИМЯ_ПРИНТЕРА) Сетевой принтер должен присутствовать в списке панели управления, то есть нельзя, не добавив его в вашу систему, указать его в конфиге и начать печатать на него. Если что-то не будет получаться, можете подключить этот сетевой принтер как "псевдолокальный" (через "Standard TCP/IP Port")
Евгений
22.03.2012
не могли бы выложить код проекта на c# целиком?
Uchla
26.03.2012
Проект C# для Visual Studio 2008: rooscan2code.cab
shvonder
30.03.2012
версия beta нормально работает на HP Officejet 6500 в rooscan.conf добавились такие строки: [events] {03A5651B-EAE9-4D35-974D-B97C0B5A04FE}=Scan button press {AAE3EE1B-F11B-4D1F-8C64-0B53220451B4}=Scan Film button press
Uchla
03.04.2012
Сейчас дописываю функцию печати на указанный в конфиге принтер. Такую функцию (сканер "А" -> принтер "Б") реализует программа iCopy (написана на visual basic, тоже использует dotNET+WIA). главное отличие, что rooscan изначально поддерживает все свои возможности и до логина в Windows
Антон
02.05.2012
Спасибо большое! есть небольшое уточнение: уникальный счетчик не проверяет наличие файла с уже имеющимся именем в папке для записи. В следствие чего сканируемый файл остается здесь - C:\WINDOWS\system32\$temp.jpg, и параметр counter не обновляется в файле rooscan.conf. А при следующем сканировании, файл $temp.jpg заменяется на новый, и так до бесконечности - решается установкой в файле rooscan.conf значения counter вручную Сканер Epson V100 Photo
Uchla
07.05.2012
Спасибо, в том числе за предложения по E-mail, учтем, сделаем
Алексей
13.05.2012
Сканер Brother DCP-130C, полет нормальный. спасибо
Москва
06.07.2012
ЗДорово работает, спасибо..! раньше сканер пока разогревался ждали и ждали, сейчас начинает сразу сканировать через секунду после нажатияq
Виктор
16.08.2012
Здравствуйте! Программа работает вполне исправно с Canon ir1810, но сканирует он почему-то форматом не А4, а только совсем небольшой кусок - около 10*15. Где настройки поправить, если поможет..?
Виктор
27.08.2012
Низкий поклон и большое спасибо! =) В новой версии заработало как по маслу!
976
23.09.2012
ЗдравствуйтеУ вас сохранилась предыдущая версия?
Uchla
25.09.2012
Да, добавил ссылку в конце статьи
976
28.09.2012
Спасибо! У меня нет кнопки pdf,поэтому в printername я поставил Bullzip PDF Printer,это виртуальный принтер,должен печатать в pdf-файл. Сканирует,но не печатает :( Что можно сделать?
Uchla
30.09.2012
Поставьте галочку "Разрешить взаимодействие с рабочим столом" в свойствах службы rooscan
Uchla
22.11.2012
1. Пробовали переустановить .NET Framework? 2. Пробовали выполнить regsvr32 "C:\Program Files\rooscan\wiaaut.dll" ? 3. Из автозагрузки удалили родное ПО сканера? 4. Как вариант удалите новую версию и попробуйте старую rooscanSetup_2.0.exe
Павел
26.11.2012
Добрый день. Установил программу, но служба не запускается. Ни с доменной, ни с локальной учётной записью "Администратор". При запуске выдает «Ошибка 1053: Служба не ответила на запрос своевременно»
Павел
27.11.2012
Прошу меня простить за лишнее беспокойство, но сейчас всё в порядке. Попробовал установить в другую папку и всё заработало (служба стартует). Можно ещё такой вопрос: компьютер в домене и чтобы получить доступ к папкам нужно авторизоваться. Попробовал сделать запуск службы от имени пользователя, т.е. примерно так: domain\User, но в этом случае служба не стартует. Доступ на сервер к папкам сделать не могу (я там не админ). Что можно придумать не знаю...
Uchla
27.11.2012
В таком случае вы можете внести свою доменную учетную запись в локальную группу "Администраторы":
Павел
28.11.2012
Всё заработало! (через net localgroup /Администраторы DOMAIN\User) Вам спасибо! Отличная прога! Альтернатив реально нет. Правда был один рецепт на хабре, но чтоб он заработал, нужны танцы с бубном. Но проги чтобы поставил и забыл - только здесь нашел. Единственное, что огорчило, при таком запуске сканер не сканирует, если кто-то не залогинится в систему - т.е. комп ждёт приглашения Ctrl+Alt+Delete и после ввода пароля можно сканировать.
Павел
28.11.2012
UPD: Удалось победить: создал bat-файл с запуском службы и добавил это в назначенные задания. Теперь всё работает.
Павел
29.11.2012
Все сканеры победил - теперь всё сканируется автоматом. Единственное не победил МФУ "Kyocera FS-1116MFP": в списке events есть только device connected и disconnected. ОС Windows XP SP3 В свойствах сканера нет вкладки "события". Скорее всего это особенность сканера, однако на самом сканере есть кнопка "Scan to PC". В чём там может быть причина? в самом драйвере производителя или в аппарате?
Uchla
30.11.2012
К сожалению, драйверы Kyocera FS-1116MFP не поддерживают WIA; поддерживают только TWAIN
xhid
06.12.2012
линукс+сканер+принтер+scanbuttond: habrahabr.ru/post/161579
Guest
11.12.2012
Для сканирования по сети используйте BlindScanner
Escabar
10.01.2013
Добрый день. Хотелось бы узнать, как можно сканировать через twain, без открывающихся окон? Заранее спасибо.
Uchla
11.01.2013
Здравствуйте, rooscan не использует TWAIN - использует только WIA. Если у вас все работает, но появляются диалоговые окна, то, возможно, у вас дополнительно какое-либо ПО обрабатывает нажатие кнопок сканера. Вам все эти программы необходимо предварительно отключить. Сколько у вас пунктов в списке "Сканеры и камеры" Панели управления, помимо "Добавления устройства"? Также прикрепите скриншоты открывающихся окон.
АЛЕКСЕЙ
12.01.2013
Здравствуйте, помогите пожалуйста решить проблемку. Невозможно запустить службу из командной строки или из отладчика. Сначала требуется установить службу Windows (c помощью installutil.exe), а затем её следует запустить, использую программу ServerExplorer, средство администрирования служб Windows или команду .NET START. Сканер - WIA Canon MF3200 Series. NET Framework переустанавливал
Uchla
12.01.2013
Если выдает "Cannot start service the command line or a debugger. A Windows Service must first be installed (using installutil.exe) and then started with the ServerExplorer, Windows Services Administrative tool or the NET Start command." то это значит, что rooscan не установился. Очень похоже, что вы запустили установку rooscan до того, как установили .NET framework. Если вы переустанавливали dotnetfx, то, надеюсь, он у вас переустановился корректно. Теперь снова запускайте скачанный с этой страницы дистрибутив rooscan и пробуйте его установить в пустую папку.
АЛЕКСЕЙ
13.01.2013
На другом компьютере пробовал с другим сканером.NET framework. уже был установлен. Выходит такая же ошибка. В диспетчере служб rooscan появляется. Windows ХР SP3
Uchla
13.01.2013
Гм, у меня такое впечатление что rooscan при установке находит какой-то неверный путь расположения dotNET - и, как следствие, не происходит установки rooscan. Попробуйте вручную выполнить установку, запустите cmd.exe и дайте в нем команду: C:\WINDOWS\Microsoft.NET\Framework\vЗДЕСЬ_ВАШИ_ЦИФРЫ\InstallUtil.exe "C:\Program Files\rooscan.exe" Полученный вывод, пожалуйста, скопируйте и вставьте сюда (чтобы скопировать из cmd.exe, нажмите в нем Alt+Пробел, в появившемся меню выберите "Пометить", выделите текст результата команды в этом черном окошке и нажмите Enter (текст окажется в буфере обмена). Запустите службу.
АЛЕКСЕЙ
14.01.2013
Выполнил то что вы написали: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe "C:\Program Files\rooscan\rooscan.exe" Началась установка, но затем выдал: На этапе установки возникло исключение.System.ComponentModel.Win32Exception: Указанная служба уже существует Затем откат и всё.
АЛЕКСЕЙ
14.01.2013
Попробовал установить предыдущую версию программы rooscan 2.0. Вроде всё установилось, но при нажатии кнопки на принтере он работает буквально 1 секунду и возвращается на исходную. При этом на компьютере ничего не происходит и изображение ни где не появляется. Кстати где должно появиться изображение?
Uchla
14.01.2013
Здесь могу посоветовать только одно. Выполните команду "C:\Program Files\rooscan\rooscan.exe" uninstall перезагрузитесь и снова попробуйте установить третью версию.
Uchla
15.01.2013
Вы отключили все другие программы, работающие со сканером? Например, ПО сканера, которое запускается вместе с операционной системой. Сколько у вас пунктов в списке "Сканеры и камеры" Панели управления, помимо "Добавления устройства"? Зайдите здесь в свойства своего сканера и отключите перехват всех событий средствами Windows. >Изображение должно появиться в той папке, которую вы укажете в файле rooscan.conf (вы его редактировали?)
АЛЕКСЕЙ
16.01.2013
Да вы правы моя ошибка была в том, что я не указал папку сохранения файла. Версия программы 3.4 также заработала. Изначально я подумал, что скан должен сохраняться в общих документах. Сейчас правда возникло новое затруднение: сканируется только маленький квадрат 5х5 см. Что за параметры ещё в файле rooscan.conf по мимо кнопок сканера и папки сохранения? С программированием раньше не сталкивался из-за этого столько вопросов, извините.
Uchla
16.01.2013
Такой случай уже встречался в комментариях выше Раскомментируйте (удалите символы ";" перед) параметры x.top = 0 y.top = 0 hExt=8,5 vExt=11 Также можете попробовать изменять параметры hExt и vExt, сообщите мне потом - меняется ли размер вашего квадрата 5х5
АЛЕКСЕЙ
17.01.2013
Да проблема была в ";". Удалил, заработало, правда для сканирования полностью страницы изменил параметр vExt=11 на vExt=11,5. При больших значениях служба не запускалась. Я так понимаю это координаты сканируемой области. Но ещё одна закавыка образовалась: скан - чёрно-белый. Как сделать его цветным?
Uchla
17.01.2013
У вас на сканере только одна кнопка "Сканировать"? Нет кнопок "Цветное сканирование" и "Черно-белое сканирование"?
АЛЕКСЕЙ
17.01.2013
Кнопка одна. Была такая же проблема при сканировании через программу iCopy. Дак там пришлось в настройках поменять значение: Force Bit Depth for Color Mode c Авто на 24.
Uchla
18.01.2013
Угу, в версии 3.5 объясню вам как сканировать в цвете, пришлите мне ваш E-mail сюда (проверим до выкладывания версии)
Павел
24.01.2013
Добрый день. Прошу прощения, что не в тему. Как победить уход сканера в ждущий режим? Т.е. всё сканируется на ура, но задержка между стартом скана первой страницы до 30-40 секунд. Это не критично, но хотелось бы быстрее... Скорее всего это прописано в драйвере сканера и никак не победить. Если у кого-то были подобные проблемы, то напишите как вы их победили. Заранее благодарен.
Uchla
25.01.2013
1. Какая модель сканера? 2. Какая ОС? 3. Родное ПО отключили? И в Панели управления? 4. Под "ждущим режимом" подразумевается остывание лампы и последующий разогрев или какой-то специальный режим? Через сколько минут сканер уходит в такой режим? З.Ы. У HP 2710 родное ПО тоже все время первую страницу забирало через полминуты, но rooscan все время держит сканер "на связи": [csharp]device = info.Connect();[/csharp] поэтому типичный отклик - 2-3 секунды
АЛЕКСЕЙ
29.01.2013
Отправил на ваш адрес письмо со своей почты для тестирования версии 3.5
АЛЕКСЕЙ
07.02.2013
В версии 3.5 появилась возможность выбора: цветное или чёрно-белое сканирование. С версией 3.4 была также проблема: служба не запускалась автоматически при перезагрузке винды. В версии 3.5 всё заработало: цветное сканирование, запуск службы автоматически при перезагрузке винды. Хотелось бы еще отметить, что ошибка "Ошибка 1053: Служба не ответила на запрос своевременно" может возникнуть при неправильно настроенных параметрах:; HorizontalExtent; VerticalExtent Автору программы респект и огромное спасибо за помощь в настройке!!
Eugene
18.04.2013
У меня сканер Canon mf3200. Мне удалось добиться чтобы сканер начал сканировать, но у меня тоже такая же проблема, он сканирует только небольшой участок и почему-то в черно-белом цвете. Пробовал все написанные варианты на сайте, и еще экспериментировал подставлять разные значения, но все равно нечего не помогло. Эти две проблемы так и остались.
Uchla
18.04.2013
Раскомментируйте (уберите точку с запятой) параметр verboseLog в конфигурационном файле и после нескольких сканирований пришлите на мой e-mail файлы rooscan.log и rooscan.conf
Uchla
23.04.2013
Расскомментируйте следующие параметры и дайте им значения: 6147 = 100 6148 = 100 6146 = 1 6149 = 0 6150 = 0 6151 = 850 6152 = 1150
Eugene
29.04.2013
Ура, одна проблема решена! Я все сделал как вы написали, в результате сканирует весь участок, но к сожалению по прежнему в черно-белом цвете.
Uchla
05.05.2013
Вам необходимо добавить параметр 4104=24 в конфигурационный файл и затем запустить rooscan. Вместо 24 (это шестнадцать миллионов цветов) можете поставить 32 (не уверен, однако, необходимо ли вам столько цветов). Засканировало в цвете? Можете обратно заккоментировать параметр verboseLog
Eugene
08.05.2013
Все заработало! Я разобрался, пришлось много раз сканировать и подобрать для себя настройки. Как оказалось когда я выставляю параметры 6147 и 6148 (HorizontalResolution и VerticalResolution) в 150 DPI, в результате сканирует небольшой участок листа в увеличенном размере 150 dpi. Поэтому я поменял параметры 6151 = 1255, 6152 = 1750. Теперь у меня стало сканировать весь лист А4 размером в 150 dpi как я и хотел. Но качество фото еще было мутноватое, поэтому я изменил параметр JPGQuality = 82. Ура, в результате я добился того качества которое хотел. Спасибо.
Борис
26.05.2013
Для цветного сканирования нужно выставлять дополнительно константу 4104
Борис
27.05.2013
Ситуация такая: требуется сканировать в папку, которая доступна по сети. Доступ к папке осуществляется с гостевой учеткой, но создаваемый файл не имеет прав на доступа для Гостя. Как можно решить эту проблему?
Uchla
27.05.2013
Посмотрите конфиг внимательно еще раз ;-)
Привет-ИЗ-Америки
31.05.2013
При установке на Windows 7/8 возникает ошибка:"Ошибка регистрации OCX C:\Program Files\rooscan\wiaaut.dll" Служба rooscan не создается. RegSrv32 не помогает Установку запускаю от имени Администратора.
Uchla
15.06.2013
Да, известно... надо под семерку установщик доделать, как-нибудь засяду за VS10 и установщик в Program Files (x86)
Гость
16.09.2013
Спасибо за отличную программу. ps HP 4670
AleX
07.11.2013
habrahabr.ru/post/200528/
AleX
26.12.2013
Добрый день. Принтер Canon i-sensys mf 4150. Как то пришел добрый дядя в офис и установил эту утилитку, после чего начали просить: а сделай так что бы сканировало в цвете, а сделай так, что бы нижней кромки лишней небыло (захватывало при скане чуть больше А4)
lightoze
04.05.2014
Прочитав «без окон», уже было надеялся увидеть инструкции для Linux =)
Rs-1
19.09.2014
Добрый день, интересует отправка сканов с кнопки на фтп, а также со всеми сканерами дружит ваша программа? Заранее спасибо
Igor
23.01.2015
Приветствую! Все работает отлично - картинки ложит на сетевой ресурс. Но обратил внимание, что еще и сохраняется копия в windows\temp - есть ли возможность в конфиге указать, что не сохранять копию (временный файл)? Благодарю!
Денис
10.03.2015
Привет! Что нужно сделать для работы  ADF под Windows 7? В описании есть ссылка на библиотеку adfwia. И еще - описание констант в wia_constants.txt соответствует v1 библиотеки wia? И все ли константы реально можно переопределить?
Дмитрий
04.01.2016
Отличная софтина, запускается даже на win2012 server, но есть пожелание - возможность сохранения файла с именем формата yyyy/mm/dd - hh/mm/ss (добавить поддержку шаблона в конфиг). Так же есть проблема - после простоя компьютера (hyperv winxp x86, проброс с хоста мфу через usb redirector ), при попытке сканирования по кнопке в логах появляются записи: 04.01.2016 8:25:46> Transferring... 04.01.2016 8:25:55> Transferring... 04.01.2016 8:25:59> Transferring... 04.01.2016 8:25:59> Transferring... 04.01.2016 8:25:59> Transferring... 04.01.2016 8:26:00> Transferring... Само собой, сканирования не происходит. Перезапуск rooscan помогает. В системных логах пусто.

Викторка җавап калдыру Җавап язудан баш тарту



All fields are required. Your email address will not be published.