Как нажать кнопку, меняющую ID?

Я использую AutoIt для автоматизации установщика, который я начинаю использовать Run().

Изначально кнопка Next установщика отключена (чей класс на данный момент Button3). Когда кнопка Next включена, ее класс меняется на Button1. Я не уверен, как нацелить эту кнопку:

WinWait("AirWatch - Installation Wizard", "")
If Not WinActive("AirWatch - Installation Wizard", "") Then WinActivate("AirWatch - Installation Wizard", "")
WinWaitActive("AirWatch - Installation Wizard", "")
While Not ControlCommand('AirWatch - Installation Wizard', '', 'Button3', 'IsEnabled', '')
    Sleep(500)
WEnd
ControlClick('AirWatch - Installation Wizard', '&Next >', '[ID:17696]')
;Note: Text: &Next >
If Not ControlCommand('AirWatch - Installation Wizard', '', 'Button1', 'IsEnabled', '') Then
    Do
        Sleep(10)
    Until ControlCommand('AirWatch - Installation Wizard', '', 'Button1', 'IsEnabled', '')
EndIf

person nandish    schedule 23.08.2013    source источник
comment
Когда вы говорите, что the class is changed, вы на самом деле имеете в виду, что кнопка скрыта, а отображается следующая кнопка, я не думаю, что класс изменится (хотя вы можете проверить это, проверив, меняется ли дескриптор). Пожалуйста, не могли бы вы отформатировать свой код, а также добавить дополнительную информацию, например, что такое [ID:17696] и к чему относится текст &Next > (в настоящее время вы используете его как текст окна, что, я думаю, не то, что вы намеревались). Другой полезной информацией является состояние Button1 до того, как оно станет видимым.   -  person Matt    schedule 23.08.2013


Ответы (1)


Имитация щелчка на панели запуска Windows. Это должно обновить окно, а затем у него должен быть оригинальный ControlID для кнопки. Это кажется хакерским.

Код :

WinActivate($WinName, "")
WinWaitActive($WinName, "")
$winPos = WinGetPos($WinName, "")
;  $winPos-Array contains x/y-coords. The click will be at the mainbar for most windows
;  and will be instant (invoked by the last parameter being 0)
MouseClick("primary", $winPos[0] + 150, $winPos[1] + 10, 1, 0)
; .... 
; ... Do your stuff
person Peter Wildemann    schedule 08.09.2013