我正在编写一个最初只以NSStatusItem元素开头的应用程序。用户可以从其菜单中单击打开NSWindow的菜单项。
我希望当该窗口处于焦点时,将显示应用程序菜单。有可能吗?
答案 0 :(得分:3)
不,为了获取应用程序菜单,您必须将应用程序转换为前台进程(即,不再是LSUIElement)。将应用程序转换到前台后,它就不能再转换回来了。
将应用程序转移到前台的功能是Carbon Process Manager中的TransformProcessType
。
这里的选项是1)在使用TransformProcessType
将进程带到前台之后,编写一个关闭并重新启动应用程序的聪明小技巧。你的另一个选择2)是创建一个两阶段的应用程序(这是我可能会喜欢的选项,如果你的情况可能),其中应用程序的一部分总是在后台(即LSUIElement)。当该应用程序想要提出一个带有菜单的窗口时,它会启动一个包含窗口等的辅助应用程序作为常规应用程序。用户完成后,该应用程序将被解除并关闭。这两个应用程序可以通过任意数量的IPC机制轻松进行通信,包括UD套接字,Cocoa分布式对象,NSMessagePorts等。