==== KbdGetStatus ====
**Bindings**: [[getstatus#C bindings|C]], [[getstatus#MASM bindings|MASM]]
This call gets the current state of the keyboard. 
KbdGetStatus (StatData, KbdHandle) 
//StatData// (**PKBDINFO**) - output 
Address of the keyboard status structure: 
//length// (**USHORT**) 
Length, in bytes, of this data structure, including length. 
|10 |Only valid value. |
//sysstate// (**USHORT**) 
State as follows: 
^Bit ^Description ^
|15-9 |Reserved, set to zero. |
|8 |Shift return is on. |
|7 |Length of the turn-around character (meaningful only if bit 6 is on). |
|6 |Turn-around character is modified. |
|5 |Interim character flags are modified. |
|4 |Shift state is modified. |
|3 |ASCII mode is on. |
|2 |Binary mode is on. |
|1 |Echo off. |
|0 |Echo on. |
//turnchardef// (**USHORT**) 
Definition of the turn-around character. In ASCII and extended-ASCII format, the turn-around character is defined as the carriage return. In ASCII format only, the turn-around character is defined in the low-order byte. 
//intcharflag// (**USHORT**) 
Interim character flags: 
^Bit ^Description ^
|15-8 |NLS shift state. |
|7 |Interim character flag is on. |
|6 |Reserved, set to zero. |
|5 |Application requested immediate conversion. |
|4-0 |Reserved, set to zero. |
//shiftstate// (**USHORT**) 
Shift state as follows: 
^Bit ^Description ^
|15 |SysReq key down |
|14 |CapsLock key down |
|13 |NumLock key down |
|12 |ScrollLock key down |
|11 |Right Alt key down |
|10 |Right Ctrl key down |
|9 |Left Alt key down |
|8 |Left Ctrl key down |
|7 |Insert on |
|6 |CapsLock on |
|5 |NumLock on |
|4 |ScrollLock on |
|3 |Either Alt key down |
|2 |Either Ctrl key down |
|1 |Left Shift key down |
|0 |Right Shift key down. |
//KbdHandle// (**HKBD**) - input 
Default keyboard or the logical keyboard. 
//rc// (**USHORT**) - return 
Return code descriptions are: 
|0 |NO_ERROR |
|376 |ERROR_KBD_INVALID_LENGTH |
|439 |ERROR_KBD_INVALID_HANDLE |
|445 |ERROR_KBD_FOCUS_REQUIRED |
|447 |ERROR_KBD_KEYBOARD_BUSY |
|464 |ERROR_KBD_DETACHED |
|504 |ERROR_KBD_EXTENDED_SG |
**Remarks**
The initial state of the keyboard is established by the system at application load time. Some default states may be modified by the application through //[[setstatus|KbdSetStatus]]//. //KbdGetStatus// returns only those keyboard parameters initially set by //[[setstatus|KbdSetStatus]]//. The returned parameters are: 
  * Input Mode
  * Interim Character Flags 
  * Shift State 
  * Echo State 
  * Turnaround Character 
//KbdGetStatus// completes only when the handle has access to the physical keyboard (focus) or the handle is 0 and no other handle has the focus. 
**Family API Considerations**
Some options operate differently in the DOS mode than in the OS/2 mode. Therefore, the following restrictions apply to //KbdGetStatus// when coding in the DOS mode: 
  * Interim character is not supported 
  * TurnAround character is not supported 
  * NLS_SHIFT_STATE is always NULL. 
  * //KbdHandle// is ignored. 
=== C bindings ===
typedef struct _KBDINFO {     /* kbst */
  USHORT cb;                  /* length in bytes of this structure */
  USHORT fsMask;              /* bit mask of functions to be altered */
  USHORT chTurnAround;        /* define TurnAround character */
  USHORT fsInterim;           /* interim character flags */
  USHORT fsState;             /* shift states */
}KBDINFO;
#define INCL_KBD
USHORT  rc = KbdGetStatus(Structure, KbdHandle);
PKBDINFO         Structure;     /* Data structure */
HKBD             KbdHandle;     /* Keyboard handle */
USHORT           rc;            /* return code */
=== MASM bindings ===
KBDINFO struc
  kbst_cb           dw  ? ;length in bytes of this structure
  kbst_fsMask       dw  ? ;bit mask of functions to be altered
  kbst_chTurnAround dw  ? ;define TurnAround character
  kbst_fsInterim    dw  ? ;interim character flags
  kbst_fsState      dw  ? ;shift states
KBDINFO ends
EXTRN  KbdGetStatus:FAR
INCL_KBD            EQU 1
PUSH@  OTHER   Structure     ;Data structure
PUSH   WORD    KbdHandle     ;Keyboard handle
CALL   KbdGetStatus
Returns WORD