Skip to content

INKEY


返回代表键盘缓冲区中第一个等待按键的字符串

语法

declare function Inkey ( ) as string

用法

result = Inkey[$]

返回值

键盘缓冲区中找到的第一个字符,若没有则返回空字符串("")。

说明

查看键盘缓冲区,若有字符则返回代表第一个字符的 String。该按键随后从缓冲区移除,不会回显到屏幕。若键盘缓冲区为空,立即返回空字符串("")而不等待按键。

若按键属于ASCII字符集,返回由该字符组成的单字符 String

若按键为"扩展"键(数字键盘、光标键、功能键),返回双字符 String,第一个字符为扩展字符(见下方方言差异),第二个字符为键盘原始扫描码。

关于FreeBASIC内置键盘输入功能,请参阅 键盘输入(基础)

Shift、Ctrl、Alt 和 AltGr 键无法通过此函数单独读取,因为它们从不进入键盘缓冲区(当然,显而易见的是,Shift-A 与 Control-A 等会被 Inkey 以不同方式报告;Alt-A 是上述扩展键)。

另参见 Input()Getkey,或使用 Sleep 在键盘缓冲区为空时等待按键。

示例

start GeSHi

vb
Print "press q to quit"
Do
    Sleep 1, 1
Loop Until Inkey = "q"

end GeSHi

start GeSHi

vb
'' Compile with -lang fblite or qb

#lang "fblite"

#if __FB_LANG__ = "qb"
#define EXTCHAR Chr$(0)
#else
#define EXTCHAR Chr(255)
#endif

Dim k As String

Print "Press a key, or Escape to end"
Do

    k = Inkey$

    Select Case k

        Case "A" To "Z", "a" To "z": Print "Letter: " & k
        Case "1" To "9":             Print "Number: " & k

        Case Chr$(32): Print "Space"

        Case Chr$(27): Print "Escape"

        Case Chr$(9): Print "Tab"

        Case Chr$(8): Print "Backspace"

        Case Chr$(32) To Chr$(127)
            Print "Printable character: " & k

        Case EXTCHAR & "G": Print "Up Left / Home"
        Case EXTCHAR & "H": Print "Up"
        Case EXTCHAR & "I": Print "Up Right / PgUp"

        Case EXTCHAR & "K": Print "Left"
        Case EXTCHAR & "L": Print "Center"
        Case EXTCHAR & "M": Print "Right"

        Case EXTCHAR & "O": Print "Down Left / End"
        Case EXTCHAR & "P": Print "Down"
        Case EXTCHAR & "Q": Print "Down Right / PgDn"

        Case EXTCHAR & "R": Print "Insert"
        Case EXTCHAR & "S": Print "Delete"

        Case EXTCHAR & "k": Print "Close window / Alt-F4"

        Case EXTCHAR & Chr$(59) To EXTCHAR & Chr$(68)
            Print "Function key: F" & Asc(k, 2) - 58

        Case EXTCHAR & Chr$(133) To EXTCHAR & Chr$(134)
            Print "Function key: F" & Asc(k, 2) - 122

        Case Else
            If Len(k) = 2 Then
                Print Using "Extended character: chr$(###, ###)"; Asc(k, 1); Asc(k, 2)
            ElseIf Len(k) = 1 Then
                Print Using "Character chr$(###)"; Asc(k)
            End If

    End Select

    If k = Chr$(27) Then Exit Do

    Sleep 1, 1

Loop

end GeSHi

方言差异

  • -lang fb-lang fblite 方言中,扩展字符为 Chr(255)
  • -lang qb 方言中必须使用字符串类型后缀 "$"。
  • -lang fblite 方言中字符串类型后缀 "$" 是可选的。
  • -lang fb 方言中字符串类型后缀 "$" 被忽略,仅在使用 -w suffix 编译选项(或 -w pedantic 编译选项)时发出警告。

与 QB 的差异

  • -lang qb 方言中无差异。
  • QBasic 对扩展键的第一个字符返回 Chr(0),但FreeBASIC在 -lang fb-lang fblite 方言中返回 Chr(255) 作为第一个字符。

另请参阅

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系