objective-c - DDHotKey - 跟踪而不取消事件

标签 objective-c macos cocoa nsevent ddhotkey

我正在使用DDHotKey跟踪一些系统范围的键盘快捷键。当事件被触发时,只有我的应用程序收到它。是否可以在不阻止事件传递到其原始目标应用程序的情况下观察它?


以下是该模块注册事件处理程序的方式:

InstallApplicationEventHandler(&dd_hotKeyHandler, 1, &eventSpec, NULL, NULL);

以及事件处理程序本身:

OSStatus dd_hotKeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void *userData) {
    @autoreleasepool {
        EventHotKeyID hotKeyID;
        GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyID),NULL,&hotKeyID);

        UInt32 keyID = hotKeyID.id;

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hotKeyID = %u", keyID];
        NSSet *matchingHotKeys = [[DDHotKeyCenter sharedHotKeyCenter] hotKeysMatchingPredicate:predicate];
        if ([matchingHotKeys count] > 1) { NSLog(@"ERROR!"); }
        DDHotKey *matchingHotKey = [matchingHotKeys anyObject];

        NSEvent *event = [NSEvent eventWithEventRef:theEvent];
        NSEvent *keyEvent = [NSEvent keyEventWithType:NSKeyUp
                                             location:[event locationInWindow]
                                        modifierFlags:[event modifierFlags]
                                            timestamp:[event timestamp]
                                         windowNumber:-1
                                              context:nil
                                           characters:@""
                          charactersIgnoringModifiers:@""
                                            isARepeat:NO
                                              keyCode:[matchingHotKey keyCode]];

        [matchingHotKey invokeWithEvent:keyEvent];
    }

    return noErr;
}

最佳答案

不,热键功能的全部要点是事件被注册该 key 的应用程序吞没。

你想要一个global event monitor ,它允许您观察系统中其他任何地方的关键事件,但不影响它们。

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyUpMask
                                       handler:^(NSEvent * event){
    // See if the key is the one you want and act on it.
}];

关于objective-c - DDHotKey - 跟踪而不取消事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15143571/

相关文章:

objective-c - 静态/类方法存储在 objective-c 中的位置

macos - GNU 查找所有可执行文件 : Equivalent on OS X?

.net - .net 可以在 Unix 和 Mac 上运行吗?

cocoa - 在 cocoa 中解压文件

cocoa - 如何构建通过 RFCOMMChannel 与 writeAsync 一起使用的命令?

iOS 如何比较对象是否相等?

ios - 使用键值编码 (KVC) 获取 UIImage 但在为其设置图片时不起作用

iphone - 状态栏轮换通知

python - 为什么 python.org OS X 安装程序是用 gcc-4.0 构建的?

cocoa ;将文本字段绑定(bind)到过滤数组的总和(来自 NSArrayController)