我可以通过下面的说明安装系统范围内的键盘显示器内部流程监控键盘事件:(过程广角)
CGEventRef eventCallback(CGEventTapProxy proxy, CGEventType type,
CGEventRef event, void *userData)
{
}
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap,
kCGHeadInsertEventTap, kCGEventTapOptionDefault,
kCGEventKeyDown,
&eventCallback,
NULL);
if(eventTap)
{
CFRunLoopSourceRef eventRunLoopSourceRef =
CFMachPortCreateRunLoopSource(NULL, eventTap, 0);
CFRelease(eventTap);
CFRunLoopAddSource(CFRunLoopGetCurrent(), eventRunLoopSourceRef,
kCFRunLoopDefaultMode);
CFRelease(eventRunLoopSourceRef);
}
这段代码的缺点是,它需要在“系统偏好设置激活“全面普及” “并监视所有进程(我不需要它)。
我想监视我的进程内部的键盘事件。它是如何可能的,是否需要激活“通用访问”?谢谢。
如果我没有访问“自我”,会发生什么?我已经写了一个注入到其他进程中的dylib,在InDesign这样的碳应用程序中,我使用Carbon Events并且没有问题,但是在像TextEdit这样的可可应用程序中,如何在dylib中使用您的方法? – 2012-07-22 10:36:10
addLocalMonitorForEventsMatchingMask:处理程序:返回一个ID,您需要将它保存在某处,以便稍后可以删除监视器(使用removeMonitor :)。在我的例子中,我将它作为一个类的一个属性,但它不一定是。 – zpasternack 2012-07-22 18:47:16