我努力了KeyDown
and NSEvent
,但他们需要一个NSWindow
对象处于活动状态。我希望我可以在状态栏上放置一个应用程序,并在按下时提醒用户CapsLock,即使用户在任何其他应用程序中。我的应用程序创意没有用于设置或其他任何内容的窗口,只是一个指示器。还可以做到吗?我猜测AppDelegate
但不知道如何让它接收修饰符事件。任何帮助真的很感激!
我在堆栈溢出上查找了“重复”,但据我搜索,没有人问过这个问题。
您只需要监视 NSEvent 修饰符标志的更改capslock https://developer.apple.com/documentation/appkit/nsevent/modifierflags/1642462-capslock。最简单的方法是创建一个接受 NSEvent 的方法并检查是否modifierFlags
属性交集与.deviceIndependentFlagsMask
包含.capsLock
:
func isCapslockEnabled(with event: NSEvent) -> Bool {
event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock)
}
现在您只需将全局监控事件添加到您的 applicationDidFinishLaunching 方法中:
func applicationDidFinishLaunching(_ aNotification: Notification) {
NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged, handler: flagsChanged)
}
并创建一个方法来处理该事件flagsChanged
:
func flagsChanged(with event: NSEvent) {
print("Capslock is Enabled:", isCapslockEnabled(with: event))
}
编辑/更新:
正如评论中已经提到的,要检查 capsLock 键的初始状态,您可以检查NSEvent
ModifierFlags
capsLock
财产capsLock https://developer.apple.com/documentation/appkit/nsevent/modifierflags/1642462-capslock
NSEvent.ModifierFlags.capsLock
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)