猿问

Robotgo 不能监听多个事件

我正在使用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,结果相同......


aluckdog
浏览 157回答 1
1回答

摇曳的蔷薇

尝试这样的事情,基于它使用的robotgo和lib,在mac 10.14上测试:package mainimport (    "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)            }        }    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答