Использование библиотеки AutoItX3.dll или Windows API из 1С



Эмуляция нажатий клавиш, движений мыши, работа с буфером обмена, а также различные манипуляции процессами, окнами, их элементами управления и многое другое..

Не так давно столкнулся с необходимостью запустить из 1С и нажать пару кнопок во внешней утилитке. С запуском проблем не возникло, но на этом все и закончилось.

После недолгих поисков в интернете наткнулся на утилиту AutoIt.

AutoIt v3 — это язык для написания сценариев, напоминающий BASIC и предназначенный для автоматизации Windows GUI (графического интерфейса пользователя MS Windows). Его возможности — это методы симуляций нажатий комбинаций клавиш клавиатуры и мыши, функции управления окнами и его визуальными элементами. Решение, явно предлагаемое средствами AutoIt v3, его сценарием, обычно невозможно достичь коротким и понятным кодом какого-либо языка.

AutoIt умеет:

  •  Запускать на выполнение Windows и DOS программы
  •  Симулировать нажатия комбинаций клавиатуры (поддерживается основная масса раскладок клавиатуры)
  •  Симулировать перемещения указателя мыши и нажатия на ее кнопки
  •  Перемещать, менять размер и управлять параметрами отображения окон
  •  Непосредственно взаимодействовать с «управляющими элементами» (controls) окна (получать/менять надпись, перемещать, отключать, и т.п. действия)
  •  Работать с буфером обмена для пересылки его текстового содержания
  •  Читать, менять и создавать ключи и значения реестра

Утилита — это хорошо, но я хотел получить это все из 1С. В комплекте с утилитой оказалась компонента AutoItX3, которая позволяет реализовать часть возможностей AutoIt через интерфейсы DLL и ActiveX/COM.

Данная обработка позволяет посмотреть на компоненту AutoItX3 в действии. Реализовано 2 режима работы:

  1. Выбираем в Синтаксис-помощнике интересующий нас метод, при необходимости указываем параметры, жмем Выполнить, и любуемся результатом.
  2. Набираем код ручками, жмем выполнить, и также любуемся результатом).  Данный вариант позволяет реализовать последовательность действий (например: запустить блокнот, ввести текст, сохранить, закрыть и вернуться в 1с).

Для использования обработки нужно запустить 1С от имени администратора и нажать на кнопку Установить компоненту.

Если интересно — скачать утилиту, а также набор документации (в том числе и на русском языке) можно отсюда

http://www.autoitscript.com/autoit3/downloads.shtml

21 Comments

  1. noonezzz

    специально для меня написал????))))

    Reply
  2. tormozit

    Все бы хорошо, но опять нужны права админа для установки.

    Reply
  3. _WinChester_

    да, дллку надо регать, тут ничего не поделаешь.

    Reply
  4. markers

    Супер!!!!!! И под сервером будет работать!!!!!!!

    Спасибо!!!!! Давно мечтал о подобном!!!!

    Reply
  5. Збянтэжаны Саўка

    Замечательно!

    Правда, я все же так и не смог переключить раскладку клавиатуры для Send с параметрами «#k8SjZc9Dxk+»

    (ну т.е. по CTRL+SHIFT) а то меня уже так «задолбало» переключаться вручную с Анг на Рус при входе в 1С:Предприятие!!!

    в Delphi можно было просто вызвать LoadKeyboardLayout(‘00000419’, KLF_ACTIVATE);

    Не понимаю как же передать параметры из 1с в ф-ию LoadKeyboardLayout.

    Вот так не работает:

    ЗапуститьПриложение(«rundll32.exe USER32.DLL, LoadKeyboardLayout 00000419, 0»);

    а как надо?

    Reply
  6. sanfoto

    Офигительный АкивХ + пример обработка.

    а я блин мучился на всякие пустяки DLL-ки писал.

    а ща вот…

    типо этого))

    //R =Autoitx3.WinMove( «Безымянный — Блокнот», «», 0, -27,200 ,200 ) ;

    R =Autoitx3.WinMove( «Конфигуратор — Управление производственным предприятием, редакция 1.3», «», 0, -27,200 ,200 ) ;

    ))))

    Reply
  7. Crush

    А есть файл синтаксис помощника на русском языке?

    Reply
  8. Crush

    Для 8-ки

    Reply
  9. _WinChester_

    (8) Crush, не совсем понятно что ты хочешь. В справке к компоненте есть описание синтаксиса большинства методов (русская справка также имеется), а в 1с нужно просто эти методы вызывать с тем же синтаксисом. В обработке пример вызова процедур компоненты.

    Reply
  10. shatt

    Здрасьте! 🙂

    Никто не делал такую задачу с AutoIt?:

    в «буфере» находится файл скопированный

    в одном из объектов справочнике/документе открыт ДиалогВыбораФайла

    теперь надо вставить файл из «буфера», выбрать его, и закрыть диалог?

    Reply
  11. _WinChester_

    С такой задачей не сталкивался, AutoIT вроде не работает с файлами в буфере обмена.

    Reply
  12. shatt

    А с помощью горячих клавиш не получится сделать?

    Я проверил ctrl+v — работает, но не понимаю пока как связать его с ДиалогомВыбораФайла

    Reply
  13. _WinChester_

    Опиши задачу подробнее. Что за чем происходит, и что должно получиться в итоге.

    Reply
  14. shatt

    Идея такая:

    1) Файл копируется в проводнике (правой кнопкой «Копировать»)

    2)В документе (произвольном) в 1с добавляется кнопка «вставить из файла» и поле строковое «путь к файлу»

    При нажатии на эту кнопку откроется диалоговое окно «ДиалогВыбораФайла»

    (при этом создается специальная папка для этого документа(программно) ) и в этом диалоге вставляется ранее скопированный файл, диалог закрывается

    Все действия из пункта 2) будут делаться программно (пользователь просто нажимает кнопку «вставить из файла»)

    это хотелось сделать с помощью этой внешней компоненты.

    Можно ли?

    Готов поощерить материально за подсказку (если она увенчается успехом)

    Reply
  15. _WinChester_

    Как вариант можно сделать следующим образом:

    1. Открывается диалог выбора файла, посылается комбинация Ctrl+v, Enter (по идее, при открытии диалога, курсор стоит на поле имени файла, при нажатии ctrl+v туда вставляется имя и путь к копируемому файлу);

    2. Воспользоваться методом КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>), где в качестве имени файла источника будет ДиалогВыбораФайла.ПолноеИмяФайла, а имя файла приемника — программно созданная папка + имя файла. Имя файла можно получить так:

    Файл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);

    Имя = Файл.Имя;

    Reply
  16. shatt

    2-ая часть супер!

    еще на один шаг ближе к мечте:)

    есть 2 момента:

    1) не получается после открытия диалога выбора файла, отправить команду

    2) … подключение по RDP к серверу, и в этом случае комбинация ctrl+v ничего не вставляет

    (до этого в свойствах подключения поставил галки про доступность буфера обмена и локальных дисков,

    может быть клиент rdp обновить? как можно посмотреть свойства, не в курсе случаем? а может быть дело в другом?)

    Reply
  17. _WinChester_

    А почему обязательно копировать из проводника? Нельзя сразу открывать расположение файла через 1С и там выбирать файл?

    Reply
  18. shatt

    С проводника потому что… универсальнее и быстрее (для пользователя).

    Хотелось сделать механизм, чтобы можно было и с почты скопировать (с Outlook’а), и файл переданный через скайп, и отсканированный файл.

    Reply
  19. Crush

    (9) хотел что бы методы и свойства компоненты были доступны в синтаксис-помощнике. Но в результате понял, что проще юзать русскую справку переключаясь между окнами.

    Reply
  20. Zas1402

    Нужная штука.

    Reply
  21. trioka

    Добрый день. Не могу запустить на windows 2008×64

    не регается dll (autoitx3_64.dll)

    нужна для фикса загрузки локального проца при подключении по RDP.

    может проблема по другому уже решена?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *