我希望拦截Command键组合,并认为IMKit
将是一个不错的选择。通过扩展IMKInputController
,我可以拦截大多数密钥,但它似乎忽略了修改后的密钥。
我试过覆盖
-(BOOL)inputText:(NSString*)string client:(id)sender;
和(或者)
-(BOOL)inputText:(NSString*)string
key:(NSInteger)keyCode
modifiers:(NSUInteger)flags
client:(id)sender;
但没有运气;应用修改器时,不会调用plain方法。更具体地说,command
和alt
键不会被上述方法捕获。像shift
和ctrl
这样的简单修饰符(以及修饰符flags
变量在第二种方法中设置)。启动Apple的示例应用程序NumberInput以便自己查看。
有什么建议吗?我完全走错了路吗?
答案 0 :(得分:1)
简短回答:
使用
handleEvent:client:
并收听NSFlagsChanged
事件。
IMKInputController
实现了IMKServerInput Protocol,它为处理事件提供了三种选择。
inputText:client:
和didCommandBySelector:client:
inputText:key:modifiers:client:
handleEvent:client:
好像你只尝试了前两名。您可以使用第三个选项实现目标。
尝试以下方法:
覆盖recognizedEvents:
(来自IMKStateSetting Protocol)
- (NSUInteger)recognizedEvents:(id)sender
{
return NSKeyDownMask | NSFlagsChangedMask;
}
并使用handleEvent:client:
-(BOOL)handleEvent:(NSEvent*)event client:(id)sender
{
NSLog(@"handling event: %@", event);
return false;
}
您可以在控制台中查看修改器的每个keydown和keyup上的打印输出,包括command
和alt
。