我试图弄清楚如何使用Cocoa / Objective-C获取最前面窗口的名称。我正在将Accessibility API用于我的应用程序中的其他功能,所以如果需要它可以很好,但我没有找到这样做的命令。有谁知道如何在Objective-C中找到最前面窗口的名称? 提前谢谢。
答案 0 :(得分:1)
你没有完全说出来,但我猜你想要自己应用程序的最前面的窗口。我不知道这是否是最伟大的,但这对我有用:
- (NSWindow*) frontmostWindowP {
NSArray* windNumsArray = [NSWindow windowNumbersWithOptions:0];
NSInteger frontmostNumb = [[windNumsArray objectAtIndex:1] integerValue];
NSArray* windObjsArray = [[NSApplication sharedApplication] windows];
for ( NSWindow* windP in windObjsArray )
if ( [windP windowNumber] == frontmostNumb )
return windP;
return 0;
}
“[NSWindow windowNumbersWithOptions:0]”返回一个任意查找整数“windowNumbers”的数组,如[10,313,319,384]。第一个数字对我来说总是“10”,而且它是垃圾。我想也许它代表菜单栏,或者其他东西。无论如何,元素1到N是应用程序窗口的窗口数,按顺序,从前到后。所以这就是“[windNumsArray objectAtIndex:1]”的原因。问题是“windowNumber”在其他方面相当无用,但我们已经到了一半。
“[[NSApplication sharedApplication] windows]”返回一个窗口数组,这次NSWindow指针,不以任何可信任的顺序。所以剩下的就是找到具有正确windowNumber的NSWindow *,因此是for循环。
如果您对自己应用以外的其他窗口感兴趣,请查看“NSWindow windowNumbersWithOptions”的选项。
答案 1 :(得分:1)
您可以使用NSApplication的keyWindow并访问NSWindow的title属性。要访问其他应用程序的窗口,您可以参考此 Getting the main window of an app via an NSRunningApplication instance
"传统上,苹果公司对这类事情一直保持沉默。 NSRunningApplication本身刚刚在10.6中引入,正如你所说,它有点受限。根据您的要求,答案可能在Accessibility框架中,也可能是CGWindow API。您可以使用NSRunningApplication中的processIdentifier将其与这些API进行匹配。"