有没有办法(不使用任何未记录的 API)来确定是否正在拖动任何窗口(不仅仅是运行代码的应用程序)?
我可以用
[NSEvent addGlobalMonitorForEventsMatchingMask:]
但这仅适用于一般拖动,无法判断窗口是否被拖动。
谢谢!
更新:我认为答案可能在于这两个函数: CGSGetWindowBounds CGSNewRegionWithData 如果有人能告诉我这些函数的作用以及我在哪里可以找到它们的文档,那就太好了!谢谢。
有没有办法(不使用任何未记录的 API)来确定是否正在拖动任何窗口(不仅仅是运行代码的应用程序)?
我可以用
[NSEvent addGlobalMonitorForEventsMatchingMask:]
但这仅适用于一般拖动,无法判断窗口是否被拖动。
谢谢!
更新:我认为答案可能在于这两个函数: CGSGetWindowBounds CGSNewRegionWithData 如果有人能告诉我这些函数的作用以及我在哪里可以找到它们的文档,那就太好了!谢谢。
您唯一可行的、系统支持的 API 是Accessibility Framework。您可以通过这种方式为其他应用程序的窗口获取通知,但对读取/修改的访问仅限于位置/大小。
我不确定是否有更好的方法,但这是一种方法:
创建一个BOOL
跟踪窗口是否正在移动的 ivar。然后注册NSWindowWillMoveNotification
和NSWindowDidMoveNotication
通知:
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
在这种情况下,检查是否正在拖动窗口)。