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. |