如果您不在Objective-C中的应用程序中,如何订购窗口

时间:2010-04-07 14:52:03

标签: objective-c cocoa animation nswindow makekeyandordertofront

有没有办法在应用程序中创建“makeKeyAndOrderToFront”?

如果我在Safari和菜单栏中有一个MenuItem到我的应用程序,按下这个后,我想在前面显示我的应用程序的窗口(makeKeyAndOrderToFront只在你在应用程序中时才会这样做)

我可以使用哪种方式?我该如何设置此窗口的动画(如Tweeties添加新推文 - > atebits.com)。

谢谢!

4 个答案:

答案 0 :(得分:22)

正如您所发现的那样,更改应用程序中的窗口顺序对哪个应用程序处于活动状态没有任何影响。您可以通过激活它将应用程序置于前台:

[NSApp activateIgnoringOtherApps:YES];

如果您的应用程序有停靠图标,则行为与用户点击它的行为类似。

答案 1 :(得分:1)

Applescript将是一个非常简单的方法,使您的应用程序最前沿。但它不会做任何动画。

tell application "System Events" to set frontmost of process "My Application" to true

答案 2 :(得分:0)

如果我理解正确的问题,也许最好的方法来完成你想要的是让你的应用程序响应你选择菜单项后发送给它的Apple事件,这将把你的应用程序和所需的窗口带到前面。

答案 3 :(得分:0)

如果您的应用程序与窗口服务器有连接(如果它使用的是AppKit或Carbon,则可以使用它),您可以使用核心服务功能SetFrontProcess()使其脱颖而出。 SetFrontProcessWithOptions()可用于仅将应用程序的最前面的非浮动窗口放在首位。这些功能似乎可用于64位应用程序,但如果您的目标是10.6+,那么最好使用NSRunningApplication class.类似

的内容
[[[NSRunningApplication
   runningApplicationsWithBundleIdentifier:ident] lastObject]
 activateWithOptions:0]

应该这样做。