CyberPress.Sopron

(http://www.cyberpress.hu/)

Rovat: Dr. Bit

2000. jĂşlius 11., kedd 00:00


Programozzunk Együtt!

Billentyűzetkezelés II

				Billentyűzetkezelés II.
A billentyűzeten a betük, számok, F1-F12, ESC, ENTER 
stb. túl van még néhány
speciális billentyű is. Ezek: NUMLOCK, CAPSLOCK, SCROLLLOCK, 
CTRL, ALT, 
bal és jobb SHIFT, valamint INS. Ezeknek az 
állapotát a BIOS-ból kérdezhetjük
le a hex 0040:0017 bájtból. Egy bájt 8 bitből áll, ezeknek az 
állapota jelzi
a ki- és bekapcsolt illetve a lenyomott és felengedett 
állapotot.
A bájt felépítése:
 0. bit 1, ha a jobb oldali Shift lenyomva
 1. bit            bal oldali Shift lenyomva
 2. bit            Ctrl lenyomva
 3. bit            Alt lenyomva
 4. bit            ScrollLock bekapcsolva
 5. bit            NumLock bekapcsolva
 6. bit            CapsLock bekapcsolva
 7. bit            Insert bekapcsolva
Ebből nemcsak kiolvashatjuk a beállításokat, de meg is 
változtathatjuk.
Például van lehetőség arra, hogy átállítsuk a CAPSLOCK-ot stb.
Itt egy kis példaprogram, ami kiirja, hogy mi milyen állapotban 
van:
/* kboard2.c - Egy kicsit bonyulultabb példa a 
billentyuzetkezelésre */
#include <stdio.h>
#include <dos.h>
#include <conio.h>
struct {
  char Rshift        : 1;
  char Lshift        : 1;
  char Ctrl          : 1;
  char Alt           : 1;
  char ScrollLock    : 1;
  char NumLock       : 1;
  char CapsLock      : 1;
  char Insert        : 1;
} far *bit_var;
void main(void)
{
 (long)bit_var=0x0040*65536+0x0017;  //ez a byte a 40h-es szegmens 
17h-edik offszettjen van
 clrscr();
 while(!kbhit())
 {
  gotoxy(1,1);
  if (bit_var->Rshift)
	 printf("Jobb Shift lenyomva      n");
    else printf("Jobb Shift nincs lenyomvan");
  if (bit_var->Lshift)
	 printf("Bal Shift lenyomva      n");
    else printf("Bal Shift nincs lenyomvan");
  if (bit_var->Ctrl)
	 printf("Ctrl lenyomva      n");
    else printf("Ctrl nincs lenyomvan");
  if (bit_var->Alt)
	 printf("Alt lenyomva      n");
    else printf("Alt nincs lenyomvan");
  if (bit_var->ScrollLock)
	 printf("ScrollLock be n");
    else printf("ScrollLock ki n");
  if (bit_var->NumLock)
	 printf("NumLock be n");
    else printf("NumLock ki n");
  if (bit_var->CapsLock)
	 printf("CapsLock be n");
    else printf("CapsLock ki n");
  if (bit_var->Insert)
	 printf("Insert be n");
    else printf("Insert ki n");
 }
 getch();
}
/* Peldaprogram vege */
Nos, tehát ennyit billentyűzetkezelés témáról.
PET