首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Mac OS X中获取“全局”鼠标位置

在Mac OS X中获取“全局”鼠标位置
EN

Stack Overflow用户
提问于 2010-02-15 03:55:49
回答 5查看 15.1K关注 0票数 24

我怎样才能进入Mac OS X的“全局”鼠标位置-我的意思是,我怎样才能在cocoa/cf/ mean中找到光标位置,即使它在窗口之外,即使我的窗口处于非活动状态?

我知道这在某种程度上是可能的(即使没有管理员权限),因为我在Java中见过类似的东西--但我想用ObjC编写它

对不起,我的英语--我希望你能理解我的意思;)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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或类似的东西

票数 36
EN

Stack Overflow用户

发布于 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)

票数 29
EN

Stack Overflow用户

发布于 2011-08-16 22:52:19

如果你不是在可可之地,活动自来水并不适合这种情况,

CGEventRef event = CGEventCreate(nil);
CGPoint loc = CGEventGetLocation(event);
CFRelease(event);

很管用。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2262516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档