首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LSUIElement“附件”应用程序放在最前面

将LSUIElement“附件”应用程序放在最前面
EN

Stack Overflow用户
提问于 2012-06-23 00:18:54
回答 2查看 1.1K关注 0票数 2

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

当我将应用程序更改为“常规”应用程序(没有LSUIElement)时,[NSApp activateIgnoringOtherApps:YES]工作得很好。然而,当我将其设置为LSUIElement时,它会显示窗口,但窗口被卡在safari (插件正在运行的位置)后面,而不是在其他所有东西之上。我正在调用-[NSWindow makeKeyAndOrderFront:self];,但这没有任何区别。

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

我已经详尽地寻找了一个现有的调用来实现这一点,我对如何伪造鼠标点击或者甚至运行一些applescript来实现这一点的建议持开放态度,也许有一种未记录的方法可以做到这一点。

LSUIElement的苹果文档声明“应用程序不会出现在Dock中,也没有菜单栏,但它可能会以编程方式激活”,但我找不到实现这一点的魔力。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 18:24:46

你需要先开通你的应用:

代码语言:javascript
复制
[NSApp activateIgnoringOtherApps:YES];

然后让你的窗口成为key窗口:

代码语言:javascript
复制
[NSWindow makeKeyAndOrderFront:nil];

这在我的项目中是有效的。

票数 2
EN

Stack Overflow用户

发布于 2012-06-25 15:27:49

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

代码语言:javascript
复制
ProcessSerialNumber psn;
if (noErr == GetCurrentProcess(&psn))
{
    (OSStatus)SetFrontProcess(&psn);
}

(这是Carbon API的一部分。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11160180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档