使用Applescript检索窗口的屏幕分辨率

时间:2018-09-10 14:25:01

标签: applescript

如果有多个屏幕,是否有办法知道应用程序文档显示在哪个屏幕上?

例如,在Photoshop中,我可以使用以下方法检索文档窗口的位置:

computed: {
  dialogDataProp: {
      get: function() {
        return this.dialog;
      },
      set: function() {}
    }
}

但是这些坐标在所有屏幕上都是绝对(可以是负数)。

另一方面,我可以通过以下脚本了解所有屏幕的分辨率:

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

由于先前找到的窗口坐标可能为负,这取决于该窗口是否显示在第二个屏幕上,并且此屏幕实际上位于主屏幕(由OS定义)的左侧,所以我想知道分辨率该文档窗口的屏幕。

我不确定是否可行,或者可能涉及很多计算。

1 个答案:

答案 0 :(得分:0)

(除了您的想法,我想指出,即使您仅使用一个屏幕,窗口也可能具有负位置值:只需将任何窗口移到屏幕左边界之外……)

如果只有两个屏幕,您的问题很容易回答。
从您的第一个脚本开始,只需添加此行……

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."

–“如果…则”决定“窗口1”的负x值是否大于其实际宽度
–“显示对话框”是您计划添加的任何代码的占位符/反馈……

例如:如果大小为750x400px的窗口返回x值为-1,122,则上述行将计算
750* -1 > -1,122 => -750 > -1,122 => true => window located on left-screen.

此代码假定窗口将完全显示在您的左侧屏幕上。
如果一旦“一半大小”的窗口已经被转移,则修改上面的代码:

(item 1 of (size of window 1 as list)) * -1/2
 =====
(仅当您使用两个以上的屏幕时,才需要第二个脚本的值。)