2013-09-05 4 views
1

Я видел много сообщений о том, как отправить окно на передний план в applescript, но я хочу иметь возможность отправить его обратно. Как я могу написать applescript, который это сделает?Как установить индекс окна последним (самый дальний назад) в applescript

+0

В каком приложении конкретно? (у 'Finder Window' есть свой класс) – scohe001

+0

Это не окно поиска - на самом деле это приложение, которое я сделал в openFrameworks, поэтому оно имеет определенное имя, и не будет никаких дополнительных экземпляров этого окна, только другие окна (он будет работать в сочетании с максимальной MSP). В основном, он будет использоваться для питания части производительности, которая проецируется на экран, и запускается через applescript, поэтому, когда она запускается, я не хочу, чтобы она была видимой во всем, что уже проецируется. – mheavers

ответ

0

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

Просто измените «Safari» на имя вашего приложения.

set myAppName to "Safari" 
tell application myAppName to activate 
tell application "System Events" 
    -- wait until your application comes forward and then hide it 
    repeat 
     set p to first process whose frontmost is true 
     if name of p is myAppName then 
      set visible of p to false -- hide your application 
      exit repeat 
     end if 
     delay 0.2 
    end repeat 
end tell 

EDIT: если прятать приложение не работает, то вы могли бы просто нажатие клавиши командной вкладку, которая является командой выбора приложений. В основном ваше приложение выйдет на передний план, а затем нажатие клавиши сделает предыдущее переднее приложение на передний план. Таким образом, ваше окно не пройдет полностью, но оно не будет впереди. Может быть, это сработает.

set myAppName to "Safari" 
tell application myAppName to activate 
tell application "System Events" 
    -- wait until your application comes forward 
    repeat 
     set p to first process whose frontmost is true 
     if name of p is myAppName then exit repeat 
     delay 0.2 
    end repeat 

    -- use the application switcher to bring the previously frontmost application forward 
    keystroke tab using command down 
end tell 
+0

Я пробовал это - окно захватывает веб-камеру, и если окно сведено к минимуму, веб-камера перестает быть широковещательной (замерзает на последнем кадре, видимом до сверления окна) и продолжает обновление при восстановлении окна. – mheavers

+0

ОК. Это была просто мысль. Если я подумаю о другом, я дам вам знать. Удачи. – regulus6633

+0

Ну, у меня есть другая идея. Я добавил раздел EDIT на свой пост. – regulus6633

0

Это переместит переднее окно видоискателя к спине ...

tell application "Finder" to set index of front Finder window to (count Finder windows) 
+0

Спасибо - см. Дополнительное разъяснение выше. Я думаю, ваш ответ будет работать, если я могу передать ему имя моего приложения и установить индекс (подсчитать все окна) - есть ли что-то подобное? – mheavers

+0

Я думаю, что это зависит от того, имеет ли ваше приложение окна или классы документов. Замените «Finder» на ваше имя приложения и замените окно Finder окном или документом. Вам также может потребоваться заменить фронт окном 1 или документом 1. – adayzdone

0

Что-то вроде set index to 999, кажется, не работает, но set index to (count windows) делает:

tell application "TextEdit" 
    set index of window 1 to (count windows) 
end tell 

Вы также можете поднять все другие окна:

tell application "System Events" to tell process "TextEdit" 
    repeat with w in windows 2 thru -1 
     perform action "AXRaise" of w 
    end repeat 
end tell 
0

Я не использовал «openFrameWorks», так что я не уверен, как это работает ...

Но вместо того, изобретать колесо с Applescript.

Вы можете не устанавливать уровень окна в "openFrameWorks"

В Xcode/Цель - с Я хотел бы использовать Уровни NSWindow Window constants.

Чтобы установить обычное окно:

[awindow setLevel: NSNormalWindowLevel]; 

Но установить окно ниже других обычных окон:

[awindow setLevel: NSNormalWindowLevel - 1000]; 

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

Смежные вопросы