我正在开发使用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/

10-09 02:44