2013-02-08 17 views
6

Jak ustawić fokus na określone okno danej aplikacji za pomocą applescript?Ustaw fokus na konkretne okno aplikacji używając applescript

Mam kilka okien iTerm2 działających na różnych wyświetlaczach. Chcę ustawić fokus na określone okno za pomocą applescript.

Potrzebuję dwóch rzeczy, jednego skryptu, który zbiera identyfikatory okna i drukuje je na standardowe wyjście. Mam to:

tell application "iTerm" 
    set wins to id of every window 
end tell 

która drukuje 6 liczby całkowite: 3034, 2528, -1, -1, -1, -1

Bonus Pytanie: Jakie są cztery -1'S?

Potem spróbuj:

tell application "System Events" 
    activate window 3034 
end tell 

na którym jedyną rzeczą dzieje, że tracę ostrość mojego obecnego terminalu (w którym piszę te polecenia), nie ma znaczenia, czy mogę określić 3034 lub 2528 jako ID.

+2

Sprawdź [to pytanie na Ask Different] (http://apple.stackexchange.com/questions/39204/script-to-raise-a-single-window-to-the-front); jeśli połączysz akcję "wykonuj akcję" AXRaise "z niektórych Windows" z aplikacją "powiedz" Aplikacja "aby aktywować", dostaniesz to, czego chcesz. Ale zastrzeżenie (i powód, dla którego nie jest to odpowiedź), polega na tym, że nie można w ten sposób określać okien za pomocą identyfikatora okna (co ma sens, tak jak rozumiem, identyfikatory okien są specyficzne dla aplikacji). Dodatkowe pytanie: wartości -1 są prawdopodobnie takie, jak okna dialogowe preferencji/wyszukiwania, które mogą, ale nie muszą być widoczne. –

Odpowiedz

3

Prawie go masz. Można odfiltrować „-1” identyfikatory okiennych jak tylko przez patrząc na widocznych okien:

tell application "iTerm 2" 
    set wins to id of every window whose visible is true 
end tell 

I zdobione to patrząc na wyniki:

tell application "iTerm 2" to properties of every window 

Zauważyłem, że „- 1" okna mają właściwość visible:false

Wtedy można powiedzieć identyfikator okna bezpośrednio do aplikacji iTerm zamiast zdarzeń systemowych:

tell application "iTerm 2" 
    activate window 13195 
end tell 
+4

Chciałbym, żeby to działało dla mnie, ale zamiast tego aktywuje tylko ostatnie aktywne okno danej aplikacji. –

Powiązane problemy