gowinkey

package module
v0.0.0-...-9b34f6f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 8, 2022 License: MIT Imports: 6 Imported by: 0

README

gowinkey

Contents

Installation

To use gowinkey, you need to have Go installed and set up.

Now, you can get gowinkey by running

$ go get -u github.com/daspoet/gowinkey

and import it in your code:

import "github.com/daspoet/gowinkey"

If you prefer using Java...

... be sure to check out the Java version of this package.

Getting started

To start listening to key events, simply run gowinkey.Listen(). It returns a channel on which all key events will be sent, and a function that you can call whenever you want gowinkey to stop listening to events.

Note that calling this function will also close the channel.

Consider the following example:

package main

import (
	"fmt"
	"github.com/daspoet/gowinkey"
	"time"
)

func main() {
	events, stopFn := gowinkey.Listen()

	time.AfterFunc(time.Minute, func() {
		stopFn()
	})

	for e := range events {
		switch e.State {
		case gowinkey.KeyDown:
			fmt.Println("pressed", e)
		case gowinkey.KeyUp:
			fmt.Println("released", e)
		}
	}
}

Predicates

To help customise the way that Listen works, gowinkey uses Predicates. You can either supply your own, or use those that have already been created for you. You can find a collection of predefined predicates here.

Example

Suppose we don't want to get bombarded with key events. For instance, we could only be interested in events for the keys W, A, S and D, because we want to write some basic movement for a game, or something.

We can now alter the code from above just slightly by passing the predefined predicate Selective to Listen. Notice that Selective takes the keys we want to listen for and returns an appropriate predicate that will handle all the work for us.

Consider the following code snippet:

package main

import (
	"fmt"
	"github.com/daspoet/gowinkey"
	"time"
)

func main() {
	keys := []gowinkey.VirtualKey{
		gowinkey.VK_W,
		gowinkey.VK_A,
		gowinkey.VK_S,
		gowinkey.VK_D,
	}
	events, stopFn := gowinkey.Listen(gowinkey.Selective(keys...))

	time.AfterFunc(time.Minute, func() {
		stopFn()
	})

	for e := range events {
		switch e.State {
		case gowinkey.KeyDown:
			fmt.Println("pressed", e)
		case gowinkey.KeyUp:
			fmt.Println("released", e)
		}
	}
}

Documentation

Overview

Example
events, stopFn := Listen()

time.AfterFunc(time.Minute, func() {
	stopFn()
})

for e := range events {
	switch e.State {
	case KeyDown:
		fmt.Println("pressed", e)
	case KeyUp:
		fmt.Println("released", e)
	}
}
Output:

Index

Examples

Constants

View Source
const (
	VK_LBUTTON             VirtualKey = 0x01
	VK_RBUTTON                        = 0x02
	VK_CANCEL                         = 0x03
	VK_MBUTTON                        = 0x04
	VK_XBUTTON1                       = 0x05
	VK_XBUTTON2                       = 0x06
	VK_BACK                           = 0x08
	VK_TAB                            = 0x09
	VK_CLEAR                          = 0x0C
	VK_RETURN                         = 0x0D
	VK_SHIFT                          = 0x10
	VK_CONTROL                        = 0x11
	VK_MENU                           = 0x12
	VK_PAUSE                          = 0x13
	VK_CAPITAL                        = 0x14
	VK_KANA                           = 0x15
	VK_HANGUEL                        = 0x15
	VK_HANGUL                         = 0x15
	VK_JUNJA                          = 0x17
	VK_FINAL                          = 0x18
	VK_HANJA                          = 0x19
	VK_KANJI                          = 0x19
	VK_ESCAPE                         = 0x1B
	VK_CONVERT                        = 0x1C
	VK_NONCONVERT                     = 0x1D
	VK_ACCEPT                         = 0x1E
	VK_MODECHANGE                     = 0x1F
	VK_SPACE                          = 0x20
	VK_PRIOR                          = 0x21
	VK_NEXT                           = 0x22
	VK_END                            = 0x23
	VK_HOME                           = 0x24
	VK_LEFT                           = 0x25
	VK_UP                             = 0x26
	VK_RIGHT                          = 0x27
	VK_DOWN                           = 0x28
	VK_SELECT                         = 0x29
	VK_PRINT                          = 0x2A
	VK_EXECUTE                        = 0x2B
	VK_SNAPSHOT                       = 0x2C
	VK_INSERT                         = 0x2D
	VK_DELETE                         = 0x2E
	VK_HELP                           = 0x2F
	VK_0                              = 0x30
	VK_1                              = 0x31
	VK_2                              = 0x32
	VK_3                              = 0x33
	VK_4                              = 0x34
	VK_5                              = 0x35
	VK_6                              = 0x36
	VK_7                              = 0x37
	VK_8                              = 0x38
	VK_9                              = 0x39
	VK_A                              = 0x41
	VK_B                              = 0x42
	VK_C                              = 0x43
	VK_D                              = 0x44
	VK_E                              = 0x45
	VK_F                              = 0x46
	VK_G                              = 0x47
	VK_H                              = 0x48
	VK_I                              = 0x49
	VK_J                              = 0x4A
	VK_K                              = 0x4B
	VK_L                              = 0x4C
	VK_M                              = 0x4D
	VK_N                              = 0x4E
	VK_O                              = 0x4F
	VK_P                              = 0x50
	VK_Q                              = 0x51
	VK_R                              = 0x52
	VK_S                              = 0x53
	VK_T                              = 0x54
	VK_U                              = 0x55
	VK_V                              = 0x56
	VK_W                              = 0x57
	VK_X                              = 0x58
	VK_Y                              = 0x59
	VK_Z                              = 0x5A
	VK_LWIN                           = 0x5B
	VK_RWIN                           = 0x5C
	VK_APPS                           = 0x5D
	VK_SLEEP                          = 0x5F
	VK_NUMPAD0                        = 0x60
	VK_NUMPAD1                        = 0x61
	VK_NUMPAD2                        = 0x62
	VK_NUMPAD3                        = 0x63
	VK_NUMPAD4                        = 0x64
	VK_NUMPAD5                        = 0x65
	VK_NUMPAD6                        = 0x66
	VK_NUMPAD7                        = 0x67
	VK_NUMPAD8                        = 0x68
	VK_NUMPAD9                        = 0x69
	VK_MULTIPLY                       = 0x6A
	VK_ADD                            = 0x6B
	VK_SEPARATOR                      = 0x6C
	VK_SUBTRACT                       = 0x6D
	VK_DECIMAL                        = 0x6E
	VK_DIVIDE                         = 0x6F
	VK_F1                             = 0x70
	VK_F2                             = 0x71
	VK_F3                             = 0x72
	VK_F4                             = 0x73
	VK_F5                             = 0x74
	VK_F6                             = 0x75
	VK_F7                             = 0x76
	VK_F8                             = 0x77
	VK_F9                             = 0x78
	VK_F10                            = 0x79
	VK_F11                            = 0x7A
	VK_F12                            = 0x7B
	VK_F13                            = 0x7C
	VK_F14                            = 0x7D
	VK_F15                            = 0x7E
	VK_F16                            = 0x7F
	VK_F17                            = 0x80
	VK_F18                            = 0x81
	VK_F19                            = 0x82
	VK_F20                            = 0x83
	VK_F21                            = 0x84
	VK_F22                            = 0x85
	VK_F23                            = 0x86
	VK_F24                            = 0x87
	VK_NUMLOCK                        = 0x90
	VK_SCROLL                         = 0x91
	VK_LSHIFT                         = 0xA0
	VK_RSHIFT                         = 0xA1
	VK_LCONTROL                       = 0xA2
	VK_RCONTROL                       = 0xA3
	VK_LMENU                          = 0xA4
	VK_RMENU                          = 0xA5
	VK_BROWSER_BACK                   = 0xA6
	VK_BROWSER_FORWARD                = 0xA7
	VK_BROWSER_REFRESH                = 0xA8
	VK_BROWSER_STOP                   = 0xA9
	VK_BROWSER_SEARCH                 = 0xAA
	VK_BROWSER_FAVORITES              = 0xAB
	VK_BROWSER_HOME                   = 0xAC
	VK_VOLUME_MUTE                    = 0xAD
	VK_VOLUME_DOWN                    = 0xAE
	VK_VOLUME_UP                      = 0xAF
	VK_MEDIA_NEXT_TRACK               = 0xB0
	VK_MEDIA_PREV_TRACK               = 0xB1
	VK_MEDIA_STOP                     = 0xB2
	VK_MEDIA_PLAY_PAUSE               = 0xB3
	VK_LAUNCH_MAIL                    = 0xB4
	VK_LAUNCH_MEDIA_SELECT            = 0xB5
	VK_LAUNCH_APP1                    = 0xB6
	VK_LAUNCH_APP2                    = 0xB7
	VK_OEM_1                          = 0xBA
	VK_OEM_PLUS                       = 0xBB
	VK_OEM_COMMA                      = 0xBC
	VK_OEM_MINUS                      = 0xBD
	VK_OEM_PERIOD                     = 0xBE
	VK_OEM_2                          = 0xBF
	VK_OEM_3                          = 0xC0
	VK_OEM_4                          = 0xDB
	VK_OEM_5                          = 0xDC
	VK_OEM_6                          = 0xDD
	VK_OEM_7                          = 0xDE
	VK_OEM_8                          = 0xDF
	VK_OEM_102                        = 0xE2
	VK_PROCESSKEY                     = 0xE5
	VK_PACKET                         = 0xE7
	VK_ATTN                           = 0xF6
	VK_CRSEL                          = 0xF7
	VK_EXSEL                          = 0xF8
	VK_EREOF                          = 0xF9
	VK_PLAY                           = 0xFA
	VK_ZOOM                           = 0xFB
	VK_NONAME                         = 0xFC
	VK_PA1                            = 0xFD
	VK_OEM_CLEAR                      = 0xFE
)

Variables

This section is empty.

Functions

func KeyboardOnly

func KeyboardOnly(event KeyEvent) bool

KeyboardOnly is a Predicate allowing only events for keys on the keyboard to pass.

func Listen

func Listen(predicates ...Predicate) (events <-chan KeyEvent, stopFn func())

Listen listens for global key events, sending them on the events channel. Listen halts execution and closes the events channel as soon as stopFn is called. Listen does not block. The given predicates act as a filter. Only events matching all predicates will be sent on the events channel.

func PressedOnly

func PressedOnly(event KeyEvent) bool

PressedOnly is a Predicate allowing only events for key presses to pass.

func ReleasedOnly

func ReleasedOnly(event KeyEvent) bool

ReleasedOnly is a Predicate allowing only events for key releases to pass.

Types

type KeyEvent

type KeyEvent struct {
	// State represents the state of the event's virtual
	// key at the time the event was dispatched.
	State KeyState `json:"type,omitempty"`

	// VirtualKey represents the event's virtual key.
	VirtualKey VirtualKey `json:"virtualKey,omitempty"`

	// PressedKeys is the set of all other keys that were
	// pressed at the time the event was dispatched.
	PressedKeys KeySet `json:"pressedKeys,omitempty"`

	// Modifiers is the bitwise or of the modifiers
	// that were active when the event was dispatched.
	Modifiers Modifiers `json:"modifiersToStr,omitempty"`
}

KeyEvent represents a key event.

func (KeyEvent) HasControl

func (e KeyEvent) HasControl() bool

HasControl reports whether e contains any 'ctrl' modifier.

func (KeyEvent) HasMenu

func (e KeyEvent) HasMenu() bool

HasMenu reports whether e contains any 'alt' modifier.

func (KeyEvent) HasShift

func (e KeyEvent) HasShift() bool

HasShift reports whether e contains any 'shift' modifier.

func (KeyEvent) String

func (e KeyEvent) String() string

String returns the string representation of e.

type KeySet

type KeySet map[VirtualKey]struct{}

KeySet represents a set of virtual keys.

func NewKeySet

func NewKeySet(keys ...VirtualKey) KeySet

NewKeySet constructs a new KeySet from the given virtual keys.

func (KeySet) Add

func (s KeySet) Add(keys ...VirtualKey)

Add adds the given virtual keys to s.

func (KeySet) Contains

func (s KeySet) Contains(key VirtualKey) bool

Contains reports whether s contains the given virtual key.

func (KeySet) ContainsAll

func (s KeySet) ContainsAll(keys ...VirtualKey) bool

ContainsAll reports whether s contains all of the given virtual keys.

func (KeySet) ContainsAny

func (s KeySet) ContainsAny(keys ...VirtualKey) bool

ContainsAny reports whether s contains any of the given virtual keys.

func (KeySet) Delete

func (s KeySet) Delete(keys ...VirtualKey)

Delete deletes the given virtual keys from s.

func (KeySet) Slice

func (s KeySet) Slice() []VirtualKey

Slice returns a slice containing the virtual keys in s.

type KeyState

type KeyState uint

KeyState represents the state of some key.

const (
	// KeyUp represents a key being up.
	KeyUp KeyState = iota
	// KeyDown represents a key being down.
	KeyDown
)

type Modifiers

type Modifiers uint

Modifiers represents modifiers that are pressed alongside some virtual key. See the flags below for more info.

const (
	// ModifierShift identifies any 'shift' modifier.
	ModifierShift Modifiers = 1 << iota
	// ModifierMenu identifies any 'alt' modifier.
	ModifierMenu
	// ModifierControl identifies any 'ctrl' modifier.
	ModifierControl
)

These flags define which modifiers are being pressed alongside some virtual key. Bits are or'ed to build a modifier field. See KeyEvent.Modifiers for more info.

Note that these flags do not differentiate between the 'left' and 'right' versions of keys. So, for instance, pressing either 'left shift' or 'right shift' will simply result in ModifierShift being used to build the modifier field.

func (Modifiers) HasModifiers

func (m Modifiers) HasModifiers(modifiers Modifiers) bool

HasModifiers reports whether m contains the given modifiers.

func (Modifiers) RemoveModifiers

func (m Modifiers) RemoveModifiers(modifiers Modifiers) Modifiers

RemoveModifiers returns a copy of m with the given modifiers removed.

func (Modifiers) String

func (m Modifiers) String() string

String returns the string representation of m.

type Predicate

type Predicate func(event KeyEvent) bool

Predicate represents a filter for key events.

func Selective

func Selective(keys ...VirtualKey) Predicate

Selective returns a Predicate allowing only events for the given virtual keys to pass.

type VirtualKey

type VirtualKey int

VirtualKey represents a virtual key.

func (VirtualKey) String

func (vk VirtualKey) String() string

String returns the string representation of vk, according to a predefined table. If that table does not contain such a representation, String falls back to the "MapVirtualKeyA" function exposed by Windows' user32.dll.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL