2011-02-17 45 views
1

說我有一個標準的Cocoa應用程序調用Foo.app(就像一個你得到的只是通過選擇新建項目>在Xcode Cocoa應用程序),如果我用通過終端打開應用程序:Cocoa應用程序的可執行文件可以從調用者那裏竊取焦點嗎?

open Foo.app/ 

然後我在頂部的狀態欄上看到Foo的名字,並且它的窗口在所有其他應用程序前面都是焦點。

相反,如果我直接從終端調用埋在.app文件夾中的可執行文件,如:出現發生

Foo.app/Contents/MacOS/Foo 

沒有。在檢查應用程序確實已打開,但它不是重點(終端仍然是),我必須在碼頭上找到它或找到它的窗口。

Foo應用程序在運行時是否有任何方法確保它的焦點?即使它通過如上所述的可執行文件運行?

+1

爲什麼你想重寫正常的行爲? – Chuck 2011-02-17 21:37:50

+0

我們正在製作一個可以從MATLAB shell調用的應用程序。正常行爲在matlab窗口後面打開。 – 2011-02-23 19:14:32

回答

2

您的應用程序可以通過調用

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; 

NSApplication文檔的更多信息「偷焦點」。

0

也許AppleScript?

tell application "TextEdit" 
    activate 
end tell 
+0

我希望不要訴諸此。但目前這是最好的選擇......看起來像一個全面的可可應用程序應該有權這樣做。 - 感謝 – 2011-02-17 17:24:28

+0

好吧,這個問題現在只有10分鐘的時間:) – justin 2011-02-17 17:26:08

1

您的意思是否鍵入:

open -a /Applications/Foo.app/ 

注意-a選項

+0

不......他們做的事情或多或少都是一樣的。您不需要-a,實際上,您所寫的內容不會在/app.app後使用,您需要:open -a Foo.app,但這並不重要。我的問題的關鍵是避免使用open,並讓應用專注於自己的 – 2011-02-17 19:26:48

0

有(至少)三種不同的方式打開(和互動)從終端應用程序。

  1. 您可以通過鍵入open -a ApplicationName啓動從終端的任何應用程序(即註冊在LaunchServices)(注意,你不需要尾隨「的.app」或給予任何路徑)

  2. 可以打開一個應用程序通過鍵入open /path/to/ApplicationName.app給予其特定的路徑(你很少會需要的是,鑑於應用程序很可能已經在LaunchServices註冊)

  3. 可以打開和互動與可執行如果你輸入open /path/to/ApplicationName.app/Contents/MacOS/ApplicationName。這裏的區別在於對於某些應用程序,您可以在命令行上傳遞參數或與它們進行交互。繼續並嘗試open /Applications/Mail.app/Contents/MacOS/Mail例如 - 它會給你一個調試日誌作爲回報。

  4. 即使不使用「打開」,也可以通過直接調用其可執行文件來與某些應用程序進行交互;例如,嘗試/Applications/Firefox.app/Contents/MacOS/firefox-bin —help

所以,如果你想確保命令行啓動的應用程序的重點是,使用這兩種方法1或2

1

如果你問如何給您的應用程序(你」重新編寫)這種行爲 - 在applicationWillFinishLaunching:內,您可以撥打[NSApp activateIgnoringOtherApps:YES]

相關問題