Robotgo 不能监听多个事件
Robotgo cannot listen to more than one event
我正在使用 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,结果相同...
尝试这样的事情,基于它使用的 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)
}
}
}
}
:)
我正在使用 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,结果相同...
尝试这样的事情,基于它使用的 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)
}
}
}
}
:)