检测是否正在拖动任何窗口

时间:2011-03-14 00:18:52

标签: objective-c cocoa xcode core-graphics nsevent

是否有办法(不使用任何未记录的API)来确定是否正在拖动任何窗口(而不仅仅是运行代码的应用程序)?

我可以用

[NSEvent addGlobalMonitorForEventsMatchingMask:]

但这仅适用于一般拖动,并且无法判断是否拖动了窗口。

谢谢!

更新:我认为答案可能在于这两个功能: CGSGetWindowBounds CGSNewRegionWithData 如果有人能告诉我这些功能的作用以及我可以在哪里找到它们的文档,那就太棒了!感谢。

2 个答案:

答案 0 :(得分:0)

您唯一可行的,系统支持的API是Accessibility Framework。您可以通过这种方式获取notifications其他应用程序的窗口,但读取/修改的权限仅限于位置/大小。

答案 1 :(得分:-1)

我不确定是否有更好的方法,但这是一种方法:

创建一个BOOL ivar,用于跟踪窗口是否被移动。然后注册NSWindowWillMoveNotificationNSWindowDidMoveNotication通知:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(windowWillMove:) name:NSWindowWillMoveNotification object:nil];
[nc addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:nil];

然后处理通知并适当地设置ivar:

- (void)windowWillMove:(NSNotification*)notification
{
    windowBeingDragged = YES;
}

- (void)windowDidMove:(NSNotification*)notification
{
    windowBeingDragged = NO;
}

现在您可以检查ivar的值(在这种情况下为windowBeingDragged,以检查是否正在拖动窗口。)