我正试图从CGEvent解析myCGEventCallback中的键盘事件。我可以访问修饰符标志,键码,UniChar。
到目前为止,我设法使它在一些组合,如command+shift+f,但我有一些问题,一些其他组合。
解释结果的最好方法是什么?例如,我希望得到一个像control+g、option+control+g或option+shift+f1之类的结果。这是myCGEventCallback的代码。谢谢!
func myCGEventCallback(proxy : CGEventTapProxy, type : CGEventType, event : CGEvent, refcon : UnsafeMutableRawPointer?) -> Unmanaged<CGEvent>? {
if type == .keyDown {
let flags = event.flags
var msg = ""
if flags.contains(.maskAlphaShift) {
msg+="caps+"
}
if flags.contains(.maskShift) {
msg+="shift+"
}
if flags.contains(.maskControl) {
msg+="control+"
}
if flags.contains(.maskAlternate) {
msg+="option+"
}
if flags.contains(.maskCommand) {
msg += "command+"
}
if flags.contains(.maskSecondaryFn) {
msg += "function+"
}
var keyCode = event.getIntegerValueField(.keyboardEventKeycode)
var char = UniChar()
var length = 0
event.keyboardGetUnicodeString(maxStringLength: 1, actualStringLength: &length, unicodeString: &char)
msg+="\(Character(UnicodeScalar(char)!))"
debugPrint(msg)
}
return Unmanaged.passRetained(event)
}
发布于 2017-06-12 19:37:50
最后,我将CGEvent转换为NSEvent,使用CGEvent初始化NSEvent,并获得charactersIgnoringModifiers。不过,像转义和后置空间这样的非字符是行不通的。这是整个CGEventCallback。
func myCGEventCallback(proxy : CGEventTapProxy, type : CGEventType, event : CGEvent, refcon : UnsafeMutableRawPointer?) -> Unmanaged<CGEvent>? {
if type == .keyDown {
let flags = event.flags
var msg = ""
if flags.contains(.maskAlphaShift) {
msg+="caps+"
}
if flags.contains(.maskShift) {
msg+="shift+"
}
if flags.contains(.maskControl) {
msg+="control+"
}
if flags.contains(.maskAlternate) {
msg+="option+"
}
if flags.contains(.maskCommand) {
msg += "command+"
}
if flags.contains(.maskSecondaryFn) {
msg += "function+"
}
if let other = NSEvent(cgEvent: event), let chars = other.charactersIgnoringModifiers {
msg += chars
debugPrint(msg)
}
}
return Unmanaged.passRetained(event)
}
https://stackoverflow.com/questions/44396256
复制相似问题