Applescript, несколько мониторов и максимальные размеры окон - PullRequest
3 голосов
/ 18 февраля 2009

Я изучаю управление окнами в OS X (пытаясь добиться чего-то вроде WinSplit Revolution), и мне нужно использовать applecript, чтобы вытащить максимальный размер окна на данном мониторе. В настоящее время я нашел:

tell application "Safari"
    set screen_width to (do JavaScript "screen.availWidth" in document 1)
    set screen_height to (do JavaScript "screen.availHeight" in document 1)
end tell

Это работает для основного монитора при настройке нескольких мониторов, но совсем не обеспечивает вторичные мониторы. Я также прочитал подробный метод здесь , и это, очевидно, не работает для нескольких дисплеев эффективным способом. Есть ли эффективный способ получить максимальный размер окна нескольких дисплеев с помощью appleScript?

1 Ответ

2 голосов
/ 25 февраля 2009

Было много попыток получить размеры монитора путем чтения системных списков файлов. Смотри http://macscripter.net/viewtopic.php?id=15425

Если у вас есть доступ к терминам AppleScript studio (ASS), вы можете вызывать методы в NSScreen, чтобы получить все мониторы, а затем запрашивать их размеры. Самый простой способ использовать термины ASS в простом AppleScript - это скомпилировать пустое приложение ASS в Xcode. В этом примере я создал простое приложение ASS с именем ASSAccess, которое дает мне доступ к терминам ASS:

tell application "ASSAccess"
    -- The first item in this list will be your main monitor
    set screensArray to call method "screens" of class "NSScreen"

    set Displays to {}
    if {} is not screensArray then
        repeat with displayNo from 1 to (count screensArray)
                    -- call visibleFrame instead to take into account the Dock and menubar
            set dims to call method "frame" of (item displayNo of screensArray)
            copy dims to end of Displays
        end repeat
    end if
end tell

Теперь проблема, с которой я сталкиваюсь в этих измерениях, - это система координат. Метод рамки NSScreen дает вам прямоугольник с началом координат в левом нижнем углу основного монитора. Затем любые вторичные экраны даны относительно этого источника. Если вы пытаетесь определить, находится ли окно в этих границах, позиция окна задается в системе координат с началом координат в верхнем левом углу. Это целый беспорядок конверсии, который я еще не выяснил.

...