Events 如何在cocoa中捕获全局keydown/keydup事件
我想在我的cocoa应用程序中捕获、修改和转移系统中的所有keydown/keydup事件。我知道CGEventTapCreate,但没有从网络上找到任何工作代码 感谢找到解决方案:Events 如何在cocoa中捕获全局keydown/keydup事件,events,keyboard,global,Events,Keyboard,Global,我想在我的cocoa应用程序中捕获、修改和转移系统中的所有keydown/keydup事件。我知道CGEventTapCreate,但没有从网络上找到任何工作代码 感谢找到解决方案: self.machPortRef = CGEventTapCreate(kCGSessionEventTap, kCGTailAppendEventTap,
self.machPortRef = CGEventTapCreate(kCGSessionEventTap,
kCGTailAppendEventTap,
kCGEventTapOptionDefault,
CGEventMaskBit(kCGEventKeyDown),
(CGEventTapCallBack)eventTapFunction,
self);
if (self.machPortRef == NULL)
{
printf("CGEventTapCreate failed!\n");
} else {
self.eventSrc = CFMachPortCreateRunLoopSource(NULL, self.machPortRef, 0);
if ( self.eventSrc == NULL )
{
printf( "No event run loop src?\n" );
}else {
CFRunLoopRef runLoop = CFRunLoopGetCurrent(); //GetCFRunLoopFromEventLoop(GetMainEventLoop ());
// Get the CFRunLoop primitive for the Carbon Main Event Loop, and add the new event souce
CFRunLoopAddSource(runLoop, self.eventSrc, kCFRunLoopDefaultMode);
}
}
特性:
CFMachPortRef machPortRef;
CFRunLoopSourceRef eventSrc;
事件处理程序:
CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
//printf("eventTap triggered\n");
return event;
}