Цитата(2p0i @ 13.12.2008, 18:06 ) | | Вы бы хоть тегами для исходников воспользовались... Сложно читать код без отступов. |
Исправляюсь: "[C++] Работа с клавиатурой","[Алгоритм] Блокирование клавиши при нажатии комбинации клавиш" Ниже приведенная прога должна блокировать клавишу "3" при нажатии комбинации Left Shift+Right Ctr+F3. При повторном нажатии тройка разблокируется. Помогите переделать на комбинацию Left Shift+Left Alt+F4, и чтоб блокировалась клавиша "4". Please!Очень нужно!
Пишите в форуме или на мыло:object_pascal@inbox.ru
Привожу код:
| Код | #include <dos.h> #include <stdio.h> #include <conio.h>
void interrupt (*old9)(); void interrupt new9(); void *readvect(int in); void writevect(int in,void *h); unsigned char F3_code=61; unsigned char key3_code=4; char f=0; union REGS rr; struct SREGS sr;
void main() { char string[80]; textbackground(0); clrscr; textattr(0x0a); cprintf("________________________________________________________________________________"); cprintf(" Laboratornaia rabota # "); cprintf("--------------------------------------------------------------------------------"); cprintf("________________________________________________________________________________"); cprintf(" Upravlenie klaviaturoy "); cprintf("--------------------------------------------------------------------------------");
old9=readvect(9); writevect(9,new9); textattr(0x0c); cprintf("\n\n\r\"Goriachaia\"kombinacia: "); textattr(0x0a); cprintf("Left Shift,Right Ctr,F3\n\r"); textattr(0x0b); cprintf("Klavisha,kotoraia blokiruetsia: "); textattr(0x0f); cprintf("3"); textattr(0x07); cprintf("\r\nVvodite stroku simvolov-> "); scanf("%s",string); writevect(9,old9); }
void *readvect(int in) { rr.h.ah=0x35; rr.h.al=in; intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx)); }
void writevect(int in,void *h) { rr.h.ah=0x25; rr.h.al=in; sr.ds=FP_SEG(h); rr.x.dx=FP_OFF(h); intdosx(&rr,&rr,&sr); }
void interrupt new9() { unsigned char c,x,y; unsigned char byte17,byte18; unsigned char mask=0x02; unsigned char mask17=0x04; unsigned char mask18=0x01;
byte17=peekb(0x40,0x17); byte18=peekb(0x40,0x18); if((inportb(0x60)==F3_code)&&(byte17&mask)&& (byte17&mask17)&&(!(byte18&mask18))) { cputs("\7"); x=wherex(); y=wherey(); gotoxy(55,3); textattr(0x1e); if(f==0) { f=1; cprintf("Klavisha \"3\" zablokirovana"); } else { f=0; cprintf("Klavisha \"3\" razblokirovana"); } gotoxy(x,y); textattr(0x07); (*old9)(); } if((f==1)&&(inportb(0x60)==key3_code)) { c=inportb(0x61); outportb(0x61,c|0x80); outportb(0x61,c); outportb(0x20,0x20); } else (*old9)(); }
|
|