更改空格时,检测OS X上的全局“Ctrl”键按下并不完全有效

时间:2015-09-21 22:55:56

标签: objective-c macos cocoa

我正在使用以下代码全局检测何时按下并释放 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来达到同样的效果?

0 个答案:

没有答案