Сканирование (TWAIN, WIA)

Готовые скрипты, модули расширений, динамические библиотеки и вспомогательные утилиты.
Аватара пользователя
Владимир
Администратор
Сообщения: 537
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Сканирование (TWAIN, WIA)

Сообщение Владимир » 04 мар 2018, 12:07

СкриншотыПоказать
ИзображениеИзображение
Действие выполняет сканирование с любого установленного в системе сканера по протоколу TWAIN и WIA (выбирается в настройках профиля).
Пока тестовая версия с одним параметром (выбор изображения).
При первом запуске модуль самостоятельно скачает SFX-архив с утилитой naps2 и запустит процесс распаковки.
После установки утилиты - действие запустить с зажатой клавишей Shift, для настройки профилей сканирования. После настройки будет выбираться профиль сканирования, установленный по-умолчанию.
Код расширенияПоказать

Код: Выделить всё

var CurrentDir:string;
  function URLDownloadToFile(pCaller: cardinal; URL: PChar;
  FileName: PChar;Reserved: cardinal; lpfnCB : cardinal): cardinal;
  external 'URLDownloadToFileA@urlmon.dll stdcall';

  function DeleteUrlCacheEntry(lpszUrlName:PChar):cardinal;
  external 'DeleteUrlCacheEntry@wininet.dll stdcall';

function RunNWait(CmdLine: variant;mode:integer):boolean;
var  WShell,R:variant;
ShowHide:integer;
CS:string;
begin
CS:=VarToStr(CmdLine);
if CS='' then exit;
if not mode in [0,1] then
ShowHide:=1 else ShowHide:=mode;
result:=false;
  try
    WShell := CreateOleObject('WScript.Shell');
    WShell.CurrentDirectory:=CurrentDir;
    R:=WShell.Run(CmdLine,ShowHide,true);
    if R<>null then
    result:=true;
  except;
    debug(ExceptionParam)
  finally;
    WShell:=Unassigned;
  end;
End;

function GetKeyState(nVirtKey:integer):byte;
external 'GetKeyState@user32.dll stdcall';

function SHIFT_PRESSED:boolean;
begin
if GetKeyState(16)>1 then
result:=true
else result:=false;
end;

{@action
ID=85A1AE08-2B37-4E97-AD67-98AD5BDBAC2E
OrigName=NAPS2_SCAN_TO_JPEG
Name=Сканирование NAPS2
Group=Работа с периферией (сканеры)
UI=<ui>
   <field name="_image" caption="Загрузить отсканированный файл в &quot;Изображение&quot;:" filter="TdxDBImage"/>
</ui>

Description=<b>Действие сканирует и загружает изображения с помощью утилиты NAPS2</b><br>
Рекомендуется для использования в кнопке.<hr><p>
При нажатии кнопки с действием и одновременнном
удерживании клавиши SHIFT - запустится GUI-приложение NAPS2 для настроек
параметров сканирования.
@}

procedure NAPS2_SCAN_TO_JPEG(
Image:variant);
var
  DXFolder,Naps2Con:string;
  Img:TdxDBImage;
  ScanToFile:string;
begin

  DXFolder:=ExtractFilePath(Application.ExeName);
  Naps2Con:=DXFolder+'ext\NAPS2\App\NAPS2.Console.exe';
  Img:=TdxDBImage(Self.FindComponentByFieldName(VarToStr(Image)));
  CurrentDir:=ExtractFilePath(Application.Exename)+'ext\NAPS2\App\';

  if Img.StorageType=2 then
  begin
    msgbox('Сканирование: ошибка','Указан недопустимый тип хранения ("Ссылка") '+
    'для "'+Img.FieldName+'". Измените тип на "База" или "Папка"');
    exit;
  end;

if not FileExists(Naps2Con) then
  begin
   if MessageDlg(
      'Обновление',
      'Остутствует утилита "NAPS2.Console.exe" в каталоге: "'+
      +DXFolder+'ext\NAPS2\App\"'+#13#10#13#10+'Скачать и установить?',
      mtConfirmation,
      [mbYes,mbNo]) = mrYes then
      begin
        debug('Загрузка Naps2...');
        DeleteUrlCacheEntry('http://files.develop-soft.ru/Naps2.exe');
        Application.ProcessMessages;
        if URLDownloadToFile(0, 'http://files.develop-soft.ru/Naps2.exe',
        PChar(DXFolder+'Naps2.exe'), 0, 0)=0 then
      begin
        debug('Распаковка...');
        ShellExecute('',DXFolder+'Naps2.exe','','',5);
        exit;
      end
    else
      begin
        debug('Ошибка. Загрузка не удалась.');
        exit;
      end;
    end;
  end;

if (Image<>'') and (Self.State in [dsEdit,dsInsert] = false) then
  begin
   if MessageDlg(
      'Сканирование...',
      'Для запуска сканирования необходимо перевести запись в режим редактирования'+
      +#13#10#13#10+'Продолжить?',
      mtConfirmation,
      [mbYes,mbNo]) <> mrYes then
  exit else
  if Self.RecordCount=0 then
  Self.Append else
  Self.Edit;
end;


if SHIFT_PRESSED then
begin
  Naps2Con:=DXFolder+'ext\NAPS2\App\NAPS2.exe'
  RunNWait('NAPS2.exe',1);
  exit;
end;

ScanToFile:=GetTempDir+'naps2_scan.jpg';

if FileExists(ScanToFile) then
DeleteFile(ScanToFile);
  if RunNWait('"'+Naps2Con+'"  -o '+ScanToFile+' -f',0) then
  if FileExists(ScanToFile) then
     Img.LoadFromFile(ScanToFile)
else
begin
   Img.Clear;
   msgbox('Ошибка','Сканирование не удалось.');
end;
end;

Скачать:
Сканирование NAPS2.epas
(4.31 КБ) 237 скачиваний
Демо


Поддержка проекта

Теги:

Аватара пользователя
Владимир
Администратор
Сообщения: 537
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Re: Сканирование (TWAIN, WIA)

Сообщение Владимир » 04 мар 2018, 17:57

ЦитатаПоказать
KoalaBear писал(а):
04 мар 2018, 17:49
Владимир писал(а):
04 мар 2018, 12:07
...При первом запуске модуль самостоятельно скачает SFX-архив с утилитой naps2 и запустит процесс распаковки...
У меня этого не произошло. И выдало ошибку:
Изображение
Изображение
Не выбрано значит.

Аватара пользователя
KoalaBear
Сообщения: 67
Зарегистрирован: 10 фев 2018, 21:19

Re: Сканирование (TWAIN, WIA)

Сообщение KoalaBear » 04 мар 2018, 18:09

Выбирал, точно... Посмотрел - не выбрано... Мисклик. Виноват.

Аватара пользователя
KoalaBear
Сообщения: 67
Зарегистрирован: 10 фев 2018, 21:19

Re: Сканирование (TWAIN, WIA)

Сообщение KoalaBear » 04 мар 2018, 19:59

Для исключения возможности рецидивов добавил required=1

Аватара пользователя
Владимир
Администратор
Сообщения: 537
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Re: Сканирование (TWAIN, WIA)

Сообщение Владимир » 04 мар 2018, 20:01

Тоже добавил но еще пока не выкладывал...

Аватара пользователя
Вадим О.
Сообщения: 2
Зарегистрирован: 17 фев 2018, 17:39

Сканирование (TWAIN, WIA)

Сообщение Вадим О. » 26 фев 2019, 20:20

Ошибка: Сканирование NAPS2: [Error] Duplicate action ID: 85A1AE08-2B37-4E97-AD67-98AD5BDBAC2E, подскажите пожалуйста, в чем проблема? Подскажите, а можно ли задать папку для хранения изображения выражением?

Аватара пользователя
Владимир
Администратор
Сообщения: 537
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Сканирование (TWAIN, WIA)

Сообщение Владимир » 26 фев 2019, 21:32

Вадим О. писал(а):
26 фев 2019, 20:20
Ошибка: Сканирование NAPS2: [Error] Duplicate action ID: 85A1AE08-2B37-4E97-AD67-98AD5BDBAC2E
У кого-то чешутся руки и оно портит мне демо-базы... Починил.
Вадим О. писал(а):
26 фев 2019, 20:20
можно ли задать папку для хранения изображения выражением?
Пока можно только установкой типа хранения в настройках изображения ("Папка").
Для установки выражением надо думать, дописывать модуль...

Аватара пользователя
alador
Сообщения: 45
Зарегистрирован: 14 фев 2018, 17:53

Сканирование (TWAIN, WIA)

Сообщение alador » 04 мар 2019, 20:57

Вадим О. писал(а):
26 фев 2019, 20:20
Подскажите, а можно ли задать папку для хранения изображения выражением?
Типа такого что-ли?
%USERPROFILE%\Documents - папка Мои документы

Аватара пользователя
Владимир
Администратор
Сообщения: 537
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Сканирование (TWAIN, WIA)

Сообщение Владимир » 05 мар 2019, 01:06

Наверное речь о ...[Клиент]+'\'+[Заявки]+'\'+[Сканы]...

Быстрый ответ

Смайлики
:-) ;-) :-( :-[ :-D :-P O_O :bye: :good: :help: :lol: :ok: :pardon: :sorry: :yes:
Ещё смайлики…
Загрузить изображение
 
   
Ответить