【问题标题】:Robotgo cannot listen to more than one eventRobotgo 不能监听多个事件
【发布时间】:2020-05-09 21:28:15
【问题描述】:

我正在使用robotgo 来监听键盘事件。我想为每个按下的键添加我自己的功能,但我无法让它触发超过 1 个键。

所以主函数是这样的:

func main() {
    go addKeyListen("l")
    go addKeyListen("k")
}

包装函数:

func addKeyListen(key string) {
    for {
        if ok := robotgo.AddEvent(key); ok {
            fmt.Println("Pressed "+key)
        }
    }
}

L 后,我得到的只是Pressed l 多次,但我可以用一个标志来解决这个问题。按K 不会打印任何内容。

尝试了以下方法:

for {
    if okA := robotgo.AddEvent("k"); okA {
        fmt.Println("Pressed k")
    }
    if okB := robotgo.AddEvent("l"); okB {
        fmt.Println("Pressed l")
    }
}

先按 K 然后按 L,然后一遍又一遍地重复此操作似乎会触发事件,但如果我更改按键顺序则不会。所以如果我先从 L 然后 K 开始,什么都不会发生。

PD:在 Windows 10 上使用 MinGW64 版本 x86_64-8.1.0-posix-seh-rt_v6-rev0 进行测试

还尝试了从 4 开始的不同版本的 MinGW,结果相同......

【问题讨论】:

    标签: go mingw robot


    【解决方案1】:

    尝试这样的事情,基于它使用的robotgo和lib,在mac 10.14上测试:

    package main
    
    import (
        "fmt"
        "github.com/go-vgo/robotgo"
        gohook "github.com/robotn/gohook"
    )
    
    func main() {
        eventHook := robotgo.Start()
        var e gohook.Event
        var key string
    
        for e = range eventHook {
            if e.Kind == gohook.KeyDown {
                key = string(e.Keychar)
                switch key {
                case "k":
                    fmt.Println("pressed k")
                case "l":
                    fmt.Println("pressed l")
                default:
                    fmt.Printf("pressed %s \n", key)
                }
            }
        }
    }
    

    :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多