我正在研究OS X上的Windows管理(尝试实现像WinSplit Revolution这样的东西),我需要使用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的多个显示的最大窗口大小?
答案 0 :(得分:2)
通过读取系统plist文件,已经进行了许多尝试来获取监视器尺寸。见http://macscripter.net/viewtopic.php?id=15425
如果您可以访问AppleScript studio(ASS)条款,则可以在NSScreen中进行方法调用以获取所有监视器,然后询问它们的大小。在普通的AppleScript中使用ASS术语的最简单方法是在Xcode中编译一个空的ASS应用程序。在这个例子中,我创建了一个简单的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的框架方法为您提供一个矩形,其原点位于主监视器的左下角。然后,相对于该原点给出任何二级屏幕。如果您正在尝试确定窗口是否在这些边界内,则窗口位置在坐标系内给出,其原点位于UPPER左上角。这是一整堆转换,我还没有想到。