使用此代码,我可以注册一个全局事件处理程序:
[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内部