我怎样才能进入Mac OS X的“全局”鼠标位置-我的意思是,我怎样才能在cocoa/cf/ mean中找到光标位置,即使它在窗口之外,即使我的窗口处于非活动状态?
我知道这在某种程度上是可能的(即使没有管理员权限),因为我在Java中见过类似的东西--但我想用ObjC编写它
对不起,我的英语--我希望你能理解我的意思;)
发布于 2010-02-15 04:00:43
NSPoint mouseLoc;
mouseLoc = [NSEvent mouseLocation]; //get current mouse position
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y);
如果您希望它连续获得坐标,那么请确保您有一个NSTimer或类似的东西
发布于 2010-02-15 04:13:02
Matt S是正确的,如果您可以使用NSEvent
应用编程接口来获取鼠标位置。但是,您不需要轮询就可以连续获得坐标。您可以改用CGEventTap
:
- (void) startEventTap {
//eventTap is an ivar on this class of type CFMachPortRef
eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
CGEventTapEnable(eventTap, true);
}
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (type == kCGEventMouseMoved) {
NSLog(@"%@", NSStringFromPoint([NSEvent mouseLocation]));
}
return event;
}
这样,您的函数myCGEventCallback
将在每次鼠标移动时触发(无论您的应用程序是否在最前面),而不必轮询信息。完成后,不要忘记使用CGEventTapEnable(eventTap, false)
和CFRelease(eventTap)
。
发布于 2011-08-16 22:52:19
如果你不是在可可之地,活动自来水并不适合这种情况,
CGEventRef event = CGEventCreate(nil);
CGPoint loc = CGEventGetLocation(event);
CFRelease(event);
很管用。
https://stackoverflow.com/questions/2262516
复制相似问题