【发布时间】:2012-06-09 18:17:39
【问题描述】:
我正在使用 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
【问题讨论】:
标签: objective-c macos cocoa