Не работает ControlClick

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Не работает ControlClick

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

by marusa122 » 07 Jun 2023, 23:41

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

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

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%
}

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

by marusa122 » 07 Jun 2023, 14:42

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

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

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

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

by marusa122 » 07 Jun 2023, 10:33

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

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

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

Не работает ControlClick

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

Top