@SergMC

Как получить координаты (x,y) элемента (кнопки) открытой программы exe средствами Java?

Здравствуйте. Делаю программу на Java. Хочу реализовать имитацию нажатия на кнопку открытой программы.
5b671331bf5c9765083894.jpeg
На скриншоте видна сама программа. Задача: программно нажать на кнопку Войти. Нашёл уже костыль:
package ru.first;

import java.awt.event.*;
import java.awt.Robot;
public class test {
 public static void main(String args[]) {
  Robot bot = null;
  try {
   bot = new Robot();
  } catch (Exception failed) {
   System.err.println("Failed instantiating Robot: " + failed);
  }
  int mask = InputEvent.BUTTON1_MASK;
  bot.mouseMove(x, y);
  bot.mousePress(mask);
  bot.mouseRelease(mask);
 }
}

Суть кода - нажать на кнопку мыши по заданным координатам. Всё что нужно: получить координаты элемента открытой программы exe. Элемент - кнопка Войти (на скриншоте). Каким образом это можно сделать?
  • Вопрос задан
  • 1262 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Satangelus
Координаты кнопки имхо можно определить так:
1. Самый простой способ посчитать пикселами от края окна. А координаты окна, получать через винапи, получая hwnd нужного процесса, а уже от него вызывать функцию определения координат окна.
2. Сложный через тернии к звездам. Сначала получаем hwnd активного окна процесса. А дальше магия. Все видимые оконные элементы в системе региструют "оконный класс". То есть через hwnd окна можно получить список дочерних "окон" и уже по этому списку разбираться, где в списке нужная нам кнопка.

Нажать кнопку.
1. Проще сдвинуть мышку в клиентских координатах и кликнуть.
2. Если кнопка может появляться в разных местах окна, имитируем переход по элементам окна посылкой нажатия ТАБ и потом посылаем ЕНТЕР.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
28 мар. 2024, в 12:05
2000 руб./за проект
28 мар. 2024, в 11:24
5000 руб./за проект