Как да щракнете върху бутон, който променя 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