Python で記述されたアプリで、Mac のグローバル マウス イベント (アプリにバインドされていない) をリッスンする必要があります。
PyObjC を使用していますが、その方法がわかりません。プレーンな ObjC の例やその他の Python テクニックも歓迎します。
これまでの私のコード:
from Quartz import *
def MyFunction(proxy, type, event):
print event
CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)
== セグメンテーション違反
後でイベント ソースに追加する必要があることはわかっていますが、最初にこれを機能させる必要があります。
[アップデート]
PyObjC フォーム Macports を使用すると、segfault が解決されたので、次のように記述しました。
from Quartz import *
def MyFunction(p, t, e, c):
print e
tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)
runLoopSource = CFMachPortCreateRunLoopSource(None, tap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopDefaultMode);
CGEventTapEnable(tap, True);
CFRunLoopRun();
しかし、これは永久に実行され、マウスイベントに応答しません。何が問題なのですか?