Matt S. là đúng rằng nếu bạn có thể sử dụng NSEvent
API để có được vị trí chuột. Tuy nhiên, bạn không phải thăm dò ý kiến để liên tục nhận tọa độ. Bạn có thể sử dụng một CGEventTap
thay vì:
- (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;
}
Bằng cách này, chức năng của bạn myCGEventCallback
sẽ cháy mỗi khi di chuyển chuột (bất kể ứng dụng của bạn là frontmost hay không), mà không cần phải thăm dò ý kiến cho các thông tin. Đừng quên CGEventTapEnable(eventTap, false)
và CFRelease(eventTap)
khi bạn hoàn tất.
Nguồn
2010-02-14 20:13:01
có thể trùng lặp của http://stackoverflow.com/questions/1117065/cocoa-getting-the-current-mouse-position-on-the-screen – outis