mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-31 10:00:16 +00:00
118 lines
6.8 KiB
Text
118 lines
6.8 KiB
Text
|
The '''_KEYHIT''' function returns [[ASCII]] one and two byte, SDL Virtual Key and Unicode keyboard key press codes.
|
||
|
|
||
|
|
||
|
{{PageSyntax}} keycode& = _KEYHIT
|
||
|
|
||
|
|
||
|
* Return values range up to &H40000000 so use a [[LONG]] or [[_INTEGER64]] variable type! See the [[_KEYDOWN]] code list:
|
||
|
:* 0-255: [[ASCII]] values (Refer to [http://en.wikipedia.org/wiki/Code_page_437 CP437]).
|
||
|
:* 256-65535: [[ASCII#Two_Byte_Codes|2-byte]] character codes : code = [[CVI]]([[CHR$]](0) + [[CHR$]](scancode)) (unaffected by SHIFT/ALT/CTRL modifiers).
|
||
|
:* 65536-&H40000000: QB64-specific Virtual Key codes (designated with + for 100000 on keyboard below)
|
||
|
:* '''Negative [[LONG]] values returned indicate that a key was released or a lock function key has been turned off.'''
|
||
|
{{WhiteStart}}' '''_KEYHIT Keyboard Codes'''
|
||
|
'
|
||
|
''''Esc F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Sys ScL Pause'''
|
||
|
' 27 15104 15360 15616 15872 16128 16384 16640 16896 17152 17408 34048 34304 +316 +302 +019
|
||
|
''''`~ 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ BkSp Ins Hme PUp NumL / * -'''
|
||
|
'126 33 64 35 36 37 94 38 42 40 41 95 43 8 20992 18176 18688 +300 47 42 45
|
||
|
''' 96 49 50 51 52 53 54 55 56 57 48 45 61''
|
||
|
''''Tab Q W E R T Y U I O P [{ ]} \| Del End PDn 7Hme 8/▲ 9PU + '''
|
||
|
' 9 81 87 69 82 84 89 85 73 79 80 123 125 124 21248 20224 20736 18176 18432 18688 43
|
||
|
''' 113 119 101 114 116 121 117 105 111 112 91 93 92 55 56 57 ''
|
||
|
''''CapL A S D F G H J K L ;: '" Enter 4/◄- 5 6/-►
|
||
|
'+301 65 83 68 70 71 72 74 75 76 58 34 13 19200 19456 19712 '''E'''
|
||
|
''' 97 115 100 102 103 104 106 107 108 59 39 52 53 54 '' '''n'''
|
||
|
''''Shift Z X C V B N M ,< .> /? Shift ▲ 1End 2/▼ 3PD t'''
|
||
|
'+304 90 88 67 86 66 78 77 60 62 63 +303 18432 20224 20480 20736 '''e'''
|
||
|
''' 122 120 99 118 98 110 109 44 46 47 49 50 51 '' '''r'''
|
||
|
''''Ctrl Win Alt Spacebar Alt Win Menu Ctrl ◄- ▼ -► 0Ins .Del '''
|
||
|
'+306 +311 +308 32 +307 +312 +319 +305 19200 20480 19712 20992 21248 13
|
||
|
' '' 48 46''
|
||
|
'
|
||
|
' ''' Lower value = LCase/NumLock On __________________ + = add 100000 '''
|
||
|
{{WhiteEnd}}
|
||
|
{{small|NOTE: The above commented table can be copied and pasted directly into the QB64 IDE}}
|
||
|
|
||
|
|
||
|
:* >= &H40000000: [[Unicode]].
|
||
|
|
||
|
* Font '''cyberbit.ttf''', included with QB64 as of '''V0.92'''(October 2010), is required to facilitate the '''IME'''(in Chinese settings) only. The 12.7 MB font is free for '''non-commercial''' use and is not loaded unless the user switches to the '''Input Mode Editor'''. Set to "UNICODE".
|
||
|
<center>'''[http://www.fileformat.info/tip/microsoft/enter_unicode.htm Setting up the Unicode Input Method Editor in Windows]'''</center>
|
||
|
<center>If you need help with IME support in '''Vista''' see the following article: [http://blogs.msdn.com/b/michkap/archive/2006/07/20/671835.aspx Setting up IME in Vista]</center>
|
||
|
* QB64 can use several Windows fonts when '''cyberbit''' is not present so it is not necessary to include with program packages.
|
||
|
* An '''important difference''' between [[INKEY$]] and _KEYHIT is how they work when '''CTRL, ALT''' or '''SHIFT''' are used. INKEY$ returns a different code if you hold down CTRL, ALT or SHIFT before pressing F1 (for example). _KEYHIT will return the same code regardless of which modifiers were used but you can check [[_KEYDOWN]] to see which modifying keys are being used.
|
||
|
* '''Keyboards with an Alt Gr key note:''' _KEYHIT may return both Alt(100307) and Ctrl(100306) codes when AltGr key is pressed or released.
|
||
|
|
||
|
|
||
|
''Example:'' This routine will return the codes for any keyboard presses.
|
||
|
{{CodeStart}}
|
||
|
'' ''
|
||
|
{{Cl|DEFLNG}} A-Z
|
||
|
{{Cl|SCREEN (statement)|SCREEN}} {{Cl|_NEWIMAGE}}(800, 600, 8)
|
||
|
{{Cl|CLS}} , 1
|
||
|
font = {{Cl|_LOADFONT}}("cyberbit.ttf", 24)
|
||
|
unifont = {{Cl|_LOADFONT}}("cyberbit.ttf", 24, "UNICODE")
|
||
|
{{Cl|_FONT}} font
|
||
|
|
||
|
{{Cl|DO}}
|
||
|
x = {{Cl|_KEYHIT}}
|
||
|
{{Cl|IF}} x {{Cl|THEN}}
|
||
|
{{Cl|IF}} x < 0 {{Cl|THEN}} 'negative value means key released
|
||
|
{{Cl|COLOR}} 2
|
||
|
{{Cl|PRINT}} "Released ";
|
||
|
x = -x
|
||
|
{{Cl|ELSE}}
|
||
|
{{Cl|COLOR}} 10
|
||
|
{{Cl|PRINT}} "Pressed "; 'positive value means key pressed
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|IF}} x < 256 {{Cl|THEN}} 'ASCII code values
|
||
|
{{Cl|PRINT}} "{{Cl|ASC}}II "; x;
|
||
|
{{Cl|IF}} x >= 32 {{Cl|AND (boolean)|AND}} x <= 255 {{Cl|THEN}} {{Cl|PRINT}} "[" + {{Cl|CHR$}}(x) + "]" {{Cl|ELSE}} {{Cl|PRINT}}
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|IF}} x >= 256 {{Cl|AND (boolean)|AND}} x < 65536 {{Cl|THEN}} '2 byte key codes
|
||
|
{{Cl|PRINT}} "2-BYTE-{{Cl|COM}}BO "; x {{Cl|AND (boolean)|AND}} 255; x \ 256;
|
||
|
x2 = x \ 256
|
||
|
{{Cl|IF}} x2 >= 32 {{Cl|AND (boolean)|AND}} x2 <= 255 {{Cl|THEN}} {{Cl|PRINT}} "[" + {{Cl|CHR$}}(x2) + "]" {{Cl|ELSE}} {{Cl|PRINT}}
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|IF}} x >= 100000 {{Cl|AND (boolean)|AND}} x < 200000 {{Cl|THEN}} 'QB84 Virtual Key codes
|
||
|
{{Cl|PRINT}} "SDL VK"; x - 100000
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|IF}} x >= 200000 {{Cl|AND (boolean)|AND}} x < {{Cl|&H}}40000000 {{Cl|THEN}}
|
||
|
{{Cl|PRINT}} "QB64 VK"; x - 200000
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|IF}} x >= {{Cl|&H}}40000000 {{Cl|THEN}} 'Unicode values (IME Input mode)
|
||
|
{{Cl|PRINT}} "UNICODE "; x - {{Cl|&H}}40000000; "0x" + {{Cl|HEX$}}(x - {{Cl|&H}}40000000) + " ...";
|
||
|
cx = {{Cl|POS}}(1): cy = {{Cl|CSRLIN}}
|
||
|
{{Cl|_FONT}} unifont
|
||
|
{{Cl|LOCATE}} cy, cx
|
||
|
{{Cl|COLOR}} 15
|
||
|
z$ = {{Cl|MKL$}}(x - {{Cl|&H}}40000000) + {{Cl|MKL$}}(0)
|
||
|
{{Cl|PRINT}} z$ + z$ + z$;
|
||
|
{{Cl|_FONT}} font
|
||
|
{{Cl|LOCATE}} cy, 1: {{Cl|PRINT}}
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|END IF}}
|
||
|
{{Cl|LOOP}} '' ''
|
||
|
{{CodeEnd}}
|
||
|
{{small|Code by Galleon}}
|
||
|
|
||
|
|
||
|
<center>'''Find any keys that you cannot read or type in the IDE? Please report them at the forum link below:'''
|
||
|
|
||
|
|
||
|
http://www.qb64.net/forum/index.php?topic=1512.0</center>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
''See also:
|
||
|
* [[_KEYDOWN]] {{text|(virtual key codes)}}
|
||
|
* [[_MAPUNICODE]], [[_MAPUNICODE (function)]]
|
||
|
* [[INKEY$]], [[ASCII]] {{text|(code table)}},
|
||
|
* [[Unicode]], [[Code Pages]] {{text|(by region)}}
|
||
|
* [[INP]]([[&H|&H60]]), [[Scancodes]]
|
||
|
* [[ON KEY(n)]], [[KEY(n)]], [[KEY n]]
|
||
|
* [[Windows_Libraries#Hot_Keys_.28maximize.29|Windows hot keys]]
|
||
|
|
||
|
|
||
|
{{PageNavigation}}
|