NSEvent addGlobalMonitorForEventsMatchingMask не работает в приложении CLI

Я новичок в Obj-C и Cocoa. Я пытаюсь разработать очень простое приложение командной строки, которое при запуске ожидает несколько глобальных событий мыши и завершает работу, когда все готово. Я правильно реализовал NSRunLoop, чтобы избежать немедленного завершения приложения cli, но я не могу понять, как происходит прослушивание событий мыши.

Я использую этот фрагмент:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *mouseEvent) {
    NSLog(@"Mouse moved: %@", NSStringFromPoint([mouseEvent locationInWindow]));
}];

Я - мое приложение CLI, оно просто ничего не запускает, хотя компилируется правильно, в то время как оно работает просто отлично, если его вставить в пустое приложение Cocoa, в методе applicationDidFinishLaunching в классе appDelegate.

Что мне не хватает? Спасибо!

pd: Я не уверен на 100%, что мне нужен CLI. Я также мог бы быть невидимым или безголовым приложением, без окна, пункта меню или чего-либо связанного с этим, просто процессом, который выполняется в течение нескольких секунд, пока критерии не будут выполнены.


person Ramiro Araujo    schedule 19.02.2014    source источник


Ответы (1)


Я предполагаю, что вам нужен работающий NSApplication для использования NSEvent. Я думаю, вы могли бы сделать безголовый NSApp без значков.

person Wil Shipley    schedule 20.02.2014
comment
В итоге я использовал события Quartz, как описано здесь: stackoverflow.com/a/3135508/1098460. Немного низкий уровень на мой вкус, но работает - person Ramiro Araujo; 20.02.2014
comment
NSEvent включен в AppKit. Вы можете импортировать AppKit и попробовать это сделать, но в большинстве случаев CGEvent должен быть намного легче. Хотя я не уверен в странности приложения CLI, запрашивающего управление вашим компьютером, будет выглядеть... (если ваш инструмент не работает от имени пользователя root, ему не нужно спрашивать.) - person uchuugaka; 20.02.2014