Что нового

Найти и нажать кнопку в окне

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Добрый день. Пробую разобраться с нажатием кнопки в окне. В моем случае видимо нельзя определить CLASS:Button и приходиться искать цвет. Могу ошибаться. На скринах показано, как это выглядит. В моем коде не всегда находит нужную кнопку. Только если окно программы активно. Если находит, то мышка становиться на неё, но не нажимает.
Хотелось бы находить кнопку даже если окно не активно и нажимать её.
И ещё хотелось бы понять, есть ли другой способ, без поиска по цвету найти и нажать кнопку в моем случае.
Вот код
Код:
$boton_stat = PixelSearch(0, 0, 1936, 1056, 0xE49E20, hwnd("Диспетчер 103 (хххх)"))
If Not @error Then
    MouseClick('left', $boton_stat[0] , $boton_stat[1], 1, 1)
Else
    MsgBox(16, 'Error', 'Не нашел кнопку')
EndIf

Так понимаю, что $boton_stat[0] - это первая координата, $boton_stat[1] - вторая, 1,1 - скорость перемещения мыши

Частично решил. Сперва ошибся в понимании переменных. Забыл, что кроме скорости мыши есть число нажатий. Заменил 1 на 2 и кнопка нажалась, правда не получается сделать новое окно активным. И остается вопрос, можно ли сделать нажатие без поиска по пикселям и как быть, если окно скрыто или не в полноэкранном режиме.
 

Вложения

  • Скриншот 16-11-2020 12.51.57.jpg
    Скриншот 16-11-2020 12.51.57.jpg
    305.9 КБ · Просмотры: 22
  • Скриншот 16-11-2020 12.50.52.jpg
    Скриншот 16-11-2020 12.50.52.jpg
    187.3 КБ · Просмотры: 20
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
мышка становиться на неё, но не нажимает
Если программа запущена с правами администратора, то скрипту тоже нужны права администратора.

находить кнопку даже если окно не активно и нажимать её
Попробуйте ControlClick в панель по координатам кнопки относительно панели.
Также попробуйте функции из GuiToolbar UDF
Код:
_GUICtrlToolbar_ClickButton()
_GUICtrlToolbar_ClickIndex()
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Если программа запущена с правами администратора, то скрипту тоже нужны права администратора.
Эту проблему я уже решил увеличив количество нажатий с 1 до 2.
Код:
MouseClick[/URL]('left', $boton_stat[0] , $boton_stat[1], 2, 1)

Попробуйте ControlClick в панель по координатам кнопки относительно панели
Да, но судя по скринам там нет controlID и $iCommandID. Ну, или я не понимаю, где и как их найти
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Для главного окна панель - это контрол. Все данные есть на скриншоте. Определите примерные координаты середины кнопки относительно левого верхнего угла панели с делайте в эти координаты ControlClick.
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Для главного окна панель - это контрол
А если оно скрыто? Я пробую с помощью WinSetState его восстановить, но почему-то не всегда получается. Пробовал и @SW_SHOW , и @SW_MAXIMIZE , и @SW_RESTORE.
Код:
WinSetState('Диспетчер 103', "", @SW_SHOW)

Так же не получается сделать активным то окно, которое появляется после нажатия кнопки
Возможно нужна какая-то комбинация этих команд для этого?
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Я с этой программой не работал и особенностей реализации её окна и интерфейса не знаю.
 
Верх