2012-05-16 19 views
0

我有2個空中應用程序,我寫了。他們在10秒後自動全屏。在此之前,他們需要被髮送到他們正確的顯示。 「APP_1」需要在顯示器1上運行,「APP_2」需要對顯示器2在雙顯示器上定位帶有applescript的窗口

運行本質上講,我有這樣的代碼:

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座標。

任何人都有這方面的見解?我一直在努力在谷歌上找到解決方案几個小時。

+0

這可能是一個愚蠢的問題,但是......您的應用程序實際上是否響應「第一個窗口」,並且它的窗口實際上是否響應「set bounds」?換句話說,如果您在應用程序已啓動並運行時手動運行相同的「tell」行,它是否工作? – abarnert

+0

當應用程序已經運行時,我仍然收到相同的錯誤消息 – BumbleShrimp

+0

好的,接下來將它分成兩部分。如果你只是'告訴應用程序'app_1'第一個窗口'?這也會失敗嗎?如果是這樣,那麼你的應用程序不會將其窗口暴露給腳本。如果你認爲它應該是(例如,因爲你已經編寫了代碼來這樣做,或者因爲AIR聲稱會自動發生),那麼這就是你必須解決的問題。如果沒有理由期望這樣做,您需要使用UI腳本(這意味着必須啓用輔助訪問)。 – abarnert

回答

1

這聽起來像你的應用程序不暴露標準的「窗口」類。我不知道AIR應用程序是否應該自動處理此問題,但它不起作用 - 如果是這樣,您需要調試該應用程序。

但另一種選擇是使用UI腳本從外部控制其窗口。取而代之的是:

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 

但是,如果你已經走了系統預置的普及窗格中選中「啓用輔助設備的訪問」,這隻會工作(或通過API完成,「sudo touch /var/db/.AccessibilityAPIEnabled」等)。

+0

我已經完成了您的建議,現在我收到消息「無法將應用程序」系統事件「的類pcap」app_1「設置爲{0,0} – BumbleShrimp

相關問題