我有以下代码:
-(IBAction)beginEventMonitor:(ID)sender { _eventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSleftMouseUpMask) handler:^(NSEvent *incomingEvent) { //NSWindow *targetwindowForEvent = [incomingEvent window]; NSLog(@"Got a mouse click event at %@",NsstringFromPoint([incomingEvent locationInWindow])); }];}-(IBAction)stopEventMonitor:(ID)sender { if (_eventMonitor) { [NSEvent removeMonitor:_eventMonitor]; _eventMonitor = nil; }}
这是一个简单的钩子,告诉我何时在全局级别发生鼠标点击.处理程序正在运行,但incomingEvent的内容似乎没有设置为任何东西.我能找到的唯一有用的信息是点击时鼠标的位置,以及被点击的窗口的windowID.
我不应该能够获得更多信息吗?我没有正确设置显示器吗?我真的希望能够知道点击了哪个窗口,但我甚至找不到将鼠标位置或windowID转换为有用的方法的方法.
解决方法 您可以使用CGWindow API(Leopard中的新增功能)检索有关窗口的更多信息,例如:CGWindowID windowID = (CGWindowID)[incomingEvent windowNumber];CFArrayRef a = CFArrayCreate(NulL,(voID *)&windowID,1,NulL);NSArray *windowInfos = (NSArray *)CGWindowListCreateDescriptionFromArray(a);CFRelease(a);if ([windowInfos count] > 0) { NSDictionary *windowInfo = [windowInfos objectAtIndex:0]; NSLog(@"name: %@",[windowInfo objectForKey:(Nsstring *)kCGWindowname]); NSLog(@"Owner: %@",[windowInfo objectForKey:(Nsstring *)kCGWindowOwnername]); //etc.}[windowInfos release];
那里有很多信息(查看CGWindow.h或参考文档获取可用的密钥).还有一些功能可以创建一个窗口的屏幕截图(如果它被另一个窗口部分覆盖,它甚至可以工作),很酷的东西!
总结以上是内存溢出为你收集整理的objective-c – addGlobalMonitorForEventsMatchingMask仅返回鼠标位置全部内容,希望文章能够帮你解决objective-c – addGlobalMonitorForEventsMatchingMask仅返回鼠标位置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)