1
私のカカオアプリケーション内のシステム内のすべてのkeydown/keyupイベントをトラップし、変更して転用したいと思います。私はCGEventTapCreateについて知っていますが、ネットからの作業コードは見つかりませんでした。ココアのグローバルkeydown/keyupイベントをトラップする方法
おかげでソリューションが見つかり
私のカカオアプリケーション内のシステム内のすべてのkeydown/keyupイベントをトラップし、変更して転用したいと思います。私はCGEventTapCreateについて知っていますが、ネットからの作業コードは見つかりませんでした。ココアのグローバルkeydown/keyupイベントをトラップする方法
おかげでソリューションが見つかり
:
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;
}