我有一个LSUIElement
应用程序需要将其状态保持为LSUIElement
(它不能有停靠图标)此应用程序由插件启动和处理。
当我更改应用程序以使其成为“常规”应用程序(没有LSUIElement
)时,[NSApp activateIgnoringOtherApps:YES]
完美无缺。然而,当我将它设为LSUIElement
时,它会显示窗口,但是窗口被卡在safari(插件正在运行的位置)后面,但是在其他所有内容之上。我打电话给-[NSWindow makeKeyAndOrderFront:self];
,但这没有任何区别。
要明确“插件”方面是无关紧要的,因为插件和应用程序是两个独立的进程。该插件将一个事件(通过一个马赫端口)发送到应用程序,该应用程序调用一些代码来打开窗口并使其聚焦。问题是使它聚焦的代码只有在它不是LSUIElement
应用程序时才有效。
我已经详尽地搜索了一个现有的调用来完成这项工作,我愿意接受关于如何伪造鼠标点击的建议,或者甚至运行一些AppleScript来完成这项工作,也许这是一种没有文档记录的方法。
Apple LSUIElement
状态的文档“该应用程序未出现在Dock中,并且没有菜单栏,但可能会以编程方式激活”但我无法找到启用此功能的魔力。
答案 0 :(得分:0)
以下方法适用于“LSUIElement”设置为“1”的应用,即使整个应用程序使用的是Cocoa:
ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
(OSStatus)SetFrontProcess(&psn);
}
(这是Carbon API的一部分。)
答案 1 :(得分:0)
您需要先激活您的应用:
[NSApp activateIgnoringOtherApps:YES];
然后让你的窗口成为关键窗口:
[NSWindow makeKeyAndOrderFront:nil];
这适用于我的项目。