Ошибка шины Python CGEventTap - PullRequest
       5

Ошибка шины Python CGEventTap

0 голосов
/ 14 февраля 2011

Я получаю ошибку шины всякий раз, когда я запускаю этот код Python CGEventTap:

def callback(ent):
    loc = CGEventGetLocation(ent)
    print loc

tap = CGEventTapCreate(
    kCGSessionEventTap,
    kCGHeadInsertEventTap, 
    kCGEventTapOptionDefault,
    CGEventMaskBit(kCGEventMouseMoved),
    callback(CGEventRef) )

loop = CFMachPortCreateRunLoopSource(None, tap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), loop, kCFRunLoopCommonModes)

RunApplicationEventLoop()

Есть ли что-то очевидное, чего мне не хватает?

1 Ответ

1 голос
/ 21 марта 2011

Я попробовал все следующее: ... Какие из них мне нужны и не нужны?А что вы подразумеваете под связыванием ?- Тик

Ответ на ваш комментарий с ответом, потому что он не помещается в комментарии.Извините.

Ситуация, возможно, немного запутанная.PyObjC содержит целый набор информации (метаданные и некоторый вспомогательный код) о функциях, объектах и ​​т. Д. В платформах Apple, но он не содержит сам код (потому что это код Apple, и PyObjC можетпросто копируй).Используемые вами функции находятся в платформе Apple ApplicationServices.PyObjC хранит информацию об этой платформе в своем модуле Quartz.Итак, часть I: чтобы использовать эти функции в Python, вам нужно получить информацию PyObjC: from Quartz import *.

Часть II заключается в том, что, как я уже сказал, ваше приложение должно знать, а не только где метаданные PyObjCесть, но где находится код Apple, который вы пытаетесь использовать.Это ссылка часть.(Не похоже, что вы используете XCode, поскольку вы настраиваете свой собственный цикл выполнения, но в XCode вы должны перейти в группу Linked Frameworks в своем проекте и добавить к ней ApplicationServices.)

Полагаю, вы используете py2app?Боюсь, я не уверен на 100%, как это сделать таким образом, но этот ТАК вопрос может помочь вам начать: Проблема с использованием py2app

Надеюсь, что это укажет вам полезное направление.

(Между прочим, когда я настраивал проект с вашим кодом, в Xcode и со связанной структурой ApplicationServices, он блокировал мои устройства ввода, так что единственное, что я мог сделать, это перезагрузить компьютер. Явозможно, что-то случилось не так, но имейте в виду, что когда вы получите эту ссылку, у могут быть другие проблемы с настраиваемым краном. Возможно, вы захотите попробовать сделать это в C / Obj-Cсначала, а затем перевод на Python, когда вы знаете, что это работает.)

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