{{fbdoc item="title" value="MULTIKEY"}}----
Detects the status of keys by keyboard scancode.

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|declare]] [[KeyPgFunction|function]] **Multikey** ( [[KeyPgByval|byval]] //scancode// [[KeyPgAs|as]] [[KeyPgLong|long]] ) [[KeyPgAs|as]] [[KeyPgLong|long]]
##
{{fbdoc item="usage"}}##
	//result// = **Multikey**(//scancode//)
##
{{fbdoc item="param"}}
	##//scancode//##
		The [[GfxScancodes|scan code]] of the key to check.

{{fbdoc item="ret"}}
	Returns ##-1## if the key for the specified [[GfxScancodes|scan code]] is pressed, otherwise returns ##0##.

{{fbdoc item="desc"}}
	##**Multikey**## is a function which will detect the status of any key, determined by scancode, at any time. It will return ##-1## if the key is pressed, otherwise it will return ##0##.
	
	The keyboard input buffer is not disabled while you use ##**Multikey**##; that is, pressed keys will be stored and subsequently returned by your next call to ##[[KeyPgInkey|Inkey]]## or ##[[KeyPgGetkey|Getkey]]## or ##[[KeyPgInput|Input]]##. This means you have to empty the keyboard input buffer manually when you finish using ##**Multikey**##, using something like the following method:
		%%(freebasic)
While Inkey <> "": Wend  '' loop until the keyboard input buffer is empty
		%%
	For FB's built-in functionality of getting keyboard input, see ##[[DevRtlInkey|Keyboard Input]] (Basics)##.
	
	Keeping ##[[KeyPgInkey|Inkey]]## to work while you use ##**Multikey**## allows more flexibility and can be useful to detect ##[[KeyPgChr|Chr]](255)+"k"## combo returned on window close button click, if a windowed graphics mode has been set via the ##[[KeyPgScreengraphics|Screen (Graphics)]]## statement. For a list of accepted scancodes, see [[GfxScancodes|DOS keyboard scancodes]]; these are guaranteed to be valid for all ""FreeBASIC"" supported platforms.
	##**Multikey**## should always work in graphics mode, as long as the screen is [[KeyPgScreenunlock|unlocked]]. Support in the console depends on the platform the program is run on though, and cannot be guaranteed.

{{fbdoc item="ex"}}
	{{fbdoc item="filename" value="examples/manual/input/multikey.bas"}}%%(freebasic)
#include "fbgfx.bi"
#if __fb_lang__ = "fb"
Using FB '' Scan code constants are stored in the FB namespace in lang FB
#endif

Dim As Integer x, y

Screenres 640, 480

Color 2, 15

x = 320: y = 240
Do
	' Check arrow keys and update the (x, y) position accordingly
	If MultiKey(SC_LEFT ) And x >   0 Then x = x - 1
	If MultiKey(SC_RIGHT) And x < 639 Then x = x + 1
	If MultiKey(SC_UP   ) And y >   0 Then y = y - 1
	If MultiKey(SC_DOWN ) And y < 479 Then y = y + 1
	
	' Lock the page while we work on it
	Screenlock
		' Clear the screen and draw a circle at the position (x, y)
		Cls
		Circle(x, y), 30, , , , ,F
	ScreenUnlock
	
	Sleep 15, 1
	
	' Run loop until user presses Escape
Loop Until MultiKey(SC_ESCAPE)

' Clear Inkey buffer
While Inkey <> "": Wend


Print "Press CTRL and H to exit..."

Do
	Sleep 25
	
	'' Stay in loop until user holds down CTRL and H at the same time
	If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
Loop
	%%
{{fbdoc item="lang"}}
	- Not available in the //[[CompilerOptlang|-lang qb]]// dialect unless referenced with the alias ##**""__Multikey""**##.

{{fbdoc item="diff"}}
	- New to ""FreeBASIC""

{{fbdoc item="see"}}
	- [[GfxScancodes|Keyboard scancodes]]
	- ##[[KeyPgGetmouse|Getmouse]]##
	- ##[[KeyPgGetjoystick|Getjoystick]]##
	- ##[[KeyPgScreengraphics|Screen (Graphics)]]##
	- ##[[KeyPgInkey|Inkey]]##
	- ##[[KeyPgEvent|Event]]##
	- ##[[KeyPgScreenevent|ScreenEvent]]##
	- [[DevRtlInkey|Keyboard Input]]

{{fbdoc item="back" value="CatPgGfxInput|User Input Functions"}}