Как я могу войти в Mac OS X "глобальное" положение мыши - я имею в виду, как может, я в cocoa/cf/whatever узнаю позицию курсора, даже если это за окном, и даже если мое окно неактивно?
Я знаю, что это так или иначе возможно (даже без администраторских полномочий), потому что я видел что-то как этот в Java - но я хочу записать это в ObjC
Извините за мой английский язык - я надеюсь, что Вы поймете то, что я имею в виду;)
NSPoint mouseLoc;
mouseLoc = [NSEvent mouseLocation]; //get current mouse position
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y);
Если вы хотите, чтобы он постоянно получал координаты, убедитесь, что у вас есть NSTimer или что-то подобное
Мэтт С. прав, если вы можете использовать NSEvent
API для получения местоположения мыши. Однако вам не нужно опрашивать, чтобы постоянно получать координаты. Вместо этого вы можете использовать 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)
, когда закончите.