2009-07-18 83 views
1

我正在寻找一种方法来确定第二个最前端的应用程序。这就是我的意思。第二面应用程序?

比方说,我按以下顺序启动三个应用程序:Xcode,Interface Builder和我的应用程序。如果我按下Command-Tab,我应该在切换台中看到四个应用程序:(从左到右)我的应用程序,Interface Builder,Xcode和Finder。

然后让我们说我切换到Finder。应用切换器中的新订单是:Finder,我的应用程序,Interface Builder和Xcode。

如果我然后切换回我的应用程序,那么订单现在是我的应用程序,Finder,Interface Builder和Xcode。

我正在寻找一个API,我可以调用它并在启动时获取Interface Builder是第二个最前端的应用程序,但是当我切换回它时,它现在是Finder。

如果它有所不同,我的应用程序实际上不会出现在应用程序切换器中,因为它将是一个代理应用程序(LSUIElement = YES)。

有没有可以做到这一点的API?根据NSWorkspace的说法,我发现的唯一选择是让计时器持续运行,以持续监控activeApplication是什么。除了在发布期间,这很有效。如果可能,我想在启动时知道第二个最前面的应用程序。

任何想法?

+0

我猜Dock的使用持续监测方法,但你理论上可以退出Dock,看看是否导致订单争夺。如果即使Dock不能确定发布的顺序,那么至少你可以停止浪费时间尝试。 :) – 2017-04-19 00:41:02

回答

0

在启动时,第二个最前面的应用程序不会是最后一个应用程序运行吗?

+0

推测。我怎么能得到这个? – 2009-07-18 23:45:52

0

你可能就可以从组装信息:

流程管理器参考(GetFrontProcess()GetNextProcess()

Foundation.framework/Headers/NSGraphics.hNSCountWindows()NSWindowList()
石英窗服务参考
CoreGraphics.framework/Headers/CGWindow.h
code.google.com CGSPrivate.h
www.cocoadev.com CoreGraphicsPrivate

+0

经过对此的更多研究后,事实证明,流程管理器的流程顺序与Dock的应用程序顺序完全不同。 =( – 2009-07-22 14:29:20

相关问题