2013-10-07 7 views
0

Рассмотрим этот AutoIt код:ControlID изменяется каждый раз, когда окно запускается

WinActivate("Test Window") 

Sleep(5000) 

ControlClick("Test Window", "", 197128) 

Там есть кнопка в окне я тестирование. Я написал простой скрипт, чтобы нажать на кнопку, используя ControlClick. Я использую controlID для идентификации и нажатия на кнопку (я использую окно AutoIt Info для получения идентификатора controlID). Скрипт работает. Проблема в том, что идентификатор элемента управления изменяется каждый раз при запуске тестового окна. В результате скрипт не моделирует нажатие кнопки каждый раз при запуске нового экземпляра окна. Как я могу каждый раз запускать работу controlclick?

ответ

4

Для элементов управления, имеющих идентификаторы динамического управления, лучше всего использовать расширенное обнаружение.

Как можно увидеть в файле справки:

Специальное описание может быть использовано в качестве параметра ControlID используется в большинстве Control ...() функции. Это описание может быть использовано для идентификации элемента управления по следующим свойствам:

Например,

ControlSend("Untitled - Notepad", "", "[CLASS:Edit; INSTANCE:1]", "This is some text") 

Или

ControlClick("My Window", "", "[CLASS:Button; TEXT:Finish; INSTANCE:2]") 

Не забудьте установить:

Opt("WinTitleMatchMode", 4) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase 
+0

Вы также можете использовать '' '' для '$ title' и' $ text' всегда использовать активное окно. – Chrono

+1

@ Chrono, это совершенно не соответствует теме, поскольку мы говорим о получении дескриптора управления, а не дескриптора окна. В любом случае, если вы не кодируете напрямую для любого активного окна, вам следует избегать использования функций control ..() в том виде, в котором вы предлагали, так как это ненадежно. – Milos

+0

Как это не по теме? Я просто говорю, что вы также можете использовать 'ControlClick (" "," "," [CLASS: Button; TEXT: Finish; INSTANCE: 2] ")'. – Chrono

Смежные вопросы