Сканер 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, есть права администратора и выполните следующие действия:
- Скачайте приложенный к этой записи файл и установите, например, в C:\Program Files\rooscan
- Запустите оснастку управления службами (Пуск – Выполнить – services.msc), в списке дважды щелкните на службе rooscan, перейдите на вкладку “Вход в систему”, убедитесь, что выбран переключатель “Вход с системной учетной записью”. Однако, если вы работаете в домене, либо к папке сохранения нужны права доступа, то выберите переключатель “С учетной записью”, укажите здесь любой локальный или доменный аккаунт с достаточными правами доступа (особенно к сетевым папкам), например, “Администратор”, введите его пароль и нажмите “OK”, чтобы сохранить настройки.
- Убедитесь, что сканер подключен и присутствует в системе. Уберите из автозагрузки программное обеспечение сканера (есть или нет – здесь вам может помочь msconfig)
- Запустите и остановите службу rooscan. Все возможные идентификаторы событий от вашего сканера добавятся в конец файла rooscan.conf
(добавление к концу файла выглядеть будет приблизительно так)
12345678910[common]outputDir=C:\Program Files\xerox\nwwia...[events]{11238AEC-9202-4F84-B327-2C5BCF75B9D4}=Нажатие кнопки Сканировать{C686DCEE-54F2-419E-9A27-2FC7F2E98F9E}=Нажатие кнопки Печатать{A1C71B34-AA59-41F7-8F5E-ADDDC3987B6A}=Нажатие кнопки PDF{A28BBADE-64B6-11D2-A231-00C04FA31809}=Device connected{143E4E83-6497-11D2-A231-00C04FA31809}=Device disconnected{B6451B34-AA59-41F7-8F5E-AD2DC3987B4C}=Scan from Windows Service... - Здесь параметрам scanEvent и pdfEvent выставьте свои значения-события, выбранные, как уже было сказано – из полученных способом выше. Если собираетесь использовать связку сканер+принтер (как ксерокс), также заполните параметры printEvent и printerName.
- Заполните остальные параметры (там даны комментарии), сохраните конфигурационный файл и запустите службу rooscan
Листинг основной части программы на C# (правда, это еще код версии 1.0, весь код есть в ссылке в комментариях):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// scan picture to network share even user wasn't already logged in Windows public partial class FormScan : Form { DeviceManager manager; Device device = null; public FormScan() { InitializeComponent(); manager = new DeviceManager(); foreach (DeviceInfo info in manager.DeviceInfos) { if (info.Type != WiaDeviceType.ScannerDeviceType) continue; device = info.Connect(); break; } manager.RegisterEvent("{11238AEC-9202-4F84-B327-2C5BCF75B9D4}", device.DeviceID); // идентификатор события можно получить в eventId manager.OnEvent += new _IDeviceManagerEvents_OnEventEventHandler(OnScanBtnPress); } private void OnScanBtnPress(string eventId, string deviceId, string itemId) { ImageFile image = (ImageFile)device.Items[1].Transfer(FormatID.wiaFormatBMP); // wiaFormatJPEG иногда все равно возвращает Bitmap image.SaveFile("~$temp.bmp"); // В моем случае изображение будет сохранено в C:\Windows\System32 System.Drawing.Image img = // преобразуем BMP в JPG System.Drawing.Image.FromFile(Environment.SystemDirectory + "\\~$temp.bmp"); img.Save(outputDir + "\\" + _fname + counter.ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); ... (удаляем ~$temp.bmp) } } |
Если у вас 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”
18.04.2011
18.05.2011
20.10.2011
21.10.2011
25.10.2011
01.03.2012
03.03.2012
просто необходимо выполнить команду regsvr32 "C:\Program Files\rooscan\wiaaut.dll" Или же, возможно, отсутствует или работает с ошибками .NET Framework. В таком случае необходимо установить/переустановить его.
16.03.2012
17.03.2012
22.03.2012
26.03.2012
30.03.2012
03.04.2012
02.05.2012
07.05.2012
13.05.2012
06.07.2012
16.08.2012
27.08.2012
23.09.2012
25.09.2012
28.09.2012
30.09.2012
22.11.2012
26.11.2012
27.11.2012
27.11.2012
28.11.2012
28.11.2012
29.11.2012
30.11.2012
06.12.2012
11.12.2012
10.01.2013
11.01.2013
12.01.2013
12.01.2013
13.01.2013
13.01.2013
14.01.2013
14.01.2013
14.01.2013
15.01.2013
16.01.2013
16.01.2013
17.01.2013
17.01.2013
17.01.2013
18.01.2013
24.01.2013
25.01.2013
29.01.2013
07.02.2013
18.04.2013
18.04.2013
23.04.2013
29.04.2013
05.05.2013
08.05.2013
26.05.2013
27.05.2013
27.05.2013
31.05.2013
15.06.2013
16.09.2013
07.11.2013
26.12.2013
04.05.2014
19.09.2014
23.01.2015
10.03.2015
04.01.2016