exxxcitation1
@exxxcitation1
Ваше Эникейшество

Как получить координаты разных мониторов?

Можно с помощью утилит просмотра окон и других элементов Windows можно увидеть позицию указатель в опредлённом месте экрана. Если мониторов несколько, то и координаты увеличиваются соответственно.
Имеется три монитора и присутствует возможность с помощью функции WinMove подвинуть окно по ним.

Вопрос в том, что хотелось бы как-то получить начальную и конечную координаты определённого дисплея, то есть, например, получить каким-либо образом дескриптор определённого дисплея, по которому через какую-либо функцию можно вычислить эти координаты. Чтобы не отмерять это всё вручную.

Возможен вариант просто перемещения окна программы на дисплей по его номеру в Windows. Есть ли такая возможность?
  • Вопрос задан
  • 520 просмотров
Решения вопроса 1
exxxcitation1
@exxxcitation1 Автор вопроса
Ваше Эникейшество
Из комментариев


Покопался в WinAPI и нашёл метод _WinAPI_EnumDisplayMonitors, который возвращает массив с идентификаторами всех подключённых мониторов (смотрит через драйвер) и разрешениями для них.
Разрешение можно преобразовать в массив координат с помощью _WinAPI_GetPosFromRect.
И отсюда уже плясать, что и для чего нужно.

Ниже код, который выводит кол-во мониторов с их идентификаторами и разрешением:

#include <Array.au3>
#include <WinAPIGdi.au3>

Local $aPos, $aData = _WinAPI_EnumDisplayMonitors()

If IsArray($aData) Then
    ReDim $aData[$aData[0][0] + 1][5]
    For $i = 1 To $aData[0][0]
        $aPos = _WinAPI_GetPosFromRect($aData[$i][1])
        For $j = 0 To 3
            $aData[$i][$j + 1] = $aPos[$j]
        Next
    Next
EndIf

_ArrayDisplay($aData, '_WinAPI_EnumDisplayMonitors')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы