Робот go не может прослушивать более одного события - PullRequest
0 голосов
/ 08 мая 2020

Я использую robot go для прослушивания событий клавиатуры. Я хотел бы добавить свои собственные функции для каждой нажатой клавиши, но я не могу заставить ее срабатывать более чем для одной клавиши.

Итак, основная функция выглядит так:

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

Также пробовал разные версии MinGW, начиная с 4, и результаты такие же. ..

1 Ответ

1 голос
/ 09 мая 2020

попробуйте что-то вроде этого, на основе робота go и используемой им библиотеки, протестировано на ma c 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)
            }
        }
    }
}

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...