Автоматическое сканирование в сетевую папку с кнопки на МФУ

    Добрый день.
    Очень давно была такая статья как реализовать автоматическое сканирование при нажатии кнопки на сканере, но то ли у меня руки кривые, то ли нежелание детально разбираться, но подвиг автора я повторить не смог. И всё же решил реализовать эту идею по нескольким причинам:
    — не отвлекать оператора за АРМ, к которому подключено МФУ;
    — ускорить процесс получения электронных копий за счет автоподатчика листов и двухстороннего сканирования.

    Итак, имеем: МФУ Canon imageRUNNER 1133А подключено по USB к компьютеру под управлением ОС Windows 7. Сеть имеет доменное управление, есть отдельный компьютер с файлохранилищем.

    1. В вышеназванной статье ищем ссылку на программу автора
    Замечание: Первоначально у автора было задействовано 3 кнопки (по файлу config.ini и scan.js это видно). Поэтому в исходниках со строки 31 файла scan.js добавляем еще одно условие. Вот кусок кода, который у меня получился:
    switch (param2) //Запускаем приложения при получении нужных параметров
      {
        case get_ini_value("config.ini", "scan1_flag"):
          wsh = new ActiveXObject("WScript.Shell");
          wsh.Run(get_ini_value("config.ini", "scan1_app"),6);
          break;
        case get_ini_value("config.ini", "scan2_flag"):
          wsh = new ActiveXObject("WScript.Shell");
          wsh.Run(get_ini_value("config.ini", "scan2_app"),6);
          break;
        case get_ini_value("config.ini", "scan3_flag"):
          wsh = new ActiveXObject("WScript.Shell");
          wsh.Run(get_ini_value("config.ini", "scan3_app"),6);
          break;
    	case get_ini_value("config.ini", "scan4_flag"):
          wsh = new ActiveXObject("WScript.Shell");
          wsh.Run(get_ini_value("config.ini", "scan4_app"),6);
          break;
        default:
          write_log(get_ini_value("config.ini", "logfile"), "No valid parameters\n" + objArgs);
      }
    

    Как компилировать у автора написано.

    2. Логинимся администратором и распаковываем архив в C:\ProgramData\scan и даем полный доступ группе Domain Users (или какой-то другой) на эту директорию. В принципе из архива нужны только два файла config.ini и scan.js.

    3. В консоле администратора выполняем
    C:\ProgramData\scan\scan -reg
    

    4. Перезагружаем ПК

    5. Логинимся администратором и запускаем regedit. Исправляем в реестре путь к scan.exe на полный в следующих местах:
    — В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\Handlers\WIA_{FC36F676-4675-4CC9-B705-3AC86F456214} ключ InitCmdline
    — В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\StillImage\Registered Applications ключ Value
    — 5.3 в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StillImage\Events\STIProxyEvent\{FC36F676-4675-4CC9-B705-3AC86F456214} ключ Cmdline

    Например было scan.exe
    А станет c:\ProgramData\scan\scan.exe

    Как прописать свою программу для сканирования честно подглядел у подглядел в блоге iCopy

    6. Перезагружаем ПК, логинемся администратором

    7. Открываем «Устройства и Принтеры», правой клавишей мыши на МФУ, выбираем «Свойства сканирования», в открывшемся окне переходим на вкладку «События», где выбираем на каждое событие действие запустить ScanApp

    8. В файле конфига c:\ProgramData\scan\config.ini опицию debugflag исправляем на true, чтоб велся лог-файл

    9. Переводим МФУ в режим сканирования, выбираем опцию, записываем ID_Event для каждого профиля сканирования

    10. Исправляем config.ini под свои нужды
    Вот мой:
    [debug]
    debugflag=true
    logfile=debug.log
    
    [flags]
    scan1_flag=/StiEvent:{2A6CE1DC-C3E2-4ECF-8540-41F9197DDB86};
    scan2_flag=/StiEvent:{030E4709-6263-4278-93B4-33C15644841A};
    scan3_flag=/StiEvent:{6336E0AE-81A7-4B8A-9A63-156788D9AF9C};
    scan4_flag=/StiEvent:{2BC72F52-CE02-42BC-A843-609A9FCEA15D};
    
    [applications]
    scan1_app=c:\ProgramData\scan\scan_col.cmd
    scan2_app=c:\ProgramData\scan\scan_bw.cmd
    scan3_app=c:\ProgramData\scan\scan_bw_150.cmd
    scan4_app=rem резерв

    11. Еще нам понадобится утилита, которая позволит запускать полностью скрытые консольные процессы hidcon. Взять можно здесь. Их архива достаем hidcon-x64.exe или hidcon-x32.exe, копируем в C:\ProgramData\scan и для краткости переименовываем в hidcon.exe

    12. Как и автор той статьи для сканирования я использовал iCopy. Архив с программой распаковал в C:\ProgramData\scan. Рекомендую перед сканированием запустить программу с графическим интерфейсом и отладить требуемые режимы.

    13. Листинг каждого cmd-файла для определенного действия (кодировка Windows 1251)
    rem scan_col.cmd
    rem меняем кодировку 
    chcp 1251
    rem получаем дату_время
    set now=%TIME:~0,-3%
    set now=%now::=%
    set now=%now: =0%
    set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%
    rem сетевая шара
    set dt=\\server\scan
    c:\ProgramData\scan\hidcon.exe "c:\ProgramData\scan\iCopy.exe /file /path %dt%\%now%.jpg /adf /duplex /r 300"

    rem scan_bw.cmd
    rem меняем кодировку 
    chcp 1251
    rem получаем дату_время
    set now=%TIME:~0,-3%
    set now=%now::=%
    set now=%now: =0%
    set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%
    rem сетевая шара
    set dt=\\server\scan
    c:\ProgramData\scan\hidcon.exe "c:\ProgramData\scan\iCopy.exe /file /path %dt%\%now%.jpg /adf /duplex /gray /r 300"

    rem scan_bw_150.cmd
    rem меняем кодировку 
    chcp 1251
    rem получаем дату_время
    set now=%TIME:~0,-3%
    set now=%now::=%
    set now=%now: =0%
    set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%
    rem сетевая шара
    set dt=\\server\scan
    c:\ProgramData\scan\hidcon.exe "c:\ProgramData\scan\iCopy.exe /file /path %dt%\%now%.jpg /adf /duplex /gray /r 150"

    14. На той машине, которая предоставляет шару для сканирования (в моём случае ОС Windows), в планировщик добавляем такое задание: каждый день в 21:00 выполнять scan_move.cmd (кодировка OEM 866)
    rem scan_move.cmd
    rem сетевая шара, вид со стороны файлохранилища
    set dt=d:\scan
    rem файлы перемещаем в Архив
    move /y %dt%\*.jpg %dt%\Архив
    rem в Архиве файлы старше 7-ми дней удаляем
    forfiles /p %dt%\Архив /d -7 /c "CMD /c del /Q @FILE"

    Возле МФУ повесили:


    UPD 5.05.2014: Обнаружилось неудобство — сканирование не происходит, если никто не залогинется локально.
    Поделиться публикацией

    Комментарии 10

      0
      Еще такое писал habrahabr.ru/post/200528/
        0
        Кстати, можно не перезагружать комп, а перезапустить службу wia.
        +1
        Последние годы на работе закупаем МФУ Kyocera, очень довольны. Помимо всего прочего, есть сканирование в FTP/Samba папку, автоподатчик тоже есть. Но каждая страница сканируется в виде отдельного файла, в настройках можно выбрать между JPEG и PDF. Однако, многостраничные документы логично «сканировать» в виде одного файла с поддержкой многостраничности, например, TIFF. К тому же, в конторе принято регламентом в 1С такие документы подкреплять исключительно в формате DJVU. Видя, как народ постоянно «слепляет» эти страницы в DJVU я решил написать скрипт, который мониторит папку сетевого сканирования и слепляет страницы в единый DJVU-файл. Если сейчас этот скрипт отключить, контора, думаю, встанет :)
          0
          Это смотря какое МФУ Kyocera, в 1135 при сканировании с автоподатчика все страницы складываются в один PDF
            0
            как выдавать страницы пофайлово или в одном большом задается в настройках МФУ. Справедливо почти для всех МФУ от киосеры. Хотя, обычно, там как раз пакуется в один большой файл.
              0
              Так или иначе, в DJVU из коробки, требуемый нашим клеркам, не может. К тому же, где-то на местах есть самые обычные сканеры, их интересы тоже учтены. В итоге получилось что-то типа универсального FTP-сервера-конвертера с примерно такой инструкцией: «Закинь сюда несколько JPG-файлов с именами xxx_001.jpg, xxx_002.jpg,…, понажимай F5, забери готовый xxx.djvu». А Киосера эту процедуру делает автоматически.
            0
            С автоматическим сканированием нужно быть осторожными, иначе можно стать жертвой патентных троллей. Вот хабрапост на эту тему.
              0
              Слава богу в России пока такой маразм пока не возможен, т.к. судебные издержки несет проигравшая сторона.
                0
                Почему-то вспомнилась шутка про Apple, запатентовавшая подтормаживание интерфейса.
                0
                У себя на работе (Windows XP и Canon MF3200) сделал на базе rooscan

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое