gifts2017

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

Опубликовал Виктор (_WinChester_) в раздел Программирование - Инструментарий

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

Не так давно столкнулся с необходимостью запустить из 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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Использование компоненты AutoItX3 для платформы 8.2
.epf 240,63Kb
17.10.10
103
.epf 240,63Kb 103 Скачать
Использование компоненты AutoItX3 для платформы 8.1
.epf 240,69Kb
17.10.10
178
.epf 240,69Kb 178 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. gleb gleb (noonezzz) 18.10.10 23:19
специально для меня написал????))))
2. Сергей Старых (tormozit) 27.10.10 16:06
Все бы хорошо, но опять нужны права админа для установки.
3. Виктор (_WinChester_) 27.10.10 22:02
да, дллку надо регать, тут ничего не поделаешь.
4. Александр Цегельников (markers) 27.10.10 22:13
Супер!!!!!! И под сервером будет работать!!!!!!!
Спасибо!!!!! Давно мечтал о подобном!!!!
5. Саўка Збянтэжаны (Збянтэжаны Саўка) 14.05.11 15:24
Замечательно!
Правда, я все же так и не смог переключить раскладку клавиатуры для Send с параметрами "^+"
(ну т.е. по CTRL+SHIFT) а то меня уже так "задолбало" переключаться вручную с Анг на Рус при входе в 1С:Предприятие!!!
в Delphi можно было просто вызвать LoadKeyboardLayout('00000419', KLF_ACTIVATE);

Не понимаю как же передать параметры из 1с в ф-ию LoadKeyboardLayout.
Вот так не работает:
ЗапуститьПриложение("rundll32.exe USER32.DLL, LoadKeyboardLayout 00000419, 0");
а как надо?
Прикрепленные файлы:
6. Александр Милютин (sanfoto) 23.12.11 12:54
Офигительный АкивХ + пример обработка.
а я блин мучился на всякие пустяки DLL-ки писал.
а ща вот...
типо этого))

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



))))
7. Илья Парамонов (Crush) 06.09.12 10:26
А есть файл синтаксис помощника на русском языке?
8. Илья Парамонов (Crush) 06.09.12 10:26
9. Виктор (_WinChester_) 06.09.12 10:47
(8) Crush, не совсем понятно что ты хочешь. В справке к компоненте есть описание синтаксиса большинства методов (русская справка также имеется), а в 1с нужно просто эти методы вызывать с тем же синтаксисом. В обработке пример вызова процедур компоненты.
10. Ильшат (shatt) 13.09.12 17:44
Здрасьте! :)
Никто не делал такую задачу с AutoIt?:
в "буфере" находится файл скопированный
в одном из объектов справочнике/документе открыт ДиалогВыбораФайла
теперь надо вставить файл из "буфера", выбрать его, и закрыть диалог?
11. Виктор (_WinChester_) 17.09.12 17:31
С такой задачей не сталкивался, AutoIT вроде не работает с файлами в буфере обмена.
12. Ильшат (shatt) 17.09.12 18:06
А с помощью горячих клавиш не получится сделать?
Я проверил ctrl+v - работает, но не понимаю пока как связать его с ДиалогомВыбораФайла
13. Виктор (_WinChester_) 17.09.12 18:49
Опиши задачу подробнее. Что за чем происходит, и что должно получиться в итоге.
14. Ильшат (shatt) 17.09.12 19:34
Идея такая:
1) Файл копируется в проводнике (правой кнопкой "Копировать")
2)В документе (произвольном) в 1с добавляется кнопка "вставить из файла" и поле строковое "путь к файлу"
При нажатии на эту кнопку откроется диалоговое окно "ДиалогВыбораФайла"
(при этом создается специальная папка для этого документа(программно) ) и в этом диалоге вставляется ранее скопированный файл, диалог закрывается

Все действия из пункта 2) будут делаться программно (пользователь просто нажимает кнопку "вставить из файла")
это хотелось сделать с помощью этой внешней компоненты.
Можно ли?

Готов поощерить материально за подсказку (если она увенчается успехом)
15. Виктор (_WinChester_) 17.09.12 19:58
Как вариант можно сделать следующим образом:
1. Открывается диалог выбора файла, посылается комбинация Ctrl+v, Enter (по идее, при открытии диалога, курсор стоит на поле имени файла, при нажатии ctrl+v туда вставляется имя и путь к копируемому файлу);
2. Воспользоваться методом КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>), где в качестве имени файла источника будет ДиалогВыбораФайла.ПолноеИмяФайла, а имя файла приемника - программно созданная папка + имя файла. Имя файла можно получить так:
Файл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Имя = Файл.Имя;
16. Ильшат (shatt) 17.09.12 22:55
2-ая часть супер!
еще на один шаг ближе к мечте:)
есть 2 момента:
1) не получается после открытия диалога выбора файла, отправить команду
2) ... подключение по RDP к серверу, и в этом случае комбинация ctrl+v ничего не вставляет
(до этого в свойствах подключения поставил галки про доступность буфера обмена и локальных дисков,
может быть клиент rdp обновить? как можно посмотреть свойства, не в курсе случаем? а может быть дело в другом?)
17. Виктор (_WinChester_) 18.09.12 00:41
А почему обязательно копировать из проводника? Нельзя сразу открывать расположение файла через 1С и там выбирать файл?
18. Ильшат (shatt) 18.09.12 07:53
С проводника потому что... универсальнее и быстрее (для пользователя).
Хотелось сделать механизм, чтобы можно было и с почты скопировать (с Outlook'а), и файл переданный через скайп, и отсканированный файл.
19. Илья Парамонов (Crush) 18.09.12 09:04
(9) _WinChester_, хотел что бы методы и свойства компоненты были доступны в синтаксис-помощнике. Но в результате понял, что проще юзать русскую справку переключаясь между окнами.
20. Игор Мудрицкий (Zas1402) 06.11.12 15:29
21. Алексей Подоляк (trioka) 20.05.13 07:00
Добрый день. Не могу запустить на windows 2008x64
не регается dll (autoitx3_64.dll)
нужна для фикса загрузки локального проца при подключении по RDP.
может проблема по другому уже решена?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа