在双显示器上使用applescript定位窗口

时间:2012-05-16 01:30:35

标签: macos applescript

我写了2个空中应用程序。他们在10秒后自动全屏。在此之前,他们需要被发送到他们正确的显示器。 “app_1”需要在显示器1上运行,“app_2”需要在显示器2上运行。

基本上,我有这段代码:

do shell script "cd /Applications/app_1.app/Contents/MacOS/ ; open app_1;"

对我来说完美无缺。这两个应用程序都是以这种方式启动的,并且有一些代码可以确保应用程序尚未打开,如果有的话就关闭它们。

我尝试添加脚本以在应用启动后定位应用:

do shell script "cd /Applications/app_1.app/Contents/MacOS/ ; open app_1;"
tell first window of application "app_1" to set bounds to {0,0,1920,1080}

这给了我一个错误:

app_1 got an error: Can't set bounds of window 1 to {0,0,1920,1080}  

我尝试在set bounds之前添加延迟几秒钟,以防set bounds启动时应用程序尚未启动,但这并没有改变任何内容。

我还尝试将界限设置为类似{100,100,200,200}的界限,只是为了查看屏幕坐标是否有问题,但仍然是完全相同的错误,仅使用{100,100,200,200}而不是原始的1920x1080坐标。

有人对此有任何见解吗?我一直试图在谷歌上找到解决方案几个小时。

1 个答案:

答案 0 :(得分:1)

听起来你的应用程序没有暴露标准的“窗口”类。我不知道AIR应用程序是否应该自动处理它并且它不起作用 - 如果是这样,你将需要调试它。

但另一种方法是使用UI Scripting从外部控制其窗口。而不是:

tell first window of application "app_1" to set bounds to {0,0,1920,1080}

这样做:

tell application "System Events"
  set position of first window of application process "app_1" to {0, 0}
  set size of first window of application process "app_1" to {1920,1080}
end tell

但是,只有在您进入系统偏好设置的Universal Access面板并选中“启用辅助设备访问权限”(或通过API完成相同操作,“sudo touch /var/db/.AccessibilityAPIEnabled”)时,此功能才有效。等等。)。