为了账号安全,请及时绑定邮箱和手机立即绑定

Robotgo 不能监听多个事件

Robotgo 不能监听多个事件

Go
aluckdog 2022-06-01 17:26:33
我正在使用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,结果相同......
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

尝试这样的事情,基于它使用的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)

            }

        }

    }

}


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信