2013-02-23 3 views
1

Я изменил некоторые AppleScript, которые я нашел некоторое время назад, чтобы расположить крайнее окно таким образом, чтобы с каждой стороны от края экрана/док-станции/меню находилось около 10 пикселей по краю:Окна оконных окон для всех окон

set front_app to (path to frontmost application as Unicode text) 

tell application "Finder" 
    set _b to bounds of window of desktop 
    set scrn_width to item 3 of _b 
    set scrn_height to item 4 of _b 
end tell 

tell application front_app 
    activate 
    set bounds of window 1 to {10, 35, (scrnWidth - 10), (scrnHeight - 80)} 
end tell 

Проблема заключается в том, что я должен делать это для каждого окна отдельно. Я хотел бы просто запустить его один раз и работать над всеми окнами каждого приложения.

Я пробовал модифицировать около 5 различных сценариев, но просто получить ошибки. Вот что у меня есть:

tell application "System Events" 
    tell application "Finder" 
     set _b to bounds of window of desktop 
     set scrn_width to item 3 of _b 
     set scrn_height to item 4 of _b 
    end tell 
    set _windows to get windows of (application processes whose visible is true) 
    repeat with this_window in (items of _windows) 
     set bounds of this_window to {10, 35, (scrn_width - 10), (scrn_height - 80)} 
    end repeat 
end tell 

Любая помощь будет оценена!

ответ

2

После небольшой работы, вот что я придумал.

tell application "System Events" 
    set frontmostApps to every process whose frontmost is true 
    if ((count of frontmostApps) = 0) then return 
    set frontmostAppAlias to application file of (item 1 of frontmostApps) 
end tell 

tell application "Finder" to set desktopBounds to bounds of window of desktop 

set screenWidth to item 3 of desktopBounds 
set screenHeight to item 4 of desktopBounds 

tell application (frontmostAppAlias as string) 
    set resizableAppWindows to every window whose resizable is true 
    repeat with i from 1 to (count of resizableAppWindows) 
     set appWindow to item i of resizableAppWindows 
     set bounds of appWindow to {10, 35, (screenWidth - 10), (screenHeight - 80)} 
    end repeat 
end tell 

Я изначально от попытки сделать все в пределах tell app "System Events" блока, но обнаружил, что window s из application process х годов, кажется, не позволяют те же вызовы, как обычно window с, даже если из определения сценариев они должен. Это привело к блоку tell непосредственно к самому приложению.

Возможно, вы захотите обернуть set bounds в блоке try, так как, вероятно, будут некоторые приложения, у которых есть изменяемое размер окна с максимальным ограничением по размеру, что может привести к ошибке.

+0

Спасибо! Я немного изменил его, чтобы он прошел через все открытые приложения (что заняло некоторое время, ха-ха, я не очень хорошо разбираюсь в AppleScript). https://gist.github.com/anonymous/5020503 –