Inkey()

Syntax

String$ = Inkey()
Beschreibung
Gibt einen "2-Zeichen"-String zurück, wenn eine Taste während dem Aufruf von Inkey() gedrückt wurde. Der Programmablauf wird dabei nicht unterbrochen (angehalten). Ist das Ergebnis 'String$' nicht leer, beinhaltet es zwei Zeichen: das Erste ist der ASCII-Wert der gedrückten Taste, und der rechte Teil beinhaltet die zugehörige Nummer. Dies ist nützlich für erweiterte (nicht-ASCII) Tasten (zum Beispiel: Funktionstasten, Cursortasten, etc...).

Parameter:
Dieser Befehl hat keine Parameter.


Rückgabewert:
Ein String mit zwei Zeichen als Inhalt, die den ASCII-Code (wenn möglich, im ersten Zeichen) und den "rohen" Tastencode (im zweiten Zeichen) repräsentieren.


Beispiel:
  ; Dieses ziemlich große Beispiel lässt Sie alle Tastencodes für
  ; alle Tasten auf Ihrer Tastatur entdecken. Es bietet Ihnen
  ; hoffentlich auch eine mögliche Methode für deren Handhabung.
  If OpenConsole()
    PrintN("Druecken Sie Escape zum Beenden.")

    Repeat
      key_pressed$ = Inkey()
        
      If key_pressed$<>""
        ; Zeigt die Taste, wenn Sie einen darstellbaren ASCII-Code besitzt.
        If Asc(key_pressed$)>=32 And Asc(key_pressed$)<128
          PrintN("Sie drueckten: "+Left(key_pressed$, 1))
          PrintN("Diese hat einen Roh-Code von: "+Str(PeekB(@key_pressed$+1) & $FF))
        Else
          ; Entweder ein nicht darstellbarer ASCII-Code oder ein erweitertes Zeichen
          If Asc(key_pressed$)=255 And skip_shift=0
            PrintN("Sie drueckten die erweiterte (erstes Zeichen=255) Taste: "+Str(PeekB(@key_pressed$+1) & $FF))
          ElseIf Asc(key_pressed$)=224
            skip_shift = 1
            PrintN("Sie drueckten eine Cursortaste (erstes Zeichen=224) mit dem Roh-Code: "+Str(PeekB(@key_pressed$+1) & $FF))
          Else
            ; Wenn skip_shift gleich 1 war, dann brauchen wir dies nicht zu verarbeiten,
            ; weil der Schlüssel die von der Cursortaste produzierte Umschalttaste sein wird.
            If skip_shift=1
              skip_shift = 0
            Else
              PrintN("Die von Ihnen grdrueckte Taste hat Roh-Werte von: "+Str(PeekB(@key_pressed$) & $FF)+" und "+Str(PeekB(@key_pressed$+1) & $FF))
            EndIf
          EndIf
        EndIf
      Else
        Delay(50)  ; Wir verbrauchen nicht die gesamte CPU-Leistung, da wir uns auf einem Multitasking-OS befinden
      EndIf
        
    ; Wartet, bis Escape gedrückt wird
    Until Left(key_pressed$, 1) = Chr(27)

    CloseConsole()
  EndIf
  End


Hinweise:
Es sind nicht nur die alphanumerischen Tasten, welche einen ASCII-Wert haben. Die Escape-Taste (27), Return-Taste (10), Tabulator-Taste (9) und die Backspace-Taste (8) sind nur vier Beispiele.

Wenn es sich um eine erweiterte Taste handelt, dann wird das erste Zeichen einen ASCII-Code von 255 haben und das zweite Zeichen beinhaltet den Roh-Code.

Die Ausnahme dazu bilden die Einfügen, Pos1, Bild auf, Entf, Ende und Bild ab Tasten, welche sich zwischen der Haupttastatur und der Zehnertastatur befinden. Das erste Zeichen hat einen ASCII-Code von 224 und das zweite Zeichen ist der Roh-Code. Dies wird dann von den Schlüsselcodes für die Umschalttaste (Shift) gefolgt. Der Grund dafür ist, dass Sie bei eingeschaltetem 'NumLock' die Umschalttaste zusammen mit den Tasten auf der Zehnertastatur drücken müssen, um die Funktionen wie Einfügen zu erhalten. In diesem Fall hat das erste Zeichen einen ASCII-Code von 255, so dass es scheint, dass die separaten Tasten für Einfügen usw. 224 verwenden, damit Sie zwischen ihnen unterscheiden können.

Die in dieser Beschreibung aufgeführten ASCII-Codes und numerischen werte können sich - je nach der von Ihnen beim Booten für die Tastatureingabe eingestellten "Code-Page" - unterscheiden. Jedoch sollte das Konzept das Gleiche sein, und Sie können das oben genannte Beispiel verwenden, um die wirklichen Werte für Ihr System zu ermitteln.

Unterstützte OS

Windows, Linux, MacOS X

<- ConsoleTitle() - Console Inhaltsverzeichnis - Input() ->