keyboard push mvp

master
bel 2023-03-01 21:00:27 -07:00
parent b65d2134f5
commit 4c233cf794
6 changed files with 110 additions and 0 deletions

2
go.mod
View File

@ -1,3 +1,5 @@
module mayhem-party
go 1.19
require github.com/micmonay/keybd_event v1.1.1 // indirect

2
go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/micmonay/keybd_event v1.1.1 h1:rv7omwXWYL9Lgf3PUq6uBgJI2k1yGkL/GD6dxc6nmSs=
github.com/micmonay/keybd_event v1.1.1/go.mod h1:CGMWMDNgsfPljzrAWoybUOSKafQPZpv+rLigt2LzNGI=

View File

@ -0,0 +1,3 @@
package output
type Device interface{}

View File

@ -0,0 +1,48 @@
package output
import (
"log"
"time"
"github.com/micmonay/keybd_event"
)
type Keyboard struct {
created time.Time
kb *keybd_event.KeyBonding
}
func NewKeyboard() Keyboard {
kb, err := keybd_event.NewKeyBonding()
if err != nil {
panic(err)
}
return Keyboard{
kb: &kb,
created: time.Now(),
}
}
func (kb Keyboard) wait() {
if delta := time.Since(kb.created.Add(time.Second * 2)); delta < 0 {
time.Sleep(-1 * delta)
}
}
func (kb Keyboard) Press(keys ...int) {
kb.wait()
kb.Release()
kb.kb.SetKeys(keys...)
if err := kb.kb.Press(); err != nil {
log.Println("failed to press keys:", err)
}
}
func (kb Keyboard) Release() {
kb.wait()
if err := kb.kb.Release(); err != nil {
log.Println("failed to release keys:", err)
}
}

View File

@ -0,0 +1,23 @@
//go:build integration
package output_test
import (
"mayhem-party/src/device/output"
"testing"
"time"
)
func TestKeyboardIntegration(t *testing.T) {
kb := output.NewKeyboard()
defer kb.Release()
t.Log("pressing 'a' for 5 seconds")
kb.Press(output.A)
for i := 0; i < 5; i++ {
t.Logf("\t%d...", 5-i)
time.Sleep(time.Second)
}
t.Logf("releasing")
kb.Release()
}

32
src/device/output/keys.go Normal file
View File

@ -0,0 +1,32 @@
package output
import "github.com/micmonay/keybd_event"
const (
A = keybd_event.VK_A
B = keybd_event.VK_B
C = keybd_event.VK_C
D = keybd_event.VK_D
E = keybd_event.VK_E
F = keybd_event.VK_F
G = keybd_event.VK_G
H = keybd_event.VK_H
I = keybd_event.VK_I
J = keybd_event.VK_J
K = keybd_event.VK_K
L = keybd_event.VK_L
M = keybd_event.VK_M
N = keybd_event.VK_N
O = keybd_event.VK_O
P = keybd_event.VK_P
Q = keybd_event.VK_Q
R = keybd_event.VK_R
S = keybd_event.VK_S
T = keybd_event.VK_T
U = keybd_event.VK_U
V = keybd_event.VK_V
W = keybd_event.VK_W
X = keybd_event.VK_X
Y = keybd_event.VK_Y
Z = keybd_event.VK_Z
)