MultiKey
 
通过键盘扫描码检测键的状态。

语法

Declare Function MultiKey ( ByVal scancode As Integer ) As Integer

用法

result = MultiKey(scancode )

参数

scancode
扫描码要检查的钥匙。

返回值

如果按下指定的扫描码键,则返回-1,否则返回0.

说明

MultiKey是一种功能,可以随时检测由scancode确定的任何键的状态。如果按下该键,它将返回-1,否则返回0.使用MultiKey时,键盘输入缓冲区不会被禁用;也就是说,按下的键将被存储,随后你的下一次调用返回Inkey.这意味着在完成使用MultiKey后,您必须手动清空Inkey,使用以下方法:
While Inkey <> "": Wend '' loop until the Inkey buffer is empty

使用MultiKey保持Inkey工作可以更灵活地检测Chr(255)+"k"组合,如果窗口化图形模式已通过Screen语句设置,则可以对窗口关闭按钮单击返回的Chr(255)+"k"组合进行检测。有关接受的扫描码列表,请参阅DOS键盘扫描码;这些保证对所有FreeBASIC支持的平台都有效。
只要屏幕为解锁MultiKey应始终在图形模式下工作。控制台中的支持取决于程序运行的平台,但不能保证。

例子

#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB ''扫描代码常量存储在lang FB的FB命名空间中
#endif

Dim As Integer x, y

ScreenRes 640, 480

Color 2, 15

x = 320: y = 240
Do
    '检查箭头键并相应更新(x,y)位置
    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
    
    '在我们工作时锁定页面
    ScreenLock
        '清除屏幕并在位置(x,y)处绘制一个圆圈
        Cls
        Circle(x, y), 30, , , , ,F
    ScreenUnlock
    
    Sleep 15, 1
    
    '运行循环,直到用户按Escape
Loop Until MultiKey(SC_ESCAPE)

'清除这些缓冲
While Inkey <> "": Wend


Print "按CTRL和H退出..."

Do
    Sleep 25
    
    ''保持循环,直到用户同时按住CTRL和H
    If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
Loop



方言差异

  • -lang qb 方言中不可用,除非使用别名__Multikey引用。

与QB差别

  • 新的FreeBASIC

参考