我正在研究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的多个显示器的最大窗口大小?
最佳答案
已经进行了许多尝试,通过读取系统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的frame方法为您提供一个矩形,其原点位于主监视器的LOWER左下角。然后,将给出相对于该原点的任何辅助屏幕。如果要确定窗口是否在这些边界内,则窗口的位置在坐标系内,原点位于左上角。我还没弄清楚这是一团糟的转换。