Mac OS X - 没有菜单的应用程序?

8
我想开发一个应用程序,它没有菜单栏、Dock图标或位于应用程序切换器中。基本上,它应该像Quicksilver一样:我可以通过全局热键激活它,比如在Safari中,然后会出现一个小窗口,但是Safari不会变为非活动状态,也不会显示不同的菜单栏。我希望你明白我的意思...
我该如何做到这一点?我可以防止Dock图标和应用程序切换器,但我不知道如何在我的应用程序窗口显示时防止其他应用程序变为非活动状态,或者如何移除菜单栏。
谢谢任何提示!
2个回答

7
尝试搜索“LSUIElement”。这应该为您提供所需的所有信息。 (具体来说,请参阅文档中的此页面)。

我仍然只能激活我的应用程序窗口并停用其他应用程序窗口,或者反过来... - ryyst
1
@ryyst:您希望您的应用程序窗口在不成为“主要”窗口的情况下变为“关键”。 - jscs
@Josh Caswell:我尝试过了,但我的应用程序窗口仍然不活跃(变灰)。我试图让NSTextField成为第一响应者,但这并没有起作用... - ryyst
1
@ryyst:你试图绕过一些AppKit的基本内置行为,这不会很容易。从快银(Quicksilver)的源代码上看,它似乎正在进行自己的事件分发,即不使用标准响应者链--他们实际上是子类化了NSApplication,这在我看来相当罕见。 - jscs
@Josh Caswell:好的,那我接下来会调查一下...谢谢! - ryyst

5
如Dave所说,添加

LSUIElement  YES

在您的应用程序的 Info.plist 文件中添加以下代码。这将消除图标和菜单栏。

```xml LSUIElement 1 ```

然后,在适当的时候(例如通过全局键盘快捷方式触发时),要实际将窗口置于前台,您可以执行以下操作:

ProcessSerialNumber psn = {0, kCurrentProcess};
SetFrontProcess(&psn);

[someWindow makeKeyAndOrderFront:nil];

我希望我的应用程序窗口能够置于前台,并且我希望在文本字段中输入时,之前打开的应用程序不会变为非活动状态(即标题栏变为浅灰色)。 - ryyst
上面的代码对你来说难道不能只做这个吗?对于文本字段焦点,您可能需要设置第一个响应者,但其余部分应该可以正常工作。 - puzzle
不,它不会。正如我所说,其他应用程序将变为非活动状态。 - ryyst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接