LSUIElement应用程序,它启动一个带有应用程序菜单的窗口?

时间:2009-05-02 20:03:56

标签: objective-c cocoa

我正在编写一个最初只以NSStatusItem元素开头的应用程序。用户可以从其菜单中单击打开NSWindow的菜单项。

我希望当该窗口处于焦点时,将显示应用程序菜单。有可能吗?

1 个答案:

答案 0 :(得分:3)

不,为了获取应用程序菜单,您必须将应用程序转换为前台进程(即,不再是LSUIElement)。将应用程序转换到前台后,它就不能再转换回来了。

将应用程序转移到前台的功能是Carbon Process Manager中的TransformProcessType

这里的选项是1)在使用TransformProcessType将进程带到前台之后,编写一个关闭并重新启动应用程序的聪明小技巧。你的另一个选择2)是创建一个两阶段的应用程序(这是我可能会喜欢的选项,如果你的情况可能),其中应用程序的一部分总是在后台(即LSUIElement)。当该应用程序想要提出一个带有菜单的窗口时,它会启动一个包含窗口等的辅助应用程序作为常规应用程序。用户完成后,该应用程序将被解除并关闭。这两个应用程序可以通过任意数量的IPC机制轻松进行通信,包括UD套接字,Cocoa分布式对象,NSMessagePorts等。