我正在使用 addGlobalMonitorForEventsMatchingMask 来监听 Cocoa 中的事件:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask
handler:^(NSEvent *event) {
NSLog(@"Dragged...");
}];
虽然我想知道我是否正在拖动/移动一个窗口(以及哪个窗口,我可以找到焦点窗口,但在按住命令并拖动窗口时,据我所知它并没有获得焦点。)
那么,我可以检测我是否在拖动窗口吗?
更新:
我现在有一个类:“ SATest : NSObject <NSWindowDelegate>
”,我在其中实现了 windowDidMove 方法(稍后可能还有 windowWillMove。)不过,现在下一步是将其附加到一个窗口,对吗?所以我现在的问题是:如何将代理附加到所有应用程序的所有窗口?
更新 2:
我现在可以在屏幕上找到所有打开窗口的列表:
AXUIElementRef _systemWideElement;
_systemWideElement = AXUIElementCreateSystemWide();
CFArrayRef _windows;
AXUIElementCopyAttributeValues(_systemWideElement, kAXWindowsAttribute, 0, 100, &_windows);
现在我必须遍历窗口,并且每个得到它的 NSWindow 以便我可以将我的委托添加到它:[window setDelegate:self];
更新3:要清楚,这个问题是关于检测所有应用程序的所有窗口的拖动。不仅是我自己的应用程序的窗口。
另外,我对这个事件和窗口管理的东西很陌生,所以不需要让你的答案简短我很高兴阅读了很多:P
谢谢!-P