Получить границы любого окна на рабочем столе в Screen Coordinates, это возможно? - PullRequest
2 голосов
/ 26 декабря 2011

Я ищу способ получить границы экранных координат любого произвольного окна, которое может отображаться на рабочем столе в любое время на компьютере с Windows. Например, скажем, у вас на рабочем столе открыт документ PDF в Adobe, я хотел бы иметь возможность получить координаты / границы этого произвольного окна с какой-либо письменной программой, какой язык используется не важно.

Мой конкретный вопрос: Возможно ли вышеизложенное?

То, что я до сих пор делал, это просто определял положение мыши на экране в Java с помощью класса PointerInfo, в частности, метода getPointerInfo (). (API здесь: http://docs.oracle.com/javase/6/docs/api/java/awt/PointerInfo.html). Опять же, все, что я сделал, это выяснил, где находится мышь в координатах экрана, это не имеет прямого отношения к моей проблеме, но я подумал, что это хорошее место для начала.

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

Спасибо за ваше время, * Кевин 1013 *

РЕДАКТИРОВАТЬ: я опубликовал это в C #, как кажется, это может быть лучшим языком для этой проблемы.

Ответы [ 3 ]

2 голосов
/ 26 декабря 2011

Да, конечно, это возможно. (А под windows лучший язык для этой работы - C #.)

Может быть какой-то способ сделать это, используя только объекты dotnet и вызывая только функции dotnet, но я не знаю ни одного такого метода.

Способ, который я знаю, включает pinvoke, который является механизмом, посредством которого управляемый код в dotnet может вызывать неуправляемый код в собственных библиотеках Windows.

Посмотрите на функцию WindowFromPoint: http://www.pinvoke.net/default.aspx/user32.windowfrompoint

И когда вы найдете окно, посмотрите на функцию GetWindowRect: http://www.pinvoke.net/default.aspx/user32.getwindowrect

0 голосов
/ 27 декабря 2011

Достаточно ли мотивирован конечный пользователь, чтобы помочь? Если так, то это легко.

  1. Получите скриншот всего экрана.
  2. Покажите его пользователю в виде значка изображения -> метка -> панель прокрутки -> рамка.
  3. Добавьте слушателя мыши к метке.
  4. Попросите пользователя выбрать прямоугольный участок этикетки.
  5. Используйте начальную / конечную точки перетаскивания мышью в качестве углов прямоугольника.

Конечно, есть некоторые хитрости, которые можно сделать. Предлагайте расширенные виды краевых углов, предлагайте способы регулировки каждого углового пикселя за пикселем. Если вы придерживаетесь этой стратегии, вы можете начать с этого кода , который предназначен для выбора точки на экране.

0 голосов
/ 26 декабря 2011

Посмотрите на этот Javadoc для Windows (Java AWT). Кажется, что он делает некоторую попытку сделать это, но это не может гарантировать.

...