我想检测用户何时按下fn键并执行一些任务。我尝试了下面的方法,但不起作用:
if event.keyCode == kVK_Function { print("fn key pressed") }
字符串我有类似的代码为其他键,如左括号,右括号,斜线,字母,和数字。对于这些键,代码,如上所示,工作正常,但它不工作fn键。我认为这是不同的处理。
ajsxfq5m1#
您需要检查NSEvent的modifierFlags:
NSEvent
modifierFlags
if event.modifierFlags.contains(.function) { print("fn key pressed") }
字符串
2izufjch2#
是的,您可以检测用户何时按下fn键。下面是区分“fn”按下事件和“fn”释放事件的解决方案。
NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged, handler: { [weak self] event in if event.keyCode == 63 && event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.function) { print("fn key pressed") } if event.keyCode == 63 && event.modifierFlags.intersection(.deviceIndependentFlagsMask) == [] { print("fn key released") } }
字符串通过监视匹配.flagsChanged的事件,您会收到modifier(shift、option、fn等)按键事件的通知。对键码(63)进行过滤可确保按下的修饰符为Fn。
.flagsChanged
2条答案
按热度按时间ajsxfq5m1#
您需要检查
NSEvent
的modifierFlags
:字符串
2izufjch2#
是的,您可以检测用户何时按下fn键。下面是区分“fn”按下事件和“fn”释放事件的解决方案。
字符串
通过监视匹配
.flagsChanged
的事件,您会收到modifier(shift、option、fn等)按键事件的通知。对键码(63)进行过滤可确保按下的修饰符为Fn。