2016-10-29 7 views
1

Во многих настройках мультимониторинга с мониторами различной высоты стойки вертикальные положения мониторов можно настроить в программном обеспечении так, чтобы их графика правильно выравнивалась. Вертикальное смещение добавляется к координатам мыши Windows, чтобы дать этот эффект; показано в фиолетовом на диаграмме: enter image description here Я создаю программу, которая должна знать, когда мышь пользователя достигла вершины любого из их мониторов. Я пробовал использовать MouseInfo.getPointerInfo().getLocation().y==0, но это не сработает, когда мониторы были смещены в программном обеспечении, потому что верхняя часть монитора может не всегда равна нулю.Java - Как определить вертикальное перемещение некоторых мультимониторных установок?

Есть ли надежный и эффективный способ определения этого смещения на нескольких дисплеях?

+1

не проверял, но в соответствии с Документами, [ 'GraphicsConfiguration.getBounds()'] (https://docs.oracle.com/javase/8/docs/api/java/awt/GraphicsConfiguration .html # getBounds--) звучит как то, что вы ищете. Вы должны иметь возможность получать все мониторы с помощью ['GraphicsEnvironment.getLocalGraphicsEnvironment() .getScreenDevices()'] (https://docs.oracle.com/javase/8/docs/api/java/awt/GraphicsEnvironment.html), и их конфигурации с помощью '' .getConfigurations() '] (https://docs.oracle.com/javase/8/docs/api/java/awt/GraphicsDevice.html#getConfigurations--), но я ик как выбрать из этого массива. – Siguza

+0

@Siguza Спасибо за ваш комментарий, он полностью ответил на мой вопрос, и я смог выполнить то, что я пытался сделать. Сможете ли вы написать это в формате ответа, чтобы я мог дать вам надлежащий кредит? –

+0

Честно говоря, я не хочу менять настройку своего монитора, чтобы проверить правильность ответа, который я бы написал, поэтому я не дал ему ответа в первую очередь. Не стесняйтесь создавать свой собственный ответ с этой информацией, хотя я просто рад помочь. – Siguza

ответ

1

Благодаря комментарию @ Сигузы я смог сделать то, что я пытался выполнить. Проще говоря, вы можете найти Rectangle объект для монитора, что мышь находится на с помощью этого кода: MouseInfo.getPointerInfo().getDevice().getDefaultConfiguration().getBounds()

Rectangle также можно найти для каждого монитора, используя числовой индекс монитора в Windows. Код GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDefaultConfiguration().getBounds() будет возвращать Rectangle для основного монитора (индекс 0), другие мониторы могут быть доступны путем изменения индекса GraphicsDevice

Вертикальное перемещение монитора находится в .y свойстве Rectangle объекта; это значение может использоваться для определения самой верхней координаты монитора.

@ комментарий Siguza в:

Не проверял, но в соответствии с Документами, GraphicsConfiguration.getBounds() походит на то, что вы ищете. Вы должны иметь возможность получить все мониторы с GraphicsEnvironment.getLocalGraphicsEnvironment(). GetScreenD evices() и их конфигурации с помощью .getConfigurations(), но я idk как выбрать из этого массива.