AIR 2.0. Работа со сканером

Как известно, Adobe AIR не имеет своего собственного интерфейса для работы со сканером. А иногда так надо…

Ниже представлен костыль, чтобы это исправить.

Нам нужно:
1- какая-либо command-line утилита для работы с twain
-я написал себе сам на c#, в этом нет ничего сложного
-а можно было воспользоваться утилитой quickscan (она к несчастью платная, но для некоторых подойдет и демка)
2- модифицировать *.xml файл с настройками проекта, прописав в нем

extendedDesktop desktop

3- добавить функцию twain()

private function twain():void{
var fileExec:File=new File('c:\\scan.exe'); //Здесь прописывается путь до модуля работы с twain
var process:NativeProcess;
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.executable = fileExec;
var processArgs:Vector. = new Vector.(); //Прописываем параметры командной строки
processArgs[0] = "SelectScanner"; //Открыть окно выбора сканера при старте
processArgs[1] = "Resolution"; //Установить разрешение в 300dpi
processArgs[2] = "300"; //Все параметры прописаны для quickscan, да и задавать их может пользователь
nativeProcessStartupInfo.arguments = processArgs;
process = new NativeProcess();
process.addEventListener(NativeProcessExitEvent.EXIT,workWithImg); //Добавляем прослушку на завершение программы, чтобы забрать изображение
process.start(nativeProcessStartupInfo); //Запускаем сканирование
}
private function workWithImg():void {
//Обрабатываем изображение, перекладываем его
//Для quickscan изображение будет иметь имя page001.jpg и лежать в той же папке, что и exe
}

* This source code was highlighted with Source Code Highlighter.

Не совсем стандартный метод, но таким образом можно получить скан
с минимальными временными затратами.

Статья моего друга.
Автор: Morozov&Sheko inc.
–4
28 июня 2010, 15:12
3
Grey_Halkion –7,3

комментарии (6)

0
bondbig #
0
Grey_Halkion #
[b]bondbig[/b], у человека, написавшего пост, нет учётки на хабрахабре.
+1
bondbig #
я рад за него. Это не повод нарушать правила.
0
Grey_Halkion #
Вот и нет его в личном блоге. Теперь — нарушение правил? =)
0
SilenceAndy #
У вас пример кривой, кривее некуда. Вы пробовали его запустить?

var processArgs:Vector. = new Vector.();

Это как? Всегда должно быть указание типа в классе вектора. Должно быть Vector.<String>

process.addEventListener(NativeProcessExitEvent.EXIT,workWithImg);
private function workWithImg():void...


На хэндлер всегда приходит отосланное событие единственным аргументом. Должно быть
private function workWithImg(event:NativeProcessExitEvent):void...
0
Grey_Halkion #
Да, работает. Пример поправил.

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