假设我有一个标准的Cocoa应用程序调用Foo.app(就像你在Xcode中选择New Project> Cocoa Application那样),如果我通过终端使用以下命令打开应用程序:
open Foo.app/
然后我在状态栏顶部看到Foo的名字,它的窗口是所有其他应用程序前的焦点。
如果我直接从终端调用埋在.app文件夹中的可执行文件,如:
Foo.app/Contents/MacOS/Foo
出现 。在检查时,应用程序确实已打开,但它没有聚焦(终端仍然是),我必须在扩展坞上找到它或找到它的窗口。
Foo应用程序在运行时是否有任何方法可以确保它的焦点?即使它通过如上所述的可执行文件运行?
答案 0 :(得分:2)
您的应用可以通过调用
“窃取焦点”[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
有关详细信息,请参阅NSApplication文档。
答案 1 :(得分:1)
open -a /Applications/Foo.app/
请注意-a
选项
答案 2 :(得分:1)
如果您在applicationWillFinishLaunching:
内询问如何给予您的应用(您正在撰写)此行为,则可以致电[NSApp activateIgnoringOtherApps:YES]
。
答案 3 :(得分:0)
也许是AppleScript?
tell application "TextEdit"
activate
end tell
答案 4 :(得分:0)
您有至少三种不同的方式从终端打开(并与之交互)应用程序。
您可以通过键入open -a ApplicationName
从终端启动任何应用程序(在LaunchServices中注册)(请注意,您不需要尾随“.app”或提供任何路径)
您可以通过键入open /path/to/ApplicationName.app
打开一个提供其特定路径的应用程序(鉴于应用程序可能已在LaunchServices中注册,您很少需要它)
如果您输入open /path/to/ApplicationName.app/Contents/MacOS/ApplicationName
,则可以打开并与可执行文件进行交互。这里的区别在于对于某些应用程序,您可以在命令行上传递参数或与之交互。继续尝试open /Applications/Mail.app/Contents/MacOS/Mail
例如 - 它会给你一个调试日志作为回报。
/Applications/Firefox.app/Contents/MacOS/firefox-bin —help
。因此,如果您确实要确保命令行启动的应用程序处于焦点,请使用方法1或2。