Ошибка шины 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, когда вы знаете, что он работает.)