Как пользоваться сканером epson perfection v10
Перед приобретением Epson Perfection V10 по самой низкой цене, изучите характеристики, видео обзоры, плюсы и минусы модели, отзывы покупателей.
Видео обзоры Epson Perfection V10
Epson Perfection V10 Корректное обращение к сканера невозможно.Характеристики Epson Perfection V10
Основные характеристики *Интерфейс | USB 2.0 |
Тип | планшетный |
Совместимость | PC, MAC, Linux |
Тип датчика | CCD |
Максимальная оптическая плотность | 3.2 D |
Максимальный размер документа | 216x297 мм |
Максимальный формат бумаги | A4 |
Разрешение | 3200x9600 dpi |
Скорость сканирования (цветн.) | А4, 300 dpi - 22 сек |
Разрешение (улучшенное) | 12800x12800 dpi |
Глубина цвета | 48 бит |
Скорость сканирования (ч/б) | А4, 300 dpi - 20 сек |
Вес | 2.2 кг |
Размеры (ШxВxГ) | 430x41x280 мм |
Мощность при работе | 16 Вт |
* Точные характеристики уточняйте у продавца.
При подключении сканера под Win7 есть некоторые хитрости, чтобы кнопки на сканере работали. Потребуется драйвер, Epson Event Manager и EPSON Copy Utility. 1. Устанавливаем драйвер сканера. 2. Устанавливаем EPSON Copy Utility 3. Устанавливаем Epson Event Manager 4. Открываем Пуск -> Настройка -> Панель управления -> Устройства и принтеры. 5. На иконки "EPSON Scanner" правой клавишей мыши выбираем "Свойства сканирования" -> События. В окошке "Выберите событие" по очереди выбираем четыре события и каждому назначаем действия "Запуск Epson Event Manager". 6. Жмём ОК. 6. Запускаем Пуск -> Программы -> Epson Software -> Epson Event Manager. Настраиваем действия каждой кнопки.
В офисе уже около 6-ти лет. За всё время ни разу не подвёл. Разочаровывает скорость сканирования даже на 150dpi! Модель безнадежно устарела. Очень быстро уходит в режим ожидания и очень долго прогревается после выхода из оного.
Разблокировка сканирования банкнот на сканере EPSON Perfection V10/V100
Это просто немыслимо и не лезет вообще ни в какие ворота. Как может кусок пластика и кучка каких-то безымянных деятелей, запрограммировавших его, решать за меня, что мне можно сканировать, а что нельзя?! Я заплатил за сканер деньги, и волен засовывать в него что угодно, хоть книжки с картинками, хоть евро, да хоть жопу, если мне вдруг понадобится ее скан.
Искать одинокую единичку в коде - это заведомо провальное занятие. Надо попробовать какой-нибудь другой путь. При нажатии в диалоговом окне кнопки Information, открывается говносайт с подробной информацией об этих самых ограничениях. А раз открывается ссылка, значит она тоже где-то должна быть. Далеко ходить не пришлось, вот она:
В дизассемблере начинаем раскручивать цепочку вызовов. Функция открытия ссылки: Функция обработчика диалогового окна, из которого открывается ссылка:
- . text : 10001E60 sub_10001E60 procnear
- . text : 10001E60 movecx , [ esp + arg_4 ]
- . text : 10001E64 moveax , ecx
- . text : 10001E66 andeax , 0FFFFh
- . text : 10001E6B cmpeax , 110h
- . text : 10001E70 jgshort loc_10001EB7
- . text : 10001E72 jzshort loc_10001E9E
- . text : 10001E74 subeax , 2
- . text : 10001E77 jzshort loc_10001E83
- . text : 10001E79 subeax , 29h
- . text : 10001E7C jnzshort loc_10001E9B
- . text : 10001E7E jmp sub_10001D90
- . text : 10001E83 ; --------------------------------------
- . text : 10001E83 loc_10001E83 :
- . text : 10001E83 moveax , hWnd
- . text : 10001E88 push 1 ; nResult
- . text : 10001E8A pusheax ; hDlg
- . text : 10001E8B callds : EndDialog
- . text : 10001E91 mov hWnd , 0
- . text : 10001E9B loc_10001E9B :
- . text : 10001E9B xoral , al
- . text : 10001E9D retn
- . text : 10001E9E ; ---------------------------------------
- . text : 10001E9E loc_10001E9E :
- . text : 10001E9E movedx , [ esp + arg_C ]
- . text : 10001EA2 moveax , [ esp + arg_8 ]
- . text : 10001EA6 pushedx
- . text : 10001EA7 pusheax
- . text : 10001EA8 pushecx
- . text : 10001EA9 movecx , [ esp + 0Ch + arg_0 ]
- . text : 10001EAD pushecx
- . text : 10001EAE call sub_10001BB0
- . text : 10001EB3 addesp , 10h
- . text : 10001EB6 retn
- . text : 10001EB7 ; --------------------------------------------
- . text : 10001EB7 loc_10001EB7 :
- . text : 10001EB7 cmpeax , 111h
- . text : 10001EBC jnzshort loc_10001E9B
- . text : 10001EBE moveax , [ esp + arg_8 ]
- . text : 10001EC2 cmpax , 1
- . text : 10001EC6 jnzshort loc_10001ED0
- . text : 10001EC8 call sub_10001E40
- . text : 10001ECD moval , 1
- . text : 10001ECF retn
- . text : 10001ED0 ; --------------------------------------------
- . text : 10001ED0 loc_10001ED0 :
- . text : 10001ED0 cmpax , 2
- . text : 10001ED4 jnzshort loc_10001E9B
- . text : 10001ED6 call sub_10001B90
- . text : 10001EDB moval , 1
- . text : 10001EDD retn
- . text : 10001EDD sub_10001E60 endp
- . text : 10001920 DialogFunc procnear
- . text : 10001920 moveax , [ esp + arg_C ]
- . text : 10001924 movecx , [ esp + arg_8 ]
- . text : 10001928 movedx , [ esp + arg_4 ]
- . text : 1000192C pusheax
- . text : 1000192D moveax , [ esp + 4 + arg_0 ]
- . text : 10001931 pushecx
- . text : 10001932 pushedx
- . text : 10001933 pusheax
- . text : 10001934 call sub_10001E60
- . text : 10001939 addesp , 10h
- . text : 1000193C andeax , 0FFh
- . text : 10001941 retn 10h
- . text : 10001941 DialogFunc endp
- . text : 10001B20 sub_10001B20 procnear
- . text : 10001B20 TemplateName = byteptr - 14h
- . text : 10001B20 hWndParent = dwordptr 4
- . text : 10001B20 subesp , 14h
- . text : 10001B23 pushesi
- . text : 10001B24 pushedi
- . text : 10001B25 callds : GetUserDefaultLCID
- . text : 10001B2B andeax , 0FFh
- . text : 10001B30 cmpeax , 9
- . text : 10001B33 jzshort loc_10001B38
- . text : 10001B35 cmpeax , 11h
- . text : 10001B38 loc_10001B38 :
- . text : 10001B38 movedi , offset aImgdetaction_a
- ; "ImgDetACTION_A"
- . text : 10001B3D orecx , 0FFFFFFFFh
- . text : 10001B40 xoreax , eax
- . text : 10001B42 leaedx , [ esp + 1Ch + TemplateName ]
- . text : 10001B46 repnescasb
- . text : 10001B48 notecx
- . text : 10001B4A subedi , ecx
- . text : 10001B4C push 0 ; dwInitParam
- . text : 10001B4E moveax , ecx
- . text : 10001B50 movesi , edi
- . text : 10001B52 movedi , edx
- . text : 10001B54 pushoffset DialogFunc ; lpDialogFunc
- . text : 10001B59 shrecx , 2
- . text : 10001B5C repmovsd
- . text : 10001B5E movecx , eax
- . text : 10001B60 leaedx , [ esp + 24h + TemplateName ]
- . text : 10001B64 andecx , 3
- . text : 10001B67 repmovsb
- . text : 10001B69 movecx , [ esp + 24h + hWndParent ]
- . text : 10001B6D pushecx ; hWndParent
- . text : 10001B6E pushedx ; lpTemplateName
- . text : 10001B6F pushoffset ModuleName ; "EsImgDet.dll"
- . text : 10001B74 callds : GetModuleHandleA
- . text : 10001B7A pusheax ; hInstance
- . text : 10001B7B callds : DialogBoxParamA
- . text : 10001B81 popedi
- . text : 10001B82 popesi
- . text : 10001B83 addesp , 14h
- . text : 10001B86 retn
- . text : 10001B86 sub_10001B20 endp
- . text : 10001A00 public EsImgDetSecureDetectImage
- . text : 10001A00 EsImgDetSecureDetectImage procnear
- . text : 10001A00
- . text : 10001A00 var_1C = byteptr - 1Ch
- . text : 10001A00 var_18 = dwordptr - 18h
- . text : 10001A00 arg_0 = dwordptr 4
- . text : 10001A00 hWndParent = dwordptr 8
- . text : 10001A00 arg_8 = dwordptr 0Ch
- . text : 10001A00 arg_C = dwordptr 10h
- . text : 10001A00
- . text : 10001A00 moveax , [ esp + arg_C ]
- . text : 10001A04 movecx , [ esp + arg_8 ]
- . text : 10001A08 movedx , dword_1000EA88
- . text : 10001A0E subesp , 1Ch
- . text : 10001A11 pushesi
- . text : 10001A12 pusheax
- . text : 10001A13 pushecx
- . text : 10001A14 movecx , dword_1000EA8C
- . text : 10001A1A pushedx
- . text : 10001A1B call sub_100018F0
- . text : 10001A20 testeax , eax
- . text : 10001A22 jzshort loc_10001A33
- . text : 10001A24 moveax , [ esp + 20h + arg_0 ]
- . text : 10001A28 popesi
- ; Код возврата = -1
- . text : 10001A29 movdwordptr [ eax ] , 0FFFFFFFFh
- . text : 10001A2F addesp , 1Ch
- . text : 10001A32 retn
- . text : 10001A33 ; ----------------------------------------
- . text : 10001A33 loc_10001A33 :
- . text : 10001A33 movedx , dword_1000EA88
- . text : 10001A39 leaecx , [ esp + 20h + arg_C ]
- . text : 10001A3D pushecx
- . text : 10001A3E movecx , dword_1000EA8C
- . text : 10001A44 pushedx
- . text : 10001A45 call sub_100013B0
- . text : 10001A4A testeax , eax
- . text : 10001A4C jzshort loc_10001A5D
- . text : 10001A4E loc_10001A4E :
- . text : 10001A4E moveax , [ esp + 20h + arg_0 ]
- . text : 10001A52 popesi
- ; Код возврата = -1
- . text : 10001A53 movdwordptr [ eax ] , 0FFFFFFFFh
- . text : 10001A59 addesp , 1Ch
- . text : 10001A5C retn
- . text : 10001A5D ; ---------------------------------------
- . text : 10001A5D loc_10001A5D :
- . text : 10001A5D moveax , [ esp + 20h + arg_C ]
- . text : 10001A61 xoresi , esi
- . text : 10001A63 testeax , eax
- . text : 10001A65 jbeshort loc_10001A93
- . text : 10001A67 loc_10001A67 :
- . text : 10001A67 movedx , dword_1000EA88
- . text : 10001A6D leaecx , [ esp + 20h + var_1C ]
- . text : 10001A71 pushecx
- . text : 10001A72 movecx , dword_1000EA8C
- . text : 10001A78 pushesi
- . text : 10001A79 pushedx
- . text : 10001A7A call sub_100013D0
- . text : 10001A7F testeax , eax
- . text : 10001A81 jnzshort loc_10001A4E
- . text : 10001A83 cmp [ esp + 20h + var_18 ] , 1
- . text : 10001A88 jzshort loc_10001AA2
- . text : 10001A8A moveax , [ esp + 20h + arg_C ]
- . text : 10001A8E incesi
- . text : 10001A8F cmpesi , eax
- . text : 10001A91 jbshort loc_10001A67
- . text : 10001A93 loc_10001A93 :
- . text : 10001A93 moveax , [ esp + 20h + arg_0 ]
- . text : 10001A97 popesi
- ; Код возврата = 0
- . text : 10001A98 movdwordptr [ eax ] , 0
- . text : 10001A9E addesp , 1Ch
- . text : 10001AA1 retn
- . text : 10001AA2 ; --------------------------------------
- . text : 10001AA2 loc_10001AA2 :
- ; Вот тут вызывается диалоговое окно
- . text : 10001AA2 movecx , [ esp + 20h + hWndParent ]
- . text : 10001AA6 pushecx ; hWndParent
- . text : 10001AA7 call sub_10001B20
- . text : 10001AAC movedx , [ esp + 24h + arg_0 ]
- . text : 10001AB0 addesp , 4
- ; Код возврата = 1
- . text : 10001AB3 movdwordptr [ edx ] , 1
- . text : 10001AB9 popesi
- . text : 10001ABA addesp , 1Ch
- . text : 10001ABD retn
- . text : 10001ABD EsImgDetSecureDetectImage endp
Обратите внимание, что функция имеет несколько точек выхода, а именно четыре. Две из них возвращают код -1 (он же 0FFFFFFFFh), одна возвращает код 0 и одна, в которой открывается окно с запретом, возвращает код 1. Нетрудно догадаться, что "правильных" кодов возврата всего два - это 0 и -1. Чтобы не утруждать себя лишним кодокопанием, я просто заNOPлю условный переход по адресу 10001A22, чтобы код возврата всегда был -1. Сохраняем изменения, пытаемся сканировать.
Не тут-то было. Значит код возврата -1 соответствует ошибке. Остается второй вариант с нулевым кодом возврата. Заменяем аргумент функции MOV по адресу 10001A29 с -1 на 0. Сохраняем изменения, пробуем.
Сканер добросовестно выводит нам изображение заветной банкноты, при этом напрочь забыв о каких-то там ограничениях. Вот так в очередной раз была повержена человеческая тупость и жадность. Не исключено, что в сканерах других производителей имеются похожие ограничения, но вы теперь знаете, как с ними бороться.
Читайте также: