首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CGEvent解析键盘快捷键

从CGEvent解析键盘快捷键
EN

Stack Overflow用户
提问于 2017-06-06 17:28:38
回答 1查看 617关注 0票数 1

我正试图从CGEvent解析myCGEventCallback中的键盘事件。我可以访问修饰符标志,键码,UniChar。

到目前为止,我设法使它在一些组合,如command+shift+f,但我有一些问题,一些其他组合。

  1. 控件和选项似乎给了我一些符号的UniChar而不是字母表。例如,option+g将给我option+copyright符号而不是option+g。
  2. 我无法从UniChar获得函数键和游标。

解释结果的最好方法是什么?例如,我希望得到一个像control+g、option+control+g或option+shift+f1之类的结果。这是myCGEventCallback的代码。谢谢!

代码语言:javascript
运行
复制
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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 19:37:50

最后,我将CGEvent转换为NSEvent,使用CGEvent初始化NSEvent,并获得charactersIgnoringModifiers。不过,像转义和后置空间这样的非字符是行不通的。这是整个CGEventCallback。

代码语言:javascript
运行
复制
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)
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44396256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档