Получить границы любого окна на рабочем столе в Координатах экрана, возможно ли это?

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

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

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

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

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

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


person kevin    schedule 26.12.2011    source источник
comment
да - для обычных окон можно.   -  person Yahia    schedule 26.12.2011


Ответы (3)


Да, конечно, это возможно. (А под 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

person Mike Nakis    schedule 26.12.2011
comment
Спасибо за ваш ответ, это было очень полезно. - person kevin; 29.12.2011

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

person Francis Upton IV    schedule 26.12.2011

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

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

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

person Andrew Thompson    schedule 26.12.2011