Получение глобальных событий прокрутки с PyObjC - PullRequest
1 голос
/ 14 мая 2011

Как я могу получить глобальные события прокрутки с PyObjC?Можно ли это сделать с помощью вызова NSEvent?

Пример кода был бы великолепен ...

1 Ответ

1 голос
/ 15 мая 2011

Вы были на правильном пути с NSEvent! Если вы не хотите изменять событие, а просто наблюдать за ним, это так же просто, как вызвать addGlobalMonitorForEventsMatchingMask:handler:. Ваше приложение будет получать уведомления с помощью обратного вызова всякий раз, когда событие указанного вами типа с маской публикуется в другом приложении. * Аргумент обработчика является блоком, но вам не нужно беспокоиться, потому что аргументы блока в PyObjC работать легче, чем в обычном Obj-C: вы можете передать любой вызываемый объект (функцию, метод, класс и т. д.), а мост обработает все остальное. Это все, что вам нужно сделать:

def callback(event):
    NSLog(u"%s" % event)

NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSScrollWheelMask, callback)

В обратном вызове вы получаете копию фактического события, которое вы можете запросить для таких вещей, как deltaX или что угодно.

Обратите внимание, что, подобно многим другим интересным методам в AppKit, этот новый появился в 10.6 и отсутствует в файле метаданных для более старых (читай: от Apple) версий PyObjC. Это означает, что если вы попытаетесь построить приложение, используя установку моста по умолчанию, это не удастся. Вам придется использовать более новую версию.


* Если вы хотите получать события, публикуемые в вашем приложении, вы должны использовать addLocalMonitorForEventsMatchingMask:handler:. К сожалению, один монитор событий не может получить как события для вашего приложения, так и для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...