Programozzunk Együtt!
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.