github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/winc/keyboard.go (about)

     1  //go:build windows
     2  
     3  /*
     4   * Copyright (C) 2019 The Winc Authors. All Rights Reserved.
     5   * Copyright (C) 2010-2013 Allen Dang. All Rights Reserved.
     6   */
     7  
     8  package winc
     9  
    10  import (
    11  	"bytes"
    12  
    13  	"github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc/w32"
    14  )
    15  
    16  type Key uint16
    17  
    18  func (k Key) String() string {
    19  	return key2string[k]
    20  }
    21  
    22  const (
    23  	KeyLButton           Key = w32.VK_LBUTTON
    24  	KeyRButton           Key = w32.VK_RBUTTON
    25  	KeyCancel            Key = w32.VK_CANCEL
    26  	KeyMButton           Key = w32.VK_MBUTTON
    27  	KeyXButton1          Key = w32.VK_XBUTTON1
    28  	KeyXButton2          Key = w32.VK_XBUTTON2
    29  	KeyBack              Key = w32.VK_BACK
    30  	KeyTab               Key = w32.VK_TAB
    31  	KeyClear             Key = w32.VK_CLEAR
    32  	KeyReturn            Key = w32.VK_RETURN
    33  	KeyShift             Key = w32.VK_SHIFT
    34  	KeyControl           Key = w32.VK_CONTROL
    35  	KeyAlt               Key = w32.VK_MENU
    36  	KeyMenu              Key = w32.VK_MENU
    37  	KeyPause             Key = w32.VK_PAUSE
    38  	KeyCapital           Key = w32.VK_CAPITAL
    39  	KeyKana              Key = w32.VK_KANA
    40  	KeyHangul            Key = w32.VK_HANGUL
    41  	KeyJunja             Key = w32.VK_JUNJA
    42  	KeyFinal             Key = w32.VK_FINAL
    43  	KeyHanja             Key = w32.VK_HANJA
    44  	KeyKanji             Key = w32.VK_KANJI
    45  	KeyEscape            Key = w32.VK_ESCAPE
    46  	KeyConvert           Key = w32.VK_CONVERT
    47  	KeyNonconvert        Key = w32.VK_NONCONVERT
    48  	KeyAccept            Key = w32.VK_ACCEPT
    49  	KeyModeChange        Key = w32.VK_MODECHANGE
    50  	KeySpace             Key = w32.VK_SPACE
    51  	KeyPrior             Key = w32.VK_PRIOR
    52  	KeyNext              Key = w32.VK_NEXT
    53  	KeyEnd               Key = w32.VK_END
    54  	KeyHome              Key = w32.VK_HOME
    55  	KeyLeft              Key = w32.VK_LEFT
    56  	KeyUp                Key = w32.VK_UP
    57  	KeyRight             Key = w32.VK_RIGHT
    58  	KeyDown              Key = w32.VK_DOWN
    59  	KeySelect            Key = w32.VK_SELECT
    60  	KeyPrint             Key = w32.VK_PRINT
    61  	KeyExecute           Key = w32.VK_EXECUTE
    62  	KeySnapshot          Key = w32.VK_SNAPSHOT
    63  	KeyInsert            Key = w32.VK_INSERT
    64  	KeyDelete            Key = w32.VK_DELETE
    65  	KeyHelp              Key = w32.VK_HELP
    66  	Key0                 Key = 0x30
    67  	Key1                 Key = 0x31
    68  	Key2                 Key = 0x32
    69  	Key3                 Key = 0x33
    70  	Key4                 Key = 0x34
    71  	Key5                 Key = 0x35
    72  	Key6                 Key = 0x36
    73  	Key7                 Key = 0x37
    74  	Key8                 Key = 0x38
    75  	Key9                 Key = 0x39
    76  	KeyA                 Key = 0x41
    77  	KeyB                 Key = 0x42
    78  	KeyC                 Key = 0x43
    79  	KeyD                 Key = 0x44
    80  	KeyE                 Key = 0x45
    81  	KeyF                 Key = 0x46
    82  	KeyG                 Key = 0x47
    83  	KeyH                 Key = 0x48
    84  	KeyI                 Key = 0x49
    85  	KeyJ                 Key = 0x4A
    86  	KeyK                 Key = 0x4B
    87  	KeyL                 Key = 0x4C
    88  	KeyM                 Key = 0x4D
    89  	KeyN                 Key = 0x4E
    90  	KeyO                 Key = 0x4F
    91  	KeyP                 Key = 0x50
    92  	KeyQ                 Key = 0x51
    93  	KeyR                 Key = 0x52
    94  	KeyS                 Key = 0x53
    95  	KeyT                 Key = 0x54
    96  	KeyU                 Key = 0x55
    97  	KeyV                 Key = 0x56
    98  	KeyW                 Key = 0x57
    99  	KeyX                 Key = 0x58
   100  	KeyY                 Key = 0x59
   101  	KeyZ                 Key = 0x5A
   102  	KeyLWIN              Key = w32.VK_LWIN
   103  	KeyRWIN              Key = w32.VK_RWIN
   104  	KeyApps              Key = w32.VK_APPS
   105  	KeySleep             Key = w32.VK_SLEEP
   106  	KeyNumpad0           Key = w32.VK_NUMPAD0
   107  	KeyNumpad1           Key = w32.VK_NUMPAD1
   108  	KeyNumpad2           Key = w32.VK_NUMPAD2
   109  	KeyNumpad3           Key = w32.VK_NUMPAD3
   110  	KeyNumpad4           Key = w32.VK_NUMPAD4
   111  	KeyNumpad5           Key = w32.VK_NUMPAD5
   112  	KeyNumpad6           Key = w32.VK_NUMPAD6
   113  	KeyNumpad7           Key = w32.VK_NUMPAD7
   114  	KeyNumpad8           Key = w32.VK_NUMPAD8
   115  	KeyNumpad9           Key = w32.VK_NUMPAD9
   116  	KeyMultiply          Key = w32.VK_MULTIPLY
   117  	KeyAdd               Key = w32.VK_ADD
   118  	KeySeparator         Key = w32.VK_SEPARATOR
   119  	KeySubtract          Key = w32.VK_SUBTRACT
   120  	KeyDecimal           Key = w32.VK_DECIMAL
   121  	KeyDivide            Key = w32.VK_DIVIDE
   122  	KeyF1                Key = w32.VK_F1
   123  	KeyF2                Key = w32.VK_F2
   124  	KeyF3                Key = w32.VK_F3
   125  	KeyF4                Key = w32.VK_F4
   126  	KeyF5                Key = w32.VK_F5
   127  	KeyF6                Key = w32.VK_F6
   128  	KeyF7                Key = w32.VK_F7
   129  	KeyF8                Key = w32.VK_F8
   130  	KeyF9                Key = w32.VK_F9
   131  	KeyF10               Key = w32.VK_F10
   132  	KeyF11               Key = w32.VK_F11
   133  	KeyF12               Key = w32.VK_F12
   134  	KeyF13               Key = w32.VK_F13
   135  	KeyF14               Key = w32.VK_F14
   136  	KeyF15               Key = w32.VK_F15
   137  	KeyF16               Key = w32.VK_F16
   138  	KeyF17               Key = w32.VK_F17
   139  	KeyF18               Key = w32.VK_F18
   140  	KeyF19               Key = w32.VK_F19
   141  	KeyF20               Key = w32.VK_F20
   142  	KeyF21               Key = w32.VK_F21
   143  	KeyF22               Key = w32.VK_F22
   144  	KeyF23               Key = w32.VK_F23
   145  	KeyF24               Key = w32.VK_F24
   146  	KeyNumlock           Key = w32.VK_NUMLOCK
   147  	KeyScroll            Key = w32.VK_SCROLL
   148  	KeyLShift            Key = w32.VK_LSHIFT
   149  	KeyRShift            Key = w32.VK_RSHIFT
   150  	KeyLControl          Key = w32.VK_LCONTROL
   151  	KeyRControl          Key = w32.VK_RCONTROL
   152  	KeyLAlt              Key = w32.VK_LMENU
   153  	KeyLMenu             Key = w32.VK_LMENU
   154  	KeyRAlt              Key = w32.VK_RMENU
   155  	KeyRMenu             Key = w32.VK_RMENU
   156  	KeyBrowserBack       Key = w32.VK_BROWSER_BACK
   157  	KeyBrowserForward    Key = w32.VK_BROWSER_FORWARD
   158  	KeyBrowserRefresh    Key = w32.VK_BROWSER_REFRESH
   159  	KeyBrowserStop       Key = w32.VK_BROWSER_STOP
   160  	KeyBrowserSearch     Key = w32.VK_BROWSER_SEARCH
   161  	KeyBrowserFavorites  Key = w32.VK_BROWSER_FAVORITES
   162  	KeyBrowserHome       Key = w32.VK_BROWSER_HOME
   163  	KeyVolumeMute        Key = w32.VK_VOLUME_MUTE
   164  	KeyVolumeDown        Key = w32.VK_VOLUME_DOWN
   165  	KeyVolumeUp          Key = w32.VK_VOLUME_UP
   166  	KeyMediaNextTrack    Key = w32.VK_MEDIA_NEXT_TRACK
   167  	KeyMediaPrevTrack    Key = w32.VK_MEDIA_PREV_TRACK
   168  	KeyMediaStop         Key = w32.VK_MEDIA_STOP
   169  	KeyMediaPlayPause    Key = w32.VK_MEDIA_PLAY_PAUSE
   170  	KeyLaunchMail        Key = w32.VK_LAUNCH_MAIL
   171  	KeyLaunchMediaSelect Key = w32.VK_LAUNCH_MEDIA_SELECT
   172  	KeyLaunchApp1        Key = w32.VK_LAUNCH_APP1
   173  	KeyLaunchApp2        Key = w32.VK_LAUNCH_APP2
   174  	KeyOEM1              Key = w32.VK_OEM_1
   175  	KeyOEMPlus           Key = w32.VK_OEM_PLUS
   176  	KeyOEMComma          Key = w32.VK_OEM_COMMA
   177  	KeyOEMMinus          Key = w32.VK_OEM_MINUS
   178  	KeyOEMPeriod         Key = w32.VK_OEM_PERIOD
   179  	KeyOEM2              Key = w32.VK_OEM_2
   180  	KeyOEM3              Key = w32.VK_OEM_3
   181  	KeyOEM4              Key = w32.VK_OEM_4
   182  	KeyOEM5              Key = w32.VK_OEM_5
   183  	KeyOEM6              Key = w32.VK_OEM_6
   184  	KeyOEM7              Key = w32.VK_OEM_7
   185  	KeyOEM8              Key = w32.VK_OEM_8
   186  	KeyOEM102            Key = w32.VK_OEM_102
   187  	KeyProcessKey        Key = w32.VK_PROCESSKEY
   188  	KeyPacket            Key = w32.VK_PACKET
   189  	KeyAttn              Key = w32.VK_ATTN
   190  	KeyCRSel             Key = w32.VK_CRSEL
   191  	KeyEXSel             Key = w32.VK_EXSEL
   192  	KeyErEOF             Key = w32.VK_EREOF
   193  	KeyPlay              Key = w32.VK_PLAY
   194  	KeyZoom              Key = w32.VK_ZOOM
   195  	KeyNoName            Key = w32.VK_NONAME
   196  	KeyPA1               Key = w32.VK_PA1
   197  	KeyOEMClear          Key = w32.VK_OEM_CLEAR
   198  )
   199  
   200  var key2string = map[Key]string{
   201  	KeyLButton:           "LButton",
   202  	KeyRButton:           "RButton",
   203  	KeyCancel:            "Cancel",
   204  	KeyMButton:           "MButton",
   205  	KeyXButton1:          "XButton1",
   206  	KeyXButton2:          "XButton2",
   207  	KeyBack:              "Back",
   208  	KeyTab:               "Tab",
   209  	KeyClear:             "Clear",
   210  	KeyReturn:            "Return",
   211  	KeyShift:             "Shift",
   212  	KeyControl:           "Control",
   213  	KeyAlt:               "Alt / Menu",
   214  	KeyPause:             "Pause",
   215  	KeyCapital:           "Capital",
   216  	KeyKana:              "Kana / Hangul",
   217  	KeyJunja:             "Junja",
   218  	KeyFinal:             "Final",
   219  	KeyHanja:             "Hanja / Kanji",
   220  	KeyEscape:            "Escape",
   221  	KeyConvert:           "Convert",
   222  	KeyNonconvert:        "Nonconvert",
   223  	KeyAccept:            "Accept",
   224  	KeyModeChange:        "ModeChange",
   225  	KeySpace:             "Space",
   226  	KeyPrior:             "Prior",
   227  	KeyNext:              "Next",
   228  	KeyEnd:               "End",
   229  	KeyHome:              "Home",
   230  	KeyLeft:              "Left",
   231  	KeyUp:                "Up",
   232  	KeyRight:             "Right",
   233  	KeyDown:              "Down",
   234  	KeySelect:            "Select",
   235  	KeyPrint:             "Print",
   236  	KeyExecute:           "Execute",
   237  	KeySnapshot:          "Snapshot",
   238  	KeyInsert:            "Insert",
   239  	KeyDelete:            "Delete",
   240  	KeyHelp:              "Help",
   241  	Key0:                 "0",
   242  	Key1:                 "1",
   243  	Key2:                 "2",
   244  	Key3:                 "3",
   245  	Key4:                 "4",
   246  	Key5:                 "5",
   247  	Key6:                 "6",
   248  	Key7:                 "7",
   249  	Key8:                 "8",
   250  	Key9:                 "9",
   251  	KeyA:                 "A",
   252  	KeyB:                 "B",
   253  	KeyC:                 "C",
   254  	KeyD:                 "D",
   255  	KeyE:                 "E",
   256  	KeyF:                 "F",
   257  	KeyG:                 "G",
   258  	KeyH:                 "H",
   259  	KeyI:                 "I",
   260  	KeyJ:                 "J",
   261  	KeyK:                 "K",
   262  	KeyL:                 "L",
   263  	KeyM:                 "M",
   264  	KeyN:                 "N",
   265  	KeyO:                 "O",
   266  	KeyP:                 "P",
   267  	KeyQ:                 "Q",
   268  	KeyR:                 "R",
   269  	KeyS:                 "S",
   270  	KeyT:                 "T",
   271  	KeyU:                 "U",
   272  	KeyV:                 "V",
   273  	KeyW:                 "W",
   274  	KeyX:                 "X",
   275  	KeyY:                 "Y",
   276  	KeyZ:                 "Z",
   277  	KeyLWIN:              "LWIN",
   278  	KeyRWIN:              "RWIN",
   279  	KeyApps:              "Apps",
   280  	KeySleep:             "Sleep",
   281  	KeyNumpad0:           "Numpad0",
   282  	KeyNumpad1:           "Numpad1",
   283  	KeyNumpad2:           "Numpad2",
   284  	KeyNumpad3:           "Numpad3",
   285  	KeyNumpad4:           "Numpad4",
   286  	KeyNumpad5:           "Numpad5",
   287  	KeyNumpad6:           "Numpad6",
   288  	KeyNumpad7:           "Numpad7",
   289  	KeyNumpad8:           "Numpad8",
   290  	KeyNumpad9:           "Numpad9",
   291  	KeyMultiply:          "Multiply",
   292  	KeyAdd:               "Add",
   293  	KeySeparator:         "Separator",
   294  	KeySubtract:          "Subtract",
   295  	KeyDecimal:           "Decimal",
   296  	KeyDivide:            "Divide",
   297  	KeyF1:                "F1",
   298  	KeyF2:                "F2",
   299  	KeyF3:                "F3",
   300  	KeyF4:                "F4",
   301  	KeyF5:                "F5",
   302  	KeyF6:                "F6",
   303  	KeyF7:                "F7",
   304  	KeyF8:                "F8",
   305  	KeyF9:                "F9",
   306  	KeyF10:               "F10",
   307  	KeyF11:               "F11",
   308  	KeyF12:               "F12",
   309  	KeyF13:               "F13",
   310  	KeyF14:               "F14",
   311  	KeyF15:               "F15",
   312  	KeyF16:               "F16",
   313  	KeyF17:               "F17",
   314  	KeyF18:               "F18",
   315  	KeyF19:               "F19",
   316  	KeyF20:               "F20",
   317  	KeyF21:               "F21",
   318  	KeyF22:               "F22",
   319  	KeyF23:               "F23",
   320  	KeyF24:               "F24",
   321  	KeyNumlock:           "Numlock",
   322  	KeyScroll:            "Scroll",
   323  	KeyLShift:            "LShift",
   324  	KeyRShift:            "RShift",
   325  	KeyLControl:          "LControl",
   326  	KeyRControl:          "RControl",
   327  	KeyLMenu:             "LMenu",
   328  	KeyRMenu:             "RMenu",
   329  	KeyBrowserBack:       "BrowserBack",
   330  	KeyBrowserForward:    "BrowserForward",
   331  	KeyBrowserRefresh:    "BrowserRefresh",
   332  	KeyBrowserStop:       "BrowserStop",
   333  	KeyBrowserSearch:     "BrowserSearch",
   334  	KeyBrowserFavorites:  "BrowserFavorites",
   335  	KeyBrowserHome:       "BrowserHome",
   336  	KeyVolumeMute:        "VolumeMute",
   337  	KeyVolumeDown:        "VolumeDown",
   338  	KeyVolumeUp:          "VolumeUp",
   339  	KeyMediaNextTrack:    "MediaNextTrack",
   340  	KeyMediaPrevTrack:    "MediaPrevTrack",
   341  	KeyMediaStop:         "MediaStop",
   342  	KeyMediaPlayPause:    "MediaPlayPause",
   343  	KeyLaunchMail:        "LaunchMail",
   344  	KeyLaunchMediaSelect: "LaunchMediaSelect",
   345  	KeyLaunchApp1:        "LaunchApp1",
   346  	KeyLaunchApp2:        "LaunchApp2",
   347  	KeyOEM1:              "OEM1",
   348  	KeyOEMPlus:           "OEMPlus",
   349  	KeyOEMComma:          "OEMComma",
   350  	KeyOEMMinus:          "OEMMinus",
   351  	KeyOEMPeriod:         "OEMPeriod",
   352  	KeyOEM2:              "OEM2",
   353  	KeyOEM3:              "OEM3",
   354  	KeyOEM4:              "OEM4",
   355  	KeyOEM5:              "OEM5",
   356  	KeyOEM6:              "OEM6",
   357  	KeyOEM7:              "OEM7",
   358  	KeyOEM8:              "OEM8",
   359  	KeyOEM102:            "OEM102",
   360  	KeyProcessKey:        "ProcessKey",
   361  	KeyPacket:            "Packet",
   362  	KeyAttn:              "Attn",
   363  	KeyCRSel:             "CRSel",
   364  	KeyEXSel:             "EXSel",
   365  	KeyErEOF:             "ErEOF",
   366  	KeyPlay:              "Play",
   367  	KeyZoom:              "Zoom",
   368  	KeyNoName:            "NoName",
   369  	KeyPA1:               "PA1",
   370  	KeyOEMClear:          "OEMClear",
   371  }
   372  
   373  type Modifiers byte
   374  
   375  func (m Modifiers) String() string {
   376  	return modifiers2string[m]
   377  }
   378  
   379  var modifiers2string = map[Modifiers]string{
   380  	ModShift:                       "Shift",
   381  	ModControl:                     "Ctrl",
   382  	ModControl | ModShift:          "Ctrl+Shift",
   383  	ModAlt:                         "Alt",
   384  	ModAlt | ModShift:              "Alt+Shift",
   385  	ModAlt | ModControl | ModShift: "Alt+Ctrl+Shift",
   386  }
   387  
   388  const (
   389  	ModShift Modifiers = 1 << iota
   390  	ModControl
   391  	ModAlt
   392  )
   393  
   394  func ModifiersDown() Modifiers {
   395  	var m Modifiers
   396  
   397  	if ShiftDown() {
   398  		m |= ModShift
   399  	}
   400  	if ControlDown() {
   401  		m |= ModControl
   402  	}
   403  	if AltDown() {
   404  		m |= ModAlt
   405  	}
   406  
   407  	return m
   408  }
   409  
   410  type Shortcut struct {
   411  	Modifiers Modifiers
   412  	Key       Key
   413  }
   414  
   415  func (s Shortcut) String() string {
   416  	m := s.Modifiers.String()
   417  	if m == "" {
   418  		return s.Key.String()
   419  	}
   420  
   421  	b := new(bytes.Buffer)
   422  
   423  	b.WriteString(m)
   424  	b.WriteRune('+')
   425  	b.WriteString(s.Key.String())
   426  
   427  	return b.String()
   428  }
   429  
   430  func AltDown() bool {
   431  	return w32.GetKeyState(int32(KeyAlt))>>15 != 0
   432  }
   433  
   434  func ControlDown() bool {
   435  	return w32.GetKeyState(int32(KeyControl))>>15 != 0
   436  }
   437  
   438  func ShiftDown() bool {
   439  	return w32.GetKeyState(int32(KeyShift))>>15 != 0
   440  }