2009-02-17 2 views
3

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

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 

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

ответ

2

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

Если у вас есть доступ к условиям студии AppleScript (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 дает вам прямоугольник с источником в нижнем левом углу LOWER главного монитора. Затем любые вторичные экраны даны относительно этого происхождения. Если вы пытаетесь определить, находится ли окно в этих границах, позиция окна дает в системе координат с началом координат в верхнем левом углу. Это целый беспорядок преобразования, которого я еще не понял.

Смежные вопросы