robotgo
robotgo copied to clipboard
Using keytap in eventhook
- Robotgo version (or commit ref): v0.92.1
- Go version: go1.14.2 windows/amd64
- Gcc version: Gcc version: gcc version 8.1.0 (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project)
- Operating system and bit:
- Resolution:
- Can you reproduce the bug at Examples:
- [✔ ] Yes (provide example code)
- [ ] No
- [ ] Not relevant
- Provide example code:
func main() {
robotgo.EventHook(hook.KeyDown, []string{"w"}, func(e hook.Event) {
fmt.Println("i tap w enter")
robotgo.KeyTap("enter")
})
s := robotgo.EventStart()
<-robotgo.EventProcess(s)
}
- Log gist:
Description
在EventHook中使用keytap发生了调用多次的情况,如图所示,事实上我只按了一次w ...
v0.93.1 on mac (go version 1.13.5)
func main() {
robotgo.EventHook(hook.KeyDown, []string{"w"}, func(e hook.Event) {
fmt.Println("i tap w enter")
robotgo.KeyTap("enter")
})
s := robotgo.EventStart()
<-robotgo.EventProcess(s)
}
will print 3 or 4 times
The reason is keypress delay.
Such as keydown w -> wait 300ms -> keyup w.
In the 300ms, hook callback action robotgo.KeyTap("enter")
, trigger EventHook()
.
at the same time you keydown w still.
So it's endless loop until keyup w.
Try:
func main() {
robotgo.EventHook(hook.KeyDown, []string{"w"}, func(e hook.Event) {
fmt.Println("i tap w enter", e.String())
time.Sleep(time.Millisecond * 150)
robotgo.KeyTap("enter")
})
s := robotgo.EventStart()
<-robotgo.EventProcess(s)
}