在不支持启用辅助设备的情况下注册全局热键



使用此代码,我可以注册一个全局事件处理程序:

[NSEvent addGlobalMonitorForEventsMatchingMask: NSKeyDownMask 
                                       handler: ^(NSEvent *incomingEvent) {
           NSString *chars = [[incomingEvent characters] lowercaseString];
           unichar character = [chars characterAtIndex:0];    
           // do something useful
           NSLog(@"keydown globally! Which key? This key: %c", character);
        }];

不幸的是,如果启用了对辅助设备的支持,则事件会传递到此监视器。如果没有启用辅助设备,就不会传递任何事件。

形成文件:

Key-related events may only be monitored if accessibility is enabled or if your 
application is trusted for accessibility access (see AXIsProcessTrusted).

我想知道是否存在另一种方法,它在不强制用户启用OS X特定功能的情况下传递事件。

虽然我在苹果的文档中没有找到解决方案,但必须存在解决方案。例如,Alfred的MAS下载版本允许定义热键。

有趣的是,Alfred的偏好只显示特殊键,并指出某些特殊键组合可能不起作用

由于我基本上想显示/隐藏一个"全局"非激活面板,我可能应该简单地准备一个系统服务。我应该吗?

您可以尝试创建一个以kCGSessionEventTap为位置的Quartz Event Tap。

Quartz事件服务参考
Mac OS X内部

中的示例代码

相关内容

  • 没有找到相关文章

最新更新