特定のキーボード イベントが発生したときにアプリケーションが通知を受け取るようにしたいと考えています (たとえば、alt キーを 0.5 秒以内に 2 回押したままにするなど)。アプリケーションは、フロント アプリケーションである必要はありません。これどうやってするの ?
質問する
265 次
1 に答える
2
修飾キーの変更には、イベント タップをインストールする必要があります。
これで始められるはずです:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
CFMachPortRef eventTap;
CGEventMask eventMask;
CFRunLoopSourceRef runLoopSource;
eventMask = CGEventMaskBit(kCGEventFlagsChanged);
eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0,
eventMask, KeyHandler, NULL);
if (!eventTap) {
NSLog(@"failed to create event tap");
exit(1);
}
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
}
static CGEventFlags previousFlags = 0;
CGEventRef KeyHandler(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
if (type == kCGEventFlagsChanged) {
CGEventFlags curAltkey = CGEventGetFlags(event)&kCGEventFlagMaskAlternate;
if (curAltkey != previousFlags)
NSLog(@"alt key changed");
}
return event;
}
于 2012-11-19T17:56:13.433 に答える