我正在开发使用Shpakovski出色的MASShortcut repository的应用程序。我参考此信息是为了询问是否有一种方法可以像Shpakovski在其存储库中一样为Capslock注册快捷方式?
看来我无法将0xffff(Key Codes显示为Capslock)注册为有效的快捷方式。即使我将其与修饰键组合在一起。我还想抓住新闻界,然后再切换系统的Capslock功能。
我知道我可以听所有按键,并且在发生Capslock时就可以抓住它,但是我想避免这种行为,因为我认为它可能不安全,还会降低整体系统性能。
编辑:我已经看了一些用于Windows的实现此功能的C ++ / C#库。它们似乎连续地覆盖了系统的Capslock标志,我发现这很奇怪。我这里基本上有两个问题:
1.如何在不一直有击键听众的情况下抓住Capslock按键
2.如何在不触发系统的Capslock功能的情况下这样做。
最佳答案
一种可能是覆盖sendEvent:
NSApplication
中的delegate
。从Apples documentation:
尽管您可能想要直接调用sendEvent:,但很少
重写此方法以对每个事件执行一些操作。 sendEvent:
消息是从主事件循环(运行方法)发送的。
sendEvent:是将事件调度到适当的方法
响应者-NSApp处理应用程序事件,NSWindow对象
事件记录中指示的内容处理与窗口相关的事件,并且鼠标
和关键事件被转发到适当的NSWindow对象
进一步调度。
您可以评估当前事件是否按下了修饰键并对其进行操作。
编辑:
对于后台处理,可以使用Quartz event taps。如果那导致拒绝,我不知道。
关于macos - 在 cocoa 应用中捕获压盖机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21849287/