2

我有一个LSUIElement应用程序需要将其状态保持为LSUIElement(它不能有停靠图标)此应用程序由插件启动和处理。

当我更改应用程序使其成为“常规”应用程序(不带LSUIElement)时,它[NSApp activateIgnoringOtherApps:YES]可以完美运行。但是,当我将其设置为LSUIElement它时,它会显示窗口,但该窗口被卡在 safari 后面(插件正在运行的地方),但在其他所有内容之上。我在打电话-[NSWindow makeKeyAndOrderFront:self];,但这没有任何区别。

需要明确的是,“插件”方面是无关紧要的,因为插件和应用程序是两个独立的进程。该插件向应用程序发送一个事件(通过一个马赫端口),该应用程序调用一些代码来打开窗口并使其成为焦点。问题是使其成为焦点的代码仅在它不是LSUIElement应用程序时才有效。

我已经详尽地搜索了一个现有的调用来完成这项工作,我愿意接受有关如何伪造鼠标点击的建议,甚至运行一些苹果脚本来完成这项工作,也许有一种未记录的方法可以做到这一点。

Apple 文档中的LSUIElement状态“应用程序没有出现在 Dock 中并且没有菜单栏,但它可以通过编程方式激活”,但我找不到启用此功能的魔法。

4

2 回答 2

3

您需要先激活您的应用程序:

[NSApp activateIgnoringOtherApps:YES];

然后让你的窗口成为关键窗口:

[NSWindow makeKeyAndOrderFront:nil];

这适用于我的项目。

于 2017-03-01T10:24:45.610 回答
0

以下方法适用于“LSUIElement”设置为“1”的应用程序,即使整个应用程序都使用 Cocoa:

ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
    (OSStatus)SetFrontProcess(&psn);
}

(这是 Carbon API 的一部分。)

于 2012-06-25T07:27:49.093 回答