我正在使用Window Services' CGWindowListCreate
和CGWindowListCreateDescriptionFromArray
获取窗口信息。在常规空间中获取kCGWindowBounds
时,一切正常(我在第0层的最前面的窗口周围绘制边框)。但是,当我在全屏应用程序的空间中使用相同的方法时,我得到了无意义的界限:(0,855,480,1)。
如果有一种简单的方法可以判断我目前是否在全屏应用的空间,我不会太在意这件事,因为那时我只是画一个边框屏幕(好吧......如果菜单栏显示的话,将依赖...)。
这是一个错误,还是有这种行为的原因?
修改 找出我的问题。这是一个比我想要的更大的问题。事情是API通过所有NSWindows,甚至那些不是,正常的窗户。例如,Chrome底部的Chrome加载栏本身就是一个窗口,Mail也在应用程序的顶部有一些窗口。这是一个问题,因为我无法区分看起来最前面的窗口。
对于我的应用程序,我想捕获一个特定窗口来拦截其中的鼠标事件。我本来希望能够让用户按下热键,然后单击所需的窗口进行选择,但没有API来获取光标下的窗口。我不知道如何继续。
编辑2: 为了更好地帮助人们找到有用的答案,更改了标题:" Quartz Window Services为全屏应用返回错误的窗口界限"
答案 0 :(得分:0)
您是否为窗口委托定义了这些方法?
- (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
{
NSRect mainDisplayRect = [[NSScreen mainScreen] frame];
CGSize cgScreenSize = CGSizeMake(mainDisplayRect.size.width, mainDisplayRect.size.height);
return cgScreenSize;
}
- (void)windowWillEnterFullScreen:(NSNotification *)notification
{
}
- (void)windowDidEnterFullScreen:(NSNotification *)notification
{
}
- (void)windowWillExitFullScreen:(NSNotification *)notification
{
}
答案 1 :(得分:0)
我继续浏览描述词典并检查当前光标位置是否在窗口范围内。满足这个要求的第一个窗口就是光标下面的窗口,这正是我需要的。
另外,为了找到当前最顶层的窗口,我使用了Accessibility API的iChat Apple示例来注册ApplicationActivatedNotification
和MainWindowDidChangeNotification
。两个通知组合将让我跟踪活动应用程序的主窗口(最顶层)。为了获得这种情况的界限,我只使用辅助功能API获得了主窗口的位置和大小。