1

Тема: AHK: Нажатие кнопки в определенном окне

Добрый день. Помогите пожалуйста с таким скриптом. В AHK я ноль, поэтому прошу помощи у Вас. Такая проблема. В 1С когда база закрывается некорректно она просит ее проиндексировать. НО пользователи, дабы не ждать индексации ее отменяют при запросе на индексирования. Можно ли как то при запросе на индексирование запретить нажатие кнопки "НЕТ" или автоматически нажимать кнопочку"ДА" ?

2

Re: AHK: Нажатие кнопки в определенном окне

Что бы ожидать появление окна с определенным заголовком, надо использовать

winwait, <Заголовок окна>

Что бы нажать определенную кнопку в окне, можно использовать имитацию нажатия клавиш:
- если курсор стоит на нужной кнопке, то

send {enter}

- если курсор стоит на другой кнопке, то переместить курсор в нужную сторону, например, влево

send {left}{enter}

Вместо имитации нажатия клавиш можно использовать команду

ControlClick, ДА, <Заголовок окна>

Что бы зациклить написанный скрипт (что бы он работал не один раз), небходимо использовать

Loop
{
; тут пишется код, который должен повторяться
}

3 (изменено: Arlekin_s, 2011-01-28 15:14:19)

Re: AHK: Нажатие кнопки в определенном окне

Ну..  пытаюсь попробывать

WinWaitActive("1С:Предприятие")
ControlClick, ДА, ("1С:Предприятие")

выдает ошибку

походу ругается на ControlClick

4

Re: AHK: Нажатие кнопки в определенном окне

Что за скобки и кавычки? Названия окон пишутся "как есть" без кавычек и скобок. Скобки и кавычки используются только в функциях, но не в обычных командах.

Вот пример для калькулятора. Ждет в появления окна калькулятора. Как только окно становится активным нажимает кнопку button5 (это единица).

Название кнопки "ДА" я просто привел как пример, я не знаю как она называется к Вас. Запустите Window Spy и наведите курсор на кнопку в нужном окне, в поле ClassNN будет написано название кнопки.

WinWaitActive, Калькулятор
ControlClick, button5, Калькулятор

5

Re: AHK: Нажатие кнопки в определенном окне

Если кнопка является стандартным элементом управления, вполне возможно, что её удастся заблокировать.
Control
Производит разнообразные изменения в контролах (элементах управления в окне).
Control, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

6 (изменено: Arlekin_s, 2011-01-31 15:12:18)

Re: AHK: Нажатие кнопки в определенном окне

тогда у меня следующий вопрос.
я установил редактор скриптов SciTE4AutoIt3.

и на вот этот скрипт

InFlames пишет:
WinWaitActive, Калькулятор
ControlClick, button5, Калькулятор

и в этом редакторе выдает ошибку

>C:\Program Files\AutoIt3\SciTE\..\au3check.exe "\\tsclient\D\123.au3"
AutoIt3 Syntax Checker v1.54.8  Copyright (c) Tylo 2007

\\tsclient\D\123.au3(1,14) : ERROR: syntax error
WinWaitActive,
~~~~~~~~~~~~~^
\\tsclient\D\123.au3 - 1 error(s), 0 warning(s)
>Exit code: 2    Time: 0.210

7

Re: AHK: Нажатие кнопки в определенном окне

я установил редактор скриптов SciTE4AutoIt3

См. здесь и здесь: AutoHotkey (AHK): коллекция ссылок.

8 (изменено: Arlekin_s, 2011-01-31 16:26:29)

Re: AHK: Нажатие кнопки в определенном окне

я поставил набор программ и библиотек для запуска скриптов

вот этот скрипт работает

Run("notepad.exe") ; запускаем Блокнот
WinWaitActive("Безымянный - Блокнот") ; ожидаем появление окна Блокнота
Send("Какой-то текст.") ; посылаем нажатия (имитируем ввод)
WinClose("Безымянный - Блокнот") ; посылаем окну команду закрытия
; ожидаем появление окна запроса о сохранении:
WinWaitActive("Блокнот", "Текст в файле Безымянный был изменен.")
Send("{ESC}") ; посылаем нажатие Escape (имитируем ввод)

а вот это не работает

WinWaitActive, Калькулятор
ControlClick, button5, Калькулятор

И еще. Как написано в 1м скрипте  названия окон ставятся в кавычках и в скобках

а выше мне говоорили

InFlames пишет:

Что за скобки и кавычки? Названия окон пишутся "как есть" без кавычек и скобок. Скобки и кавычки используются только в функциях, но не в обычных командах.

9

Re: AHK: Нажатие кнопки в определенном окне

А ты на каком языке программировать пытаешься, на AutoIt или AHK?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Нажатие кнопки в определенном окне

Так. Теперь начинаю догонять. А где здесь можно почитать про АНК. Так сказать начать с самого начала. И если не трудно скажите в чем между ними разница ?

11

Re: AHK: Нажатие кнопки в определенном окне

Документация по программе AutoHotkey
AutoHotkey (AHK): коллекция ссылок
Documentation
Будущее AutoHotkey
AutoHotkey_L
AutoHotkey vs AutoIT

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12 (изменено: Arlekin_s, 2011-02-01 16:01:56)

Re: AHK: Нажатие кнопки в определенном окне

Спасибо разобрался.

Вот что показывает Window Spy

>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
1С:Предприятие
ahk_class #32770

>>>>>>>>>>>>( Mouse Position )<<<<<<<<<<<<<
On Screen:    684, 461  (less often used)
In Active Window:    114, 90

>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN:    Button1
Text:    &Да
Color:    0xDEEBEF  (Blue=DE Green=EB Red=EF)

>>>>>>>>>>( Active Window Position )<<<<<<<<<<
left: 570     top: 371     width: 300     height: 126

>>>>>>>>>>>( Status Bar Text )<<<<<<<<<<

>>>>>>>>>>>( Visible Window Text )<<<<<<<<<<<
&Да
&Нет
Программа была завершена аварийно. 
Переиндексировать таблицы базы данных?

>>>>>>>>>>>( Hidden Window Text )<<<<<<<<<<<

>>>>( TitleMatchMode=slow Visible Text )<<<<

>>>>( TitleMatchMode=slow Hidden Text )<<<<

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

Loop
{
WinWaitActive, 1С:Предприятие
ControlClick, Button1, 1С:Предприятие
}

подскажите где закралась ошибка

13

Re: AHK: Нажатие кнопки в определенном окне

Попробуй дописать к названию окна название класса:

1С:Предприятие ahk_class #32770
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Нажатие кнопки в определенном окне

teadrinker пишет:

Попробуй дописать к названию окна название класса:

1С:Предприятие ahk_class #32770

нет.. ничего не происходит.. когда появляется это окно то кнопка Да не нажимается ((

15

Re: AHK: Нажатие кнопки в определенном окне

Попробуй так:

Loop
{
   WinWaitActive, 1С:Предприятие ahk_class #32770
   While WinExist("1С:Предприятие ahk_class #32770")
      ControlClick, Button1
}

Кроме того, нужно убедиться, что одновременно не существует ещё одного окна с таким же названием и классом.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Нажатие кнопки в определенном окне

Этот скрипт выдает msgbox каждый раз, когда появляется заданное окно. Проверь, работает ли.

Loop
{
WinWaitActive, 1С:Предприятие
Msgbox Окно появилось
}

Если это окно становится активным, то можно попробовать нажать Enter (при условии, что фокус сразу находится на нужной кнопке)

Loop
{
WinWaitActive, 1С:Предприятие
Send {enter}
}

17

Re: AHK: Нажатие кнопки в определенном окне

Ни один из вышеперечисленных скриптов не заработал.


Я не знаю это поможет или нет. Но Когда на иконке, в трее, На скрипте нажимаешь Правой кнопкой -> Open

то появляется такое окно

 
Script lines most recently executed (oldest first).  Press [F5] to refresh.  The seconds elapsed between a line and the one after it is in parentheses to the right (if not 0).  The bottommost line's elapsed time is the number of seconds since it executed.

001: Loop
003: WinWaitActive,1:&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; ahk_class #32770 (645.18)

Press [F5] to refresh.

18

Re: AHK: Нажатие кнопки в определенном окне

Видимо, Вы используете AutoHotkey_L Unicode. Для него скрипты нужно сохранять в UTF-8.

19

Re: AHK: Нажатие кнопки в определенном окне

Спасибо все работает.. Но появилась другая проблема.
Можно ли как то различать окна по тексту в них если названия окон одинаковые. Объясню для чего:
1. Когда пользователь неправильно ввел пароль выскакивает окно 1С:Предприятие "Неправильны пароль" Скрипт срабатывает нажимая "Button1". Т.е. сообщение увидеть не представляется возможным.
2. Когда база поломалась и в нее входишь не монопольно то программа выдает окно 1С:Предприятие "База была завершена аварийно и бла бла бла бла..." Тоже срабатывает скрипт и сообщение увидеть не получится.
И только в 3м случае когда входишь монопольно он срабатывает как надо.

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

20

Re: AHK: Нажатие кнопки в определенном окне

А текст из этих окон не копируется в буфер обмена по нажатию Ctrl-C или Ctrl-Ins?

21 (изменено: Arlekin_s, 2011-02-02 15:40:00)

Re: AHK: Нажатие кнопки в определенном окне

Нет. Это текст на форме.

вот информация этого окна. Курсор стоит на кнопке "Ок"

>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
1С:Предприятие
ahk_class #32770

>>>>>>>>>>>>( Mouse Position )<<<<<<<<<<<<<
On Screen:    727, 469  (less often used)
In Active Window:    107, 98

>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN:    Button1
Text:    OK
Color:    0xDEEBEF  (Blue=DE Green=EB Red=EF)

>>>>>>>>>>( Active Window Position )<<<<<<<<<<
left: 620     top: 371     width: 200     height: 126

>>>>>>>>>>>( Status Bar Text )<<<<<<<<<<

>>>>>>>>>>>( Visible Window Text )<<<<<<<<<<<
OK
Пароль набран неверно.

>>>>>>>>>>>( Hidden Window Text )<<<<<<<<<<<

>>>>( TitleMatchMode=slow Visible Text )<<<<

>>>>( TitleMatchMode=slow Hidden Text )<<<<

22

Re: AHK: Нажатие кнопки в определенном окне

Я понял, что на форме. Текст некоторых диалоговых окон можно скопировать, нажав упомянутые сочетания (без выделения текста). Вы проверили или вывели из того, что текст на форме?

23

Re: AHK: Нажатие кнопки в определенном окне

Кстати, обратите внимание, что WinWaitActive имеет параметр WinText. Попробуйте его использовать.

WinWaitActive, 1С:Предприятие, Программа была завершена аварийно.

Или с каким там текстом окно Вам нужно, подставьте сами.

24 (изменено: Arlekin_s, 2011-02-02 16:36:51)

Re: AHK: Нажатие кнопки в определенном окне

А обязательно весь текст писать ?


Спасибо разобрался )) Все работает )

25 (изменено: Arlekin_s, 2011-02-02 18:12:20)

Re: AHK: Нажатие кнопки в определенном окне

Решил чучуть усовершенствовать скрип. Чтобы закрывал окна в связи с простоем.

Loop
{
    IfWinActive, Запуск 1С:Предприятия
    {
        Sleep 5000
        WinClose, Запуск 1С:Предприятия
        MsgBox, Закрыто в связи с простоем
    }
    
    IfWinActive, Авторизация  доступа
    {
        Sleep 5000
        ControlClick, Button2
        MsgBox, Закрыто в связи с простоем
    }
}

Проблема вот в чем, на окне Авторизация доступа скрипт через 5 секунд пишет сообщение, а потом опять через 5 секунд пишет сообщение и только тогда закрывает окно.

В окне Запуск 1С:Предприятия все работает нормально

26

Re: AHK: Нажатие кнопки в определенном окне

Так может, тоже WinClose использовать? Если Button2 — Отмена, то один чёрт, наверно, что её нажать, что просто закрыть окно.

27 (изменено: Arlekin_s, 2011-02-02 18:35:25)

Re: AHK: Нажатие кнопки в определенном окне

Заменил на WinClose. Проблема не исчезла. Только после второго раза закрывается окно.

Loop
{
    IfWinActive, Запуск 1С:Предприятия
    {
        Sleep 5000
        WinClose, Запуск 1С:Предприятия
        MsgBox, Закрыто в связи с простоем
    }
    
    IfWinActive, Авторизация  доступа
    {
        Sleep 5000
        WinClose, Авторизация  доступа
        MsgBox, Закрыто в связи с простоем
    }
}

28

Re: AHK: Нажатие кнопки в определенном окне

Ну поставьте два WinClose подряд, что ли. Не знаю, в чём у Вас причина может быть.

29

Re: AHK: Нажатие кнопки в определенном окне

Можно ещё использовать WinWaitClose.

30 (изменено: Arlekin_s, 2011-02-02 18:50:05)

Re: AHK: Нажатие кнопки в определенном окне

Разобрался в чем причина, но не знаю как ее исправить. ))) Он сначала отрабатывает вот этот участок кода и выводит сообщение

 
IfWinActive, Запуск 1С:Предприятия
    {
        Sleep 5000
        WinClose, Запуск 1С:Предприятия
        MsgBox, Закрыто в связи с простоем
    }

Затем уже нужный. Закрывает и выводит сообщение.

Даже если поменять местами поиск окон

Loop
{
     IfWinActive, Авторизация  доступа
    {
        Sleep 5000
        WinActivate, Авторизация  доступа
        WinClose, Авторизация  доступа
        MsgBox, Закрыто в связи с простоем авторизации доступа
    }
    IfWinActive, Запуск 1С:Предприятия
    {
        Sleep 5000
        WinClose, Запуск 1С:Предприятия
        MsgBox, Закрыто в связи с простоем
    }
}

проблема не исчезает.

31

Re: AHK: Нажатие кнопки в определенном окне

YMP пишет:

Можно ещё использовать WinWaitClose.

Нет это не подходит. Он будет ждать пока окно сам не закроешь тогда выдаст сообщение.

32

Re: AHK: Нажатие кнопки в определенном окне

Эти окна на экране одновременно, что ли, маячат? Но всё равно ведь не могут быть два активных окна. В общем, мне не понятно, в каком порядке всё это у Вас появляется, что и когда активно и чего Вы хотите добиться. С 1С я не имел дела, так что не знаю, как там всё происходит.

33

Re: AHK: Нажатие кнопки в определенном окне

У этих окон у всех ahk_class одинаковый (#32770)

34 (изменено: Arlekin_s, 2011-02-03 12:38:18)

Re: AHK: Нажатие кнопки в определенном окне

Сначала открывается окно "Запуск 1С:Предприятия" потом с него при выборе базы открывается окно "Авторизация доступа". Может как-то придумать что

Если окно активно "Запуск 1С:Предприятия" тогда
задержка 60 сек
Если окно активно "Авторизация доступа"
задержка 60 сек
Закрываем окно "Авторизация доступа"
(тут наверно надо поставить возврат на начало скрипта)
иначе
проверяем активно ли первое окно и закрываем его


может так будет работать?

35

Re: AHK: Нажатие кнопки в определенном окне

Вот набросал

Loop
{
    IfWinActive, Запуск 1С:Предприятия
    
    {
    Sleep 5000
        IfWinActive, Авторизация  доступа
        {
        WinClose, Авторизация  доступа
        MsgBox, Закрыто в связи с простоем авторизации доступа
        }
    
    WinClose, Запуск 1С:Предприятия
    MsgBox, Закрыто в связи с простоем
    }
    
}

А как поставить возврат на начало скрипта после того как он закроет окно Авторизация доступа.

36 (изменено: Arlekin_s, 2011-02-03 13:31:11)

Re: AHK: Нажатие кнопки в определенном окне

Еще вопрос. метод WinWaitActive, если я правильно понял скрипт дойдя до этого места будет ждать появления этого окна и дальше не пойдет ?

Если так то можно как то задать время ожидания этого окна ?

37 (изменено: Arlekin_s, 2011-02-03 13:57:01)

Re: AHK: Нажатие кнопки в определенном окне

Вот окончательный вариант скрипта


Loop
{
       IfWinActive, Запуск 1С:Предприятия
    {
        Loop 10
        {
            sleep 500
            IfWinActive, 1С:Предприятие, Переиндексировать таблицы базы данных?
                {
                    Send {enter}
                }
            IfWinActive, 1С:Предприятие, Для восстановления индексных файлов запустите программу  в монопольном режиме.
                {
                    Sleep 5000
                    Send {enter}
                }
            IfWinActive, 1С:Предприятие, Каталог пользователя занят!
                {
                    Sleep 5000
                    Send {enter}
                }
        
        }
    
    IfWinActive, Авторизация  доступа
        {
        WinClose, Авторизация  доступа
        ;MsgBox, Закрыто в связи с простоем авторизации доступа
        }
    
    WinClose, Запуск 1С:Предприятия
    ;MsgBox, Закрыто в связи с простоем
    }
}

все работает как надо.. НО он съедает 50 % ресурсов системы

его как то можно упростить ?

38

Re: AHK: Нажатие кнопки в определенном окне

Чтобы меньше ел, нужно вставить небольшой Sleep в главный цикл.

39 (изменено: Arlekin_s, 2011-02-03 14:43:29)

Re: AHK: Нажатие кнопки в определенном окне

А на счет WinWaitActive . Можно установить время ожидания ?

40

Re: AHK: Нажатие кнопки в определенном окне

Ну вобщем скрипт работает. Можно даже его занести в коллекцию. Потому что он очень облегчает работу программистов 1с и системных администраторов.

И еще вопрос.  Я его конвертировал в exe Установил как службу командой

 sc create AHK start= auto binPath= %windir%\system32\AHK.exe

служба создается но не запускается.

41

Re: AHK: Нажатие кнопки в определенном окне

Arlekin_s пишет:

А на счет WinWaitActive . Можно установить время ожидания ?

Ну дык параметр же у неё есть для этого: WinWaitActive / WinWaitNotActive.

Насчёт службы не знаю, никогда не пробовал.

42

Re: AHK: Нажатие кнопки в определенном окне

OFF:

Arlekin_s пишет:

Потому что он очень облегчает работу программистов 1с и системных администраторов.

Ничто так не облегчает работу программистов 1с и системных администраторов, как слаженное и чёткое исполнение организационных мероприятий, в том числе, показательная «порка» должностных лиц, плюющих на регламент.

43

Re: AHK: Нажатие кнопки в определенном окне

Это то понятно. Но когда директор говорит - "А ты сделай так чтобы они этого не могли делать ". Приходится что то придумывать.

44

Re: AHK: Нажатие кнопки в определенном окне

Arlekin_s пишет:

И еще вопрос.  Я его конвертировал в exe Установил как службу командой

 sc create AHK start= auto binPath= %windir%\system32\AHK.exe

служба создается но не запускается.

Я недавно пробовал ковыряться со службами. В общем насколько я понял, не каждый исполняемый файл можно назначить в качестве службы. Он должен быть как бы определённого формата, то есть иметь способность взаимодействовать с ОС в качестве службы.

45

Re: AHK: Нажатие кнопки в определенном окне

Похоу да.. потому что даже если его запустить через программу как службу то он все равно не работает.

Но вот еще один вопросик.. Почему этот скрип съедает 5 мегабайт оперативной памяти.. Разве его нельзя никак уменьшить ?

46

Re: AHK: Нажатие кнопки в определенном окне

На этот вопрос я наверно ответа так и не получу. А вот еще один вопрос. Возможно убрать икону этого скрипта из системного трея?

47

Re: AHK: Нажатие кнопки в определенном окне

Arlekin_s, одна тема — один вопрос.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

48

Re: AHK: Нажатие кнопки в определенном окне

Подскажите пожалуйста, правильно ли сделал скрипт?

Работает, но в процессе поиска работающего решения AutoHotkey взбесился, бесконечно посылая Enter открыл 500 экземпляров скриптов, посылающих Enter.

Еще нужно, чтобы после отработки, фокус переходил обратно на Firefox, "WinActivate, - Mozilla Firefox" не работает.


Loop
{
Winwait, Восстановление
WinActivate, Восстановление
ControlClick, Button4
WinActivate, - Mozilla Firefox
}

49

Re: AHK: Нажатие кнопки в определенном окне

Ed, каким образом это связано с темой?

50

Re: AHK: Нажатие кнопки в определенном окне

ypppu
Ведь задача у меня точно такая-же, как у топикстартера, и хотелось бы узнать правилен ли мой скрипт, на предыдущей странице множество разных вариантов. Нужен ли sleep и сколько? Нужны ли запятые между title, ahk_class, ahk_exe?

А второстепенная задача напрямую связана, чтобы возвращать фокус основному приложению, а то окно закрывается, но скролл уже не работает в браузере. Не подскажете?

Loop
{
Winwait, Восстановление ahk_class #32770 ahk_exe trl.exe
WinActivate, Восстановление ahk_class #32770 ahk_exe trl.exe
ControlClick, Button4
}

51

Re: AHK: Нажатие кнопки в определенном окне

Ed, пока что очень трудно понять, о чём Вы говорите.
1. Что требуется
2. Приведите код скрипта
3. Что работает не так

А то Вы написали скрипт, а у нас спрашиваете - правильно ли он работает.

52

Re: AHK: Нажатие кнопки в определенном окне

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

Loop
{
Winwait, Восстановление ahk_class #32770 ahk_exe trl.exe
WinActivate, Восстановление ahk_class #32770 ahk_exe trl.exe
ControlClick, Button4
WinActivate, - Mozilla Firefox
}

53

Re: AHK: Нажатие кнопки в определенном окне

WinActivate, - Mozilla Firefox

Заголовок неверный.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

54

Re: AHK: Нажатие кнопки в определенном окне

serzh82saratov
Спасибо, указал ahk_class и все заработало, значит нужно вводить только полный заголовок? Еще по поводу sleep, не пойму, нужен ли он в скриптах?

55

Re: AHK: Нажатие кнопки в определенном окне

Доброго времени суток. Подскажите пожалуйста как ждать нажатия на кнопку "ДА" ,и если  кнопка "ДА" нажата то воспроизвести звук "SoundBeep".

ControlClick, ДА, <Заголовок окна>
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).