gpt4 book ai didi

macos - 如何检测 OS X 中大写锁定键的按下或释放?

转载 作者:行者123 更新时间:2023-12-03 16:11:27 25 4
gpt4 key购买 nike

我在 OS X 检测击键时遇到问题。每当按下键盘按键时,我需要检测按键按下和按键释放或按键按下。当使用 [ NSEvent addLocalMonitorForEventsMatchingMask: handler: ] 拦截应用程序的事件处理链时,这是相当简单的。这使您可以拦截和修改各种事件类型的 NSEvent,包括用于常规打印键的 NSKeyUpNSKeyDown,以及 NSFlagsChanged 可用于检测 Shift、Ctrl、Alt 和 cmd 键。事实上,由于 Shift、ctrl、alt 和 cmd 键的键按下和键按下时修改标志都会发生变化,因此 NSFlagsChanged 可以用作这些键的键按下和键按下事件:检查 [NSEvent modifierFlags] 以及 [NSEvent keyCode]

不过,Capslock 是不同的。因为大写锁定修饰符实际上只在按下按键时起作用,所以当您按下大写锁定时,您只会在按下大写锁定时得到一个 NSFlagsChanged ,而不是在释放大写锁定时得到。并且 NSKeyUpNSKeyDown 不会通过 capslock、shift 和 ctrl 等修饰键发出。

任何人都可以建议一种方法,甚至是较低级别的接口(interface),来获取大写锁定按键事件吗?我是否必须求助于使用 kqueues 或者其他东西?

最佳答案

IOHIDLib 似乎是执行此操作的唯一方法。我(或者实际上的队友)使用 IOHIDManager 设置了一个事件回调,成功拦截了大写锁定按键向上和向下按键事件。

可怕的是,这完全超出了 Cocoa/CoreFoundation 事件调度机制,这意味着即使您的应用程序失去焦点,您也会收到事件。您最终必须自己进行大量窗口管理和焦点检测。

但它确实有效。

关于macos - 如何检测 OS X 中大写锁定键的按下或释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12536356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com