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 }