Не работает ControlClick Topic is solved

Помощь в написании скриптов
marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Не работает ControlClick

Post by marusa122 » 07 Jun 2023, 05:35

Здравствуйте.
Скрипт Autohotkey должен при нажатии клавиши End нажимать на определенную кнопку в активном окне "Program1 - UserID" (если оно не активно или скрыто за другими окнами, перед этим нужно активировать его и отобразить поверх остальных окон). После этого должен появляться Msgbox "Готово".
Данные этой кнопки в WindowSpy:
Program1 - UserID
ahk_class Program1
ahk_exe Program1.exe
ahk_pid 5456
ahk_id 394920

ClassNN: Button3
Text: Завершить работу
Пробовала написать скрипт с использованием ControlClick, но он не работает от слова "совсем". Даже Msgbox не показывается. Что я делаю не так?

Code: Select all

End::
    ; Проверяем, активно ли окно "Program1 - UserID"
    IfWinActive, Program1 - UserID
    {
        ; Если окно активно, нажимаем на кнопку "Завершить работу"
        ControlClick, Button3, Program1 - UserID
    }
    else
    {
        ; Если окно не активно, активируем его и ждем, пока оно станет активным
        WinActivate, Program1 - UserID
        WinWaitActive, Program1 - UserID
        
        ; Нажимаем на кнопку "Завершить работу"
        ControlClick, Button3, Program1 - UserID
    }
    
    ; Выводим сообщение "Готово"
    MsgBox, Готово
return

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Не работает ControlClick  Topic is solved

Post by mcl » 07 Jun 2023, 10:11

marusa122 wrote: Пробовала написать скрипт с использованием ControlClick, но он не работает от слова "совсем". Даже Msgbox не показывается.
Если не показывается MsgBox, предположу, что выполнение „зависло“ на ожидании активного окна WinWaitActive. Вы можете проверить, так ли это, нажав End и открыв главное окно скрипта – последняя строка, вероятно, будет WinWaitActive. В документации к WinActivate сказано, что WinWaitActive добавлять необязательно.

Стоит сперва проверить, существует ли вообще такое окно.
Если у программы всего одно окно, попробуйте обращаться к нему через ahk_exe.
В редких случаях помогает также включить обнаружение скрытых окон.

Code: Select all

End::
    ; DetectHiddenWindows, On  ; - раскомментируйте, если всё другое не помогло
    
    appWinName := "Program1 - UserID"
    ; appWinName := "ahk_exe Program1.exe"
    
    IfWinNotExist, %appWinName%
    {
        MsgBox Я не вижу такого окна!
        Return
    }
    
    WinActivate, %appWinName%
    ControlClick, Button3, %appWinName%
    
    ; Выводим сообщение "Готово"
    MsgBox, Готово
Return
github://oGDIp - GDI+ wrapper for AHK v1.1

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Не работает ControlClick

Post by marusa122 » 07 Jun 2023, 10:33

mcl, не помогло. И обращение через ahk_exe не помогло, и раскомментирование той строки, которую вы указали, не дало результата. Msgbox "Я не вижу такого окна!" тоже не появляется, даже если программа закрыта.
У программы всего одно окно, дополнительные окна там не открываются - при попытке запустить новое появляется то же окно.

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Не работает ControlClick

Post by mcl » 07 Jun 2023, 11:59

marusa122 wrote: Msgbox "Я не вижу такого окна!" тоже не появляется, даже если программа закрыта.
Хм, как любопытно!.. Ощущение такое, будто ваш End – не End, или этот хоткей уже кто-то присвоил до вас.
Попробуйте оставить в скрипте один только MsgBox и Return – уж он-то должен сработать.
Если же нет, попробуйте повесить скрипт на другую горячую клавишу – будет ли она работать.

Можете открыть главное окно запущенного скрипта (двойным щелчком по иконке в трее) и посмотреть, что там происходит в разных режимах (переключаются через меню View):

1. Lines most recently executed
Там пишутся последние выполненные строки скрипта (и время с момента их выполнения). Например, у меня:
009: IfWinNotExist,%appWinName%
011: MsgBox,Я не вижу такого окна! (1.28)
012: Return (0.36)

Press [F5] to refresh.

2. Hotkeys and their methods
Зарегистрированные горячие клавиши. Здесь ничего необычного не ожидается, иначе об этом бы сказали при запуске скрипта.

Type  Off?  Level  Running  Name
-------------------------------------------------------------------
k-hook                      End

3. Key history and script info
История нажатий-отжатий клавиш. В вашем скрипте у меня нажатия End регистрируются (и у вас должно), а вот другие мои скрипты этой клавиши уже не видят.
VK  SC   Type  Up/Dn  Elapsed  Key  Window
-------------------------------------------------------------
23  14F  h     d      1.84     End  
23  14F  s     u      0.06     End  Script.ahk
github://oGDIp - GDI+ wrapper for AHK v1.1

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Не работает ControlClick

Post by marusa122 » 07 Jun 2023, 14:42

mcl, попробовала сменить горячую клавишу - программа запускается. Но кнопка, заданная в ControlClick, не нажимается. Я думала, это потому, что окно программы остается неактивным после открытия. Но ведь в скрипте есть команда WinActivate. В чем тогда может быть проблема?..

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Не работает ControlClick

Post by mcl » 07 Jun 2023, 15:49

marusa122 wrote: В чем тогда может быть проблема?..
Не могу сказать. Попробуйте один из следующих вариантов:

Code: Select all

; Из документации: добавить SetControlDelay перед ControlClick и параметр NA:
SetControlDelay -1
ControlClick, Button3, %appWinName%,,,, NA

; Из сообщений на форуме: фокусировать кнопку перед нажатием:
ControlFocus, Button3, %appWinName%
Sleep 1
ControlClick, Button3, %appWinName%,,,, NA

; Фокусировать кнопку, но нажимать её через нажатие пробела или Enter:
ControlFocus, Button3, %appWinName%
ControlSend, Button3, {Space}, %appWinName%

; Наконец, если окно активируется, можно попробовать щёлкнуть по координатам или прибегнуть к обычному Click:
ControlGetPos, btnX, btnY,,, Button3, A
If (btnX != "")
{
	ControlClick, X%btnX% Y%btnY%, %appWinName%
	; Click, %btnX% %btnY%
}
github://oGDIp - GDI+ wrapper for AHK v1.1

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Не работает ControlClick

Post by marusa122 » 07 Jun 2023, 23:41

mcl, почему-то только после перезагрузки первоначальная версия вашего скрипта начала работать нормально. Большое спасибо за помощь!

Post Reply

Return to “Помощь”