我有一个需要保持LSUIElement状态的LSUIElement应用程序(它不能有一个停靠图标)这个应用程序是由一个插件启动和处理的。
当我将应用程序更改为“常规”应用程序(没有LSUIElement)时,[NSApp activateIgnoringOtherApps:YES]工作得很好。然而,当我将其设置为LSUIElement时,它会显示窗口,但窗口被卡在safari (插件正在运行的位置)后面,而不是在其他所有东西之上。我正在调用-[NSWindow makeKeyAndOrderFront:self];,但这没有任何区别。
明确地说,“插件”这一端是无关紧要的,因为插件和应用程序是两个独立的进程。该插件向应用程序发送一个事件(通过mach端口),该应用程序调用一些代码来打开窗口并使其成为焦点。问题是,只有当它不是LSUIElement应用程序时,使其成为焦点的代码才有效。
我已经详尽地寻找了一个现有的调用来实现这一点,我对如何伪造鼠标点击或者甚至运行一些applescript来实现这一点的建议持开放态度,也许有一种未记录的方法可以做到这一点。
LSUIElement的苹果文档声明“应用程序不会出现在Dock中,也没有菜单栏,但它可能会以编程方式激活”,但我找不到实现这一点的魔力。
发布于 2017-03-01 18:24:46
你需要先开通你的应用:
[NSApp activateIgnoringOtherApps:YES];然后让你的窗口成为key窗口:
[NSWindow makeKeyAndOrderFront:nil];这在我的项目中是有效的。
发布于 2012-06-25 15:27:49
下面的方法适用于我在"LSUIElement“设置为"1”的应用程序中,即使整个应用程序都在使用Cocoa:
ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
(OSStatus)SetFrontProcess(&psn);
}(这是Carbon API的一部分。)
https://stackoverflow.com/questions/11160180
复制相似问题