我正在使用以下代码全局检测何时按下并释放 control 键,以便通过本机消息传递与Chrome扩展程序进行通信。
#import <AppKit/NSEvent.h>
#import <Cocoa/Cocoa.h>
int main(){
__block bool ctrlDown = false;
[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask
handler:^(NSEvent *event){
int code = [event modifierFlags];
if (!ctrlDown && (code & NSControlKeyMask)) {
printf("%c%c%c%c", (char) (7 & 0xff),
(char) ((7>>8) & 0xFF),
(char) ((7>>16) & 0xFF),
(char) ((7>>24) & 0xFF));
printf("{\"v\":1}");
ctrlDown = true;
} else if (ctrlDown && !(code & NSControlKeyMask)) {
printf("%c%c%c%c", (char) (7 & 0xff),
(char) ((7>>8) & 0xFF),
(char) ((7>>16) & 0xFF),
(char) ((7>>24) & 0xFF));
printf("{\"v\":0}");
ctrlDown = false;
}
fflush(stdout);
}];
[[NSApplication sharedApplication] run];
return 0;
}
在特定情况下,除了之外的效果很好:使用 control + →或 control + < kbd>←切换空格/全屏应用程序,并在动画完成之前释放 control 键,不会因为<的释放而调用处理程序kbd> control 键。 (如果您在动画完成后按 control 直到,一切似乎都很好。)
有没有办法解决这个问题,或者我可以使用其他API来达到同样的效果?