Получить разрешение экрана окна с помощью Applescript - PullRequest
0 голосов
/ 10 сентября 2018

В случае нескольких экранов, есть ли способ узнать, на каком экране отображается документ приложения?

Например, в Photoshop я могу получить положение окон документа с помощью:

tell application "System Events" to tell application process "Adobe Photoshop CS6"
    ---------- document's window list
    set docsWinList to {}
    copy (the windows whose name ≠ "") to docsWinList
    set docsWinCount to (count of docsWinList)
    if (docsWinCount < 1) then return -- no opened documents

    ---------- position of the first document's window
    tell item 1 of docsWinList
        set hvCoords to position -- list with 2 items : h and v coords
    end tell
end tell

Но эти координаты абсолютные для всех экранов (и могут быть отрицательными).

С другой стороны, я могу знать все экраныразрешение с помощью скрипта, найденного здесь:

on getScreensResolution()
    set screensSizes to {}
    repeat with p in paragraphs of (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution:/{ printf \"%s %s\\n\", $2, $4 }'")
        set screensSizes to screensSizes & {{word 1 of p as number, word 2 of p as number}}
    end repeat
    # `screensSizes` now contains a list of size lists;
    # e.g., with 2 displays, something like {{2560, 1440}, {1920, 1200}}

    return screensSizes
end getScreensResolution

Поскольку ранее найденные координаты окна могут быть отрицательными, в зависимости от того, отображается ли окно на втором экране, и этот экран физически расположен слева от основного экрана (определяется ОС), я хотел бы знать разрешение экрана этого окна документа.

Я не уверен, что это возможно, или, может быть, это требует много вычислений.

1 Ответ

0 голосов
/ 21 ноября 2018

(В дополнение к вашим мыслям я хотел бы отметить, что окна могут иметь отрицательные значения местоположения, даже если вы используете только ОДИН экран: просто переместите любое окно за левую границу экрана ...)

Если у вас ровно два экрана, на ваш вопрос довольно легко ответить.
Начиная с первого скрипта, просто добавьте эту строку ...

if (item 1 of (size of window 1 as list)) * -1 > (item 1 of hvCoords)) then display dialog "Your window is located on a screen left of your active one."

- «if… then» решает, больше ли отрицательное значение x окна 1, чем его фактическая ширина
- «Отображение диалога» - это заполнитель / обратная связь для любого кода, который вы планируете добавить…

Например: если окно размером 750x400px возвращает значение x, равное -1,122, в приведенной выше строке будет вычислено
750* -1 > -1,122 => -750 > -1,122 => true => window located on left-screen.

Этот код предполагает, что окно будет отображаться на левом экране * ТОЛЬКО 1018 *, если оно полностью передано туда.
Если окна уже переданы после перемещения «половины их размера», измените приведенный выше код следующим образом:

(item 1 of (size of window 1 as list)) *-1/2
=====
(Вам понадобятся значения вашего второго скрипта, только если вы используете более 2 экранов.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...