我有一个应用程序,它在启动时作为OS X菜单栏中的菜单运行(即作为后台应用程序)。当您从菜单中选择一个选项时,它会转换为前台应用程序(创建停靠图标)并显示一个窗口。
下面是我使用的后台/前台代码:
+(void) TransformToForegroundApplication {
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
}
+(void) TransformToBackgroundApplication {
ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
}从外观上看,这是相当标准的东西。它工作得很好,除了一个小问题。
问题是,在我调用TransformToForegroundApplication之后,我调用了窗口上的makeKeyAndOrderFront:,让它出现在Z顺序的前面并接收焦点--但两者都没有。它显示在背景中,在其他所有东西的下面。我需要单击停靠图标,或者最小化它前面的所有窗口,然后单击该窗口,以便将其带到前面。
有什么想法吗?
发布于 2013-07-17 12:58:28
也许你需要激活这个应用程序,我认为TransformProcessType()不会自动激活,我知道-makeKeyAndOrderFront:也不会。
你试过给[NSApp activateIgnoringOtherApps:YES]打电话吗?
https://stackoverflow.com/questions/17691347
复制相似问题