Тема: AHK: Как определить открыты ли в приложении модальные окна?
Возможно ли определить открыты ли в приложении(главном окне) подчинённые модальные окна? Есть ли такое свойство? Или можно ли искать окна по текстовому содержимому? И можно ли определить родительское окно?
При запуске приложения в нём открываются несколько окон сразу или по очереди, некоторые из них неинтересные, другие модальные. Цель моя в закрытии приложения путём посылки в цикле нажатия мыши в окне на "крестик" по координатам. Но никак не получается обработать модальные окна.
WinWait, Проверка легальности получения
if not ErrorLevel
{
; На тот случай, если выскочат ошибки о невозможности открыть интернет эксплорер (2 раза)
Sleep, 500
Send {Enter}
Sleep, 500
Send {Enter}
Sleep, 500
; принимаем обновления - здесь всё замечательно
WinActivate Проверка легальности получения
Sleep, 200
Control, Check,, V8FormElement3
Sleep, 200
Send ^{Enter}
; На тот случай если появится окно "Изменение версии", в Зарплате
Sleep, 1000
Send {Enter}
Sleep, 1000
; Здесь проходит какое-то время(от 10с до пары минут), программа неактивна, выполняет какие-то действия внутренние
WinActivate
ID := WinActive("A") - получаем ID активного окна, предположительно главного
Loop
{
WinActivate, ahk_id%ID%
; попытка закрыть приложение через крестик - через WinClose нельзя, потому что нужно пройти через все модальные окна
Sleep, 1000
Click 920, 10
Send {Enter}
Sleep, 1000
; !!! Вот здесь проблема.. работает нестабильно
; V8NewLocalFrameBaseWnd - определил с помощью AutoIt3 Window Spy, но и некоторые другие окна имеют подобный класс, что и приводит часто к зацикливанию
; Если существует окно "Установить границу итогов" в Бухне
IfWinExist, ahk_class V8NewLocalFrameBaseWnd
{
WinActivate, ahk_class V8NewLocalFrameBaseWnd
Send {Enter}
}
; Если не существует главного окна запущенной ранее 1С - выйти
IfWinNotExist, ahk_id%ID%
{
ExitApp
}
}
}


