我有一个在启动时运行的应用程序作为OS X菜单栏中的菜单(即作为后台应用程序)。从菜单中选择一个选项后,它将转换为前景应用程序(创建停靠图标)并显示一个窗口。
这是我正在使用的背景/前景代码:
+(void) TransformToForegroundApplication {
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
+(void) TransformToBackgroundApplication {
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
}
非常标准的东西,从事物的外观。除了一个小问题外,它的工作正常。
问题是,在我调用TransformToForegroundApplication之后,我在窗口上调用makeKeyAndOrderFront:使它到达Z顺序的前面并获得焦点 - 但它没有。它出现在后台,在其他一切之下。我需要点击停靠栏图标,或者最小化它前面的所有窗口,然后点击该窗口,以便将它带到前面。
有什么想法吗?
答案 0 :(得分:5)
您可能需要激活我认为TransformProcessType()
不会自动执行的应用程序,并且知道-makeKeyAndOrderFront:
不会。
您是否尝试过调用[NSApp activateIgnoringOtherApps:YES]
?