由ID

2015-04-01 41 views
0

將應用程序置於前面我想使用AppleScript將應用程序置於最前面。如果我運行以下腳本由ID

tell application "System Events" 
    tell process id 916 
    activate 
    end tell 
end tell 

該過程不會到達前面。相反,只有當前最前端應用程序的活動窗口失去焦點,但該應用程序停留在前面。

它甚至可以用進程ID而不是應用程序名來做到這一點嗎?我已經在Mac OS X 10.6.8和10.7.5上試過了。

我正在尋找一個普通的AppleScript解決方案。它不應該使用任何shell命令或任何其他解決方案。我想使用進程ID號,因爲我可能運行同一應用程序的多個實例(在同一個文件位置)。

+1

好了,我給了一個答案,但它包括了'做外殼script'命令。我忽視了最後一部分。在這一點上你應該考慮'做shell腳本'是'普通的Applescript'。但我不想引起你的憤怒,所以我刪除了我的答案。 – CRGreen 2015-04-01 23:09:23

回答

1

我已經找到了以下解決方案:

tell application "System Events" 
    set myProcesses to every process whose unix id is myPocessID 
    repeat with myProcess in myProcesses 
     set the frontmost of myProcess to true 
    end repeat 
end tell 

Foo的回答也工作:

tell application "System Events" 
    set frontmost of every process whose unix id is myProcessID to true 
end tell 
+0

我不確定重複循環是否真的有必要。我不接受我自己的答案(尚未),並會等待任何其他建議。 – Mark 2015-04-01 23:44:33

+0

是的。這是一個難題。並且可能以前被問過。雖然可能沒有這樣的限制。 – CRGreen 2015-04-02 02:37:22

+1

嘗試'告訴應用程序「系統事件」 設置unix id爲myProcessID爲True的每個進程的最前端「# – foo 2015-04-02 18:31:26

0
set processID to 432--currently firefox for me 
tell application "System Events" to set a to file of 1st item of (processes whose unix id = processID) 
activate application (a as alias as string) 

這使用應用程序文件的路徑,這顯然是必要的(不只是名稱)。 我有另一個使用do shell script的答案;如果你願意,我可以補充一點。

+0

感謝您的嘗試。我有一個可以運行多個實例的進程,它們都具有相同的應用程序路徑。因此,我認爲這個解決方案是行不通的,但我會用它作爲一個靈感。 – Mark 2015-04-01 23:20:24

+1

啊,是的,你應該提到多個實例部分。這是至關重要的;你應該添加到你的問題。 – CRGreen 2015-04-01 23:21:14