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

Я получаю ошибку шины всякий раз, когда я запускаю этот код 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 ответ

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

Ответ на ваш комментарий с ответом, потому что он не помещается в комментарии. Сожалею.

Ситуация, возможно, немного запутанная. 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, когда вы знаете, что он работает.)

Другие вопросы по тегам