美文网首页
macOS 监听键盘输入的正确方式

macOS 监听键盘输入的正确方式

作者: Ezward_Chou | 来源:发表于2019-07-31 18:45 被阅读0次

macOS开发因为硬件上有鼠标和键盘的支持,所以我们也有监听硬件输入的需求。

如何监听

监听键盘输入需要使用NSEvent这个类,这个类是专门管理“事件”的。NSEvent提供了两个监听的方法:

+ (nullable id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block NS_AVAILABLE_MAC(10_6);

+ (nullable id)addLocalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(NSEvent* __nullable (^)(NSEvent*))block NS_AVAILABLE_MAC(10_6);

第一个方法是用于监听其他应用中的事件,第二个是用于监听自己应用的时间。更多详细内容可以阅读官方注释。

在这里我们使用第二个进行监听键盘输入:

id monitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown handler:^NSEvent * _Nullable(NSEvent * _Nonnull aEvent) {
        //判断aEvent.keyCode属性
        return aEvent;
    }];

在方法的block回调中会收到当前键盘的事件,你需要通过判断aEvent.keyCode来得知点击了哪一个键。macOS有一个枚举来告诉你键的名字是什么,你可以直接拿来判断(文末附)。

如何终止监听

NSEvent的监听是需要进行移除的,如果你不进行移除,那么这个需要监听的类再多次init后,其block也会在键盘点击时被重复的调用多次。
移除需要使用的类为NSEvent,方法为:

+ (void)removeMonitor:(id)eventMonitor NS_AVAILABLE_MAC(10_6);

如何监听那一节,添加监听的方法有一个返回值,这个返回值就是这里removeMonitor需要传入的参数。在添加了监听的对象dealloc或合适的时候进行调用即可。


附键盘枚举
/* keycodes for keys that are independent of keyboard layout*/
enum {
  kVK_Return                    = 0x24,
  kVK_Tab                       = 0x30,
  kVK_Space                     = 0x31,
  kVK_Delete                    = 0x33,
  kVK_Escape                    = 0x35,
  kVK_Command                   = 0x37,
  kVK_Shift                     = 0x38,
  kVK_CapsLock                  = 0x39,
  kVK_Option                    = 0x3A,
  kVK_Control                   = 0x3B,
  kVK_RightCommand              = 0x36,
  kVK_RightShift                = 0x3C,
  kVK_RightOption               = 0x3D,
  kVK_RightControl              = 0x3E,
  kVK_Function                  = 0x3F,
  kVK_F17                       = 0x40,
  kVK_VolumeUp                  = 0x48,
  kVK_VolumeDown                = 0x49,
  kVK_Mute                      = 0x4A,
  kVK_F18                       = 0x4F,
  kVK_F19                       = 0x50,
  kVK_F20                       = 0x5A,
  kVK_F5                        = 0x60,
  kVK_F6                        = 0x61,
  kVK_F7                        = 0x62,
  kVK_F3                        = 0x63,
  kVK_F8                        = 0x64,
  kVK_F9                        = 0x65,
  kVK_F11                       = 0x67,
  kVK_F13                       = 0x69,
  kVK_F16                       = 0x6A,
  kVK_F14                       = 0x6B,
  kVK_F10                       = 0x6D,
  kVK_F12                       = 0x6F,
  kVK_F15                       = 0x71,
  kVK_Help                      = 0x72,
  kVK_Home                      = 0x73,
  kVK_PageUp                    = 0x74,
  kVK_ForwardDelete             = 0x75,
  kVK_F4                        = 0x76,
  kVK_End                       = 0x77,
  kVK_F2                        = 0x78,
  kVK_PageDown                  = 0x79,
  kVK_F1                        = 0x7A,
  kVK_LeftArrow                 = 0x7B,
  kVK_RightArrow                = 0x7C,
  kVK_DownArrow                 = 0x7D,
  kVK_UpArrow                   = 0x7E
};

相关文章

网友评论

      本文标题:macOS 监听键盘输入的正确方式

      本文链接:https://www.haomeiwen.com/subject/tvwtdctx.html